Guten Morgen, da bin ich wieder....
Habe mir das Datenblatt von Keil mal angesehen und auch nochmal das Datenblatt des Controllers.
Wenn ich das richtig verstanden habe, laufen die Exceptions NICHT über den NVIC.
Im Datenblatt von Keil steht aber NVIC_SetPriority(BusFault_IRQn, 0x80) merkwürdig ??
Dann laufen die Exceptions doch über den NVIC ???
Ich habe beim Debuggen gesehen, daß nach meinem Exeption das IMPRECISERR im SCB->CFSR Register gesetzt wird, also habe ich es per Software gelöscht.
Das brachte aber auch noch keinen Erfolg.
Nun lese ich gerade im Datenblatt UM10360 folgendes:
Ein Bus Fault Exeption wird ausgelöst, wenn ein Schreibzugriff auf den Flashspeicher erfolgt, dafür sorgt der Flash Accelerator.
Nanu, meine Software landet im "HardFault" und nicht im BusFault. Bei folgendem Zugriff:
int *p=0;
*p=4; /* Exception ausloesen, unerlaubter Schreibzugriff auf den Flash */
Irgendwie bin ich jetzt etwas verwirrt und weis immer noch nicht wie ich die Interrupts wieder freigeben kann, nachdem der Exception kam.
Das Datenblatt von Keil führt lediglich eine while(1) Schleife ein, wenn der Exception auftrat. Ich wollte aber nicht stehen bleiben
in meiner Software, sondern eine Fehlermeldung ausgeben. Die Software läuft ja auch weiter, aber meine Timerinterrupts stehen....
Weiter unten im Datenblatt von Keil steht dann, was die Software nach einem Execption tun kann.
System Reset
Recovery (genau das will ich, leider fehlt hier ein Beispiel)
Task termination
Ich bin also noch nicht viel weiter gekommen.
Wo sind die Spezis, die mir helfen können ?
Siro
Lesezeichen