Dear all,
I am Using LPC2103, I had Configured UART0 to IRQ When working, VIC Register Status is
vicIntSelect = 0; vicIntEnable = 0x000040; vicIRQStatus = 00000040; vicVectCtrl0 = 0x000026; vicVectAddr0 = 0x000380; vicVectAddr = 0x000380;
But Didn't happen to uart0_rx_isr Routine
Could some body help me regarding this.
/* Exception Vector Table */ _vectors: ldr PC, Reset_Addr ldr PC, Undef_Addr ldr PC, SWI_Addr ldr PC, PAbt_Addr ldr PC, DAbt_Addr nop ldr PC, [PC,#-0xFF0] ldr PC, FIQ_Addr /* My Working Code */ #include "LPC210x.h" void uart0_rx_isr(void); int main() { PINSEL0 &= (~(0xF) & 0xFFFFFFFF); PINSEL0 |= 0x5; UART0_FCR = 0x7; UART0_LCR = 0x83; UART0_DLL = 0x41; UART0_DLM = 0x0; UART0_LCR = 0x3; /* Setting Interrupt */ UART0_IER = 0x3; VICIntEnClr = 0xFFFFFFF0; VICIntSelect = 0x00000000; VICVectCntl0 = ((0x1<<5) | 6); VICVectAddr0 = (unsigned long)uart0_rx_isr; VICIntEnable = (1<<6); } void uart0_rx_isr(void) { volatile unsigned long uart0IIR = 0; uart0IIR = UART0_IIR; while (!(UART0_LSR & 1<<5)); UART0_THR = 'T'; VICVectAddr = 0; }
I figure out the problem.
When I change processor Interrupt to Enable, it working.
I change like Below(crt.s)
first, Stack size change (crt.s)
.set IRQ_STACK_SIZE, 0X00000004 --> .set IRQ_STACK_SIZE, 0X00000080
second, IRQ Enable (Reset Handler in crt.s)
msr CPSR_c, #MODE_SYS|I_BIT|F_BIT /* User Mode */ --> msr CPSR_c, #MODE_USR /* User Mode */