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
Since you are not acking the interrupt, I would imagine that the processor is calling the handler over and over.
You need to read the received character, otherwise the status flag won't get cleared and the interrupt occurs over and over.