lpcware

LPC 3250 UART Tx IRQ (Interrupt Related)

Discussion created by lpcware Employee on Jun 15, 2016
Content originally posted in LPCWare by sreejugr on Wed Jul 29 02:41:32 MST 2015
Hello,

I'm using LPC 3250 Developer's Kit. I want to study the UART 5 with the TX interrupt enabled. Here is the piece of c code compiled using RVDS and debugged using DSTREAM.

The program is transmitting the characters to hyper terminal but I was expecting the character 'I' to be transmitted when it enters the IRQ ISR. But it didn't.

Need your assistance to generate interrupt in IRQ mode for UART 5 Transmission.

Thank You
S GR


#include "lpc32xx_uart.h"
#include "lpc32xx_timer.h"
#include "lpc32xx_chip.h"



/****************************************************************************************
*Function    :send_data
*Inputs      :string
*Output      :none
*Purpose         :To print the string on serial port
****************************************************************************************/
void send_data(unsigned char ch)
{
         UartReg.dll_fifo=ch;
         while(!(UartReg.lsr  & 0x20));
}

/****************************************************************************************
*Function    :send_data
*Inputs      :string
*Output      :none
*Purpose         :To print the string on serial port
****************************************************************************************/
void send_string(volatile unsigned char *str)
{
        while(*str != '\0')
        {
                send_data(*str);
                str++;
        }
}

/****************************************************************************************
*Function    :receive_data
*Inputs      :string
*Output      :none
*Purpose         :To print the string on serial port
****************************************************************************************/

unsigned char receive_data(void)
  {
        unsigned char ch;
        while(!(UartReg.lsr & 0x01));
         ch=UartReg.dll_fifo;
         return(ch);
   }



/****************************************************************************************
*Function    :uart5_MICInit
*Inputs      :
*Output      :
*Purpose         :
****************************************************************************************/

void uart5_MICInit(void)
{



        UartReg.dlm_ier = UART_IER_THRE; // Enable UART Tx Interrupt

        MIC_APR |=  (1<<9);     // Activation Polarity (Active High for UART 5)
        MIC_ATR &= ~(1<<9);     // Activation Type (Level 0)
        MIC_ITR &= ~(1<<9);   // Interrupt Type (IRQ = 0)
        MIC_ER  |=  (1<<9);     // Enable register for UART 5

}



int main(void)
{
        uart5_MICInit();
        send_string((unsigned char *)"UART5 LPC3250 \n\r");

        while(1)
        {
                ch = receive_data();
                send_data(ch);
        }
        return 1;
}

__irq void IRQ_Handler(void)
{
    send_data('I'); // for uart5
    return;
}

Outcomes