From b3ab5e6f89ce25ebb92029b2dd44cf67db9ada11 Mon Sep 17 00:00:00 2001 From: Cao Sen Miao Date: Fri, 8 Dec 2023 10:55:53 +0800 Subject: [PATCH] fix(temperature_snesor): Put clock gate enable/disable in to sar_periph_ctrl together --- components/driver/esp32c3/rtc_tempsensor.c | 6 ------ components/driver/esp32s2/rtc_tempsensor.c | 6 ------ components/esp_hw_support/port/esp32c3/sar_periph_ctrl.c | 9 +++++++++ components/esp_hw_support/port/esp32s2/sar_periph_ctrl.c | 9 ++++++++- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/components/driver/esp32c3/rtc_tempsensor.c b/components/driver/esp32c3/rtc_tempsensor.c index d3e6d08fb5..aa6d8edc59 100644 --- a/components/driver/esp32c3/rtc_tempsensor.c +++ b/components/driver/esp32c3/rtc_tempsensor.c @@ -55,9 +55,6 @@ static float s_deltaT = NAN; // unused number esp_err_t temp_sensor_set_config(temp_sensor_config_t tsens) { - REG_SET_BIT(SYSTEM_PERIP_CLK_EN1_REG, SYSTEM_TSENS_CLK_EN); - CLEAR_PERI_REG_MASK(ANA_CONFIG_REG, ANA_I2C_SAR_FORCE_PD); - SET_PERI_REG_MASK(ANA_CONFIG2_REG, ANA_I2C_SAR_FORCE_PU); REGI2C_WRITE_MASK(I2C_SAR_ADC, I2C_SARADC_TSENS_DAC, dac_offset[tsens.dac_offset].set_val); APB_SARADC.apb_tsens_ctrl.tsens_clk_div = tsens.clk_div; APB_SARADC.apb_tsens_ctrl2.tsens_xpd_wait = TSENS_XPD_WAIT_DEFAULT; @@ -87,8 +84,6 @@ esp_err_t temp_sensor_get_config(temp_sensor_config_t *tsens) esp_err_t temp_sensor_start(void) { - REG_SET_BIT(SYSTEM_PERIP_CLK_EN1_REG, SYSTEM_TSENS_CLK_EN); - APB_SARADC.apb_tsens_ctrl2.tsens_clk_sel = 1; temperature_sensor_power_acquire(); return ESP_OK; } @@ -96,7 +91,6 @@ esp_err_t temp_sensor_start(void) esp_err_t temp_sensor_stop(void) { temperature_sensor_power_release(); - APB_SARADC.apb_tsens_ctrl2.tsens_clk_sel = 0; return ESP_OK; } diff --git a/components/driver/esp32s2/rtc_tempsensor.c b/components/driver/esp32s2/rtc_tempsensor.c index 7fcc414dae..67af2db8bf 100644 --- a/components/driver/esp32s2/rtc_tempsensor.c +++ b/components/driver/esp32s2/rtc_tempsensor.c @@ -58,10 +58,6 @@ static float s_deltaT = NAN; // Unused number esp_err_t temp_sensor_set_config(temp_sensor_config_t tsens) { - CLEAR_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG, RTC_CNTL_SAR_I2C_FORCE_PD_M); - SET_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG, RTC_CNTL_SAR_I2C_FORCE_PU_M); - CLEAR_PERI_REG_MASK(ANA_CONFIG_REG, I2C_SAR_M); - SET_PERI_REG_MASK(ANA_CONFIG2_REG, ANA_SAR_CFG2_M); REGI2C_WRITE_MASK(I2C_SAR_ADC, I2C_SARADC_TSENS_DAC, dac_offset[tsens.dac_offset].set_val); SENS.sar_tctrl.tsens_clk_div = tsens.clk_div; SENS.sar_tctrl2.tsens_xpd_wait = TSENS_XPD_WAIT_DEFAULT; @@ -101,14 +97,12 @@ esp_err_t temp_sensor_start(void) TSENS_CHECK(rtc_tsens_mux != NULL, ESP_ERR_NO_MEM); temperature_sensor_power_acquire(); SENS.sar_tctrl.tsens_dump_out = 0; - SENS.sar_tctrl2.tsens_clkgate_en = 1; return ESP_OK; } esp_err_t temp_sensor_stop(void) { temperature_sensor_power_release(); - SENS.sar_tctrl2.tsens_clkgate_en = 0; if (rtc_tsens_mux != NULL) { vSemaphoreDelete(rtc_tsens_mux); rtc_tsens_mux = NULL; diff --git a/components/esp_hw_support/port/esp32c3/sar_periph_ctrl.c b/components/esp_hw_support/port/esp32c3/sar_periph_ctrl.c index c8b43f441c..04a19093e5 100644 --- a/components/esp_hw_support/port/esp32c3/sar_periph_ctrl.c +++ b/components/esp_hw_support/port/esp32c3/sar_periph_ctrl.c @@ -13,6 +13,9 @@ #include "private_include/regi2c_saradc.h" #include "driver/temp_sensor.h" #include "regi2c_ctrl.h" +#include "soc/rtc_cntl_reg.h" +#include "soc/apb_saradc_struct.h" +#include "soc/system_reg.h" extern __attribute__((unused)) portMUX_TYPE rtc_spinlock; @@ -36,6 +39,10 @@ void temperature_sensor_power_acquire(void) s_temperature_sensor_power_cnt++; if (s_temperature_sensor_power_cnt == 1) { APB_SARADC.apb_tsens_ctrl.tsens_pu = true; + REG_SET_BIT(SYSTEM_PERIP_CLK_EN1_REG, SYSTEM_TSENS_CLK_EN); + CLEAR_PERI_REG_MASK(ANA_CONFIG_REG, ANA_I2C_SAR_FORCE_PD); + SET_PERI_REG_MASK(ANA_CONFIG2_REG, ANA_I2C_SAR_FORCE_PU); + APB_SARADC.apb_tsens_ctrl2.tsens_clk_sel = 1; } portEXIT_CRITICAL(&rtc_spinlock); } @@ -51,6 +58,8 @@ void temperature_sensor_power_release(void) abort(); } else if (s_temperature_sensor_power_cnt == 0) { APB_SARADC.apb_tsens_ctrl.tsens_pu = false; + REG_CLR_BIT(SYSTEM_PERIP_CLK_EN1_REG, SYSTEM_TSENS_CLK_EN); + APB_SARADC.apb_tsens_ctrl2.tsens_clk_sel = 0; } portEXIT_CRITICAL(&rtc_spinlock); } diff --git a/components/esp_hw_support/port/esp32s2/sar_periph_ctrl.c b/components/esp_hw_support/port/esp32s2/sar_periph_ctrl.c index f0275cf523..fe3b965e39 100644 --- a/components/esp_hw_support/port/esp32s2/sar_periph_ctrl.c +++ b/components/esp_hw_support/port/esp32s2/sar_periph_ctrl.c @@ -23,7 +23,9 @@ extern __attribute__((unused)) portMUX_TYPE rtc_spinlock; -----------------------------------------Temperature Sensor--------------------------------------------------- ------------------------------------------------------------------------------------------------------------*/ static const char *TAG_TSENS = "temperature_sensor"; - +#include "regi2c_ctrl.h" +#include "soc/soc.h" +#include "soc/rtc_cntl_reg.h" #define INT_NOT_USED 999999 static int s_record_min = INT_NOT_USED; @@ -40,6 +42,10 @@ void temperature_sensor_power_acquire(void) SENS.sar_tctrl.tsens_power_up_force = true; SENS.sar_tctrl2.tsens_xpd_force = true; SENS.sar_tctrl.tsens_power_up = true; + SET_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG, RTC_CNTL_SAR_I2C_FORCE_PU_M); + CLEAR_PERI_REG_MASK(ANA_CONFIG_REG, I2C_SAR_M); + SET_PERI_REG_MASK(ANA_CONFIG2_REG, ANA_SAR_CFG2_M); + SENS.sar_tctrl2.tsens_clkgate_en = 1; } portEXIT_CRITICAL(&rtc_spinlock); } @@ -57,6 +63,7 @@ void temperature_sensor_power_release(void) SENS.sar_tctrl.tsens_power_up_force = false; SENS.sar_tctrl2.tsens_xpd_force = false; SENS.sar_tctrl.tsens_power_up = false; + SENS.sar_tctrl2.tsens_clkgate_en = 0; } portEXIT_CRITICAL(&rtc_spinlock); }