Forum: Mikrocontroller und Digitale Elektronik MSP430 launchpad TimerA_UART


von Stefan (Gast)


Angehängte Dateien:

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....

von Bernd N. (Gast)


Angehängte Dateien:

Lesenswert?

Anbei mal eine angepasste Version. Die TI Beispiele spornen häufig zur 
Korrektur an :-) du muß den Code noch auf den mspgcc anpassen, ich habs 
mit dem IAR getestet. Ein weiterer Unterschied, diese Version verwendet 
den internen Osci. anstatt einen externen Quarz.

von Stefan (Gast)


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

von Bernd N. (Gast)


Lesenswert?

Hallo Stefan,

ich schau mir den Code von dir am We an, ich komme im Moment nicht dazu, 
zu busy.

von Gamb (Gast)


Lesenswert?

Bernd N. schrieb:
> Anbei mal eine angepasste Version. Die TI Beispiele spornen häufig zur
> Korrektur an :-)

Ist bei deinem Programm leider auch so...

von Bernd N. (Gast)


Lesenswert?

Na dann lass hören.

von Mobase (Gast)


Lesenswert?

Bernd N. schrieb:
> Anbei mal eine angepasste Version.

Das sieht eher nach Code von 
http://www.msp430launchpad.com/2010/08/half-duplex-software-uart-on-launchpad.html 
aus. Ich wage zu bemängeln, dass du das mit einem (c) versehen hast.
Ausserdem wird statt des 2. CCR im capture mode ein pin change interrupt 
verwendet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.