Lin Team / Mbed 2 deprecated AD7190_LoRa

Dependencies:   mbed

Committer:
peng103617
Date:
Thu Aug 06 06:52:19 2020 +0000
Revision:
0:0e20215b178e
AD7190_LoRa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
peng103617 0:0e20215b178e 1 /***************************************************************************//**
peng103617 0:0e20215b178e 2 * @file AD7190.c
peng103617 0:0e20215b178e 3 * @brief Implementation of AD7190 Driver.
peng103617 0:0e20215b178e 4 * @author DNechita (Dan.Nechita@analog.com)
peng103617 0:0e20215b178e 5 ********************************************************************************
peng103617 0:0e20215b178e 6 * Copyright 2012(c) Analog Devices, Inc.
peng103617 0:0e20215b178e 7 *
peng103617 0:0e20215b178e 8 * All rights reserved.
peng103617 0:0e20215b178e 9 *
peng103617 0:0e20215b178e 10 * Redistribution and use in source and binary forms, with or without
peng103617 0:0e20215b178e 11 * modification, are permitted provided that the following conditions are met:
peng103617 0:0e20215b178e 12 * - Redistributions of source code must retain the above copyright
peng103617 0:0e20215b178e 13 * notice, this list of conditions and the following disclaimer.
peng103617 0:0e20215b178e 14 * - Redistributions in binary form must reproduce the above copyright
peng103617 0:0e20215b178e 15 * notice, this list of conditions and the following disclaimer in
peng103617 0:0e20215b178e 16 * the documentation and/or other materials provided with the
peng103617 0:0e20215b178e 17 * distribution.
peng103617 0:0e20215b178e 18 * - Neither the name of Analog Devices, Inc. nor the names of its
peng103617 0:0e20215b178e 19 * contributors may be used to endorse or promote products derived
peng103617 0:0e20215b178e 20 * from this software without specific prior written permission.
peng103617 0:0e20215b178e 21 * - The use of this software may or may not infringe the patent rights
peng103617 0:0e20215b178e 22 * of one or more patent holders. This license does not release you
peng103617 0:0e20215b178e 23 * from the requirement that you obtain separate licenses from these
peng103617 0:0e20215b178e 24 * patent holders to use this software.
peng103617 0:0e20215b178e 25 * - Use of the software either in source or binary form, must be run
peng103617 0:0e20215b178e 26 * on or directly connected to an Analog Devices Inc. component.
peng103617 0:0e20215b178e 27 *
peng103617 0:0e20215b178e 28 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
peng103617 0:0e20215b178e 29 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
peng103617 0:0e20215b178e 30 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
peng103617 0:0e20215b178e 31 * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
peng103617 0:0e20215b178e 32 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
peng103617 0:0e20215b178e 33 * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
peng103617 0:0e20215b178e 34 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
peng103617 0:0e20215b178e 35 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
peng103617 0:0e20215b178e 36 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
peng103617 0:0e20215b178e 37 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
peng103617 0:0e20215b178e 38 *
peng103617 0:0e20215b178e 39 ********************************************************************************
peng103617 0:0e20215b178e 40 * SVN Revision: 903
peng103617 0:0e20215b178e 41 *******************************************************************************/
peng103617 0:0e20215b178e 42
peng103617 0:0e20215b178e 43 /******************************************************************************/
peng103617 0:0e20215b178e 44 /***************************** Include Files **********************************/
peng103617 0:0e20215b178e 45 /******************************************************************************/
peng103617 0:0e20215b178e 46 #include "AD7190.h" // AD7190 definitions.
peng103617 0:0e20215b178e 47 #include "TIME_AD.h" // TIME definitions.
peng103617 0:0e20215b178e 48
peng103617 0:0e20215b178e 49 /***************************************************************************//**
peng103617 0:0e20215b178e 50 * @brief Writes data into a register.
peng103617 0:0e20215b178e 51 *
peng103617 0:0e20215b178e 52 * @param registerAddress - Address of the register.
peng103617 0:0e20215b178e 53 * @param registerValue - Data value to write.
peng103617 0:0e20215b178e 54 * @param bytesNumber - Number of bytes to be written.
peng103617 0:0e20215b178e 55 *
peng103617 0:0e20215b178e 56 * @return none.
peng103617 0:0e20215b178e 57 *******************************************************************************/
peng103617 0:0e20215b178e 58 void AD7190_SetRegisterValue(unsigned char registerAddress,
peng103617 0:0e20215b178e 59 unsigned long registerValue,
peng103617 0:0e20215b178e 60 unsigned char bytesNumber)
peng103617 0:0e20215b178e 61 {
peng103617 0:0e20215b178e 62 unsigned char writeCommand[5] = {0, 0, 0, 0, 0};
peng103617 0:0e20215b178e 63 unsigned char* dataPointer = (unsigned char*)&registerValue;
peng103617 0:0e20215b178e 64 unsigned char bytesNr = bytesNumber;
peng103617 0:0e20215b178e 65
peng103617 0:0e20215b178e 66 writeCommand[0] = AD7190_COMM_WRITE |
peng103617 0:0e20215b178e 67 AD7190_COMM_ADDR(registerAddress);
peng103617 0:0e20215b178e 68 while(bytesNr > 0)
peng103617 0:0e20215b178e 69 {
peng103617 0:0e20215b178e 70 writeCommand[bytesNr] = *dataPointer;
peng103617 0:0e20215b178e 71 dataPointer ++;
peng103617 0:0e20215b178e 72 bytesNr --;
peng103617 0:0e20215b178e 73 }
peng103617 0:0e20215b178e 74 SPI_Write(writeCommand, bytesNumber + 1);
peng103617 0:0e20215b178e 75 }
peng103617 0:0e20215b178e 76
peng103617 0:0e20215b178e 77 /***************************************************************************//**
peng103617 0:0e20215b178e 78 * @brief Reads the value of a register.
peng103617 0:0e20215b178e 79 *
peng103617 0:0e20215b178e 80 * @param registerAddress - Address of the register.
peng103617 0:0e20215b178e 81 * @param bytesNumber - Number of bytes that will be read.
peng103617 0:0e20215b178e 82 *
peng103617 0:0e20215b178e 83 * @return buffer - Value of the register.
peng103617 0:0e20215b178e 84 *******************************************************************************/
peng103617 0:0e20215b178e 85 unsigned long AD7190_GetRegisterValue(unsigned char registerAddress,
peng103617 0:0e20215b178e 86 unsigned char bytesNumber)
peng103617 0:0e20215b178e 87 {
peng103617 0:0e20215b178e 88 cs.write(0);
peng103617 0:0e20215b178e 89 unsigned char registerWord[5] = {0, 0, 0, 0, 0};
peng103617 0:0e20215b178e 90 unsigned long buffer = 0x0;
peng103617 0:0e20215b178e 91 unsigned char i = 0;
peng103617 0:0e20215b178e 92
peng103617 0:0e20215b178e 93 registerWord[0] = AD7190_COMM_READ |
peng103617 0:0e20215b178e 94 AD7190_COMM_ADDR(registerAddress);
peng103617 0:0e20215b178e 95 SPI_Read(registerWord, bytesNumber + 1);
peng103617 0:0e20215b178e 96 for(i = 1; i < bytesNumber + 1; i++)
peng103617 0:0e20215b178e 97 {
peng103617 0:0e20215b178e 98 buffer = (buffer << 8) + registerWord[i];
peng103617 0:0e20215b178e 99 }
peng103617 0:0e20215b178e 100 //cs.write(1);
peng103617 0:0e20215b178e 101 return buffer;
peng103617 0:0e20215b178e 102 }
peng103617 0:0e20215b178e 103
peng103617 0:0e20215b178e 104 /***************************************************************************//**
peng103617 0:0e20215b178e 105 * @brief Checks if the AD7190 part is present.
peng103617 0:0e20215b178e 106 *
peng103617 0:0e20215b178e 107 * @return status - Indicates if the part is present or not. 1 for ok , 0 for error
peng103617 0:0e20215b178e 108 *******************************************************************************/
peng103617 0:0e20215b178e 109 unsigned char AD7190_Init(unsigned int speed)
peng103617 0:0e20215b178e 110 {
peng103617 0:0e20215b178e 111 unsigned char status = 1;
peng103617 0:0e20215b178e 112 unsigned char regVal = 0;
peng103617 0:0e20215b178e 113
peng103617 0:0e20215b178e 114
peng103617 0:0e20215b178e 115 SPI_Init(0, (unsigned long) 1000*speed, 1, 0);
peng103617 0:0e20215b178e 116
peng103617 0:0e20215b178e 117 AD7190_Reset();
peng103617 0:0e20215b178e 118 /* Allow at least 500 us before accessing any of the on-chip registers. */
peng103617 0:0e20215b178e 119 TIME_DelayMs(1);
peng103617 0:0e20215b178e 120 regVal = AD7190_GetRegisterValue(AD7190_REG_ID, 1);
peng103617 0:0e20215b178e 121 if( (regVal & AD7190_ID_MASK) != ID_AD7190)
peng103617 0:0e20215b178e 122 {
peng103617 0:0e20215b178e 123 status = 0;
peng103617 0:0e20215b178e 124 }
peng103617 0:0e20215b178e 125 return status ;
peng103617 0:0e20215b178e 126 }
peng103617 0:0e20215b178e 127
peng103617 0:0e20215b178e 128 /***************************************************************************//**
peng103617 0:0e20215b178e 129 * @brief Resets the device.
peng103617 0:0e20215b178e 130 *
peng103617 0:0e20215b178e 131 * @return none.
peng103617 0:0e20215b178e 132 *******************************************************************************/
peng103617 0:0e20215b178e 133 void AD7190_Reset(void)
peng103617 0:0e20215b178e 134 {
peng103617 0:0e20215b178e 135 unsigned char registerWord[7];
peng103617 0:0e20215b178e 136
peng103617 0:0e20215b178e 137 registerWord[0] = 0x01;
peng103617 0:0e20215b178e 138 registerWord[1] = 0xFF;
peng103617 0:0e20215b178e 139 registerWord[2] = 0xFF;
peng103617 0:0e20215b178e 140 registerWord[3] = 0xFF;
peng103617 0:0e20215b178e 141 registerWord[4] = 0xFF;
peng103617 0:0e20215b178e 142 registerWord[5] = 0xFF;
peng103617 0:0e20215b178e 143 registerWord[6] = 0xFF;
peng103617 0:0e20215b178e 144 cs.write(1);
peng103617 0:0e20215b178e 145 SPI_Write(registerWord, 7);
peng103617 0:0e20215b178e 146 cs.write(0);
peng103617 0:0e20215b178e 147 AD7190_WaitRdyGoLow();
peng103617 0:0e20215b178e 148 }
peng103617 0:0e20215b178e 149
peng103617 0:0e20215b178e 150 /***************************************************************************//**
peng103617 0:0e20215b178e 151 * @brief Set device to idle or power-down.
peng103617 0:0e20215b178e 152 *
peng103617 0:0e20215b178e 153 * @param pwrMode - Selects idle mode or power-down mode.
peng103617 0:0e20215b178e 154 * Example: 0 - power-down
peng103617 0:0e20215b178e 155 * 1 - idle
peng103617 0:0e20215b178e 156 *
peng103617 0:0e20215b178e 157 * @return none.
peng103617 0:0e20215b178e 158 *******************************************************************************/
peng103617 0:0e20215b178e 159 void AD7190_SetPower(unsigned char pwrMode)
peng103617 0:0e20215b178e 160 {
peng103617 0:0e20215b178e 161 unsigned long oldPwrMode = 0x0;
peng103617 0:0e20215b178e 162 unsigned long newPwrMode = 0x0;
peng103617 0:0e20215b178e 163
peng103617 0:0e20215b178e 164 oldPwrMode = AD7190_GetRegisterValue(AD7190_REG_MODE, 3);
peng103617 0:0e20215b178e 165 oldPwrMode &= ~(AD7190_MODE_SEL(0x7));
peng103617 0:0e20215b178e 166 newPwrMode = oldPwrMode |
peng103617 0:0e20215b178e 167 AD7190_MODE_SEL((pwrMode * (AD7190_MODE_IDLE)) |
peng103617 0:0e20215b178e 168 (!pwrMode * (AD7190_MODE_PWRDN)));
peng103617 0:0e20215b178e 169 AD7190_SetRegisterValue(AD7190_REG_MODE, newPwrMode, 3);
peng103617 0:0e20215b178e 170 }
peng103617 0:0e20215b178e 171
peng103617 0:0e20215b178e 172 /***************************************************************************//**
peng103617 0:0e20215b178e 173 * @brief Waits for RDY pin to go low.
peng103617 0:0e20215b178e 174 * @comment timeOutCnt related to CPU clock
peng103617 0:0e20215b178e 175 * @return none.
peng103617 0:0e20215b178e 176 *******************************************************************************/
peng103617 0:0e20215b178e 177 void AD7190_WaitRdyGoLow(void)
peng103617 0:0e20215b178e 178 {
peng103617 0:0e20215b178e 179 unsigned long timeOutCnt = 0x4FFFF;
peng103617 0:0e20215b178e 180
peng103617 0:0e20215b178e 181 while(ad_rdy.read()==1 && timeOutCnt--);
peng103617 0:0e20215b178e 182 //wait_us(500);
peng103617 0:0e20215b178e 183 }
peng103617 0:0e20215b178e 184
peng103617 0:0e20215b178e 185 /***************************************************************************//**
peng103617 0:0e20215b178e 186 * @brief Selects the channel to be enabled.
peng103617 0:0e20215b178e 187 *
peng103617 0:0e20215b178e 188 * @param channel - Selects a channel.
peng103617 0:0e20215b178e 189 *
peng103617 0:0e20215b178e 190 * @return none.
peng103617 0:0e20215b178e 191 *******************************************************************************/
peng103617 0:0e20215b178e 192 void AD7190_ChannelSelect(unsigned short channel)
peng103617 0:0e20215b178e 193 {
peng103617 0:0e20215b178e 194 unsigned long oldRegValue = 0x0;
peng103617 0:0e20215b178e 195 unsigned long newRegValue = 0x0;
peng103617 0:0e20215b178e 196
peng103617 0:0e20215b178e 197 oldRegValue = AD7190_GetRegisterValue(AD7190_REG_CONF, 3);
peng103617 0:0e20215b178e 198 oldRegValue &= ~(AD7190_CONF_CHAN(0xFF));
peng103617 0:0e20215b178e 199 newRegValue = oldRegValue | AD7190_CONF_CHAN(1 << channel);
peng103617 0:0e20215b178e 200 AD7190_SetRegisterValue(AD7190_REG_CONF, newRegValue, 3);
peng103617 0:0e20215b178e 201 }
peng103617 0:0e20215b178e 202
peng103617 0:0e20215b178e 203 /***************************************************************************//**
peng103617 0:0e20215b178e 204 * @brief Performs the given calibration to the specified channel.
peng103617 0:0e20215b178e 205 *
peng103617 0:0e20215b178e 206 * @param mode - Calibration type.
peng103617 0:0e20215b178e 207 * @param channel - Channel to be calibrated.
peng103617 0:0e20215b178e 208 *
peng103617 0:0e20215b178e 209 * @return none.
peng103617 0:0e20215b178e 210 *******************************************************************************/
peng103617 0:0e20215b178e 211 void AD7190_Calibrate(unsigned char mode, unsigned char channel)
peng103617 0:0e20215b178e 212 {
peng103617 0:0e20215b178e 213 unsigned long oldRegValue = 0x0;
peng103617 0:0e20215b178e 214 unsigned long newRegValue = 0x0;
peng103617 0:0e20215b178e 215
peng103617 0:0e20215b178e 216 AD7190_ChannelSelect(channel);
peng103617 0:0e20215b178e 217 oldRegValue = AD7190_GetRegisterValue(AD7190_REG_MODE, 3);
peng103617 0:0e20215b178e 218 oldRegValue &= ~AD7190_MODE_SEL(0x7);
peng103617 0:0e20215b178e 219 newRegValue = oldRegValue | AD7190_MODE_SEL(mode);
peng103617 0:0e20215b178e 220 cs.write(0); //ADI_PART_CS_LOW;
peng103617 0:0e20215b178e 221 AD7190_SetRegisterValue(AD7190_REG_MODE, newRegValue, 3); // CS is not modified.
peng103617 0:0e20215b178e 222 AD7190_WaitRdyGoLow();
peng103617 0:0e20215b178e 223 cs.write(1); //ADI_PART_CS_HIGH;
peng103617 0:0e20215b178e 224 }
peng103617 0:0e20215b178e 225
peng103617 0:0e20215b178e 226 /***************************************************************************//**
peng103617 0:0e20215b178e 227 * @brief Selects the polarity of the conversion and the ADC input range.
peng103617 0:0e20215b178e 228 *
peng103617 0:0e20215b178e 229 * @param polarity - Polarity select bit.
peng103617 0:0e20215b178e 230 Example: 0 - bipolar operation is selected.
peng103617 0:0e20215b178e 231 1 - unipolar operation is selected.
peng103617 0:0e20215b178e 232 * @param range - Gain select bits. These bits are written by the user to select
peng103617 0:0e20215b178e 233 the ADC input range.
peng103617 0:0e20215b178e 234 *
peng103617 0:0e20215b178e 235 * @return none.
peng103617 0:0e20215b178e 236 *******************************************************************************/
peng103617 0:0e20215b178e 237 void AD7190_RangeSetup(unsigned char polarity, unsigned char range)
peng103617 0:0e20215b178e 238 {
peng103617 0:0e20215b178e 239 unsigned long oldRegValue = 0x0;
peng103617 0:0e20215b178e 240 unsigned long newRegValue = 0x0;
peng103617 0:0e20215b178e 241
peng103617 0:0e20215b178e 242 oldRegValue = AD7190_GetRegisterValue(AD7190_REG_CONF,3);
peng103617 0:0e20215b178e 243 oldRegValue &= ~(AD7190_CONF_UNIPOLAR |
peng103617 0:0e20215b178e 244 AD7190_CONF_GAIN(0x7));
peng103617 0:0e20215b178e 245 newRegValue = oldRegValue |
peng103617 0:0e20215b178e 246 (polarity * AD7190_CONF_UNIPOLAR) |
peng103617 0:0e20215b178e 247 AD7190_CONF_GAIN(range);
peng103617 0:0e20215b178e 248 AD7190_SetRegisterValue(AD7190_REG_CONF, newRegValue, 3);
peng103617 0:0e20215b178e 249 }
peng103617 0:0e20215b178e 250
peng103617 0:0e20215b178e 251 /***************************************************************************//**
peng103617 0:0e20215b178e 252 * @brief Returns the result of a single conversion.
peng103617 0:0e20215b178e 253 *
peng103617 0:0e20215b178e 254 * @return regData - Result of a single analog-to-digital conversion.
peng103617 0:0e20215b178e 255 *******************************************************************************/
peng103617 0:0e20215b178e 256 unsigned long AD7190_SingleConversion(void)
peng103617 0:0e20215b178e 257 {
peng103617 0:0e20215b178e 258 unsigned long command = 0x0;
peng103617 0:0e20215b178e 259 unsigned long regData = 0x0;
peng103617 0:0e20215b178e 260
peng103617 0:0e20215b178e 261 command = AD7190_MODE_SEL(AD7190_MODE_SINGLE) |
peng103617 0:0e20215b178e 262 AD7190_MODE_CLKSRC(AD7190_CLK_INT) |
peng103617 0:0e20215b178e 263 AD7190_MODE_RATE(0x060);
peng103617 0:0e20215b178e 264 cs.write(0); //ADI_PART_CS_LOW;
peng103617 0:0e20215b178e 265 AD7190_SetRegisterValue(AD7190_REG_MODE, command, 3); // CS is not modified.
peng103617 0:0e20215b178e 266 AD7190_WaitRdyGoLow();
peng103617 0:0e20215b178e 267 //wait_us(500);
peng103617 0:0e20215b178e 268 regData = AD7190_GetRegisterValue(AD7190_REG_DATA, 3);
peng103617 0:0e20215b178e 269 cs.write(1); //ADI_PART_CS_HIGH;
peng103617 0:0e20215b178e 270
peng103617 0:0e20215b178e 271 return regData;
peng103617 0:0e20215b178e 272 }
peng103617 0:0e20215b178e 273
peng103617 0:0e20215b178e 274 /***************************************************************************//**
peng103617 0:0e20215b178e 275 * @brief Returns the average of several conversion results.
peng103617 0:0e20215b178e 276 *
peng103617 0:0e20215b178e 277 * @return samplesAverage - The average of the conversion results.
peng103617 0:0e20215b178e 278 *******************************************************************************/
peng103617 0:0e20215b178e 279 unsigned long AD7190_ContinuousReadAvg(unsigned char sampleNumber)
peng103617 0:0e20215b178e 280 {
peng103617 0:0e20215b178e 281 unsigned long samplesAverage = 0x0;
peng103617 0:0e20215b178e 282 unsigned char count = 0x0;
peng103617 0:0e20215b178e 283 unsigned long command = 0x0;
peng103617 0:0e20215b178e 284
peng103617 0:0e20215b178e 285 command = AD7190_MODE_SEL(AD7190_MODE_CONT) |
peng103617 0:0e20215b178e 286 AD7190_MODE_CLKSRC(AD7190_CLK_INT) |
peng103617 0:0e20215b178e 287 AD7190_MODE_RATE(0x060);
peng103617 0:0e20215b178e 288 cs.write(0); //ADI_PART_CS_LOW;
peng103617 0:0e20215b178e 289 AD7190_SetRegisterValue(AD7190_REG_MODE, command, 3); // CS is not modified.
peng103617 0:0e20215b178e 290 for(count = 0;count < sampleNumber;count ++)
peng103617 0:0e20215b178e 291 {
peng103617 0:0e20215b178e 292 AD7190_WaitRdyGoLow();
peng103617 0:0e20215b178e 293 samplesAverage += AD7190_GetRegisterValue(AD7190_REG_DATA, 3); // CS is not modified.
peng103617 0:0e20215b178e 294 }
peng103617 0:0e20215b178e 295 cs.write(1); //ADI_PART_CS_HIGH;
peng103617 0:0e20215b178e 296 samplesAverage = samplesAverage / sampleNumber;
peng103617 0:0e20215b178e 297
peng103617 0:0e20215b178e 298 return samplesAverage ;
peng103617 0:0e20215b178e 299 }
peng103617 0:0e20215b178e 300
peng103617 0:0e20215b178e 301 /***************************************************************************//**
peng103617 0:0e20215b178e 302 * @brief Read data from temperature sensor and converts it to Celsius degrees.
peng103617 0:0e20215b178e 303 *
peng103617 0:0e20215b178e 304 * @return temperature - Celsius degrees.
peng103617 0:0e20215b178e 305 *******************************************************************************/
peng103617 0:0e20215b178e 306 unsigned long AD7190_TemperatureRead(void)
peng103617 0:0e20215b178e 307 {
peng103617 0:0e20215b178e 308 unsigned char temperature = 0x0;
peng103617 0:0e20215b178e 309 unsigned long dataReg = 0x0;
peng103617 0:0e20215b178e 310 AD7190_RangeSetup(0, AD7190_CONF_GAIN_1);
peng103617 0:0e20215b178e 311 AD7190_ChannelSelect(AD7190_CH_TEMP_SENSOR);
peng103617 0:0e20215b178e 312 dataReg = AD7190_SingleConversion();
peng103617 0:0e20215b178e 313 dataReg -= 0x800000;
peng103617 0:0e20215b178e 314 dataReg /= 2815; // Kelvin Temperature
peng103617 0:0e20215b178e 315 dataReg -= 273; //Celsius Temperature
peng103617 0:0e20215b178e 316 temperature = (unsigned long) dataReg;
peng103617 0:0e20215b178e 317
peng103617 0:0e20215b178e 318 return temperature;
peng103617 0:0e20215b178e 319 }