ATmega8, UART: UDR mehrmals auslesen?

#1371983
Lesenswert?

Hi,

ich habe da ein seltsames Problem, welches auftritt, wenn ich nach dem 
Empfang eines Zeichens das UDR in mehreren if-Abfragen hintereinander 
mehrmals auslese.

if(bit_is_set(UCSRA, RXC))
{
  if(UDR == 'o')
  {
    uart_puts_pgm(PSTR("O\n"));
  }

  if(UDR == 'l')
  {
    uart_puts_pgm(PSTR("L\n"));
  }
}

Wenn ich ein o sende erhalte ich sofort O als Rückmeldung, wie erwartet. 
Wenn ich allerdings ein l sende passiert was ganz komisches. Erst beim 
nächsten gesendeten Zeichen bekomme ich die Rückmeldung L, ganz egal was 
für ein Zeichen ich als letztes gesendet habe.

Mal ein Beispiel was ich mache:
Sende o - Rückmeldung O
Sende l - nix
Sende x (beliebiges Zeichen) - Rückmeldung L
Sende x - nix
Sende o - Rückmeldung O (hier klappts immer sofort)
Sende l - nix
Sende o - Rückmeldung O, sofort danach allerdings nochmal Rückmeldung 
L... wtf?

Wird da irgendwie was gepuffert? Wenn ich UDR zuerst in eine 
tmp-Variable einlese und dann mit dieser arbeite, dann funktionierts.

Warum?

lg PoWl
#1372001
Lesenswert?

OK, ich habe im Beispiel zwei if-Abfragen. In der ersten wird nach "o" 
gefragt, in der zweiten nach "l". Wenn das ein FIFO ist und jedes 
Auslesen des UDR den FIFO um eins weiterrutschen lässt, wieso erhalte 
ich dann auf das l überhaupt noch eine Rückmeldung?

sobald ich ein einzelnes Zeichen sende wird es ja durch die erste 
if-Abfrage (also durch das erste Auslesen des UDR) sofort wieder aus dem 
FIFO rausgezogen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren