static inline int lpc17_configinput(lpc17_pinset_t cfgset, unsigned int port, unsigned int pin) { uint32_t regval; uint32_t fiobase; uint32_t intbase; uint32_t pinmask = (1 << pin); /* Set up FIO registers */ fiobase = g_fiobase[port]; /* Set as input */ regval = getreg32(fiobase + LPC17_FIO_DIR_OFFSET); regval &= ~pinmask; putreg32(regval, fiobase + LPC17_FIO_DIR_OFFSET); /* Set up interrupt registers */ intbase = g_intbase[port]; if (intbase != 0) { /* Disable any rising edge interrupts */ regval = getreg32(intbase + LPC17_GPIOINT_INTENR_OFFSET); regval &= ~pinmask; putreg32(regval, intbase + LPC17_GPIOINT_INTENR_OFFSET); /* Disable any falling edge interrupts */ regval = getreg32(intbase + LPC17_GPIOINT_INTENF_OFFSET); regval &= ~pinmask; putreg32(regval, intbase + LPC17_GPIOINT_INTENF_OFFSET); /* Forget about any falling/rising edge interrupt enabled */ #ifdef CONFIG_GPIO_IRQ lpc17_setintedge(port, pin, 0); #endif } /* Set up PINSEL registers */ /* Configure as GPIO */ lpc17_pinsel(port, pin, PINCONN_PINSEL_GPIO); /* Set pull-up mode */ lpc17_pullup(cfgset, port, pin); /* Open drain only applies to outputs */ lpc17_clropendrain(port, pin); return OK; }
void lpc17_gpioirqdisable(int irq) { /* Map the IRQ number to a port number */ int port = lpc17_irq2port(irq); if (port >= 0) { /* The IRQ number does correspond to an interrupt port. Now get the base * address of the GPIOINT registers for the port. */ uint32_t intbase = g_intbase[port]; if (intbase != 0) { /* And get the pin number associated with the port */ unsigned int pin = lpc17_irq2pin(irq); lpc17_setintedge(intbase, pin, 0); } } }