Hi there, I have 2 IRQ related ISR's in the program shown below. ISR's 1 and 2 do the task of making an LED (connected to P2.0 and P2.7) on and off. Iam seeing that when ISR1 is in execution(which is invoked by pressing a switch connected to P2.10 meant as external interrupt 0) and if ISR2 is invoked(which is invoked by pressing a switch connected to P2.11 meant as external interrupt 1) during that time, after completion of ISR1, the control branches to ISR2. Could anyone please suggest a method to prevent this.
#include <LPC23xx.H> void wait(void){ unsigned int i,j; for(i=0;i<=100;i++) for(j=0;j<=60000;j++); } /* External ISR 1 */ __irq void eint0_handler (void) { FIO2PIN = 0x00000001; wait(); FIO2PIN = 0x00000000; EXTINT = 0x00000001; VICVectAddr = 0; } /* External ISR 2 */ __irq void eint1_handler (void) { FIO2PIN = 0x00000080; wait(); FIO2PIN = 0x00000000; EXTINT = 0x00000002; VICVectAddr = 0; } /* Initialize External Interrupts EINT 0/1 */ void init_eint (void) { EXTMODE = 0x00000003; // Edge sensitive mode EXTPOLAR = 0x00000000; // Active low, Falling edge VICIntSelect = 0x00000000; VICVectAddr14 = (unsigned long) eint0_handler; VICVectAddr15 = (unsigned long) eint1_handler; VICVectPriority14 = 0; VICVectPriority15 = 1; VICIntEnable = 0x0000C000; } int main (void) { PINSEL4 = 0x00500000; FIO2DIR = 0x000000FF; FIO2PIN = 0x00000000; init_eint(); // Enable EINT0/1 while (1){ ; } }