Функция возвращает температуру в градусах +20. То есть нулевое значение соответствует -20С, значение 45 соответствует +25С.
Функция io_adc_convert() возвращают целое беззнаковое 12-битное значение считанное с канала АЦП.
CODE
#define IO_ADC_TBAT_VSENSE_25 1750 // типичные 1.41V при 25C (3.3V опорное АЦП)
#define IO_ADC_TBAT_SLOPE_100 534 // типичные 430mV на 100C (3.3V опорное АЦП)
IO_CALL_TYPE
DWORD
IO_CALL_OPTION
io_apm_temp(void)
{
DWORD ret;
ret = io_adc_convert(ADC_MUX_TBAT);
if (ret > IO_ADC_TBAT_VSENSE_25)
{
ret = ((ret - IO_ADC_TBAT_VSENSE_25)*100)/IO_ADC_TBAT_SLOPE_100;
if (ret > 45)
{
ret = 0;
}
else
{
ret = (25 + 20) - ret;
}
}
else
{
ret = ((IO_ADC_TBAT_VSENSE_25 - ret)*100)/IO_ADC_TBAT_SLOPE_100;
ret += 20 + 25;
}
return ret;
}