Mega8 USART Receive Buffer

Gast #6047674
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe mit Freude im Datenblatt
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf
gelesen, dass der Mega8 einen 2Level Fifo hat.

Mir fehlt noch eine explizite Information:
Zum "Bit 7 – RXC: USART Receive Complete" seht geschrieben
>"This flag bit is set when there are unread data in the receive buffer and 
>cleared when the receive buffer is empty"

Weiß jemand, ob die Hardware dieses Bit SOFORT nach lesen vom FIFO 
zurücksetzt? Also wenn man UDR ließt und sofort im Anschluss eine 
Prüfung auf dem RXC Bit macht, das Ergebnis valide ist?

>> und
wie verhält sich der Interrupt wenn enabled. Wenn im FIFO zwei Byte 
liegen, in der ISR eines gelesen wird, wird der Interrupt dann sofort 
wieder angesprungen?

>> oder
was ist, wenn das zweite Byte eintritt wenn das Programm schon in der 
ISR ist, aber USR noch nicht gelesen hat?

>>> meine Bytes liegen mir so am Herzen und sie gehören alle mir - MY PRECIOUS!

Viele Grüße!
Gast #6047686
Lesenswert?
• ▲
▼
Meseeks schrieb:

> Mir fehlt noch eine explizite Information:
> Zum "Bit 7 – RXC: USART Receive Complete" seht geschrieben
>>"This flag bit is set when there are unread data in the receive buffer and
>>cleared when the receive buffer is empty"
>
> Weiß jemand, ob die Hardware dieses Bit SOFORT nach lesen vom FIFO
> zurücksetzt? Also wenn man UDR ließt und sofort im Anschluss eine
> Prüfung auf dem RXC Bit macht, das Ergebnis valide ist?

Ja, das letzte Lesen des RXC-Bits ist sogar hyperfluid.

>>> und
> wie verhält sich der Interrupt wenn enabled. Wenn im FIFO zwei Byte
> liegen, in der ISR eines gelesen wird, wird der Interrupt dann sofort
> wieder angesprungen?

Naja, bei nächster Gelegenheit. Interrupts höherer Priorität können (und 
werden) sich vordrängeln.

>>> oder
> was ist, wenn das zweite Byte eintritt wenn das Programm schon in der
> ISR ist, aber USR noch nicht gelesen hat?

Dann ändert sich erstmal nix. Das wäre erst der Fall, wenn noch ein 
drittes Byte eintrifft.

>>>> meine Bytes liegen mir so am Herzen und sie gehören alle mir - MY PRECIOUS!

Dann lerne:

1) Datenblätter lesen
2) Programmieren
Gast #6047740
Lesenswert?
• ▲
▼
Meseeks schrieb:
> Weiß jemand, ob die Hardware dieses Bit SOFORT nach lesen vom FIFO
> zurücksetzt? Also wenn man UDR ließt und sofort im Anschluss eine
> Prüfung auf dem RXC Bit macht, das Ergebnis valide ist?

Ja, das Bit ist sofort danach valide.

> Wenn im FIFO zwei Byte liegen, in der ISR eines gelesen wird,
> wird der Interrupt dann sofort wieder angesprungen?

Der Chip hat keinen FIFO. Er hat ein 8bit Schieberegister und ein 8bit 
Data Register. Wenn das Schieberegister ein ganzes Byte empfangen hat, 
wird dieses ins Datenregister übertragen und dann die ISR aufgerufen.

Wenn das vorherige Byte im Datenregister bis dahin noch nicht ausgelesen 
wurde, bleibt das Byte im Schieberegister und wird später ins 
Datenregister übertragen.

Wenn du das Datenregister ausliest und ein weiteres Bytes bereits im 
Schieberegister wartet, wird die ISR nach Beendigung schnellstmöglich 
erneut angesprungen.

> was ist, wenn das zweite Byte eintritt wenn das Programm schon
> in der ISR ist, aber USR noch nicht gelesen hat?

Du meinst wohl UDR. Wie gesagt kann der Chip ein Byte im UDR Register 
halten und eins im Schieberegister. Wenn dann aber noch ein drittes 
ungelesenes Byte empfangen wird, vergisst das Schieberegister seinen 
Inhalt in dem Moment, wo das Startbit des dritten Bytes rein kommt.
Gast #6048014
Lesenswert?
• ▲
▼
>wie verhält sich der Interrupt wenn enabled. Wenn im FIFO zwei Byte
>liegen, in der ISR eines gelesen wird, wird der Interrupt dann sofort
>wieder angesprungen

So, stimmt, habe etwas nicht wargenommen:

>>When interrupt-driven data reception is used, the receive complete routine
>>must read the received data from UDR in order to clear the RXC Flag,otherwise a 
new interrupt
>>will occur once the interrupt routine terminates.


Zum Thema FIFO Level:
Seite 148 bei Registerbeschreibung UDR, letzter Absatz
>The receive buffer consists of a two level FIFO. The FIFO will change its >state 
whenever the receive buffer is accessed.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.