Ich versuche, etwas über die serielle UART-Kommunikation des MSP430FR6989 von Texas Instruments zu erfahren.
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
(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).
(Seite 784/1021 der UG )
(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.
Geht in die nächste Zeile, kein Fehler, und es funktioniert gut.
Wenn Sie UCPEN einstellen, sendet (und erwartet) die Hardware ein zusätzliches Bit:
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.
jsotola
Eingebetteter_Typ
brhans
jsotola
Eingebetteter_Typ
jsotola
set
Sie haben das Paritätsbit nicht .... Sieenabled
haben den Sender dazu gebracht, ein Paritätsbit zu erzeugen ... Sie können den Wert des Paritätsbits nicht direkt auswählenjsotola
Eingebetteter_Typ
jsotola
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 1s
ist richtigKalleMP