From 47f2a0b09dc2ba93e01abe973a1a3415f1ce2fe2 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 19 Apr 2015 07:05:39 -0600 Subject: [PATCH] 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 c539a390e1..815d654acb 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);