Gast
#2113456
Hi, ich möchte den UART eines Cortex-M im Polling-Betrieb ansprechen. Der UART ist weitgehend zum 16550-UART kompatibel. Was mich jetzt ein wenig verwirrt ist das LineStatus-Register. Dort sind einerseits die Statusbits für das im Rx-FIFO enthaltene Byte (sofern ein gültiges drin ist) drin, also beispielsweise ParityError, etc. und für den Tx-FIFO die Angabe, ob noch Platz im FIFO ist (THRE-Flag bzw. TEMT-Flag). Wenn ich nun für das Senden mithilfe der THRE/TEMT-Flags ermitteln will ob der Tx-FIFO noch Platz hat, muss ich das LS-Register lesen. Das Lesen des Registers löscht aber gleichzeitig die Statusflags für das nächste Byte im Rx-FIFO, womit die Funktion für's Lesen des Rx-FIFOs die Status-Codes verliert. Heisst dass jetzt, dass ich den UART nur per Interrupt sinnvoll bedienen kann oder gibt's doch ne Polling-Variante? Das einzige was mir bisher einfiel war in der Sende-Funktion auszuwerten, ob ein Byte im Rx-FIFO ist (steht ebenfalls im LS-Register) und dies über eine globale Variable der Empfangs-Funktion zugänglich zu machen. Wenn was da war, liest die Empfangsroutine das LS-Register nicht, sondern nimmt den Wert aus der globalen Variablen. Kann mir jemand auf die Sprünge helfen? :) Ralf