First hello to everyone.
Sorry for my English.
I tell you.
I'm starting to use microcontrollers ARM7 specifically the LPC2134 and I am performing a bidirectional serial communication.
The program consists blink an LED to verify that the system is working, and UART communication with a PC and a serial adapter to convert levels.
My purpose is to use a vectored IRQ interrupt, so that when some data arrives the program stops and observe the interrupt and save the received data in an array for later processing.
In addition I make a bluque sending the ASCII table to the PC.
My problem is that encuanto recivo a data interruption jumps and I can not in any way out of it by staying in an infinite loop in the interruption.
The program I'm doing with the KEIL 4.
Main Program
int main()
{
Init_pll();
VICIntEnClr=0xFFFF;//Borro cualquier posible interrupcion
Init_gpio();
init_uart();
i=0;
while (1)
{
for(i=0;i<256;i++)
{
LED_blink ();//Parpadeo del LED
ENVIA_BYTETX0(i);
}
}
}
UART CONFIGURATION
void init_uart(void)
{
U0LCR=0x03;
U0FDR=0x10;//Multivall a 1
U0LCR|=BIT7;//Activo Bit DLAB para poder configurar velocidad
U0DLL=divisor & 0xFF;
U0DLM = (divisor >>
& 0xFF;
U0LCR &=~BIT7;//Borro Bit DLAB para poder configurar velocidad
U0FCR=1;//Activo FIFO
U0IER = 0;//Desabilito interrupciones UART 1
VICIntSelect &= ~(1<<UART_0);
VICDefVectAddr |= (1<<UART_0);
VICVectCntl10 = 0x20 | UART_0; /* Prioridad 0 Vectorizada use it for UART 0 Interrupt*/
VICVectAddr10 = (unsigned long)RX_UART_CERO ; /* set interrupt vector in 0 */
VICIntEnable |= BIT6; /* Enable UART0 Interrupt */
U0IER = 1;//Habilito interrupcion de recepcion de datos validos
}
INTERRUPT
_irq void RX_UART_CERO (void)
{
if(U0IIR&DR) // Infinite loop
{
while (!(U0LSR&DR));
if(PUNT_W0<512)
{
BUFFER_UART0[PUNT_W0]=U0RBR;
PUNT_W0++;
}
else;
}
else;
VICVectAddr &= 0x0000;//Clear Flag Interrupts but not exit and return to Infinite loop
}
Everything works fine until you receive date UART in the LPC. Then jumps to the interruption and there does not come out.
No longer what to do, I take several days reading the datasheet and reviewing the program, but can not find anything wrong.
I request help from someone who can guide me to solve the problem and continue learning.
Thanks you very much.