summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
8c0a7df)
Make sure we capture the correct external interrupt pin state before
anything changes.
Signed-off-by: Keith Packard <keithp@keithp.com>
uint8_t id = pin_id(port,pin);
ao_arch_block_interrupts();
uint8_t id = pin_id(port,pin);
ao_arch_block_interrupts();
- samd21_eic.intenset = 1 << id;
/* configure gpio to interrupt routing */
/* 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_port_pmux_set(port, pin, SAMD21_PORT_PMUX_FUNC_A);
+ samd21_eic.intenset = 1 << id;
ao_arch_release_interrupts();
}
ao_arch_release_interrupts();
}