MSP430 launchpad TimerA_UART

Gast #2093052
Lesenswert?

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
1
#include <signal.h>
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
1
__even_in_range
 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
1
"G2xx1 TimerA UART"
 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....
Angehängte Dateien:
Gast #2096434
Lesenswert?

Hallo Bernd,

danke für deine Version. Die hat auf Anhieb funktioniert :-)

Wenn da nur nicht das kleine Männlein im Hinterkopf noch klopfen würde, 
das gerne verstehen würde, was an dem original TI-Code falsch ist. 
Denn "theoretisch" sehe ich erst mal nicht, warum der nicht 
funktionieren sollte. Und vor allem, warum es durch die zusätzliche 
Ausgabe in der Hauptschleife dann doch funktioniert...

Trotzdem geht es jetzt erst mal an anderen Baustellen weiter. Danke 
nochmal!

Stefan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren