diff options
author | Peter Hinch <peter@hinch.me.uk> | 2015-10-27 10:55:47 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-10-30 13:13:42 +0000 |
commit | 38196344691ad32b7f80bb44489c069ceaecb1ec (patch) | |
tree | c3af23089879096a7f87f1df1ba7ae08635accb9 | |
parent | b83d0b35e9b86424b997ef1ccf50e2d2a9659fcf (diff) | |
download | micropython-38196344691ad32b7f80bb44489c069ceaecb1ec.tar.gz micropython-38196344691ad32b7f80bb44489c069ceaecb1ec.zip |
stmhal: Make RTC init skip startup if LTE is already enabled and ready.
This prevents the loss of RTC time when exiting from standby mode, since
the RTC is paused while it is being re-inited and this loses about 120ms.
Thanks to @chuckbook for the patch.
-rw-r--r-- | stmhal/rtc.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/stmhal/rtc.c b/stmhal/rtc.c index 6bed3d1e62..1d349a6e90 100644 --- a/stmhal/rtc.c +++ b/stmhal/rtc.c @@ -178,6 +178,17 @@ void rtc_init(void) { RTCHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; RTCHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; + // if LTE enabled & ready --> no need to (re-)init RTC + if ((RCC->BDCR & (RCC_BDCR_LSEON | RCC_BDCR_LSERDY)) == (RCC_BDCR_LSEON | RCC_BDCR_LSERDY)) { + // remove Backup Domain write protection + PWR->CR |= PWR_CR_DBP; + // Clear source Reset Flag + __HAL_RCC_CLEAR_RESET_FLAGS(); + // provide some status information + rtc_info |= 0x40000 | (RCC->BDCR & 7) | (RCC->CSR & 3) << 8; + return; + } + mp_uint_t tick = HAL_GetTick(); if (HAL_RTC_Init(&RTCHandle) != HAL_OK) { |