Desbordamiento de bits y errores de trama al recibir de PIC18F4680 EUSART

0

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?

    
pregunta AndrejaKo

1 respuesta

1

Sé que esto es viejo pero podría ser útil en caso de que alguien se tropiece con él como lo hice yo.

Estaba teniendo problemas con los errores de saturación en mi PIC18F452 que se comunican con un beaglebone black a través de USART. Con un programa bastante ocupado tanto en el beagle como en el PIC, hubo una gran cantidad de datos enviados entre los dos constantemente. Después de cierto tiempo después de usar el instrumento, el PIC dejó de recibir todos los mensajes.

Después de estar atrapado y desconcertado por esto durante más de 3 semanas, encontré esto:

enlace

que describió el código PIC para manejar y borrar los errores de saturación:

if(OERR)
{
    do
    {
        temp = RCREG;
        temp = RCREG;
        temp = RCREG;
        CREN = 0;
        CREN = 1;

    } while(OERR);
}

if(FERR)
{
    temp = RCREG;
    TXEN = 0;
    TXEN = 1;
}

La ejecución de este fragmento de vez en cuando en el programa PIC me permitió recuperarme de errores ocasionales sin reiniciar el PIC.

Espero que ayude a alguien con problemas similares

    
respondido por el Elliot Francis

Lea otras preguntas en las etiquetas