From e7cea845fe584337ae51f26abdcd29b4c3fd6db9 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 18 Nov 2018 13:31:49 +0000 Subject: Unified RTC demo, more RTC and EXTI changes, not finished. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12434 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c | 93 +++++++++++++++--------------- os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.h | 5 +- 2 files changed, 48 insertions(+), 50 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 b5798bc80..2e78f49fe 100644 --- a/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c +++ b/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c @@ -251,46 +251,48 @@ OSAL_IRQ_HANDLER(STM32_RTC_COMMON_HANDLER) { RTCD1.rtc->ISR = 0U; if (RTCD1.callback != NULL) { - if ((isr & RTC_ISR_WUTF) != 0U) { + uint32_t cr = RTCD1-rtc->CR; + uint32_t tampcr = RTCD1.rtc->TAMPCR; + + if (((cr & RTC_CR_WUTIE) != 0U) && ((isr & RTC_ISR_WUTF) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_WAKEUP); } + #if defined(RTC_ISR_ALRAF) - if ((isr & RTC_ISR_ALRAF) != 0U) { + if (((cr & RTC_CR_ALRAIE) != 0U) && ((isr & RTC_ISR_ALRAF) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_ALARM_A); } #endif #if defined(RTC_ISR_ALRBF) - if ((isr & RTC_ISR_ALRBF) != 0U) { + if (((cr & RTC_CR_ALRBIE) != 0U) && ((isr & RTC_ISR_ALRBF) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_ALARM_B); } #endif -#if defined(RTC_ISR_ITSF) - if ((isr & RTC_ISR_ITSF) != 0U) { - RTCD1.callback(&RTCD1, RTC_EVENT_ITS); - } -#endif -#if defined(RTC_ISR_TSF) - if ((isr & RTC_ISR_TSF) != 0U) { - RTCD1.callback(&RTCD1, RTC_EVENT_TS); - } -#endif -#if defined(RTC_ISR_TSOVF) - if ((isr & RTC_ISR_TSOVF) != 0U) { - RTCD1.callback(&RTCD1, RTC_EVENT_TS_OVF); + + if ((cr & RTC_CR_TSIE) != 0U) { + if ((isr & RTC_ISR_TSF) != 0U) { + RTCD1.callback(&RTCD1, RTC_EVENT_TS); + } + if ((isr & RTC_ISR_TSOVF) != 0U) { + RTCD1.callback(&RTCD1, RTC_EVENT_TS_OVF); + } } -#endif + #if defined(RTC_ISR_TAMP1F) - if ((isr & RTC_ISR_TAMP1F) != 0U) { + if (((tampcr & RTC_TAMPCR_TAMP1IE) != 0U) && + ((isr & RTC_ISR_TAMP1F) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_TAMP1); } #endif #if defined(RTC_ISR_TAMP2F) - if ((isr & RTC_ISR_TAMP2F) != 0U) { + if (((tampcr & RTC_TAMPCR_TAMP2IE) != 0U) && + ((isr & RTC_ISR_TAMP2F) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_TAMP2); } #endif #if defined(RTC_ISR_TAMP3F) - if ((isr & RTC_ISR_TAMP3F) != 0U) { + if (((tampcr & RTC_TAMPCR_TAMP3IE) != 0U) && + ((isr & RTC_ISR_TAMP3F) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_TAMP3); } #endif @@ -314,15 +316,8 @@ OSAL_IRQ_HANDLER(STM32_RTC_TAMP_STAMP_HANDLER) { OSAL_IRQ_PROLOGUE(); clear = ~(0U -#if defined(RTC_ISR_ITSF) - | RTC_ISR_ITSF -#endif -#if defined(RTC_ISR_TSF) | RTC_ISR_TSF -#endif -#if defined(RTC_ISR_TSOVF) | RTC_ISR_TSOVF -#endif #if defined(RTC_ISR_TAMP1F) | RTC_ISR_TAMP1F #endif @@ -338,33 +333,34 @@ OSAL_IRQ_HANDLER(STM32_RTC_TAMP_STAMP_HANDLER) { RTCD1.rtc->ISR = clear; if (RTCD1.callback != NULL) { -#if defined(RTC_ISR_ITSF) - if ((isr & RTC_ISR_ITSF) != 0U) { - RTCD1.callback(&RTCD1, RTC_EVENT_ITS); + uint32_t cr, tampcr; + + cr = RTCD1.rtc->CR; + if ((cr & RTC_CR_TSIE) != 0U) { + if ((isr & RTC_ISR_TSF) != 0U) { + RTCD1.callback(&RTCD1, RTC_EVENT_TS); + } + if ((isr & RTC_ISR_TSOVF) != 0U) { + RTCD1.callback(&RTCD1, RTC_EVENT_TS_OVF); + } } -#endif -#if defined(RTC_ISR_TSF) - if ((isr & RTC_ISR_TSF) != 0U) { - RTCD1.callback(&RTCD1, RTC_EVENT_TS); - } -#endif -#if defined(RTC_ISR_TSOVF) - if ((isr & RTC_ISR_TSOVF) != 0U) { - RTCD1.callback(&RTCD1, RTC_EVENT_TS_OVF); - } -#endif + + tampcr = RTCD1.rtc->TAMPCR; #if defined(RTC_ISR_TAMP1F) - if ((isr & RTC_ISR_TAMP1F) != 0U) { + if (((tampcr & RTC_TAMPCR_TAMP1IE) != 0U) && + ((isr & RTC_ISR_TAMP1F) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_TAMP1); } #endif #if defined(RTC_ISR_TAMP2F) - if ((isr & RTC_ISR_TAMP2F) != 0U) { + if (((tampcr & RTC_TAMPCR_TAMP2IE) != 0U) && + ((isr & RTC_ISR_TAMP2F) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_TAMP2); } #endif #if defined(RTC_ISR_TAMP3F) - if ((isr & RTC_ISR_TAMP3F) != 0U) { + if (((tampcr & RTC_TAMPCR_TAMP3IE) != 0U) && + ((isr & RTC_ISR_TAMP3F) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_TAMP3); } #endif @@ -386,7 +382,9 @@ OSAL_IRQ_HANDLER(STM32_RTC_WKUP_HANDLER) { RTCD1.rtc->ISR = ~RTC_ISR_WUTF; if (RTCD1.callback != NULL) { - if ((isr & RTC_ISR_WUTF) != 0U) { + uint32_t cr = RTCD1.rtc->CR; + + if (((cr & RTC_CR_WUTIE) != 0U) && ((isr & RTC_ISR_WUTF) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_WAKEUP); } } @@ -417,13 +415,14 @@ OSAL_IRQ_HANDLER(STM32_RTC_ALARM_HANDLER) { RTCD1.rtc->ISR = clear; if (RTCD1.callback != NULL) { + uint32_t cr = RTCD1.rtc->CR; #if defined(RTC_ISR_ALRAF) - if ((isr & RTC_ISR_ALRAF) != 0U) { + if (((cr & RTC_CR_ALRAIE) != 0U) && ((isr & RTC_ISR_ALRAF) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_ALARM_A); } #endif #if defined(RTC_ISR_ALRBF) - if ((isr & RTC_ISR_ALRBF) != 0U) { + if (((cr & RTC_CR_ALRBIE) != 0U) && ((isr & RTC_ISR_ALRBF) != 0U)) { RTCD1.callback(&RTCD1, RTC_EVENT_ALARM_B); } #endif diff --git a/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.h b/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.h index 7686760af..5aae1ab99 100644 --- a/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.h +++ b/os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.h @@ -158,9 +158,8 @@ typedef enum { RTC_EVENT_TAMP1 = 4, /** Tamper 1. */ RTC_EVENT_TAMP2 = 5, /** Tamper 2- */ RTC_EVENT_TAMP3 = 6, /** Tamper 3. */ - RTC_EVENT_WAKEUP = 7, /** Wakeup. */ - RTC_EVENT_ITS = 8 /** Internal time stamp. */ -} rtcevent_t; + RTC_EVENT_WAKEUP = 7 /** Wakeup. */ + } rtcevent_t; /** * @brief Type of a generic RTC callback. -- cgit v1.2.3