Hallo zusammen,
helft mir mal bitte mal auf die Sprünge. Ich habe mir von TI das
Launchpad zugelegt und versuche gerade das angehängt Stück Code
(Software-UART mit Hilfe von TimerA) zum laufen zu bekommen. Der Code
stammt direkt aus den Beispielen von TI.
Einige Änderungen musste ich vornehmen, um den Code an den mspgcc
anzupassen:
ich habe
eingefügt,
die Deklaration der ISR wurde angepasst:
1 | interrupt (TIMERA1_VECTOR) Timer_A1_ISR(void)
|
anstatt
1 | #pragma vector = TIMERA1_VECTOR
|
2 | __interrupt void Timer_A1_ISR(void)
|
und die switch-Anweisung mit dem
Konstrukt habe ich durch eine simple if-Anweisung ersetzt (komplettes
File im Anhang).
Das Progrämmchen compiliert einwandfrei und nach dem Flashen des Chips
meldet er sich auch brav mit dem Begrüßungstext
usw. am Terminal. Soweit also gut.
Nur, das Empfangen funktioniert nicht. Egal was ich am Terminal sende,
ich bekomme ein 0x00 zurück, die Pins bleibe ebenfalls alle Null.
Was ich aber erst recht nicht verstehe: Sobald ich in die main-loop
einen Aufruf von TimerA_UART_print einfüge, und sei es auch nur ein
Zeichen, dann funktioniert es!? Die Ausgänge werden korrekt gesetzt, ich
bekomme "."+ das gesendete Zeichen zurück.
1 | .
|
2 | .
|
3 | .
|
4 | if (rxBuffer & 0x40) P2OUT |= 0x40; else P2OUT &= ~0x40; // P2.6
|
5 | if (rxBuffer & 0x80) P2OUT |= 0x80; else P2OUT &= ~0x80; // P2.7
|
6 |
|
7 | // Echo received character
|
8 | TimerA_UART_print(".");
|
9 | TimerA_UART_tx(rxBuffer);
|
10 | }
|
11 | .
|
12 | .
|
13 | .
|
Es funktioniert übrigens nur mit "UART_print", ein weiteres "UART_tx"
ändert nichts am Fehler, dabei sollte UART_print mit einem einzelnen
Zeichen als Argument doch auch nur genau ein mal UART_tx aufrufen?
Ich stehe echt auf dem Schlauch....