Hola pshykon,
ya he empezado a jugar con la placa de evaluacion, y programar el arm7, esta resultando mas sencillo de lo que pensaba. Ya he tocado los puertos I/O normales y fast, las interrupciones externas (con su isr), y el puerto serie 0 y 1 (autobad detection, enviar y recibir bytes con o sin FIFO, por polling o con interrupcion), y el timer 0,1 (con una isr que se ejecuta cada X milisegundos).
Tb estoy empezando a tener ya dudas y algunos problemas. Te cuento:
1) Cuando activo la interrupcion de la uart0 para recepcion, solo me entra una vez, y ademas me desactiva el resto de interrupciones (no entra en ninguna ya). No acabo de entender que me falta.
esta es mi interrupcion:
void Uart0_interrupt(void) __irq
{
// unsigned char a;
// a= U0LSR;
if((U0IIR & 0x0000007)== 0x00000004)
{
U0THR = U0RBR; // un eco de prueba
}
}
esta es mi inicializacion:
void Ini_uart0(void)
{
PINSEL0 |= 0x00000005;
U0LCR = 0x83; // 8 bit, 1 stop bit, no paridad, activamos acceso a DLL
U0DLL = 8;
U0LCR = 0x03; // desactivamos acceso a DLL
U0IER = 0x01; // activamos interrupcion de recepcion
U0FCR = 0x41; // Habilitamos FIFO, y trigger a 4 bytes
VICVectAddr3 = (unsigned) Uart0_interrupt;
VICVectCntl3 = 0x00000026; // Habilitamos este vector de interrupcion y asociamos a uart0
VICIntEnable |= 0x00000040; // Habilitamos interrupcion uart0
}
Pues bien, cuando entra la primera vez, ya no no vuelve a entrar. El programa en el bucle principal sigue ejecutandose normal (vuelve bien de la interrupcion), pero algo hago que desactivo las interrupciones. He revisado en modo depuracion, y los valores de los registros que inicializo (como VICIntEnable, etc...) no han cambiado.
2) a veces me da la sensacion que el puerto serie se la va la pinza, y que sin regrabar, a veces no va o reseteas y va... pero esto lo digo asi en voz baja, porque posiblemente sea alguna metida de pata mia, algo que no acabo de entender bien.
De todos modos, sigo dandole vueltas, a ver si averiguo que ocurre.
Un saludo