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

LPC3250 IRQ_HANDLER HELP

Hi Please Help me out for interrupts on LPC3250. How to enable interrupt handler.my program like below

TIMCLK_CTRL1|=0x08;      // Enable timer clock
T1CTCR          = 0x00;         //use as a timer
T1TCR           =0x01;          // enable timer
T1MCR           =0x00000018;    // match reg 1
T1MR1           =0x00000000;    // reset and Interrupt

And in LPC32x0.s the interrupt handler enabled like this

                                ;PRESERVE8 {FALSE}
                                IMPORT  IRQ_Handler

Reset_Addr      DCD     Reset_Handler
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0               ; Reserved Address
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler

Undef_Handler   B       Undef_Handler
SWI_Handler     B       SWI_Handler
PAbt_Handler    B       PAbt_Handler
DAbt_Handler    B       DAbt_Handler
;IRQ_Handler     B       IRQ_Handler
FIQ_Handler     B       FIQ_Handler

My interrupt routine as below

void IRQ_Handler(void)__irq
{
send_data('D'); // for uart5
P2_OUTP_CLR|=0x00001820; // checking for led glow

        if((MIC_SR&0x00020000)==0x00020000)
        {
        send_data('C');
          T1IR          |=0x01; // T1 Interrupt

          //timer1();

        }
        return;
}

program does not entering into IRQ_Handler
Please Help me out.
Thanks in advance.

Parents
  • Project is very big and confidential also. But i need support. i'm sending the program which i'm testing.
    C File

    
    #include"LPC325x.h"
    
    
    //void Init_INTERRUPT(void);
    void uart5_init(void);
    void send_data(unsigned char ch);
    unsigned char  receive_data (void);
    //void timer1Handler(void) __irq;
    void Irq_Other (void);
    void Irq_Timer1(void);
    
    main()
    {
    
            P2_MUX_SET|=0x00000008;
            P2_DIR_SET|=0x00001820;
            P_MUX_SET |=0x8000;
            LCD_CTRL=0x00000000;
    
    
            uart5_init();
            send_data('H');
            TIMCLK_CTRL1|=0x08;             // Enable timer clock
            T1CTCR          = 0x00;                 //use as a timer
            T1TCR           =0x01;                  // enable timer
            T1MCR           =0x00000018;    // enable interrupt
            T1MR1           =0x0001387;             // reset and gives interrupt when match occurs
    
            T1TC            =0x00000000;
    
            T1PC            =0x00000000;
            T1PR            =0x00000004;     //set timer frequency to 1h
    
            T1EMR           =0x00C0;                // When match occurs Toggle
    
    
            MIC_APR         &=~0x00020000;
            MIC_ATR         &=~0x00020000;      // Timer 1 Edge interrupt
            MIC_ITR         &=~0x00020000;      // IRQ interrupt
            MIC_ER          |= 0x00020000;
    
    }
    
    
    
    void  IRQ_Handler(void) __irq
            {
             if ((MIC_SR&0x00020000)!=0)
                {
    
               Irq_Timer1();
    
                     T1IR = 0x02;  // Clear/Acknowledge the interrupt request
                    }
             else
                    {
                     Irq_Other();
                    }
            }
    
    
    
    void Irq_Timer1(void)
    {
    unsigned int i;
    
            while(1)
            {
                    P2_OUTP_SET|=0x00001820;           // LED's Toggle
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                    P2_OUTP_CLR|=0x00001820;
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
            }
    
    
    }
    
    void Irq_Other (void) // Sending u to hyper terminal and Turn off my LED's
    {
     send_data('u');
     P2_OUTP_CLR|=0x00001820;
    }
    
    /****************************************************************************************
    *Function    :send_data
    *Inputs      :string
    *Output      :none
    *Purpose         :To print the string on serial port
    ****************************************************************************************/
    void send_data(unsigned char ch)
    {
     U5THR=ch;
     while(!(U5LSR & 0x20));
    }
    
    /****************************************************************************************
    *Function    :receive_data
    *Inputs      :string
    *Output      :none
    *Purpose         :To print the string on serial port
    ****************************************************************************************/
    
     unsigned char  receive_data (void)
      {
               unsigned char ch;
            while(!(U5LSR&0x01));
             ch=U5RBR;
             return(ch);
       }
    
    /****************************************************************************************
    *Function    :uart5_init
    *Inputs      :
    *Output      :
    *Purpose         :
    ****************************************************************************************/
    void uart5_init(void)
     {
            //UART_CLKMODE=0x00084010;      // uart 4 selected
            UART_CLKMODE=0x00104100;        // uart 5 selected
            U5LCR=0x83;                                     //DLAB enable,odd parity,disble break transmission,1 stop bit,8 bit character length
            U5CLK =0x00000101;                      //x=1,y=1..115200
            U5DLL=0x07;                             //115200 baud rate
            U5DLM=0x00;
            U5LCR=0x03;                                     //DLAB enable,odd parity,disble break transmission,1 stop bit,8 bit character length
     }
    

    .s File

    
    
    LDR PC,IRQ_Addr LDR PC,FIQ_Addr
    ;PRESERVE8 {FALSE} IMPORT IRQ_Handler
    Reset_Addr DCD Reset_Handler Undef_Addr DCD Undef_Handler SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler DCD 0 ; Reserved Address IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler
    Undef_Handler B Undef_Handler SWI_Handler B SWI_Handler PAbt_Handler B PAbt_Handler DAbt_Handler B DAbt_Handler ;IRQ_Handler B IRQ_Handler FIQ_Handler B FIQ_Handler
    ; Reset Handler
    EXPORT Reset_Handler Reset_Handler

    Please take a look and tell me the problum
    Thanks for helping

Reply
  • Project is very big and confidential also. But i need support. i'm sending the program which i'm testing.
    C File

    
    #include"LPC325x.h"
    
    
    //void Init_INTERRUPT(void);
    void uart5_init(void);
    void send_data(unsigned char ch);
    unsigned char  receive_data (void);
    //void timer1Handler(void) __irq;
    void Irq_Other (void);
    void Irq_Timer1(void);
    
    main()
    {
    
            P2_MUX_SET|=0x00000008;
            P2_DIR_SET|=0x00001820;
            P_MUX_SET |=0x8000;
            LCD_CTRL=0x00000000;
    
    
            uart5_init();
            send_data('H');
            TIMCLK_CTRL1|=0x08;             // Enable timer clock
            T1CTCR          = 0x00;                 //use as a timer
            T1TCR           =0x01;                  // enable timer
            T1MCR           =0x00000018;    // enable interrupt
            T1MR1           =0x0001387;             // reset and gives interrupt when match occurs
    
            T1TC            =0x00000000;
    
            T1PC            =0x00000000;
            T1PR            =0x00000004;     //set timer frequency to 1h
    
            T1EMR           =0x00C0;                // When match occurs Toggle
    
    
            MIC_APR         &=~0x00020000;
            MIC_ATR         &=~0x00020000;      // Timer 1 Edge interrupt
            MIC_ITR         &=~0x00020000;      // IRQ interrupt
            MIC_ER          |= 0x00020000;
    
    }
    
    
    
    void  IRQ_Handler(void) __irq
            {
             if ((MIC_SR&0x00020000)!=0)
                {
    
               Irq_Timer1();
    
                     T1IR = 0x02;  // Clear/Acknowledge the interrupt request
                    }
             else
                    {
                     Irq_Other();
                    }
            }
    
    
    
    void Irq_Timer1(void)
    {
    unsigned int i;
    
            while(1)
            {
                    P2_OUTP_SET|=0x00001820;           // LED's Toggle
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                    P2_OUTP_CLR|=0x00001820;
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
                                                                    for(i=0;i<60000;i++);
            }
    
    
    }
    
    void Irq_Other (void) // Sending u to hyper terminal and Turn off my LED's
    {
     send_data('u');
     P2_OUTP_CLR|=0x00001820;
    }
    
    /****************************************************************************************
    *Function    :send_data
    *Inputs      :string
    *Output      :none
    *Purpose         :To print the string on serial port
    ****************************************************************************************/
    void send_data(unsigned char ch)
    {
     U5THR=ch;
     while(!(U5LSR & 0x20));
    }
    
    /****************************************************************************************
    *Function    :receive_data
    *Inputs      :string
    *Output      :none
    *Purpose         :To print the string on serial port
    ****************************************************************************************/
    
     unsigned char  receive_data (void)
      {
               unsigned char ch;
            while(!(U5LSR&0x01));
             ch=U5RBR;
             return(ch);
       }
    
    /****************************************************************************************
    *Function    :uart5_init
    *Inputs      :
    *Output      :
    *Purpose         :
    ****************************************************************************************/
    void uart5_init(void)
     {
            //UART_CLKMODE=0x00084010;      // uart 4 selected
            UART_CLKMODE=0x00104100;        // uart 5 selected
            U5LCR=0x83;                                     //DLAB enable,odd parity,disble break transmission,1 stop bit,8 bit character length
            U5CLK =0x00000101;                      //x=1,y=1..115200
            U5DLL=0x07;                             //115200 baud rate
            U5DLM=0x00;
            U5LCR=0x03;                                     //DLAB enable,odd parity,disble break transmission,1 stop bit,8 bit character length
     }
    

    .s File

    
    
    LDR PC,IRQ_Addr LDR PC,FIQ_Addr
    ;PRESERVE8 {FALSE} IMPORT IRQ_Handler
    Reset_Addr DCD Reset_Handler Undef_Addr DCD Undef_Handler SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler DCD 0 ; Reserved Address IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler
    Undef_Handler B Undef_Handler SWI_Handler B SWI_Handler PAbt_Handler B PAbt_Handler DAbt_Handler B DAbt_Handler ;IRQ_Handler B IRQ_Handler FIQ_Handler B FIQ_Handler
    ; Reset Handler
    EXPORT Reset_Handler Reset_Handler

    Please take a look and tell me the problum
    Thanks for helping

Children