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!
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
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.
Stefan F. schrieb: > Der Chip hat keinen FIFO. Doch, der Receiver hat einen FIFO, wie alle AVR. Das Schieberegister selber, plus zwei Register FIFO. Oliver
>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.
Meseeks schrieb: > gelesen, dass der Mega8 einen 2Level Fifo hat. So ist es, mit dem Empfangsregister sind so max 3 Bytes gepuffert. Das Empfangsregister wird aber überschrieben, sobald das nächste Startbit eintrifft. Schickt man also "12345" zur UART, wird man danach "125" auslesen.
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.