From: Keith Packard Date: Sun, 13 Nov 2022 06:48:28 +0000 (-0800) Subject: samd21: Save interrupt pin status before enabling interrupts X-Git-Tag: 1.9.13~1^2~26^2~7 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=1bf40aa4c9ea9844046b7b84342225274622d7c2 samd21: Save interrupt pin status before enabling interrupts Make sure we capture the correct external interrupt pin state before anything changes. Signed-off-by: Keith Packard --- diff --git a/src/samd21/ao_exti_samd21.c b/src/samd21/ao_exti_samd21.c index d8109483..688f6433 100644 --- a/src/samd21/ao_exti_samd21.c +++ b/src/samd21/ao_exti_samd21.c @@ -136,11 +136,13 @@ ao_exti_enable(struct samd21_port *port, uint8_t pin) uint8_t id = pin_id(port,pin); ao_arch_block_interrupts(); - samd21_eic.intenset = 1 << id; /* configure gpio to interrupt routing */ - ao_samd21_exti[id].pmux = samd21_port_pmux_get(port, pin); - ao_samd21_exti[id].pincfg = samd21_port_pincfg_get(port, pin); + if ((samd21_eic.intenset & (1 << id)) == 0) { + ao_samd21_exti[id].pmux = samd21_port_pmux_get(port, pin); + ao_samd21_exti[id].pincfg = samd21_port_pincfg_get(port, pin); + } samd21_port_pmux_set(port, pin, SAMD21_PORT_PMUX_FUNC_A); + samd21_eic.intenset = 1 << id; ao_arch_release_interrupts(); }