Hallo. Ich arbeite mit Segger embOS V3.20g für M16C62P mit der Tasking IDE 3.1r1 Patch5. (Leider wird diese Kombination von den Herstellern nicht mehr unterstützt.) Die Applikation benutzt alle 3 UART-Schnittstellen des M16C mit einer Geschwindigkeit von 115,2KBaud. UART1 und 2 arbeiten dabei als Slave, UART0 als Master. Es werden ca. alle 200ms Pakete (max. 32Byte) auf den Schnittstellen mit der "Aussenwelt" ausgetauscht. Senden und Empfangen läuft Interrupt-getrieben. UART0 hat dabei als einzige Quelle im System eine Interruptprio von 7. Alle Interrupts sind "Nestable". (__I-Flag wird am Anfang der ISR wieder gesetzt.) Die Last im Gesamtsystem beträgt ca. 15%. Trotz (oder vielleicht wegen) all der obigen Randbedingungen tritt ab und zu ein Overrun Error bei UART0 auf. Die Behandlung des Fehlers hilft meistens. Die Kommunikation läuft dann stundenlang problemlos. Plötzlich bricht sie aber total zusammen und lässt sich auch softwaremäßig nicht mehr in Gang bringen, nur noch ein SW-Reset hilft. Interessanterweise passiert das ganz aber nicht wenn nur über UART0 kommuniziert wird. Anmerkung: Ich habe die Baudrate schon auf 57,6KBaud reduziert, die UARTs getauscht. Leider ohne Ergebnis. Kennt/hat jemand ein ähnliches Problem? Könnte das Ganze am OS liegen oder hat evtl. sogar der M16C hier ein Hardwareproblem. Nebenbei gefragt: Wie setzt man am Besten einen Overrun Error zurück? Alle Beispiele setzen einen Summenfehler in der RX-ISR zurück. Leider wird aber gerade bei einem Overrun Error die ISR nicht getriggert. Hermann
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.