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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren