设计流程如下:
l 设置看门狗中断操作,包括全局中断和看门狗中断的使能,看门狗中断向量的定义。
l 对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子、分频器的分频值、中断使能和复位使能等。
l 对看门狗数据寄存器(WTDAT)和看门狗技术寄存器(WTCNT)的设置。
l 启动看门狗定时器。
int Main(void)
{
SetClockDivider(1, 1);//FLCK:HCLK:PCLK=1:2:4
SetSysFclk(DFT_FCLK_VAL);//Fout=200MHZ
Port_Init();
Uart_Select(0);
Uart_Init(0, UART_BAUD);
Uart_Printf("watchdog test is beginning\n");
watchdog_test();
}
/***看门狗测试函数***/
void watchdog_test(void)
{
//initialize interrupt registers
ClearPending(BIT_WDT);
//建立WatchDog中断
pISR_WDT=(unsigned)watchdog_int;
//Prescaler value=100/clock division factor=128
//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856
rWTCON=((100<<8)|(3<<3));//disable watchdog
//看门狗时钟周期T=WTCNT*t_watchdog=4S
//看门狗喂狗
rWTDAT=15000;
rWTCNT=15000;
rWTCON|=((1<<5)|(1<<2));//enable Watchdog timer ang watchdog interrupt
//清除watchdog中断屏蔽位
rINTMOD&=0xFFFFFDFF;
while(f_ucSencondNo<11);
}
/***看门狗中断处理函数***/
void watchdog_int(void)
{
//清除中断
ClearPending(BIT_WDT);
f_ucSencondNo++;
if(f_ucSencondNo<<11)
Uart_Printf("%ds",f_ucSencondNo);
else
{
rINTMSK|=0x200;//mask watchdog timer interrupt
Uart_Printf("\nOK");
}
}
阅读(880) | 评论(0) | 转发(0) |