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

LPC2103 - UART0 Interrupt Problem

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 */