mikrocontroller.net

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


Autor: Harald K. (Gast)
Datum:
Angehängte Dateien:

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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
while (!(IFG1 & UTXIFG0));
zu einer Endlosschleife!

Autor: Harald K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
while (!(IFG1 & UTXIFG0));"
 wird dennoch das Char nicht gesendet.
Danke schonmal.

Autor: Christian R. (supachris)
Datum:

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

Autor: Harald K. (Gast)
Datum:
Angehängte Dateien:

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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
while (!(IFG1 & UTXIFG0));

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

Autor: Christian R. (supachris)
Datum:

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

Autor: Harald K. (Gast)
Datum:

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

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.