summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorPeter Hinch <peter@hinch.me.uk>2015-10-27 10:55:47 +0000
committerDamien George <damien.p.george@gmail.com>2015-10-30 13:13:42 +0000
commit38196344691ad32b7f80bb44489c069ceaecb1ec (patch)
treec3af23089879096a7f87f1df1ba7ae08635accb9
parentb83d0b35e9b86424b997ef1ccf50e2d2a9659fcf (diff)
downloadmicropython-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.c11
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) {