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.
esp8266-idle-ticks
Krzysztof Blazewicz 2016-09-06 17:22:43 +02:00 committed by Damien George
parent 06a1194300
commit 1ba516f475
1 changed files with 5 additions and 2 deletions

View File

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