Forum: Mikrocontroller und Digitale Elektronik MSP430: Zeichen über USART ausgeben


von Harald K. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich habe ein MSP430-149 auf einem Olimex-Developer-Board (zudem im 
Einsatz mspgcc). Das Beispiel von mathar.com unter Verwendung von 
Interrupts funktioniert bei mir. Nun möchte ich ein einzelnes Zeichen 
ausgeben - sobald ich aber "SendUSART0c('x')" absetzen will bleibt die 
Abarbeitung hängen.

Wo liegt mein Fehler?

Danke im Vorraus
Harry

von Stefan (Gast)


Lesenswert?

Du hast die Interrupts (RX und TX) noch aktiviert.
Insbesondere der TX-IRQ "bricht Dir das Genick", weil die ISR 
angesprungen wird und dabei UTXIFG0 zurückgesetzt wird. Deshalb wird
1
while (!(IFG1 & UTXIFG0));
zu einer Endlosschleife!

von Harald K. (Gast)


Lesenswert?

Okay, so etwas in die Richtung dachte ich mir schon. Aber wie komme ich 
denn sonst zu meinem Ziel? Verzichte ich auf die Aktivierung der 
Interrupts oder auf
1
while (!(IFG1 & UTXIFG0));"
 wird dennoch das Char nicht gesendet.
Danke schonmal.

von Christian R. (supachris)


Lesenswert?

Ist der Uhrenquarz dran? Wo sendest du überhaupt hin? zum PC? Ist da der 
MAX3232 richtig angeschlossen? Wie merkst du, dass nix gesendet wird?

von Harald K. (Gast)


Angehängte Dateien:

Lesenswert?

Ah, ich bin bedeutend weiter. Ich bekomme endlich meine Zeichenkette 
ausgegeben. Allerdings muss ich händisch warten. Wie kann ich denn etwas 
geschickter abwarten (Flag-Abfrage?) bis mein Char verschickt ist?

von Stefan (Gast)


Lesenswert?

>Allerdings muss ich händisch warten. Wie kann ich denn etwas
>geschickter abwarten (Flag-Abfrage?) bis mein Char verschickt ist?
Na so wie's vorher war:
1
while (!(IFG1 & UTXIFG0));

Du musst halt die IRQ's deaktivieren, die benutzt Du doch eh nicht!

von Christian R. (supachris)


Lesenswert?

Du hast doch immer noch den TX-Interrupt drin. Schreibfehler? Nimmer mal 
die Zeile, in der IE1 beschrieben wird, komplett raus, dann klappts 
auch.

von Harald K. (Gast)


Lesenswert?

Perfekt, war der Meinung das schon einmal so gemacht zu haben, aber 
Hauptsache es funktioniert jetzt :)

Interrupt-Flag raus, while wieder rein.

Dankeschööön!

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.