fix(esp_hw_support): config lact in critical

This commit is contained in:
wuzhenghui
2025-06-12 17:47:40 +08:00
parent d0ffbceb54
commit b8088e16bc
2 changed files with 6 additions and 1 deletions

View File

@@ -645,7 +645,9 @@ static void IRAM_ATTR do_switch(pm_mode_t new_mode)
if (switch_down) {
on_freq_update(old_ticks_per_us, new_ticks_per_us);
}
if (new_config.source == SOC_CPU_CLK_SRC_PLL) {
extern portMUX_TYPE s_time_update_lock;
portENTER_CRITICAL_SAFE(&s_time_update_lock);
if (new_config.source == SOC_CPU_CLK_SRC_PLL) {
rtc_clk_cpu_freq_set_config_fast(&new_config);
#if SOC_SPI_MEM_SUPPORT_TIME_TUNING
mspi_timing_change_speed_mode_cache_safe(false);
@@ -656,6 +658,7 @@ static void IRAM_ATTR do_switch(pm_mode_t new_mode)
#endif
rtc_clk_cpu_freq_set_config_fast(&new_config);
}
portEXIT_CRITICAL_SAFE(&s_time_update_lock);
if (!switch_down) {
on_freq_update(old_ticks_per_us, new_ticks_per_us);
}

View File

@@ -267,7 +267,9 @@ esp_err_t esp_timer_impl_init(intr_handler_t alarm_handler)
* will not cause issues in practice.
*/
REG_SET_BIT(INT_ENA_REG, TIMG_LACT_INT_ENA);
portENTER_CRITICAL_SAFE(&s_time_update_lock);
timer_ll_set_lact_clock_prescale(TIMER_LL_GET_HW(LACT_MODULE), esp_clk_apb_freq() / MHZ / LACT_TICKS_PER_US);
portEXIT_CRITICAL_SAFE(&s_time_update_lock);
// Set the step for the sleep mode when the timer will work
// from a slow_clk frequency instead of the APB frequency.
uint32_t slowclk_ticks_per_us = esp_clk_slowclk_cal_get() * LACT_TICKS_PER_US;