¿Por qué el UART no informa un error para un byte de datos con paridad incorrecta?

Estoy tratando de aprender sobre la comunicación en serie UART del MSP430FR6989 de Texas Instruments.

Ficha de datos

Guía de usuario

Estoy haciendo un programa en el que mi UART enviará un carácter a través del pin TX de mi microcontrolador y lo recibirá a través del pin RX.


Si echamos un vistazo al diagrama de bloques del módulo UART del MSP430 (eUSCI - Modo UART), se verá así

ingrese la descripción de la imagen aquí

(Página 766/1021 de la UG )

Una fuente de reloj auxiliar de 32,768 kHz será la fuente de BRCLK (reloj de velocidad en baudios), habilitaré el bit de paridad ( UCPEN = 1) y lo configuraré para que cuente hasta 1 s ( UCPAR = 1). Pondré un valor de 1 impar en el búfer de transmisión ( UCA0TXBUF = 1001 0111). Ahora espero que se establezca el indicador de error de paridad ( UCPE 0-> 1).

ingrese la descripción de la imagen aquí

(Página 784/1021 de la UG )

ingrese la descripción de la imagen aquí

(Página 787/1021 de la UG )


Este es un fragmento del código.

int main(void)
{   
    //code

    set_Clock_Signals (); //sets f(ACLK) = 32.768 kHz
    set_UART_Pins (); //P4.2 and P4.3 are UART RX and TX
    set_UART_Baud_Rate ();

    UCA0CTLW0 = UCSWRST; //put UART in reset mode

    UCA0CTLW0 = UCA0CTLW0 | UCPEN | UCPAR | UCSSEL0;
    //enables parity, parity is even, selects ACLK CS

    UCA0CTLW0 = UCA0CTLW0 & (~UCSWRST); 
    //we can send and recieve data now

    UCA0TXBUF = 0x57; //Line A
    //0101 0111

    while(1);

    return 0;
}

Creé el programa y comencé a depurarlo, lo que esperaba era que cuando el depurador ingrese a la Línea A y salga de él, veré que se establece el bit UCPE, pero en cambio no obtuve un error.

ingrese la descripción de la imagen aquí

Pasos a la siguiente línea, sin error, y funciona bien.

ingrese la descripción de la imagen aquí

no veo una pregunta
¿Cómo es que no obtengo ningún error de paridad cuando UAC0TXBUF = 1001 0111 y UCPAR = 1?
¿Por qué espera obtener un error de paridad? El bit de paridad es un bit adicional que el UART calcula y envía en función de los bits de datos que escribe. La paridad es un noveno bit de datos.
la razón por la que no obtiene un error es porque el receptor ha recibido todos los bits correctamente... ninguno de los bits estaba dañado... (nota: algunos errores multibit no se detectarían)
Sí, si configuramos el bit de paridad = 1 (el carácter par debe tener 1) y enviamos un carácter que tiene 1 impar, ¿no debería establecerse el indicador de error de paridad?
no elegiste setel bit de paridad... eres enabledel transmisor para generar un bit de paridad... no puedes elegir el valor del bit de paridad directamente
necesita revisar la información sobre el bit de paridad y cómo se usa
Pero, ¿qué pasa con UPEN = 1 y UCPAR = 1? ¿No le dice eso al MC/UART que esperamos recibir un personaje con incluso 1?
expecting to receive a character with even 1s.... eso es incorrecto ..... está malinterpretando cómo funciona el bit de paridad ..... expecting to receive a character + parityBit with even 1ses correcto
Si configura la paridad con un UART que solo puede enviar palabras de 8 bits, solo usará 7 de sus bits y calculará la paridad correctamente. Si desea enviar 8 bits más paridad, necesita un UART que pueda admitir palabras de 9 bits (el bit adicional es la paridad).

Respuestas (1)

Cuando configura UCPEN, el hardware envía (y espera recibir) un bit adicional :

Formato de caracteres MSP430 eUSCI UART

Si los bits de datos reales D0…D7 ya tienen la paridad correcta, el bit PA se transmite como cero. Si la paridad D0…D7 es incorrecta, el bit PA se establece en uno, de modo que la paridad de todos los bits juntos resulte correcta.

El mecanismo de verificación de paridad nunca restringe qué bytes de datos puede enviar; su único propósito es detectar (algunos) errores de transmisión.


Mientras esté utilizando el mismo módulo eUSCI con la misma configuración, no es posible forzar un error de paridad. Lo que tendría que hacer es usar dos UART diferentes, configurar el remitente para ocho bits de datos sin paridad y el receptor para siete bits de datos con paridad. El bit D7 del remitente se puede establecer en un valor que no coincida con la paridad esperada del receptor.

+1 porque se describió el método de prueba. El bucle de datos UART NUNCA debería fallar en paridad o encuadre, ya que los genera correctamente. Debe introducir un error en la generación o en la ruta de transmisión.