diff --git a/components/esp_pm/pm_impl.c b/components/esp_pm/pm_impl.c index cd6ce944dc..a946bc2768 100644 --- a/components/esp_pm/pm_impl.c +++ b/components/esp_pm/pm_impl.c @@ -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); } diff --git a/components/esp_timer/src/esp_timer_impl_lac.c b/components/esp_timer/src/esp_timer_impl_lac.c index e4771a3e85..1e87740742 100644 --- a/components/esp_timer/src/esp_timer_impl_lac.c +++ b/components/esp_timer/src/esp_timer_impl_lac.c @@ -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;