La hoja de datos PIC no está clara sobre el error de borrado de la trama

3

En el PIC16F1829, FERR refleja el estado de error de trama del byte superior en el FIFO de recepción en serie de dos bytes. Por lo tanto, asumiendo que no llegan nuevos bytes con errores de trama, dos lecturas de RCREG siempre deben borrar FERR.

Sin embargo, es posible que esté leyendo demasiado en esta Nota en la hoja de datos PIC16F1829 para el USART. La sección correspondiente es 26.1.2.4 en la página 287:

  

Si todos los caracteres recibidos en FIFO de recepción tienen errores de trama,   las lecturas repetidas del RCREG no borrarán el bit FERR.

Este parece implica que si los dos bytes en la FIFO tenían errores de trama, FERR quedaría atascado para siempre. Esto me parece un poco improbable, pero, en el mismo punto, la hoja de datos describe cómo forzar la eliminación de FERR al restablecer el EUSART.

¿Alguien tiene alguna aclaración? Iba a contar si los bytes consecutivos daban como resultado un error de marco, pero si no tengo que hacerlo, ¡sería bueno!

    
pregunta carveone

1 respuesta

4

Aquí hay una sutileza que la hoja de datos no aclara, pero sí una de las notas de la aplicación ( AN774 ).

El FIFO, en lo que va, es RCREG + un búfer de 1 byte. Plus RSR: el registro de turnos de recepción.

FERR nunca se actualiza a menos que RCREG lo esté. El acto de leer RCREG permite que cualquier byte de búfer en espera se mueva a RCREG; esto actualiza simultáneamente FERR (siempre) y RX9D (si corresponde). Por lo tanto, tenemos tres escenarios de tipo de error:

  1. Un byte incorrecto en RCREG y un byte correcto en el búfer: se establece FERR , se establece RCIF .
    Al leer RCREG, el byte del búfer bueno se mueve a RCREG junto con su estado de encuadre.
    Ahora FERR está desactivado, RCIF está configurado.

  2. Un byte incorrecto en RCREG y no hay bytes en el búfer: se establece FERR . Se establece RCIF .
    Al leer RCREG, RCIF se borra. No se establece ninguna acción en FERR . Permanece establecido hasta que llegue un buen byte a RCREG.

  3. Un byte incorrecto en RCREG y un byte incorrecto en el búfer: FERR está establecido. Se establece RCIF .
    Al leer RCREG, el byte del búfer se mueve a RCREG junto con su estado de encuadre incorrecto.
    Ahora se establece FERR , se establece RCIF . El tampón es claro. La situación es ahora como en (2) arriba.

Para la situación 3, las lecturas repetidas del RCREG no borrarán el bit FERR. Que es exactamente lo que dice la nota.

Editar: Note la implicación del escenario (1). Si lee RCREG en este caso, FERR no es válido para el byte que acaba de leer. Usted debe verificar FERR antes leyendo RCREG.

    
respondido por el carveone

Lea otras preguntas en las etiquetas