This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

IRQ INTERRUPT DOES NOT GO TO ISR

HI,

I use GNU compiler.

I have written code that send the Character string to COM-1 when I make the external interrupt (EXTINT-2) pin low. Interrupt is active low edge sensitive.

Interrupt flag is set but processor does not go to interrupt service routine.

I have checked code many times it seem all interrupt setting are correct.

Does I need to make changes in Start-up code.

code is below

#include<lpc21xx.h>

#define RS 0x01000000;
#define RW 0x00800000;
#define EN 0x00400000;
#define BL 0x00200000;

#define reset 0x3;
#define four_bit 0x2;
#define one_line 0x20;
#define two_line 0x28;
#define clear 0x01; //CLEAR DDRAM CONTENT
#define home 0x02;
#define inc_cursor 0x06;
#define dec_cursor 0x04;
#define inc_cursor 0x06;
#define shift_right 0x05;
#define shift_left 0x07;
#define dis_cur_off 0x08; //CLEAR DISPLAY WITHOUT CLEARING DDRAM CONENT
#define dis_off_cur_on 0x0A;
#define dis_on_cur_off 0x0C;
#define dis_on_cur_blink 0x0E;
#define shift_cur_left 0x10;
#define shift_cur_right 0x14;
#define shift_entire_left 0x18;
#define shift_entire_right 0x1C;
#define first_line 0x80;
#define second_line 0xC0;

void command_sent(void);
void data_sent(void);
void command_split_send(void);
void data_split_send(void);
void delay(void);
void delay_long(void);
void uart0_sent(void);

void EXTINTVectored_IRQ(void) __attribute__ ((interrupt("IRQ")));

int ldata,ldata1,x,i,j,k,D3,D2,D1,D0,R1,R2;

char UART0_DATA[]="TIME:";
char LCD_DATA[]="TIME:";

int main (void)
{ /*********************************** TIMER-0 SETUP FOR DELAY********************************/
VPBDIV = 0x02; //DIVIDED CCLOCK BY TWO
T0CTCR = 0X00; //SET COUNTER AS TIMER
T0MCR = 0X0006; //INTERRUPT AND REST ON MATCH
T0IR = 0X00; //CLEAR ALL INTERRUPT
T0PR = 0X06; //COUNTER CLOCK DIVIDED BY 6=1MHz

/************************************ EXTERNAL-2 INTERRUPT SETUP **************************/

PINSEL0 = 0xC0000000; //SET GPIO FOR EXT-2
EXTINT = 0X00; //CLEAR EXT-2 FLAG
EXTMODE = 0X04; //SELECT EDGE SENSETIVE
EXTPOLAR = 0X00; //SELECT ACTIVE LOW EDGE SENSETIVE
VICIntSelect = 0x00000000; //SELECT EXINT-2 AS FIQ

VICVectCntl0 = 0x20; //select a priority slot for a given interrupt

VICVectAddr0 = (unsigned)EXTINTVectored_IRQ; //pass the address of the IRQ into the VIC slot

VICIntEnable = 0x00010000; //ENABLE EXINT-2 INTERRUPT

/******************************* LCD Setup *************************************************/

IO0DIR = 0X00003C00; //SET PORT-0 PIN AS OUTPUT FOR LCD DATA
IO1DIR = 0X01E00000; //SET PORT-1 PIN AS OUTPUT FOR LCD CONTROL SIGNAL
for(x=0;x<=20;x++)
{ delay_long();
} //WAIT 20ms FOR LCD INTIALIZE ITSELF

IO1CLR = EN; //PULL ENABLE LOW

ldata= reset
ldata = ldata <<10;
command_sent(); //SEND RESET COMMAND

for(x=0;x<=10;x++)
{ delay_long(); //WAIT 10ms FOR LCD RESET
}

ldata= reset
ldata = ldata<<10;
command_sent(); //SEND RESET COMMAND
delay_long(); //WAIT 1ms FOR LCD RESET

ldata= reset
ldata = ldata<<10;
command_sent(); //SEND RESET COMMAND
delay_long(); //WAIT 1ms FOR LCD RESET

ldata= four_bit;
ldata = ldata<<10;
command_sent(); //SET FOUR BIT MODE=0X2

ldata1= two_line;
command_split_send();

ldata1= dis_on_cur_off;
command_split_send();

ldata1= inc_cursor;
command_split_send();

ldata1= first_line;
command_split_send();

/****************************** UART-0Setup ***********************************************/
PINSEL0 = 0x5; // Enable RxD1 and TxD1
U0LCR = 0x83; // 8 bits, no Parity, 1 Stop bit
U0FCR = 0X7;
U0DLL = 0x27; //9600 Baud Rate @ 6MHz VPB Clock
U0DLM = 0X00;
U0LCR = 0x3; // DLAB = 0

/******************************* LCD Character Sent *****************************************/
while (LCD_DATA[j]!='\0')
{ ldata1 = LCD_DATA[j];
data_split_send();
j++;
} /****************************** UART-0 CharacterSent****************************************/
while (UART0_DATA[i]!='\0')
{ U0THR =UART0_DATA[i];
while((U0LSR & 0X40)==0X00);
i++;
} for(;;);
}

/**************************************** End Main *******************************************/

/********************************** INTERRUPT SUBROUTINE**************************************/
void EXTINTVectored_IRQ(void)
{ while (UART0_DATA[k]!='\0')
{ U0THR =UART0_DATA[k];
while((U0LSR & 0X40)==0X00);
k++;
} EXTINT = 0X00; //CLEAR EXT-2 FLAG
VICVectAddr = 0x00000000; }

/**********************************************************************************************/

void delay(void)
{ unsigned long y;
for(y=0;y<1000;y++);
}

void delay_long(void)
{ T0MR0 = 1000; //MATCH-0=1000
T0TCR = 0X01; //TURN ON TIMER-0
while((T0TCR & 0X01)==0X01); //WAIT FOR TIMER MATCH AND INTERRUPT FLAG SET
T0TCR = 0X00; //TURN OFF AND RESET TIMER-0
} void command_sent(void)
{ IO0PIN = ldata;
IO1CLR = RS;
IO1CLR = RW;
IO1SET = EN;
delay();
IO1CLR = EN;
delay();
} void data_sent(void)
{ IO0PIN = ldata;
IO1SET = RS;
IO1CLR = RW;
IO1SET = EN;
delay();
IO1CLR = EN;
delay();
}

void command_split_send(void)
{ ldata = ((ldata1 & 0XF0)<<6);
command_sent();
ldata = ((ldata1 & 0X0F)<<10);
command_sent();
}

void data_split_send(void)
{ ldata = ((ldata1 & 0XF0)<<6);
data_sent();
ldata = ((ldata1 & 0X0F)<<10);
data_sent();
}

void uart0_sent(void)
{ U0THR = ldata1;
while((U0LSR & 0X40)==0X00);
}

0