UART0 beim LPC2387

Gast #1127235
Lesenswert?
• ▲
▼
Hallo,

ich habe hier eine kleine Routine mit der ich ein Zeichen auf der Uart0 
ausgebe und die im wesentlichen aus diesen beiden Zeilen besteht:

    while (!(U0LSR & BIT5));
    U0THR = character;

Die while-Schleife wartet IMHO solange bis der FIFO-Kopf wieder frei ist 
und ich das nächste Zeichen in die FIFO schieben kann.
Nun brauche ich aber eine Funktion die mir anzeigt, ob die gesamte 
FIFO leer ist.
Hintergrund ist, dass ich den Arm gerne in den PowerDown Modus schicken 
möchte ohne das die laufende Uart Übertragung abgebrochen wird.

Wenn ich vor dem powerDown noch ein

while (!(U0LSR & BIT6)) {};

einsetze, schneidet er immer genau ein Zeichen ab, egal wie lang der 
String ist, den ich vorher ausgebe...

Wie kann ich sicher gehen, dass die FIFO komplett leer ist, bevor ich in 
den PowerDown-Modus gehe?

Danke, Heiko
#1127386
Lesenswert?
• ▲
▼
In dem unwahrscheinlichen Fall, dass Du die Emfangsfunktion des UARTs 
nicht benoetigst und auch den Pin nicht anderweitig benutzt, kannst Du 
das Signal zurueckspeissen und auf das Empfangsinterrupt-bit achten.
Noch eine Hardwaremoeglichkeit ueber einen Timer und einen Interrupt. 
Beim 2387 sind sehr viele pins interruptfaehig, ich glaube wir haben ca. 
60 definiert. Der Vorschlag lautet den transmit pin auf einen Interrupt 
pin zu legen. Bei jeder fallenden Flanke wird der Interrupt getriggert 
und dadurch ein Timer auf 0 gesetzt. Dieser Timer wuerde relativ langsam 
laufen, entsprechend der baudrate. Nehmen wir an ein bit waeren 10 Timer 
Increments. Dann wuerde vor dem schlafen gehen der Timer ausgelesen. 
Wenn der Timerstand groesser 100 ist, dann ist keine Uebertragung am 
laufen, wenn kleiner 100, warten bis >100. Timer Ueberlauf dauert sehr 
lange und muss nicht wirklich beruecksichtigt werden, denn im 
schlimmsten Fall wartet man mit dem schlafen gehen obwohl man nicht 
muesste.

Ist alles etwas umstaendlich und ein "UART-busy Flag" waere viel 
eleganter aber vielleicht hilfts ja.


Robert Teufel
Partner in Silicon Valley gesucht?
Ich stehe gerne zur Verfuegung.
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Meine ARM/Cortex Webseite: http://www.lpc2000.com

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.