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
Das 3. bit hat doch die Wertigkeit 2^2, also 4. Das 1. bit hat ja die Wertigkeit 2^0=1.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.