From 2ec5099b42f6eb6b1fd100e67cfd0f219425c03e Mon Sep 17 00:00:00 2001 From: wuzhenghui Date: Thu, 12 Jun 2025 17:47:40 +0800 Subject: [PATCH] fix(esp_hw_support): config lact in critical --- components/esp_pm/pm_impl.c | 3 +++ components/esp_timer/src/esp_timer_impl_lac.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/components/esp_pm/pm_impl.c b/components/esp_pm/pm_impl.c index 9836352bc5..6520ba4023 100644 --- a/components/esp_pm/pm_impl.c +++ b/components/esp_pm/pm_impl.c @@ -647,6 +647,8 @@ 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); } + 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_TIMING_TUNING @@ -658,6 +660,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); } diff --git a/components/esp_timer/src/esp_timer_impl_lac.c b/components/esp_timer/src/esp_timer_impl_lac.c index 772e39a34e..55a7120f33 100644 --- a/components/esp_timer/src/esp_timer_impl_lac.c +++ b/components/esp_timer/src/esp_timer_impl_lac.c @@ -272,7 +272,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;