Hi,
ich habe hier ein seltsames Problem mit einem STM32F446. Das Problem klingt irgendwie, als hätte ich was grundsätzliches übersehen, deswegen erst mal eine grobe Beschreibung:
Ich habe eine ISR, welche Daten vom SERCOM empfängt -> die funktioniert problemlos.
In meinem Main-Loop bearbeite ich diese Daten (entkoppelt über einen Ringbuffer) -> der Loop funktioniert nur so lange, wie die ISR nicht aufgerufen wird. So bald das passiert, bleibt der Mainloop an der Stelle stehen, an der sich die Ausführung beim Auftreten des Interrupts befunden hat.
Mein erster Verdacht: der Interrupt kommt zu oft und die ISR verbraucht zu viel Rechenzeit. Wenn ich allerdings, so bald das Problem aufgetreten ist, keine Daten mehr an den STM sende, so dass auch keine Interrupts mehr kommen, läuft der Mainloop trotzdem nicht weiter. Sprich es liegt offenbar nicht daran, dass ich den STM mit zu vielen IRQs totschieße.
Auch andersherum: wenn ich erst mal keine Daten sende, so dass kein Interrupt ausgelöst wird, so läuft der Mainloop problemlos. So bald aber auch nur ein einziger Interrupt eintrudelt, bleibt der Main-Loop wieder stehen.
Das passiert auch, wenn ich die Verarbeitung der ISR-Daten im Mainloop komplett rausnehme, so dass also keine logische Verbindung mehr zwischen ISR und Mainloop besteht. Heißt also dass auch kein Bug in der Verarbeitung der vom ISR empfangenen Daten die Ursache sein kann.
Was könnte ich hier übersehen haben? Muss ich irgend ein spezielles Interrupt-Register Setzen/Löschen, um wieder aus dem Interruptkontext herauszukommen?
Oder was sonst könnte die Ursache sein?
Danke!
