From 7a0857aa5d161a27128622b0d9f61867dc7520ae Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sun, 25 Nov 2018 10:20:09 +0000 Subject: RTC callbacks now working. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12437 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c | 49 +++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 14 deletions(-) (limited to 'os/hal/ports/STM32/LLD/RTCv2') diff --git a/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c b/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c index 7d70cd44b..a7c212b00 100644 --- a/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c +++ b/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c @@ -243,12 +243,33 @@ struct RTCDriverVMT _rtc_lld_vmt = { * @isr */ OSAL_IRQ_HANDLER(STM32_RTC_COMMON_HANDLER) { - uint32_t isr; + uint32_t isr, clear; OSAL_IRQ_PROLOGUE(); + clear = (0U + | RTC_ISR_TSF + | RTC_ISR_TSOVF +#if defined(RTC_ISR_TAMP1F) + | RTC_ISR_TAMP1F +#endif +#if defined(RTC_ISR_TAMP2F) + | RTC_ISR_TAMP2F +#endif +#if defined(RTC_ISR_TAMP3F) + | RTC_ISR_TAMP3F +#endif + | RTC_ISR_WUTF +#if defined(RTC_ISR_ALRAF) + | RTC_ISR_ALRAF +#endif +#if defined(RTC_ISR_ALRBF) + | RTC_ISR_ALRBF +#endif + ); + isr = RTCD1.rtc->ISR; - RTCD1.rtc->ISR = 0U; + RTCD1.rtc->ISR = isr & ~clear; extiClearGroup1(EXTI_MASK1(STM32_RTC_ALARM_EXTI) | EXTI_MASK1(STM32_RTC_TAMP_STAMP_EXTI) | @@ -319,22 +340,22 @@ OSAL_IRQ_HANDLER(STM32_RTC_TAMP_STAMP_HANDLER) { OSAL_IRQ_PROLOGUE(); - clear = ~(0U - | RTC_ISR_TSF - | RTC_ISR_TSOVF + clear = (0U + | RTC_ISR_TSF + | RTC_ISR_TSOVF #if defined(RTC_ISR_TAMP1F) - | RTC_ISR_TAMP1F + | RTC_ISR_TAMP1F #endif #if defined(RTC_ISR_TAMP2F) - | RTC_ISR_TAMP2F + | RTC_ISR_TAMP2F #endif #if defined(RTC_ISR_TAMP3F) - | RTC_ISR_TAMP3F + | RTC_ISR_TAMP3F #endif ); isr = RTCD1.rtc->ISR; - RTCD1.rtc->ISR = clear; + RTCD1.rtc->ISR = isr & ~clear; extiClearGroup1(EXTI_MASK1(STM32_RTC_TAMP_STAMP_EXTI)); @@ -385,7 +406,7 @@ OSAL_IRQ_HANDLER(STM32_RTC_WKUP_HANDLER) { OSAL_IRQ_PROLOGUE(); isr = RTCD1.rtc->ISR; - RTCD1.rtc->ISR = ~RTC_ISR_WUTF; + RTCD1.rtc->ISR = isr & ~RTC_ISR_WUTF; extiClearGroup1(EXTI_MASK1(STM32_RTC_WKUP_EXTI)); @@ -410,17 +431,17 @@ OSAL_IRQ_HANDLER(STM32_RTC_ALARM_HANDLER) { OSAL_IRQ_PROLOGUE(); - clear = ~(0U + clear = (0U #if defined(RTC_ISR_ALRAF) - | RTC_ISR_ALRAF + | RTC_ISR_ALRAF #endif #if defined(RTC_ISR_ALRBF) - | RTC_ISR_ALRBF + | RTC_ISR_ALRBF #endif ); isr = RTCD1.rtc->ISR; - RTCD1.rtc->ISR = clear; + RTCD1.rtc->ISR = isr & ~clear; extiClearGroup1(EXTI_MASK1(STM32_RTC_ALARM_EXTI)); -- cgit v1.2.3