mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 launchpad TimerA_UART


Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
#include <signal.h>
eingefügt,

die Deklaration der ISR wurde angepasst:
interrupt (TIMERA1_VECTOR) Timer_A1_ISR(void)

anstatt
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1_ISR(void)

und die switch-Anweisung mit dem
__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
"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.
.
.
.
        if (rxBuffer & 0x40) P2OUT |= 0x40; else P2OUT &= ~0x40;    // P2.6
        if (rxBuffer & 0x80) P2OUT |= 0x80; else P2OUT &= ~0x80;    // P2.7
        
        // Echo received character
        TimerA_UART_print(".");  
        TimerA_UART_tx(rxBuffer);
    }
.
.
.

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

Autor: Bernd N. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd N. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

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

Autor: Gamb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Bernd N. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na dann lass hören.

Autor: Mobase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd N. schrieb:
> Anbei mal eine angepasste Version.

Das sieht eher nach Code von 
http://www.msp430launchpad.com/2010/08/half-duplex... 
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.