Forum: Mikrocontroller und Digitale Elektronik Problem: mit 2 Uarts gleichzeitig empfangen


von Hans (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Klaus2m5 (Gast)


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.

von Hans (Gast)


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

von Henrik (Gast)


Lesenswert?

In der ISR warten ist immer schlecht.
Gut, dass du das Problem behoben hast. :)

von Falk B. (falk)


Lesenswert?

@  Henrik (Gast)

>In der ISR warten ist immer schlecht.

Eben, siehe Interrupt und Multitasking.

MfG
Falk

von Karl H. (kbuchegg)


Lesenswert?

Falk Brunner schrieb:
> @  Henrik (Gast)
>
>>In der ISR warten ist immer schlecht.
>
> Eben, siehe Interrupt und Multitasking.

Bzw. das was jedem der es hören will, bzw. nicht hören will, seit Jahr 
und Tag hier im Forum gepredigt wird :-)

In einer ISR wird nicht gewartet
ISR so lang wie notwendig aber so kurz wie möglich

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
Noch kein Account? Hier anmelden.