Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

RE: [lpc2000] interrupts + Keil + LPC2294

2006-03-21 by Grodo Grodo

Thank you, I'll try it and say if it works by me.

Andrew Berney <amb@...> wrote:          Hi,
  
  we could do with the function UART0_init from your code, however I suspect
  your problem is that you're not reading U0IIR to clear the UART IRQ. You
  also have a huge delay inside your IRQ which kind of defeats the point of
  using it. Have a look at the description of U0IIR register.
  
  Here is a working example from a 2129 which should work equally well on your
  chip with minor modification:
  
  void main(void)
  {
    // init the serial ports
    init_serial();
  
    // main loop
    while(1)
    {
      for(;;);
    }
  }
  
  void init_serial (void)          // Initialize Serial Interface
    {
  
    //UART0
    VPBDIV  = 0x00000001;          //Set PClk to 60Mhz
    PINSEL0 = 0x00000005;     //Enable TxD0, RxD0
  
    U0LCR   = 0x00000083;     //8 bits, no Parity, 1 Stop bit
    U0DLL   = 0x00000084;     // 9600 Baud Rate @ 60MHz VPB Clock
    U0DLM   = 0x00000001;
    U0LCR   = 0x00000003;     // DLAB = 0
    U0IER   = 0x00000001;     //enable rx data available interrupt
  
    VICVectCntl1 = 0x00000026;
    VICVectAddr1 = (unsigned)uart0_irq;
    VICIntEnable |= 0x00000040;
  
    U0FCR   = 0x00000001;             //Enable FIFO & trigger level to 1  bytes
  }
  
  static unsigned int U0IIR_copy;
  
  void uart0_irq(void) __irq
  {
    //check for a character from the UART0 RX FIFO
    if((U0LSR & 0x01) == 0x01)  //if there is a character
    {
      toggle_LED(1);            //do this to suit your board
    }
  
    //exit ISR
    U0IIR_copy = U0IIR;
    VICVectAddr = 0x00000000;       //dummy write to re-enable interrupt for next
  time
  }
  
  
  
  -----Original Message-----
  From: lpc2000@yahoogroups.com [mailto:lpc2000@yahoogroups.com]On Behalf
  Of grodo2k
  Sent: 21 March 2006 11:38
  To: lpc2000@yahoogroups.com
  Subject: [lpc2000] interrupts + Keil + LPC2294
  
  
  Hello
  could someone be so kind and say, what is wrong in following code? Or
  maybe it is ok, but it doesn't work... I want trigger an interrupt
  using UART0. I am using Keil. (UART0 is ok, it sends a string from tab).
  
  thanks in advance
  
  int i,j;
  char tab[] = "UART0 is working properly";
  
  void UART0INT() __irq
  {
        IO0CLR |= 0x20000;  //clr P0.17 (it's a LED)
        for(i=0;i<5;i++)
        {
              for(j=0;j<50000;j++){}
        }
        send_char_u0('A');
        VICVectAddr = 0x00000000; //dummy write
  }
  
  int main(void)
  {
        PLL_ON();
        LED_init();
        VPBDIV = 0x1;
        UART0_init();
        IO0SET |= 0x20000;  //set P0.17
        send_string_u0(tab);
        VICIntSelect = 0x00000000;
        VICVectAddr0 = (unsigned) UART0INT;
        VICVectCntl0  = 0x26;      //UART0
        VICIntEnable = 0x40;            //bit 6 = UART0
        while(1)
        {
  
        }
  
        return 0;
  
  }
  
  
  
  
  
  
  Yahoo! Groups Links
  
  
  
  
  
  
                    

          SPONSORED LINKS    
                                                        Microcontrollers                                          Microprocessor                                          Intel microprocessors                                                                          Pic microcontrollers                                                             
        
---------------------------------
    YAHOO! GROUPS LINKS  
  
      
    Visit your group "lpc2000" on the web.
     
    To unsubscribe from this group, send an email to:
 lpc2000-unsubscribe@yahoogroups.com
     
    Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.  
  
      
---------------------------------
  
  
          



		
---------------------------------
Yahoo! Travel
 Find  great deals to the top 10 hottest destinations!

[Non-text portions of this message have been removed]

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.