diff options
author | Krzysztof Blazewicz <krzysztof.blazewicz@uxeon.com> | 2016-09-06 17:22:43 +0200 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-09-09 19:35:21 +1000 |
commit | 1ba516f4758508f2657d1c68d31055c3c8e21b28 (patch) | |
tree | ea57e70fc01a9d692a9175906c6a12780569c6d6 | |
parent | 06a1194300fd65723a60bf8cc6702d60659089fa (diff) | |
download | micropython-1ba516f4758508f2657d1c68d31055c3c8e21b28.tar.gz micropython-1ba516f4758508f2657d1c68d31055c3c8e21b28.zip |
stmhal/extint: Force 0 to 1 transition on swint().
If a user tries to call `swint()` while interrupt is disabled the flag in
SWIER is set but the interrupt is not triggered and therefore the SWIER bit
is not cleared. When the interrupt is again enabled the next call to
`swint()` won't trigger the IRQ because a 0 to 1 transition will not occur.
-rw-r--r-- | stmhal/extint.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/stmhal/extint.c b/stmhal/extint.c index c0471719b8..02b06fde5e 100644 --- a/stmhal/extint.c +++ b/stmhal/extint.c @@ -251,10 +251,13 @@ void extint_swint(uint line) { if (line >= EXTI_NUM_VECTORS) { return; } + // we need 0 to 1 transition to trigger the interrupt #if defined(MCU_SERIES_L4) - EXTI->SWIER1 = (1 << line); + EXTI->SWIER1 &= ~(1 << line); + EXTI->SWIER1 |= (1 << line); #else - EXTI->SWIER = (1 << line); + EXTI->SWIER &= ~(1 << line); + EXTI->SWIER |= (1 << line); #endif } |