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.
pull/2407/head
Krzysztof Blazewicz 2016-09-06 17:22:43 +02:00 zatwierdzone przez Damien George
rodzic 06a1194300
commit 1ba516f475
1 zmienionych plików z 5 dodań i 2 usunięć

Wyświetl plik

@ -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
}