Hallo zusammen, wurde gerne wissen ob das Watchdog Beispiel von der TI
Homepage einfach übernommen werden kann, um im Falle eines
Softwarecrashes das System zu resetten. Hier ein Paar Zeilen Code,
eigentlich komplett aus dem Example übernommen,
1 | EALLOW; // This is needed to write to EALLOW protected registers
|
2 | PieVectTable.WAKEINT = &wakeint_isr;
|
3 | EDIS;
|
4 |
|
5 | // Clear the counters
|
6 | WakeCount = 0; // Count interrupts
|
7 | LoopCount = 0; // Count times through idle loop
|
8 |
|
9 | // Connect the watchdog to the WAKEINT interrupt of the PIE
|
10 | // Write to the whole SCSR register to avoid clearing WDOVERRIDE bit
|
11 | EALLOW;
|
12 | SysCtrlRegs.SCSR = BIT1;
|
13 | EDIS;
|
14 |
|
15 | // Enable WAKEINT in the PIE: Group 1 interrupt 8
|
16 | // Enable INT1 which is connected to WAKEINT:
|
17 | PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
|
18 | PieCtrlRegs.PIEIER1.bit.INTx8 = 1; // Enable PIE Gropu 1 INT8
|
19 | IER |= M_INT1; // Enable CPU INT1
|
20 | EINT; // Enable Global Interrupts
|
21 |
|
22 |
|
23 | interrupt void wakeint_isr(void)
|
24 | {
|
25 | WakeCount++;
|
26 |
|
27 | // Acknowledge this interrupt to get more from group 1
|
28 | PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
|
29 | }
|
Also, jedes mal beim Systemstart wird meine ISR funktion vier mal
aufgerufen (WakeCount steht dann auf 4, weil einige
Initialisierungsprozesse mehr Zeit benötigen), und danach läuft alles
prima, wie es sein soll.
Mein Problem ist, wenn ich kurzzeitig versuche das System zu stören
(durch Zufall gerit mein JTAG Kabel unter einen Kleinen Ofen, der bei
mir auf dem tisch steht, und als ich dann den Ofen ausgeschaltet hatte,
da gabs anscheinend intern eine Art Entladung im Ofen und dadurch wurde
anscheinend eine Art elektrisches/magnetisches Feld im Kabel induziert
und mein System blieb hängen). Nur nach dieser Störung reagiert meine
Platine überhaupt nicht mehr, ich muss diese vom Strom trennen und
wieder einstecken damit alles wieder einwandfrei funktionieren tut.
Is mein Watchdog falsch initialisiert, oder ist die Hardware schuld? Bin
momentan ratlos wie ich das angehen soll, wenn das die Platine is, dann
wäre es ein richtiger Tritt in die Eier.