📄 main.c
字号:
//看门狗的复位功能,超时没有喂狗会引起复位
#include "2440addr.h"
void watchdog_test(void) ;
extern void Uart_Printf(char *fmt,...);
extern void Uart_Init(int baud);
void ClearPending(int bit);
void ClearSubPending(int bit);
unsigned f_ucSencondNo;
__irq void watchdog_isr(void);
void Main(void)
{
f_ucSencondNo=0;
Uart_Init(115200);
Uart_Printf("watchdog test is beginning\n");
watchdog_test();
}
void watchdog_test(void)
{
/****************初始化************************/
//建立WatchDog中断服务程序句柄
pISR_WDT = (unsigned)watchdog_isr;
//initialize interrupt registers
ClearPending(BIT_WDT_AC97);
ClearSubPending(BIT_WDT);
/***************启动看门狗*******************/
//Prescaler value=100、clock division factor=128、PCLK=50M
//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856
//disable watchdog
rWTCON=((prescaler_value<<8)|(clock_select<<3));
//看门狗时钟周期T=WTCNT*t_watchdog=3.8784S
//看门狗喂狗
rWTDAT=15000;
rWTCNT=15000;
rWTCON|=(1<<5)|(1<<2); //使能WDT定时器和中断
//开中断
EnableIrq(BIT_WDT_AC97);
EnableSubIrq(BIT_WDT);
while(f_ucSencondNo<11);
while(1) ;
}
void ClearPending(int bit)
{
register i;
rSRCPND &= ~bit;
rINTPND |= bit;
i = rINTPND;
}
void ClearSubPending(int bit)
{
register i;
rSUBSRCPND &= ~bit;
i = rINTPND;
}
__irq void watchdog_isr(void)
{
f_ucSencondNo++;
if(f_ucSencondNo<11)
Uart_Printf("%ds\n",f_ucSencondNo);
else
{
DisableIrq(BIT_WDT_AC97);
DisableSubIrq(BIT_WDT);
Uart_Printf("watch dog is okooooo\n");
}
ClearPending(BIT_WDT_AC97);
ClearSubPending(BIT_WDT);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -