3 votos

La hoja de datos del PIC no aclara cómo eliminar el error de encuadre

En el PIC16F1829, FERR reflejan el estado de error de encuadre del byte superior en la FIFO de recepción serie de dos bytes. Por lo tanto, suponiendo que no llegan nuevos bytes con errores de encuadre, dos lecturas de RCREG deberían borrar siempre FERR.

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

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

Este parece para implicar que si ambos bytes en el FIFO tuvieran errores de encuadre, FERR se quedaría atascado para siempre. Esto me parece un poco improbable pero, al mismo tiempo, la hoja de datos describe cómo forzar el borrado de FERR reseteando el EUSART.

¿Alguien tiene alguna aclaración? Iba a contar si los bytes consecutivos daban lugar a un error de encuadre, pero si no tengo que hacerlo, ¡estaría bien!

4voto

Danny Staple Puntos 133

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

El FIFO, hasta donde llega, es RCREG + un buffer de 1 byte. Más RSR - el registro de desplazamiento de recepción.

FERR es nunca actualizado a menos que RCREG lo esté. El acto de leer RCREG permite que cualquier byte del buffer en espera se mueva a RCREG - esto actualiza simultáneamente FERR (siempre) y RX9D (si es apropiado). Así tenemos tres escenarios de tipo de error:

  1. Un byte malo en RCREG y un byte correcto en el buffer: FERR está ajustado, RCIF está fijado.
    La lectura de RCREG hace que el byte bueno del buffer pase a RCREG junto con su estado de encuadre.
    Ahora FERR está claro, RCIF está ajustado.

  2. Un byte erróneo en RCREG y ningún byte en el buffer: FERR está ajustado. RCIF está ajustado.
    La lectura de RCREG provoca RCIF despejar. No se establece ninguna acción en FERR . Permanece activado hasta que llega un byte bueno a RCREG.

  3. Un byte erróneo en RCREG y un byte erróneo en el buffer: FERR está fijado. RCIF está ajustado.
    La lectura de RCREG hace que el byte del búfer pase a RCREG junto con su estado de encuadre malo.
    Ahora FERR está ajustado, RCIF está ajustado. El búfer está libre. La situación es ahora la descrita en (2).

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

Edición: Obsérvese la implicación de la hipótesis (1). Si lees RCREG en este caso, FERR no es válido para el byte que acabas de leer. Usted debe comprobar FERR antes de leyendo RCREG.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X