![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Working code for external interrupt using EINT3 and two external interrupt GPIOs. Generating two signals on pins p29 & p30, and capturing that signal on pins p5(P0.9) & p6(P0.8) each change asociated with one of the four embedded LEDs.
main.cpp
- Committer:
- pistolero992000
- Date:
- 2016-02-09
- Revision:
- 0:a3cf97864ad5
File content as of revision 0:a3cf97864ad5:
/* ****************************************************************************************************** Name : Input Capture Author : Francisco Pizarro Version : 1.0 Copyright : Free Description : Input capture or External interrupt of two pins based on: http://anhnvnguyen.blogspot.cl/2010/04/lpc17xx-gpio-basic_05.html ****************************************************************************************************** */ #include "mbed.h" #include "LPC17xx.h" #define GPIO_INT8 1 << 8// GPIO interrupt->p0.9->PIN "p6" #define GPIO_INT9 1 << 9// GPIO interrupt->p0.9->PIN "p5" #define LED1 1 << 18// LED1->p1.18 #define LED2 1 << 20// LED2->p1.20 #define LED3 1 << 21// LED3->p1.21 #define LED4 1 << 23// LED4->p1.23 DigitalOut Signal1(p30); DigitalOut Signal2(p29); extern "C" { void EINT3_IRQHandler(void) { if (LPC_GPIOINT->IO0IntStatR & GPIO_INT9) { //Evaluates if p5 is interrupted LPC_GPIOINT->IO0IntClr=GPIO_INT9; // Clears interrupted pin p5 flag if (LPC_GPIO1->FIOPIN & LED1) { // Toggles LED1 between on & off LPC_GPIO1->FIOCLR |= LED1; } else { LPC_GPIO1->FIOSET |= LED1; } } if (LPC_GPIOINT->IO0IntStatR & GPIO_INT8) {//Evaluates if p6 is interrupted LPC_GPIOINT->IO0IntClr=GPIO_INT8; // Clears interrupted pin p5 flag if (LPC_GPIO1->FIOPIN & LED3) { // Toggles LED3 between on & off LPC_GPIO1->FIOCLR |= LED3; } else { LPC_GPIO1->FIOSET |= LED3; } } } } int main(void) { LPC_GPIO0->FIODIR &= ~GPIO_INT8 | ~GPIO_INT9; //set both p5 (p0.9) & p6 (p0.8) as inputs LPC_GPIO1->FIODIR |= LED1 | LED2 | LED3 | LED4; // set LED pins as outputs (p0.18+p0.20+p0.21+p0.23) LPC_GPIOINT->IO0IntEnR |=GPIO_INT8; // Enable external interrupt on p6 on rising edge trigger LPC_GPIOINT->IO0IntEnR |=GPIO_INT9; // Enable external interrupt on p5 on rising edge trigger NVIC_EnableIRQ(EINT3_IRQn); // Enable external NVIC EINT3 while(1) { // simple square signal generation to test the interrupts on pins p5 & p6 Signal1=1; LPC_GPIO1->FIOSET |= LED2; Signal2=1; LPC_GPIO1->FIOSET |= LED4; wait_ms(100); Signal2=0; LPC_GPIO1->FIOCLR |= LED4; wait_ms(100); Signal2=1; LPC_GPIO1->FIOSET |= LED4; wait_ms(100); Signal2=0; LPC_GPIO1->FIOCLR |= LED4; wait_ms(100); Signal1=0; LPC_GPIO1->FIOCLR |= LED2; Signal2=1; LPC_GPIO1->FIOSET |= LED4; wait_ms(100); Signal2=0; LPC_GPIO1->FIOCLR |= LED4; wait_ms(100); Signal2=1; LPC_GPIO1->FIOSET |= LED4; wait_ms(100); Signal2=0; LPC_GPIO1->FIOCLR |= LED4; wait_ms(100); } }