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
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!
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.
Ist der Uhrenquarz dran? Wo sendest du überhaupt hin? zum PC? Ist da der MAX3232 richtig angeschlossen? Wie merkst du, dass nix gesendet wird?
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?
>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!
Du hast doch immer noch den TX-Interrupt drin. Schreibfehler? Nimmer mal die Zeile, in der IE1 beschrieben wird, komplett raus, dann klappts auch.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.