diff --git a/components/esp_hw_support/port/esp32/rtc_time.c b/components/esp_hw_support/port/esp32/rtc_time.c index a92b88041f..d24d61e74c 100644 --- a/components/esp_hw_support/port/esp32/rtc_time.c +++ b/components/esp_hw_support/port/esp32/rtc_time.c @@ -7,6 +7,7 @@ #include #include "esp_rom_sys.h" #include "hal/clk_tree_ll.h" +#include "hal/rtc_cntl_ll.h" #include "soc/rtc.h" #include "soc/timer_periph.h" #include "esp_hw_log.h" @@ -152,20 +153,7 @@ uint64_t rtc_time_slowclk_to_us(uint64_t rtc_cycles, uint32_t period) uint64_t rtc_time_get(void) { - SET_PERI_REG_MASK(RTC_CNTL_TIME_UPDATE_REG, RTC_CNTL_TIME_UPDATE); - int attempts = 1000; - while (GET_PERI_REG_MASK(RTC_CNTL_TIME_UPDATE_REG, RTC_CNTL_TIME_VALID) == 0) { - esp_rom_delay_us(1); // might take 1 RTC slowclk period, don't flood RTC bus - if (attempts) { - if (--attempts == 0 && clk_ll_xtal32k_digi_is_enabled()) { - ESP_HW_LOGE(TAG, "rtc_time_get() 32kHz xtal has been stopped"); - } - } - } - SET_PERI_REG_MASK(RTC_CNTL_INT_CLR_REG, RTC_CNTL_TIME_VALID_INT_CLR); - uint64_t t = READ_PERI_REG(RTC_CNTL_TIME0_REG); - t |= ((uint64_t) READ_PERI_REG(RTC_CNTL_TIME1_REG)) << 32; - return t; + return rtc_cntl_ll_get_rtc_time(); } void rtc_clk_wait_for_slow_cycle(void) diff --git a/components/esp_hw_support/port/esp32c2/rtc_time.c b/components/esp_hw_support/port/esp32c2/rtc_time.c index 0333f05aec..b2a6f77a4c 100644 --- a/components/esp_hw_support/port/esp32c2/rtc_time.c +++ b/components/esp_hw_support/port/esp32c2/rtc_time.c @@ -9,6 +9,7 @@ #include "soc/rtc.h" #include "soc/rtc_cntl_reg.h" #include "hal/clk_tree_ll.h" +#include "hal/rtc_cntl_ll.h" #include "soc/timer_group_reg.h" #include "esp_rom_sys.h" @@ -166,10 +167,7 @@ uint64_t rtc_time_slowclk_to_us(uint64_t rtc_cycles, uint32_t period) uint64_t rtc_time_get(void) { - SET_PERI_REG_MASK(RTC_CNTL_TIME_UPDATE_REG, RTC_CNTL_TIME_UPDATE); - uint64_t t = READ_PERI_REG(RTC_CNTL_TIME0_REG); - t |= ((uint64_t) READ_PERI_REG(RTC_CNTL_TIME1_REG)) << 32; - return t; + return rtc_cntl_ll_get_rtc_time(); } uint64_t rtc_light_slp_time_get(void) diff --git a/components/esp_hw_support/port/esp32c3/rtc_time.c b/components/esp_hw_support/port/esp32c3/rtc_time.c index beaa4965e1..26327e58d3 100644 --- a/components/esp_hw_support/port/esp32c3/rtc_time.c +++ b/components/esp_hw_support/port/esp32c3/rtc_time.c @@ -9,6 +9,7 @@ #include "soc/rtc.h" #include "soc/rtc_cntl_reg.h" #include "hal/clk_tree_ll.h" +#include "hal/rtc_cntl_ll.h" #include "soc/timer_group_reg.h" #include "esp_rom_sys.h" @@ -169,10 +170,7 @@ uint64_t rtc_time_slowclk_to_us(uint64_t rtc_cycles, uint32_t period) uint64_t rtc_time_get(void) { - SET_PERI_REG_MASK(RTC_CNTL_TIME_UPDATE_REG, RTC_CNTL_TIME_UPDATE); - uint64_t t = READ_PERI_REG(RTC_CNTL_TIME0_REG); - t |= ((uint64_t) READ_PERI_REG(RTC_CNTL_TIME1_REG)) << 32; - return t; + return rtc_cntl_ll_get_rtc_time(); } uint64_t rtc_light_slp_time_get(void) diff --git a/components/esp_hw_support/port/esp32c6/rtc_time.c b/components/esp_hw_support/port/esp32c6/rtc_time.c index bf4aad5fca..98bf1e6f82 100644 --- a/components/esp_hw_support/port/esp32c6/rtc_time.c +++ b/components/esp_hw_support/port/esp32c6/rtc_time.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -9,6 +9,7 @@ #include "soc/rtc.h" #include "soc/lp_timer_reg.h" #include "hal/clk_tree_ll.h" +#include "hal/rtc_cntl_ll.h" #include "soc/timer_group_reg.h" #include "esp_rom_sys.h" #include "assert.h" @@ -206,10 +207,7 @@ uint64_t rtc_time_slowclk_to_us(uint64_t rtc_cycles, uint32_t period) uint64_t rtc_time_get(void) { - SET_PERI_REG_MASK(LP_TIMER_UPDATE_REG, LP_TIMER_MAIN_TIMER_UPDATE); - uint64_t t = READ_PERI_REG(LP_TIMER_MAIN_BUF0_LOW_REG); - t |= ((uint64_t) READ_PERI_REG(LP_TIMER_MAIN_BUF0_HIGH_REG)) << 32; - return t; + return rtc_cntl_ll_get_rtc_time(); } uint64_t rtc_light_slp_time_get(void) diff --git a/components/esp_hw_support/port/esp32h4/rtc_time.c b/components/esp_hw_support/port/esp32h4/rtc_time.c index 81522556ca..743473a96a 100644 --- a/components/esp_hw_support/port/esp32h4/rtc_time.c +++ b/components/esp_hw_support/port/esp32h4/rtc_time.c @@ -9,6 +9,7 @@ #include "soc/rtc.h" #include "soc/rtc_cntl_reg.h" #include "hal/clk_tree_ll.h" +#include "hal/rtc_cntl_ll.h" #include "soc/timer_group_reg.h" #include "esp_rom_sys.h" @@ -163,10 +164,7 @@ uint64_t rtc_time_slowclk_to_us(uint64_t rtc_cycles, uint32_t period) uint64_t rtc_time_get(void) { - SET_PERI_REG_MASK(RTC_CNTL_TIME_UPDATE_REG, RTC_CNTL_TIME_UPDATE); - uint64_t t = READ_PERI_REG(RTC_CNTL_TIME0_REG); - t |= ((uint64_t) READ_PERI_REG(RTC_CNTL_TIME1_REG)) << 32; - return t; + return rtc_cntl_ll_get_rtc_time(); } uint64_t rtc_light_slp_time_get(void) diff --git a/components/esp_hw_support/port/esp32s2/rtc_time.c b/components/esp_hw_support/port/esp32s2/rtc_time.c index c8e22bf8bf..57e248e9f1 100644 --- a/components/esp_hw_support/port/esp32s2/rtc_time.c +++ b/components/esp_hw_support/port/esp32s2/rtc_time.c @@ -9,6 +9,7 @@ #include "soc/rtc.h" #include "soc/rtc_cntl_reg.h" #include "hal/clk_tree_ll.h" +#include "hal/rtc_cntl_ll.h" #include "soc/timer_group_reg.h" /* Calibration of RTC_SLOW_CLK is performed using a special feature of TIMG0. @@ -234,10 +235,7 @@ uint64_t rtc_time_slowclk_to_us(uint64_t rtc_cycles, uint32_t period) uint64_t rtc_time_get(void) { - SET_PERI_REG_MASK(RTC_CNTL_TIME_UPDATE_REG, RTC_CNTL_TIME_UPDATE); - uint64_t t = READ_PERI_REG(RTC_CNTL_TIME0_REG); - t |= ((uint64_t) READ_PERI_REG(RTC_CNTL_TIME1_REG)) << 32; - return t; + return rtc_cntl_ll_get_rtc_time(); } uint64_t rtc_light_slp_time_get(void) diff --git a/components/esp_hw_support/port/esp32s3/rtc_time.c b/components/esp_hw_support/port/esp32s3/rtc_time.c index 9c07e6a9d6..6333b68a19 100644 --- a/components/esp_hw_support/port/esp32s3/rtc_time.c +++ b/components/esp_hw_support/port/esp32s3/rtc_time.c @@ -9,6 +9,7 @@ #include "soc/rtc.h" #include "soc/rtc_cntl_reg.h" #include "hal/clk_tree_ll.h" +#include "hal/rtc_cntl_ll.h" #include "soc/timer_group_reg.h" /* Calibration of RTC_SLOW_CLK is performed using a special feature of TIMG0. @@ -168,10 +169,7 @@ uint64_t rtc_time_slowclk_to_us(uint64_t rtc_cycles, uint32_t period) uint64_t rtc_time_get(void) { - SET_PERI_REG_MASK(RTC_CNTL_TIME_UPDATE_REG, RTC_CNTL_TIME_UPDATE); - uint64_t t = READ_PERI_REG(RTC_CNTL_TIME0_REG); - t |= ((uint64_t) READ_PERI_REG(RTC_CNTL_TIME1_REG)) << 32; - return t; + return rtc_cntl_ll_get_rtc_time(); } uint64_t rtc_light_slp_time_get(void)