中断实验搞定以后,看门狗就完全不在话下了。这个实验呢,分两部分。第一部分就是隔一段时间让看门口产生一个中断,在中断处理程序里对中断进行计数,当达到指定计数值的时候,完成第一部分的实验。第二部分是关掉中断,当看门狗增长到一定值以后,没人喂狗,就会自动重启。
下面是代码:
/****************************************
* Watch-dog timer test *
****************************************/
void Test_WDTimer(void)
{
Uart_Printf("[WatchDog Timer Test]/n");
rINTMSK=~(BIT_GLOBAL|BIT_WDT);
pISR_WDT=(unsigned)Wdt_Int;
isWdtInt=0;
rWTCON=((MCLK/1000000-1)<<8)|(3<<3)|(1<<2); // t_watchdog = 1/66/128, interrupt enable
rWTDAT=8448/4;
rWTCNT=8448/4;
rWTCON=rWTCON|(1<<5); // 1/40/128,interrupt
while(isWdtInt!=10);
rWTCON=((MCLK/1000000-1)<<8)|(3<<3)|(1); // 1/66/128, reset enable
Uart_Printf("/nI will restart after 2 sec!!!/n");
rWTCNT=8448*2;
rWTCON=rWTCON|(1<<5); // 1/40/128,interrupt
while(1);
rINTMSK|=BIT_GLOBAL;
}
void __irq Wdt_Int(void)
{
rI_ISPC=BIT_WDT;
Uart_Printf("%d ",++isWdtInt);
}
//***************************************************************************