aboutsummaryrefslogtreecommitdiff
path: root/lib/stm32
diff options
context:
space:
mode:
authorUwe Hermann2011-01-07 17:07:25 +0100
committerUwe Hermann2011-01-07 17:07:25 +0100
commit1cabc38c3a44bea8adbfbdce0ae012236c89bcb2 (patch)
treefb3d4970b23206460299f1ad5c40e9a1720f0258 /lib/stm32
parentca53311bfc3182212d53386c5f49f0bc57350266 (diff)
EXTI bugfix in exti_select_source().
AFIO_EXTICR[1 to 4] registers were not beeing set correctly. You have to force a 0 on the bits that are 0 for the mutex to work. Thanks Linus Casassa <linus@lin.cl> for the patch!
Diffstat (limited to 'lib/stm32')
-rw-r--r--lib/stm32/exti.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/stm32/exti.c b/lib/stm32/exti.c
index cdc2347..de037e7 100644
--- a/lib/stm32/exti.c
+++ b/lib/stm32/exti.c
@@ -129,12 +129,17 @@ void exti_select_source(u32 exti, u32 gpioport)
}
/* Ensure that only valid EXTI lines are used. */
- if (exti < EXTI4)
- AFIO_EXTICR1 &= ~(bits << shift);
- else if (exti < EXTI8)
- AFIO_EXTICR2 &= ~(bits << shift);
- else if (exti < EXTI12)
- AFIO_EXTICR3 &= ~(bits << shift);
- else if (exti < EXTI16)
- AFIO_EXTICR4 &= ~(bits << shift);
+ if (exti < EXTI4) {
+ AFIO_EXTICR1 &= ~(0x000F << shift);
+ AFIO_EXTICR1 |= (~bits << shift);
+ } else if (exti < EXTI8) {
+ AFIO_EXTICR2 &= ~(0x000F << shift);
+ AFIO_EXTICR2 |= (~bits << shift);
+ } else if (exti < EXTI12) {
+ AFIO_EXTICR3 &= ~(0x000F << shift);
+ AFIO_EXTICR3 |= (~bits << shift);
+ } else if (exti < EXTI16) {
+ AFIO_EXTICR4 &= ~(0x000F << shift);
+ AFIO_EXTICR4 |= (~bits << shift);
+ }
}