Problem: mit 2 Uarts gleichzeitig empfangen

Gast #1883781
Lesenswert?

Hallo, ich habe folgendes Problem: ich nutze beide UARTS des AT90CAN128 
um Strings zu empfangen. Bei dem String der über UART0 (115600 BAUD) 
empfangen wird fehlt allerdings ab und zu ein Byte. Der String von UART1 
(19200 BAUD) ist komplett richtig. Ist der UART1 ausgeschaltet empfängt 
auch der UART0 alle Bytes. Ich nutze jeweils den jeweiligen RX-Interrupt 
zum Empfang eines Bytes.
Moderator (Firma: Titel) Persönliche Seite #1883881
Lesenswert?

Hans schrieb:
> Ich nutze jeweils den jeweiligen RX-Interrupt zum Empfang eines Bytes.
Lass mal deinen Code sehen, was da sonst noch alles in der ISR gemacht 
wird...

In der Interruptroutine solltest du nur das Zeichen abholen und in einen 
Fifo schreiben. Irgendwer/-was in der Hauptschleife holt sich dann die 
Zeichen aus dem Fifo ab.
Gast #1883922
Lesenswert?

Bei 115600 Baud kommt alle 86,5 µs ein Byte (bei 8n1). UDR vom RX kann 
nur 2 Bytes puffern. Wahrscheinlich brauchen Deine ISRs mehr Zeit, wenn 
beide USARTS aktiv sind. Zur Bestätigung kannst Du Data Overrun für 
USART 0 auswerten! Testweise UART0 mit niedrigerer Baudrate betreiben.
Gast #1884784
Lesenswert?

vielen Dank für die Tips. Ich habe die UART-Interrupt-Rountine wie oben 
empfohlen umgebaut, jetzt funktioniert alles. Problem war, das in der 
UART1 Routine noch auf ein weiteres Byte gewartet wurde. Währenddessen 
wurden Daten die per UART0 kamen ignoriert

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