Hallo zusammen,
ich betreibe einen STM32F446 bei 180 MHz und hab die Flash-Latency auf 5
laut Reference-Manual gestellt.
Ich hatte folgendes Problem:
Ich hatte eine Code-Sektion in der ein IRQ deaktiviert sein musste um
Anomalien zu vermeiden. Während dieser Code ausgeführt wurde, ist ein
IRQ-Event aufgetreten, also nach enable des entsprechenden IRQs ist
dieser sofort nach Aktivierung in die entsprechende IRQ gesprungen
(siehe Pseudo-Code).
In der IRQ wurde das IRQ-enable-Bit deaktiviert (wird durch eine
Variablen-Abfrage nur einmal ausgeführt und kann danach nicht mehr
wiederholt deaktiviert werden).
Falls ich nun im normalen Programmablauf direkt nach der
IRQ-Aktivierung-Befehlszeile eine Zeile eingefügt habe, in welcher auf
dasselbe Register zugegriffen wird, wurde der IRQ einfach wieder
aktiviert (scheinbar wurde einfach der alte Registerwert vorher vom
Prefetch-Controller gesichert und hergenommen) und der IRQ in einer
Dauerschleife ausgeführt:
1 | Regulärer Programmablauf:
|
2 |
|
3 | irgendein Code;
|
4 | Register = enable-IRQ;
|
5 | <----------|
|
6 | Register = enable-IRQ; |
|
7 | |
|
8 | |
|
9 | hier tritt IRQ auf
|
Fehlt die zweite Zeile mit enable-IRQ funktioniert alles ohne Probleme.
Hattet ihr schonmal ähnliche Probleme?