Forum: Mikrocontroller und Digitale Elektronik UARt-Datenregister gelöscht


von Gast (Gast)


Lesenswert?

Hallo zusammen,

wird das UDR auch beim Abfragen zb:
1
if(UDR0 == xy)
gelöscht? Habe nichts auf der Leitung empfangen, bis ich die Daten in 
einen Buffer geschrieben habe. Dann konnte ich die Abfrage erst machen.
1
buffer = UDR0;
2
if(buffer == xy)

Ist meine Vermutung da richtig?

von Stefan E. (sternst)


Lesenswert?

Das Lesen des Registers löscht es vielleicht nicht, gibt es aber auf 
jeden Fall wieder frei. Wenn also schon das nächste Zeichen empfangen 
wurde, hast du beim zweiten Lesen einen anderen Inhalt. Die zweite 
Variante ist also die Richtige, egal ob das Register beim Lesen nun 
gelöscht wird oder nicht.

von Karl H. (kbuchegg)


Lesenswert?

Gast schrieb:
> Hallo zusammen,
>
> wird das UDR auch beim Abfragen zb:
>
1
if(UDR0 == xy)
> gelöscht? Habe nichts auf der Leitung empfangen, bis ich die Daten in
> einen Buffer geschrieben habe. Dann konnte ich die Abfrage erst machen.
>
1
> buffer = UDR0;
2
> if(buffer == xy)
3
>
>
> Ist meine Vermutung da richtig?

Ja.
Im Datenblatt wird ausdrücklich davor gewarnt, mehrfach auf das Register 
zuzugreifen. Bei jedem Zugriff ändert sich der FIFO Zustand.

Selbst wenn nicht: Wie lange soll denn die UART das empfangene Byte im 
UDR Register vorhalten und woher weißt du, dass bei

   i = UDR;
   j = UDR;

beidesmal der selbe Wert ausgelesen wird. In der Zeit zwischen dem 
ersten Auslesen und dem zweiten Auslesen könnte ja auch ein neues Byte 
empfangen worden sein.

von Gast (Gast)


Lesenswert?

Danke für die Antworten.
Bin die UART noch Byteweise am testen und die Abfrage wurde in der ISR 
gemacht. Daher waren keine weiteren Bytes in der Pipeline. Erst als ich 
ne Schleife gemacht habe und den TX-Kanal eingelesen habe, habe ich den 
Unterschied in dan Case-Anweisungen bemerkt. Teilweise hat es ja 
funktioniert. Also Gefahr erkannt, Gefahr gebannt.
Danke nochmal.

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
Noch kein Account? Hier anmelden.