mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mal wieder ein Verständnissproblem mit fleury´s uart lib


Autor: chillfactor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab die Fleury lib nun etwas intensiver betrachtet und bin nochmals 
auf eine Unklarheit gestoßen:

Es geht um die Fehlerauswertung vom UCSRA Status Register hin zur getc() 
Funktion.
So wie ich das verstehe, soll man evtl. aufgetretene Fehler bei der 
Abfrage eines Bytes aus dem Puffer überprüfen, indem man das high-byte 
mit den definierten Fehlerbits (#defines in uart.h) vergleicht.

Wenn man sich nun allerdings betrachtet, wie das high-byte erzeugt wird, 
denk ich ist da ein kleiner Fehler drin:

1. beim Empfang des Bytes in der ISR wird das Statusregister in ein 
temporäres byte "lastRxError" gesichert, wobei natürlich nur die 
relevanten Fehlerbits maskiert werden (Schade, dass hier der Parity 
Fehler für evtl. spätere Portierungen mit Parityabfrage fehlt, bzw. vom 
Fehler  UART_BUFFER_OVERFLOW benutzt wird).

2. dieses Byte wird bei einer Abfrage mit getc() um 8 bit in das 
high-byte des Rückgabewerts geshiftet.

3. Wenn ich jetzt das Bitmuster des Status Registers im AVR Datenblatt 
(Beispiel ATMega8) mit den definierten Fehlercodes vergleiche, sind 
diese doch genau um ein bit verschoben:

Beispiel: das define UART_OVERRUN_ERROR ist 0x0400 also (0x04 << 8).
Das zugehörige Fehlerbit befindet sich im Atmel Datenblatt allerdings an 
der Stelle 3 => 2^3 = 8 => (0x08 << 8) = 0x0800 != 0x0400 ???

Wo liegt da der Hund begraben? Bitte korrigiert mich, wenn ich mit 
obiger Aussage falsch liege...

Gruß,
Alex

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das 3. bit hat doch die Wertigkeit 2^2, also 4. Das 1. bit hat ja die 
Wertigkeit 2^0=1.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Volker wrote:
> Das 3. bit hat doch die Wertigkeit 2^2, also 4. Das 1. bit hat ja die
> Wertigkeit 2^0=1.

Nein, er meint Bit 3 von 0 an gezählt.

@  chillfactor:

Ja, sieht in der Tat nach einem Fehler aus.
Schreib ihm eine Mail.

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.