#include "lpc11xx.h" int main(void) { LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 16);//Enable iocon clock LPC_IOCON->PIO0_1&= 0xFFFFFFF8;//PIO0_1 as standard GPIO LPC_GPIO0->DIR &= ~(1 << 1);//PIO0_1 as input LPC_GPIO0->IS &= ~(1 << 1);//PIO0_1 as edge sensitive LPC_GPIO0->IBE |= (1 << 1);//Both edges trigger an interrupt LPC_GPIO0->IE|= (1 << 1);//Not mask the interrupt of this pin anymore NVIC_EnableIRQ(EINT0_IRQn); while(1) { } return 0 ; } void EINT0_IRQHandler(void) { //Check which pin triggered an interrupt //Some code //Clear interrupt flag } |
#include "LPC11xx.h" volatile uint32_t counter=0; #define INT_PIN(1<<0)//select pin of GPIO1 void PIN_init(void) { //Set ext interrupt LPC_IOCON->R_PIO1_0 |= 0x01; //select GPIO LPC_GPIO1->DIR &=~INT_PIN;//input LPC_GPIO1->IS &=~INT_PIN;//0: edge sensitive LPC_GPIO1->IBE &=~INT_PIN;//0: trigger on IEV LPC_GPIO1->IEV &=~INT_PIN;//0: trigger low interrupt LPC_GPIO1->IE |= INT_PIN;//1: enable interrupt NVIC_EnableIRQ(EINT1_IRQn); } //PIO1 interrupt handler void PIOINT1_IRQHandler(void) // PIOINT1 { if(LPC_GPIO1->RIS & INT_PIN)//read raw interrupt status { counter ++; LPC_GPIO1->IC |= INT_PIN;__NOP();__NOP();//clear edge detection } } int main(void) { volatile static int i = 0; PIN_init(); while(1) { i++ ; } return 0 ; } |