Uart receive interrupt

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Uart receive interrupt

803 Views
PEGE
Contributor I

I am trying to start a UART interupt if something is in the receive puffer. After the startup the Processor start his work. If i send something about the uart it jumps into a loop in the exceptions.h and the controller becomes very slow. Please could someone tell if their is any mistake in my code ?.

 

static unsigned char *fnSetIntHandler(int iVectNumber, unsigned char *new_handler){    extern unsigned long __VECTOR_RAM[];    unsigned char *old_handler;        old_handler = (unsigned char *)__VECTOR_RAM[iVectNumber];    __VECTOR_RAM[iVectNumber] = (unsigned long)new_handler;    return old_handler;     }/*            enable UART= interrupt      */void init_interrupt_controller(void) {  MCF_INTC0_ICR13 |= 0x24;        /* 111 111 => IL + IP */    MCF_INTC0_IMRL &= ~(MCF_INTC_IMRL_INT_MASK13 + MCF_INTC_IMRL_MASKALL);       /*(Interrupt level + Interrupt priority)*/ // fnSetIntHandler(UART0_VECTOR, (unsigned char *)_SCI0_Interrupt); // enter the handler routine   // MCF5XXX_SR |= (MCF5XXX_SR_IPL_5);        MCF_UART0_UIMR |= ( MCF_UART_UIMR_RXRDY_FU);       //MCF_UART_UIMR_TXRDY       // | MCF_UART_UIMR_RXRDY_FU          //| MCF_UART_UIMR_DB          //| MCF_UART_UIMR_COS);    }/*         enable interrupts in core's status register  */void enable_interrupts (void)  {  asm {          move.l   #0x00002000,d0          move.w   d0,SR      }    // Unmask appropriate bits in the core’s status register (SR) to enable interrupts  // refer to UM Interrupt Sources ch.15.3.6.1  } __declspec(interrupt:0) void handler_uart0_int (void){ LED_ON();     }

void main (void)
{
fnSetIntHandler(119,(unsigned char*)(*handler_uart0_int));
    init_interrupt_controller(); //Mask UART Interrupts
    enable_interrupts(); //enable interrupt in core's status register
}

 Regards

Labels (1)
0 Kudos
2 Replies

367 Views
JimDon
Senior Contributor III

Since you are not acking the interrupt, I would imagine that the processor is calling the handler over and over.

0 Kudos

367 Views
davezawislak
Contributor II

You need to read the received character, otherwise the status flag won't get cleared and the interrupt occurs over and over.

0 Kudos