fix(tsens): fix temp_sensor affect by adc reset

This commit is contained in:
gaoxu
2025-09-19 11:56:44 +08:00
committed by Gao Xu
parent 9619d2b05a
commit e5c6b87c10
25 changed files with 577 additions and 6 deletions

View File

@@ -10,6 +10,8 @@
#include "hal/adc_types.h"
#include "esp_private/regi2c_ctrl.h"
#include "soc/lpperi_reg.h"
#include "hal/temperature_sensor_ll.h"
#include "esp_private/sar_periph_ctrl.h"
#define I2C_SAR_ADC_INIT_CODE_VAL 2150
#define ADC_RNG_CLKM_DIV_NUM 0
@@ -18,7 +20,18 @@
void bootloader_random_enable(void)
{
#ifndef BOOTLOADER_BUILD
sar_periph_ctrl_adc_reset();
#else
// Save temperature sensor related register values before ADC reset
tsens_ll_reg_values_t saved_tsens_regs = {};
tsens_ll_backup_registers(&saved_tsens_regs);
adc_ll_reset_register();
// Restore temperature sensor related register values after ADC reset
temperature_sensor_ll_reset_module();
tsens_ll_restore_registers(&saved_tsens_regs);
#endif
adc_ll_enable_bus_clock(true);
adc_ll_enable_func_clock(true);
adc_ll_digi_clk_sel(ADC_DIGI_CLK_SRC_XTAL);

View File

@@ -9,6 +9,8 @@
#include "hal/adc_ll.h"
#include "hal/adc_types.h"
#include "esp_private/regi2c_ctrl.h"
#include "hal/temperature_sensor_ll.h"
#include "esp_private/sar_periph_ctrl.h"
#define I2C_SAR_ADC_INIT_CODE_VAL 2150
#define ADC_RNG_CLKM_DIV_NUM 0
@@ -17,7 +19,17 @@
void bootloader_random_enable(void)
{
#ifndef BOOTLOADER_BUILD
sar_periph_ctrl_adc_reset();
#else
tsens_ll_reg_values_t saved_tsens_regs = {};
tsens_ll_backup_registers(&saved_tsens_regs);
adc_ll_reset_register();
// Restore temperature sensor related register values after ADC reset
temperature_sensor_ll_reset_module();
tsens_ll_restore_registers(&saved_tsens_regs);
#endif
adc_ll_enable_bus_clock(true);
adc_ll_enable_func_clock(true);
adc_ll_digi_clk_sel(ADC_DIGI_CLK_SRC_XTAL);

View File

@@ -9,6 +9,8 @@
#include "hal/adc_ll.h"
#include "hal/adc_types.h"
#include "esp_private/regi2c_ctrl.h"
#include "hal/temperature_sensor_ll.h"
#include "esp_private/sar_periph_ctrl.h"
#define I2C_SAR_ADC_INIT_CODE_VAL 2150
#define ADC_RNG_CLKM_DIV_NUM 0
@@ -17,7 +19,18 @@
void bootloader_random_enable(void)
{
#ifndef BOOTLOADER_BUILD
sar_periph_ctrl_adc_reset();
#else
// Save temperature sensor related register values before ADC reset
tsens_ll_reg_values_t saved_tsens_regs = {};
tsens_ll_backup_registers(&saved_tsens_regs);
adc_ll_reset_register();
// Restore temperature sensor related register values after ADC reset
temperature_sensor_ll_reset_module();
tsens_ll_restore_registers(&saved_tsens_regs);
#endif
adc_ll_enable_bus_clock(true);
adc_ll_enable_func_clock(true);
adc_ll_digi_clk_sel(ADC_DIGI_CLK_SRC_XTAL);

View File

@@ -9,6 +9,8 @@
#include "hal/adc_ll.h"
#include "hal/adc_types.h"
#include "esp_private/regi2c_ctrl.h"
#include "hal/temperature_sensor_ll.h"
#include "esp_private/sar_periph_ctrl.h"
#define I2C_SAR_ADC_INIT_CODE_VAL 2150
#define ADC_RNG_CLKM_DIV_NUM 0
@@ -17,7 +19,18 @@
void bootloader_random_enable(void)
{
#ifndef BOOTLOADER_BUILD
sar_periph_ctrl_adc_reset();
#else
// Save temperature sensor related register values before ADC reset
tsens_ll_reg_values_t saved_tsens_regs = {};
tsens_ll_backup_registers(&saved_tsens_regs);
adc_ll_reset_register();
// Restore temperature sensor related register values after ADC reset
temperature_sensor_ll_reset_module();
tsens_ll_restore_registers(&saved_tsens_regs);
#endif
adc_ll_enable_bus_clock(true);
adc_ll_enable_func_clock(true);
adc_ll_digi_clk_sel(ADC_DIGI_CLK_SRC_XTAL);

View File

@@ -11,6 +11,7 @@
#include "esp_private/periph_ctrl.h"
#include "esp_private/adc_share_hw_ctrl.h"
#include "esp_private/sar_periph_ctrl.h"
#define I2C_SAR_ADC_INIT_CODE_VAL 2166
#define ADC_RNG_CLKM_DIV_NUM 0
@@ -19,7 +20,12 @@
void bootloader_random_enable(void)
{
#ifndef BOOTLOADER_BUILD
sar_periph_ctrl_adc_reset();
#else
_adc_ll_reset_register();
#endif
_adc_ll_enable_bus_clock(true);
adc_ll_digi_clk_sel(ADC_DIGI_CLK_SRC_XTAL);