From fc3fa2dba5df20f28cff368f79e29edfccb4e724 Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Tue, 17 Mar 2026 18:41:30 +0800 Subject: [PATCH] fix(temperature_sensor): Fix the float calculation in temperature sensor isr --- components/esp_driver_tsens/src/temperature_sensor.c | 9 +++++---- .../hal/esp32c2/include/hal/temperature_sensor_ll.h | 4 ++++ .../hal/esp32c3/include/hal/temperature_sensor_ll.h | 4 ++++ .../hal/esp32c5/include/hal/temperature_sensor_ll.h | 4 ++++ .../hal/esp32c6/include/hal/temperature_sensor_ll.h | 4 ++++ .../hal/esp32h2/include/hal/temperature_sensor_ll.h | 4 ++++ .../hal/esp32p4/include/hal/temperature_sensor_ll.h | 4 ++++ .../hal/esp32s2/include/hal/temperature_sensor_ll.h | 4 ++++ .../hal/esp32s3/include/hal/temperature_sensor_ll.h | 4 ++++ 9 files changed, 37 insertions(+), 4 deletions(-) diff --git a/components/esp_driver_tsens/src/temperature_sensor.c b/components/esp_driver_tsens/src/temperature_sensor.c index eff91c240b0..33f1ed8675f 100644 --- a/components/esp_driver_tsens/src/temperature_sensor.c +++ b/components/esp_driver_tsens/src/temperature_sensor.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -39,7 +39,7 @@ static const char *TAG = "temperature_sensor"; static float s_deltaT = NAN; // unused number #if SOC_TEMPERATURE_SENSOR_INTR_SUPPORT -static int8_t s_temperature_regval_2_celsius(temperature_sensor_handle_t tsens, uint8_t regval); +static int s_temperature_regval_2_celsius(temperature_sensor_handle_t tsens, uint8_t regval); #endif // SOC_TEMPERATURE_SENSOR_INTR_SUPPORT static temperature_sensor_attribute_t *s_tsens_attribute_copy; @@ -316,9 +316,10 @@ static uint8_t s_temperature_celsius_2_regval(temperature_sensor_handle_t tsens, return (uint8_t)((celsius + TEMPERATURE_SENSOR_LL_OFFSET_FACTOR + TEMPERATURE_SENSOR_LL_DAC_FACTOR * tsens->tsens_attribute->offset) / TEMPERATURE_SENSOR_LL_ADC_FACTOR); } -IRAM_ATTR static int8_t s_temperature_regval_2_celsius(temperature_sensor_handle_t tsens, uint8_t regval) +IRAM_ATTR static int s_temperature_regval_2_celsius(temperature_sensor_handle_t tsens, uint8_t regval) { - return TEMPERATURE_SENSOR_LL_ADC_FACTOR * regval - TEMPERATURE_SENSOR_LL_DAC_FACTOR * tsens->tsens_attribute->offset - TEMPERATURE_SENSOR_LL_OFFSET_FACTOR; + int result = TEMPERATURE_SENSOR_LL_ADC_FACTOR_INT * regval - TEMPERATURE_SENSOR_LL_DAC_FACTOR_INT * tsens->tsens_attribute->offset - TEMPERATURE_SENSOR_LL_OFFSET_FACTOR_INT; + return (result / TEMPERATURE_SENSOR_LL_DENOMINATOR); } esp_err_t temperature_sensor_set_absolute_threshold(temperature_sensor_handle_t tsens, const temperature_sensor_abs_threshold_config_t *abs_cfg) diff --git a/components/hal/esp32c2/include/hal/temperature_sensor_ll.h b/components/hal/esp32c2/include/hal/temperature_sensor_ll.h index 6153c012b3f..228a53fde1d 100644 --- a/components/hal/esp32c2/include/hal/temperature_sensor_ll.h +++ b/components/hal/esp32c2/include/hal/temperature_sensor_ll.h @@ -33,6 +33,10 @@ extern "C" { #define TEMPERATURE_SENSOR_LL_ADC_FACTOR (0.4386) #define TEMPERATURE_SENSOR_LL_DAC_FACTOR (27.88) #define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR (20.52) +#define TEMPERATURE_SENSOR_LL_ADC_FACTOR_INT (4386) +#define TEMPERATURE_SENSOR_LL_DAC_FACTOR_INT (278800) +#define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR_INT (205200) +#define TEMPERATURE_SENSOR_LL_DENOMINATOR (10000) #define TEMPERATURE_SENSOR_LL_MEASURE_MAX (125) #define TEMPERATURE_SENSOR_LL_MEASURE_MIN (-40) diff --git a/components/hal/esp32c3/include/hal/temperature_sensor_ll.h b/components/hal/esp32c3/include/hal/temperature_sensor_ll.h index 38902bac730..6a7377b1b50 100644 --- a/components/hal/esp32c3/include/hal/temperature_sensor_ll.h +++ b/components/hal/esp32c3/include/hal/temperature_sensor_ll.h @@ -33,6 +33,10 @@ extern "C" { #define TEMPERATURE_SENSOR_LL_ADC_FACTOR (0.4386) #define TEMPERATURE_SENSOR_LL_DAC_FACTOR (27.88) #define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR (20.52) +#define TEMPERATURE_SENSOR_LL_ADC_FACTOR_INT (4386) +#define TEMPERATURE_SENSOR_LL_DAC_FACTOR_INT (278800) +#define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR_INT (205200) +#define TEMPERATURE_SENSOR_LL_DENOMINATOR (10000) #define TEMPERATURE_SENSOR_LL_MEASURE_MAX (125) #define TEMPERATURE_SENSOR_LL_MEASURE_MIN (-40) diff --git a/components/hal/esp32c5/include/hal/temperature_sensor_ll.h b/components/hal/esp32c5/include/hal/temperature_sensor_ll.h index 4c73df1a1fa..a053003200a 100644 --- a/components/hal/esp32c5/include/hal/temperature_sensor_ll.h +++ b/components/hal/esp32c5/include/hal/temperature_sensor_ll.h @@ -37,6 +37,10 @@ extern "C" { #define TEMPERATURE_SENSOR_LL_ADC_FACTOR (0.4386) #define TEMPERATURE_SENSOR_LL_DAC_FACTOR (27.88) #define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR (20.52) +#define TEMPERATURE_SENSOR_LL_ADC_FACTOR_INT (4386) +#define TEMPERATURE_SENSOR_LL_DAC_FACTOR_INT (278800) +#define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR_INT (205200) +#define TEMPERATURE_SENSOR_LL_DENOMINATOR (10000) #define TEMPERATURE_SENSOR_LL_MEASURE_MAX (125) #define TEMPERATURE_SENSOR_LL_MEASURE_MIN (-40) diff --git a/components/hal/esp32c6/include/hal/temperature_sensor_ll.h b/components/hal/esp32c6/include/hal/temperature_sensor_ll.h index 4c73df1a1fa..a053003200a 100644 --- a/components/hal/esp32c6/include/hal/temperature_sensor_ll.h +++ b/components/hal/esp32c6/include/hal/temperature_sensor_ll.h @@ -37,6 +37,10 @@ extern "C" { #define TEMPERATURE_SENSOR_LL_ADC_FACTOR (0.4386) #define TEMPERATURE_SENSOR_LL_DAC_FACTOR (27.88) #define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR (20.52) +#define TEMPERATURE_SENSOR_LL_ADC_FACTOR_INT (4386) +#define TEMPERATURE_SENSOR_LL_DAC_FACTOR_INT (278800) +#define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR_INT (205200) +#define TEMPERATURE_SENSOR_LL_DENOMINATOR (10000) #define TEMPERATURE_SENSOR_LL_MEASURE_MAX (125) #define TEMPERATURE_SENSOR_LL_MEASURE_MIN (-40) diff --git a/components/hal/esp32h2/include/hal/temperature_sensor_ll.h b/components/hal/esp32h2/include/hal/temperature_sensor_ll.h index 71e9d875072..a9a43ef0c0a 100644 --- a/components/hal/esp32h2/include/hal/temperature_sensor_ll.h +++ b/components/hal/esp32h2/include/hal/temperature_sensor_ll.h @@ -36,6 +36,10 @@ extern "C" { #define TEMPERATURE_SENSOR_LL_ADC_FACTOR (0.4386) #define TEMPERATURE_SENSOR_LL_DAC_FACTOR (27.88) #define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR (20.52) +#define TEMPERATURE_SENSOR_LL_ADC_FACTOR_INT (4386) +#define TEMPERATURE_SENSOR_LL_DAC_FACTOR_INT (278800) +#define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR_INT (205200) +#define TEMPERATURE_SENSOR_LL_DENOMINATOR (10000) #define TEMPERATURE_SENSOR_LL_MEASURE_MAX (125) #define TEMPERATURE_SENSOR_LL_MEASURE_MIN (-40) diff --git a/components/hal/esp32p4/include/hal/temperature_sensor_ll.h b/components/hal/esp32p4/include/hal/temperature_sensor_ll.h index 72c76d22732..1afaacf5fd4 100644 --- a/components/hal/esp32p4/include/hal/temperature_sensor_ll.h +++ b/components/hal/esp32p4/include/hal/temperature_sensor_ll.h @@ -36,6 +36,10 @@ extern "C" { #define TEMPERATURE_SENSOR_LL_ADC_FACTOR (0.4386) #define TEMPERATURE_SENSOR_LL_DAC_FACTOR (27.88) #define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR (20.52) +#define TEMPERATURE_SENSOR_LL_ADC_FACTOR_INT (4386) +#define TEMPERATURE_SENSOR_LL_DAC_FACTOR_INT (278800) +#define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR_INT (205200) +#define TEMPERATURE_SENSOR_LL_DENOMINATOR (10000) #define TEMPERATURE_SENSOR_LL_MEASURE_MAX (125) #define TEMPERATURE_SENSOR_LL_MEASURE_MIN (-40) diff --git a/components/hal/esp32s2/include/hal/temperature_sensor_ll.h b/components/hal/esp32s2/include/hal/temperature_sensor_ll.h index 9e356e163f0..be05527e573 100644 --- a/components/hal/esp32s2/include/hal/temperature_sensor_ll.h +++ b/components/hal/esp32s2/include/hal/temperature_sensor_ll.h @@ -30,6 +30,10 @@ extern "C" { #define TEMPERATURE_SENSOR_LL_ADC_FACTOR (0.4386) #define TEMPERATURE_SENSOR_LL_DAC_FACTOR (27.88) #define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR (20.52) +#define TEMPERATURE_SENSOR_LL_ADC_FACTOR_INT (4386) +#define TEMPERATURE_SENSOR_LL_DAC_FACTOR_INT (278800) +#define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR_INT (205200) +#define TEMPERATURE_SENSOR_LL_DENOMINATOR (10000) #define TEMPERATURE_SENSOR_LL_MEASURE_MAX (125) #define TEMPERATURE_SENSOR_LL_MEASURE_MIN (-40) diff --git a/components/hal/esp32s3/include/hal/temperature_sensor_ll.h b/components/hal/esp32s3/include/hal/temperature_sensor_ll.h index 52fb1221349..c98b9998620 100644 --- a/components/hal/esp32s3/include/hal/temperature_sensor_ll.h +++ b/components/hal/esp32s3/include/hal/temperature_sensor_ll.h @@ -30,6 +30,10 @@ extern "C" { #define TEMPERATURE_SENSOR_LL_ADC_FACTOR (0.4386) #define TEMPERATURE_SENSOR_LL_DAC_FACTOR (27.88) #define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR (20.52) +#define TEMPERATURE_SENSOR_LL_ADC_FACTOR_INT (4386) +#define TEMPERATURE_SENSOR_LL_DAC_FACTOR_INT (278800) +#define TEMPERATURE_SENSOR_LL_OFFSET_FACTOR_INT (205200) +#define TEMPERATURE_SENSOR_LL_DENOMINATOR (10000) #define TEMPERATURE_SENSOR_LL_MEASURE_MAX (125) #define TEMPERATURE_SENSOR_LL_MEASURE_MIN (-40)