aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/ports/STM32
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2018-11-25 10:20:09 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2018-11-25 10:20:09 +0000
commit7a0857aa5d161a27128622b0d9f61867dc7520ae (patch)
tree760371b2a169e11c5f24c904f52fa68d23d2405e /os/hal/ports/STM32
parente9fbae0881b5c4aa4302ff2629efe06360e34fa5 (diff)
downloadChibiOS-7a0857aa5d161a27128622b0d9f61867dc7520ae.tar.gz
ChibiOS-7a0857aa5d161a27128622b0d9f61867dc7520ae.tar.bz2
ChibiOS-7a0857aa5d161a27128622b0d9f61867dc7520ae.zip
RTC callbacks now working.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12437 110e8d01-0319-4d1e-a829-52ad28d1bb01
Diffstat (limited to 'os/hal/ports/STM32')
-rw-r--r--os/hal/ports/STM32/LLD/EXTIv1/stm32_exti.c4
-rw-r--r--os/hal/ports/STM32/LLD/RTCv2/hal_rtc_lld.c49
2 files changed, 37 insertions, 16 deletions
diff --git a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti.c b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti.c
index d2d448e80..e4952937a 100644
--- a/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti.c
+++ b/os/hal/ports/STM32/LLD/EXTIv1/stm32_exti.c
@@ -64,7 +64,7 @@
void extiEnableGroup1(uint32_t mask, extimode_t mode) {
/* Masked out lines must not be touched by this driver.*/
- osalDbgAssert((mask & STM32_EXTI_IMR1_MASK) == 0U, "fixed line");
+ osalDbgAssert((mask & STM32_EXTI_IMR1_MASK) == 0U, "fixed lines");
if ((mode & EXTI_MODE_EDGES_MASK) == 0U) {
/* Disabling channels.*/
@@ -113,7 +113,7 @@ void extiEnableGroup1(uint32_t mask, extimode_t mode) {
void extiEnableGroup2(uint32_t mask, extimode_t mode) {
/* Masked out lines must not be touched by this driver.*/
- osalDbgAssert((mask & STM32_EXTI_IMR2_MASK) == 0U, "fixed line");
+ osalDbgAssert((mask & STM32_EXTI_IMR2_MASK) == 0U, "fixed lines");
if ((mode & EXTI_MODE_EDGES_MASK) == 0U) {
/* Disabling channels.*/
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));