Warum meldet der UART keinen Fehler bei einem Datenbyte mit falscher Parität?

Ich versuche, etwas über die serielle UART-Kommunikation des MSP430FR6989 von Texas Instruments zu erfahren.

Datenblatt

Bedienungsanleitung

Ich mache ein Programm, bei dem mein UART ein Zeichen über den TX-Pin meines Mikrocontrollers sendet und über den RX-Pin empfängt.


Wenn wir uns das Blockdiagramm des UART-Moduls des MSP430 (eUSCI - UART-Modus) ansehen, sieht es so aus

Geben Sie hier die Bildbeschreibung ein

(Seite 766/1021 der UG )

Eine 32,768-kHz-Hilfstaktquelle wird die Quelle des BRCLK (Baudratentakt) sein, ich werde das Paritätsbit ( UCPEN = 1) aktivieren und es so einstellen, dass es gerade 1s zählt ( UCPAR = 1). Ich werde einen Wert von ungeraden 1s in den Übertragungspuffer schreiben ( UCA0TXBUF = 1001 0111). Jetzt erwarte ich, dass das Parity Error Flag gesetzt wird ( UCPE 0-> 1).

Geben Sie hier die Bildbeschreibung ein

(Seite 784/1021 der UG )

Geben Sie hier die Bildbeschreibung ein

(Seite 787/1021 der UG )


Dies ist ein Ausschnitt des Codes

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;
}

Ich habe ein Programm erstellt und mit dem Debuggen begonnen. Was ich erwartet hatte, war, wenn der Debugger in Zeile A einsteigt und aus ihr heraustritt, sehe ich, dass das UCPE-Bit gesetzt wird, aber stattdessen habe ich keinen Fehler erhalten.

Geben Sie hier die Bildbeschreibung ein

Geht in die nächste Zeile, kein Fehler, und es funktioniert gut.

Geben Sie hier die Bildbeschreibung ein

Ich sehe keine Frage
Wie kommt es, dass ich keinen Paritätsfehler erhalte, wenn UAC0TXBUF = 1001 0111 und UCPAR = 1 ist
Warum erwarten Sie einen Paritätsfehler? Das Paritätsbit ist ein zusätzliches Bit, das der UART selbst berechnet und basierend auf den von Ihnen geschriebenen Datenbits sendet. Parität ist ein 9. Datenbit.
Der Grund, warum Sie keinen Fehler erhalten, ist, dass der Empfänger alle Bits korrekt empfangen hat .... keines der Bits wurde beschädigt ... (Hinweis: Einige Multibit-Fehler würden nicht erkannt)
Ja, wenn wir Paritätsbit = 1 setzen (Zeichen mit geraden Einsen sollten 1en haben) und ein Zeichen mit ungeraden Einsen senden, sollte das Paritätsfehler-Flag nicht gesetzt sein,
setSie haben das Paritätsbit nicht .... Sie enabledhaben den Sender dazu gebracht, ein Paritätsbit zu erzeugen ... Sie können den Wert des Paritätsbits nicht direkt auswählen
Sie müssen Informationen über das Paritätsbit und seine Verwendung überprüfen
Aber was ist mit UPEN = 1 und UCPAR = 1, das sagt dem MC/UART nicht, dass wir erwarten, ein Zeichen mit geraden Einsen zu erhalten
expecting to receive a character with even 1s.... das ist falsch ..... Sie missverstehen, wie das Paritätsbit funktioniert ..... expecting to receive a character + parityBit with even 1sist richtig
Wenn Sie die Parität mit einem UART aktivieren, der nur 8-Bit-Wörter senden kann, werden nur 7 Ihrer Bits verwendet und die Parität korrekt berechnet. Wenn Sie 8 Bit plus Parität senden möchten, benötigen Sie einen UART, der 9-Bit-Wörter unterstützen kann (das zusätzliche Bit ist die Parität).

Antworten (1)

Wenn Sie UCPEN einstellen, sendet (und erwartet) die Hardware ein zusätzliches Bit:

MSP430 eUSCI UART-Zeichenformat

Wenn die eigentlichen Datenbits D0…D7 bereits die richtige Parität haben, wird das PA-Bit als Null übertragen. Wenn die D0…D7-Parität falsch ist, wird das PA-Bit auf eins gesetzt, damit die Parität aller Bits zusammen richtig herauskommt.

Der Paritätsprüfmechanismus schränkt niemals ein, welche Datenbytes Sie senden können; Sein einziger Zweck ist es, (einige) Übertragungsfehler zu erkennen.


Solange Sie dasselbe eUSCI-Modul mit derselben Konfiguration verwenden, ist es nicht möglich, einen Paritätsfehler zu erzwingen. Was Sie tun müssten, ist, zwei verschiedene UARTs zu verwenden, den Sender für acht Datenbits ohne Parität und den Empfänger für sieben Datenbits mit Parität zu konfigurieren. Das D7-Bit des Senders kann dann auf einen Wert gesetzt werden, der nicht mit der erwarteten Parität des Empfängers übereinstimmt.

+1, weil die Testmethode beschrieben wurde. Das Zurückschleifen von UART-Daten sollte NIEMALS bei Parität oder Framing fehlschlagen, da es sie genau richtig generiert. Sie müssen einen Fehler bei der Generierung oder im Übertragungsweg einführen.