Estoy tratando de recibir datos de PIC18F4680 de EUSART (usando el compilador C18) módulo y si escribo caracteres en mi emulador de terminal lo suficientemente lento, como uno o dos caracteres por segundo, la recepción funciona bien. Si trato de transmitir varios caracteres rápidamente, parece que la recepción se detiene y solo el restablecimiento del dispositivo resuelve el problema. La transmisión funciona bien.
El puerto serie se ejecuta a 115200 b / sy se configura utilizando el siguiente código (el reloj es de 40 MHz):
OpenUSART (USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE &
USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, f_usart);
//f_usart=86 for 40 MHz, 115200, or 1040 for 9600 (but it doesn't work at 9600)
baudUSART(BAUD_16_BIT_RATE&BAUD_WAKEUP_OFF&BAUD_AUTO_OFF);
Aquí está el código que estoy usando para leer desde el puerto:
if(DataRdyUSART())
{
temp=ReadUSART();
WriteUSART(temp);
}
Este código se encuentra en un bucle principal que también realiza otros procesos y envía datos a través del puerto serie. No espero que este código funcione demasiado bien (solo estoy probando para ver si el loopback funciona bien), ya que existe la posibilidad de que se pierda algunos caracteres (o al menos eso creo, ya que un nuevo personaje puede ser recibido antes, existe la posibilidad de que se procese el antiguo), pero no esperaba que no funcionara en absoluto.
Lo interesante es que si habilito la interrupción Rx y coloco el mismo código en el ISR, los datos se pueden recibir a una velocidad mucho mayor. Necesito pegar texto en la ventana de la terminal para causar el problema.
Entonces, ¿alguna idea de lo que podría estar pasando?
ACTUALIZAR
Parece que estoy obteniendo una mezcla de errores de encuadre y errores de desbordamiento de bits. No creo que pueda hacer el procesamiento de datos en este caso mucho más rápido para deshacerme de los errores de saturación, por lo que probablemente desacelere el puerto serie, pero no estoy seguro de qué hacer con los errores de encuadre. / p>
ACTUALIZACIÓN 2
A 9600 b / s, recibo muchos menos errores, pero aún si copio una pared de texto en el terminal, obtengo errores.
ACTUALIZACIÓN 3
Parece que el adaptador USB a serie de mi computadora portátil está transmitiendo a 9900 b / s. ¿Podría ser la causa del problema? En caso afirmativo, ¿hay algo que pueda hacer en el lado PIC para ayudar a resolver el problema que no sea establecer la velocidad de datos en 9900 b / s?