//-------------------------------------------------------// // Project Code : ALE300K03-21-LGE-GEN2.0-BE-CPU2 // File Name : F28377D_TempSensor.cpp // Created on : 2022. 12. 16. // Description : // Author : KimJeongWoo // Last modified Date : //-------------------------------------------------------// #include "CommonLib.h" #define FP_SCALE 32768 //Scale factor for Q15 fixed point numbers (2^15) #define FP_ROUND FP_SCALE/2 //Added to Q15 numbers before converting to //integer to round the number. #define KELVIN 273 // Amount to add to Q15 fixed point numbers // to shift from Celsius to Kelvin // (Converting guarantees number is // positive, which makes rounding more // efficient) #define KELVIN_OFF FP_SCALE*KELVIN #define getTempSlope() (*(int (*)(void))0x7036E)() //Slope of temperature sensor //(deg. C / ADC code). //Stored in fixed point Q15 //format. #define getTempOffset() (*(int (*)(void))0x70372)() //ADC code corresponding to //temperature sensor output //at 0 deg. C float32 tempSensor_tempSlope; float32 tempSensor_tempOffset; float32 tempSensor_scaleFactor; void InitDspTempSensor() { #ifdef CPU1 EALLOW; AnalogSubsysRegs.TSNSCTL.bit.ENABLE = 1; DEVICE_DELAY_US(1000); EDIS; tempSensor_scaleFactor = 3.0; tempSensor_tempSlope = (int32)getTempSlope(); tempSensor_tempOffset = getTempOffset(); #endif } int16 GetTemperatureC(int16 sensorSample) { sensorSample = (int16) ((tempSensor_scaleFactor / 2.5) * (sensorSample)); return (((sensorSample - tempSensor_tempOffset) * tempSensor_tempSlope + FP_ROUND + KELVIN_OFF) / FP_SCALE - KELVIN); } int16 GetTemperatureK(int16 sensorSample) { sensorSample = (int16) ((tempSensor_scaleFactor / 2.5) * (sensorSample)); return (((sensorSample - tempSensor_tempOffset) * tempSensor_tempSlope + FP_ROUND + KELVIN_OFF) / FP_SCALE); }