mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
soc/rtc: add a function to wait for slow clock cycle
Some RTC features are synchronized to RTC_SLOW_CLK, so sometimes software needs to wait for the next slow clock cycle. This function implements waiting using Timer Group clock calibration feature.
This commit is contained in:
parent
fd20a89e20
commit
d262fe4bc9
@ -373,6 +373,15 @@ uint64_t rtc_time_slowclk_to_us(uint64_t rtc_cycles, uint32_t period);
|
|||||||
*/
|
*/
|
||||||
uint64_t rtc_time_get();
|
uint64_t rtc_time_get();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Busy loop until next RTC_SLOW_CLK cycle
|
||||||
|
*
|
||||||
|
* This function returns not earlier than the next RTC_SLOW_CLK clock cycle.
|
||||||
|
* In some cases (e.g. when RTC_SLOW_CLK cycle is very close), it may return
|
||||||
|
* one RTC_SLOW_CLK cycle later.
|
||||||
|
*/
|
||||||
|
void rtc_clk_wait_for_slow_cycle();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief sleep configuration for rtc_sleep_init function
|
* @brief sleep configuration for rtc_sleep_init function
|
||||||
*/
|
*/
|
||||||
|
@ -135,3 +135,20 @@ uint64_t rtc_time_get()
|
|||||||
t |= ((uint64_t) READ_PERI_REG(RTC_CNTL_TIME1_REG)) << 32;
|
t |= ((uint64_t) READ_PERI_REG(RTC_CNTL_TIME1_REG)) << 32;
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rtc_clk_wait_for_slow_cycle()
|
||||||
|
{
|
||||||
|
REG_CLR_BIT(TIMG_RTCCALICFG_REG(0), TIMG_RTC_CALI_START_CYCLING | TIMG_RTC_CALI_START);
|
||||||
|
REG_CLR_BIT(TIMG_RTCCALICFG_REG(0), TIMG_RTC_CALI_RDY);
|
||||||
|
REG_SET_FIELD(TIMG_RTCCALICFG_REG(0), TIMG_RTC_CALI_CLK_SEL, RTC_CAL_RTC_MUX);
|
||||||
|
/* Request to run calibration for 0 slow clock cycles.
|
||||||
|
* RDY bit will be set on the nearest slow clock cycle.
|
||||||
|
*/
|
||||||
|
REG_SET_FIELD(TIMG_RTCCALICFG_REG(0), TIMG_RTC_CALI_MAX, 0);
|
||||||
|
REG_SET_BIT(TIMG_RTCCALICFG_REG(0), TIMG_RTC_CALI_START);
|
||||||
|
ets_delay_us(1); /* RDY needs some time to go low */
|
||||||
|
while (!GET_PERI_REG_MASK(TIMG_RTCCALICFG_REG(0), TIMG_RTC_CALI_RDY)) {
|
||||||
|
ets_delay_us(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user