From 10eeff30e7ac6cd5a34a26918ae946594353553f Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 19 Apr 2015 06:58:07 -0600 Subject: [PATCH 1/3] STM32 F1 RTC Counter: Now need to enable backup domain write access when setting the time. From Darcy Gong --- arch/arm/src/stm32/stm32_rtcounter.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm/src/stm32/stm32_rtcounter.c b/arch/arm/src/stm32/stm32_rtcounter.c index 28efd296bbf..c539a390e16 100644 --- a/arch/arm/src/stm32/stm32_rtcounter.c +++ b/arch/arm/src/stm32/stm32_rtcounter.c @@ -594,6 +594,10 @@ int up_rtc_settime(FAR const struct timespec *tp) stm32_rtc_breakout(tp, ®vals); + /* Enable write access to the backup domain */ + + (void)stm32_pwr_enablebkp(true); + /* Then write the broken out values to the RTC counter and BKP overflow register * (hi-res mode only) */ @@ -608,6 +612,8 @@ int up_rtc_settime(FAR const struct timespec *tp) putreg16(regvals.ovf, RTC_TIMEMSB_REG); #endif irqrestore(flags); + + (void)stm32_pwr_enablebkp(false); return OK; } From 84eded8a31b6c6018779516e13078dee3be701de Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 19 Apr 2015 06:59:58 -0600 Subject: [PATCH 2/3] Update ChangeLog --- ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3218cf99660..5f1d894bb79 100755 --- a/ChangeLog +++ b/ChangeLog @@ -10248,4 +10248,5 @@ return (2015-04-19). * include/nuttx/usb/hub.h: Add USB hub header file from Kaushal Parikh (2015-04-18). - + * arch/arm/src/stm32/stm32_rtcounter.c: Now need to enable backup + domain write access when setting the time. From Darcy Gong (2015-04-19). From 320d678d89a41f7d70aad7b07b1a75b7a1a50b90 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 19 Apr 2015 07:05:39 -0600 Subject: [PATCH 3/3] STM32 F1 RT Counter: Another fix from Darcy Gong --- arch/arm/src/stm32/stm32_rtcounter.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/arch/arm/src/stm32/stm32_rtcounter.c b/arch/arm/src/stm32/stm32_rtcounter.c index c539a390e16..815d654acbc 100644 --- a/arch/arm/src/stm32/stm32_rtcounter.c +++ b/arch/arm/src/stm32/stm32_rtcounter.c @@ -589,6 +589,7 @@ int up_rtc_settime(FAR const struct timespec *tp) { struct rtc_regvals_s regvals; irqstate_t flags; + uint16_t cntl; /* Break out the time values */ @@ -603,10 +604,15 @@ int up_rtc_settime(FAR const struct timespec *tp) */ flags = irqsave(); - stm32_rtc_beginwr(); - putreg16(regvals.cnth, STM32_RTC_CNTH); - putreg16(regvals.cntl, STM32_RTC_CNTL); - stm32_rtc_endwr(); + do + { + stm32_rtc_beginwr(); + putreg16(regvals.cnth, STM32_RTC_CNTH); + putreg16(regvals.cntl, STM32_RTC_CNTL); + cntl = getreg16(STM32_RTC_CNTL); + stm32_rtc_endwr(); + } + while (cntl != regvals.cntl); #ifdef CONFIG_RTC_HIRES putreg16(regvals.ovf, RTC_TIMEMSB_REG);