Zitat Zitat von demmy Beitrag anzeigen
Im Moment mache Ich es so, das ich für beide einen Eingangspuffer verwende und Zyklisch abfrage ob Daten im Puffer sind. Wenn ja, dann werden diese verarbeitet und die Antwort zurück gesendet. Das dauert aber unter Umständen "sehr lange".
Ich habe mir das fast ganz abgewöhnt, mit Config SerialIn= Buffered zu arbeiten, weil es häufig zu Timing Problemen kommt. Dabei wird nämlich auch der URXC Interrupt verwendet und zusätzlich noch die eigene SerialCharMatch Routine.
Um dies zu umgehen verwende ich jetzt immer den URXC Interrupt direkt. Und ich versuche, die eingehenden Zeichen schon einmal "vorzuverarbeiten", soweit dies geht. Dann musst du nicht so viel Zeit in die Verarbeitung stecken, wenn der Datensatz komplett ist.
Wenn du dann noch das letzte rauskitzeln willst, rufst du die ISR mit Nosave auf, da häufig nur wenige Register zu sichern sind. Da musst du aber ein bisschen vorsichtig sein.

Zitat Zitat von demmy Beitrag anzeigen
Nun habe ich versucht die Daten per Interrupt einzulesen. Was aber irgendwie nicht richtig funktioniet.
Dann zeige doch mal, wie du an die Verarbeitung rangegangen bist.

Zitat Zitat von demmy Beitrag anzeigen
Meine Vermutung ist, dass das Interrupt der einen UART noch aktiv ist, während Daten auf der anderen eintreffen. Somit unterbrechen sie sich dauernd gegenseitig bis gar nichts mehr geht.
Die ISRs unterbrechen sich nicht gegenseitig, wenn du das nicht explizit zugelassen hast - wovon du eh lieber die Finger lassen solltest. Ein Aufruf wird immer erst zu Ende gebracht, bevor die nächste ISR aufgerufen wird. Allerdings kommt dein Hauptprogramm dabei evtl. etwas zu kurz.

Zitat Zitat von demmy Beitrag anzeigen
Es müssen unmittelbar nach dem Eintreffen der Daten auch wieder welche zurück gesendet werden. Deshalb wollte ich es per Interrupt machen.
Das Zurückschicken kannst du natürlich auch gepuffert machen, sodass dir hoffentlich nichts verloren geht.