mikrocontroller.net

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


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

wird das UDR auch beim Abfragen zb:
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.
buffer = UDR0;
if(buffer == xy)

Ist meine Vermutung da richtig?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:
> Hallo zusammen,
>
> wird das UDR auch beim Abfragen zb:
>
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.
>
> buffer = UDR0;
> if(buffer == xy)
> 
>
> 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.