This problem is never seen before. I tried to use the WDG reset with the RTC as clock source and fCPU=96MHz. However, I didn't see any crash. Could you please send me a simple code where you can reproduce this problem. Thank you in advance and best regards, mirou. [ This message was edited by: mirou on 08-04-2008 10:22 ]
Try (as an experiment) to run the watchdog from the PCLK instead of RTC. I had a similar problem with the watchdog on RTC. The problem was that if there was a WD reset, the WD would continue to be enabled *after* the reset, so it would immediately have another WD reset. This was extremely repeatable.
I trigger the Watchdog in a while-loop like: while(timerExpired == false) { TrigWD(); } TrigWD() { WDG->KR = 0xA55A; WDG->KR = 0x5AA5; } In this case the cpu will sometimes crash, even though WD is triggered all the time. If I change the code to: TrigWD() { WDG_Cmd(ENABLE); } The cpu will also crash I tried to change the code to not trigger the watchdog all the time: TrigWD() { if(WDG->CNT < 0x76) // preload value is 83 { WDG->KR = 0xA55A; WDG->KR = 0x5AA5; } } It still crashes.... But if I change the function to TrigWD() { if(WDG->CNT < 0x76) { WDG_Cmd(ENABLE); } } It will work fine. Is there a problem when triggering the WatchDog to often? Have anyone seen this? Is it a silicon limitation? I am running the cpu at 94,5 MHz and using RTC clock for WD. The compiler is GCC.
Ignore my previous post, it was another problem. The real problem seems to be that the compiler don't store the registers r0,r1,r2,r3 in functions before modifying them, causing a instable behaviour. The code worked when I changed the timing since no damage was caused by the register change.
I.e. the compiler should do like this void Function() { stmdb sp!, {r0,r1,r2,r3, lr} mov r0, #256 ; 0x100 mov r1, #1 ; 0x1 ... if r0 to r3 are used in the function. but it doesn't do that, it do like this: void Function() { mov r0, #256 ; 0x100 mov r1, #1 ; 0x1 Is there any configuration to tell the compiler to store r0 to r3 also? Why does the compiler behave like this? Is it a bug? I'm using GnuArm 4.1[ This message was edited by: rickard.thorstensson on 09-04-2008 13:58 ]