Hallo zusammen.
Ich habe ein skurilles Verhalten bei meiner UART und bräuchte einmal
fachmännichen Rat, da mir das Datenblatt und Dr. Google nicht mehr
weiter helfen.
1. Ich habe 2 Platinen mit der gleichen Hard & Firmware.
2. Die Kommunikation hat bereits funktioniert, bevor ich den Watchdog
aktiviert habe.
3. Das Problem lässt sich auch nicht durch deaktivieren des WDT beheben.
Ich schicke mehrere Bytes von Platine 1 zu Platine 2. Die Daten die ich
aber empfange sind aber bitweise gedreht. Sprich :
ich sende: 0b10110011
ich empfqange 0b11001101
Ich kann dies mit einem Osci bestätigen. Wenn ich in den Sendebuffer
U0TXBUF schaue stehen die Daten noch original drin.
Laut Datenblatt gibt es keine Option die Daten entsprechend zu
modifizieren, ich kann mir daher nicht erklären warum dies geschieht.
Anbei noch meine Init Funktion. Ich benutze einen Uhrenquarz mit
32768Hz.
1 | void fnInitUart0()
|
2 | {
|
3 | ME1 |= UTXE0 + URXE0; // enable USART0 (TX- and RX-part)
|
4 |
|
5 | UCTL0 |= CHAR; // 8 data bits, 1 stop bit, no parity (8N1)
|
6 | UTCTL0 |= SSEL0; // ACLK used as UCLK (32768Hz)
|
7 |
|
8 | UBR00 = 0x03; // 9600Baud at 32768Hz
|
9 | UBR10 = 0x00; // 9600Baud at 32768Hz
|
10 | UMCTL0 = 0x29; // 9600Baud at 32768Hz
|
11 |
|
12 | UCTL0 &= ~SWRST; // release USART
|
13 | IE1 |= URXIE0; // enable rX-interrupt
|
14 | IFG1 &= ~URXIFG0; // delete first interrupt-flag
|
15 | }
|