Forum: Mikrocontroller und Digitale Elektronik ARM CM4F STM32F373 Interrupt Problem


von Sascha (Gast)


Lesenswert?

Hallo, seit ein paar Tage fällt mir auf, das bei meiner Programmiererei 
etwas nicht stimmt. Ich habe den Cortex M4F STM32F373 im Einsatz und 
mein Timer (Timer6) lässt per Interrupt eine LED blinken mit 10Hz.
Auf einmal waren es nur 5Hz und dann blinkte gar nichts mehr.
Schließlich konnte ich am ende meiner initialisierung folgendes 
feststellen:

es liegt an der Endlosschleife, je nach dem wie sie im Speicher leigt 
beeinträchtigt es das Interrupt verhalten !?!?!?

Nach einigem Probieren habe ich folgendes Ergebniss bekommen:

Fall 1:

loop: nop
      b loop

LED blinkt weiterhin mit 10Hz.


Fall 2:
loop: nop
      nop
      b loop

LED blinkt nicht mehr!

Fall 3:
loop: isb
      b loop

LED blinkt asymetrisch !


Was habe ich falsch konfiguriert, dass die Codeausführung meinen 
Interrupt so beeinträchtigt?
Muss ein Sprungbefehl word aligned sein?

Ich habe bis jetzt nur Erfahrung mit ARM7 und ARM9 und der Thumb2 Mode 
ist für mich etwas Neu.

Jedenfalls bin ich etwas ratlos im Moment.

Gruß Sascha

von Karl (Gast)


Lesenswert?

Schau mal in die errata. Die ersten 407 auf dem Discovery-Board haben 
einrn fiesen Bug im Flash-Prefetch...

von Sascha (Gast)


Lesenswert?

Hallo Karl,
danke für den Tip, werde ich sofort machen.

Habe meinen Fehler übrigens gefunden. Habe im Interrupt nach dem LED 
ansprechen auf den I/O Port noch einen dmb Befehl gesetzt und nach dem 
quitieren des Pending Flags des Timer6 einen dsb.

Ist mir zwar noch nicht klar was der dmb Befehl an der Stelle für 
Auswirkungen hat, aber offensichtlich ist durch das beenden des 
Interrupts der Schreibvorgang im Writebuffer verworfen worden.

Gruß Sascha

von Sascha (Gast)


Lesenswert?

Hallo,
so kann den Fehler nun etwas besser eingrenzen, da ich nun in dem 
Interrupt auch noch andere Dinge veranlasse.

Das Problem besteht bis jetzt nur beim Schreiben auf einen I/O-Port also 
vermutlich leigt es an der AHB2 BUS Bridge. Kann man da etwas falsch 
Konfigurieren?

Zumindest kommen Schreibvorgänge nicht immer an. Vermutlich hängt es mit 
dem beenden des Interrupts zusammen?

Gruß Sascha

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.