static void lpc17_setintedge(uint32_t intbase, unsigned int pin, unsigned int edges) { int regval; /* Set/clear the rising edge enable bit */ regval = getreg32(intbase + LPC17_GPIOINT_INTENR_OFFSET); if ((edges & 2) != 0) { regval |= GPIOINT(pin); } else { regval &= ~GPIOINT(pin); } putreg32(regval, intbase + LPC17_GPIOINT_INTENR_OFFSET); /* Set/clear the rising edge enable bit */ regval = getreg32(intbase + LPC17_GPIOINT_INTENF_OFFSET); if ((edges & 1) != 0) { regval |= GPIOINT(pin); } else { regval &= ~GPIOINT(pin); } putreg32(regval, intbase + LPC17_GPIOINT_INTENF_OFFSET); }
static void lpc17_setintedge(uint32_t intbase, unsigned int pin, unsigned int edges) { irqstate_t flags; int regval; /* These must be atomic */ flags = irqsave(); /* Set/clear the rising edge enable bit */ regval = getreg32(intbase + LPC17_GPIOINT_INTENR_OFFSET); if ((edges & 2) != 0) { regval |= GPIOINT(pin); } else { regval &= ~GPIOINT(pin); } putreg32(regval, intbase + LPC17_GPIOINT_INTENR_OFFSET); /* Set/clear the falling edge enable bit */ regval = getreg32(intbase + LPC17_GPIOINT_INTENF_OFFSET); if ((edges & 1) != 0) { regval |= GPIOINT(pin); } else { regval &= ~GPIOINT(pin); } putreg32(regval, intbase + LPC17_GPIOINT_INTENF_OFFSET); irqrestore(flags); }