📄 watchdog.c
字号:
#include "2410addr.h"
#include "2410lib.h"
void watchdog_test(void);
void __irq watchdog_int(void);
//复位次数
int f_ucSencondNo=0;
/*************************************************
Function name: Main
Parameter : void
Description : 主功能函数
Return : void
Argument : void
Autor & date :
**************************************************/
int Main(void)
{
ChangeClockDivider(1,1);
ChangeMPllValue(0xa1,0x3,0x1);
Port_Init();
Uart_Select(0);
Uart_Init(0,115200);
Uart_Printf("watchdog test is beginning\n");
watchdog_test();
while(1);
}
/**********************************
watchdog_init
watchdog interrupt service routine
************************************/
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
//disable watchdog
rWTCON=((100<<8)|(3<<3));
//看门狗时钟周期T=WTCNT*t_watchdog=4S
//看门狗喂狗
rWTDAT=15000;
rWTCNT=15000;
rWTCON|=((1<<5)|(1<<2));//enable Watchdog timer ang watchdog interrupt
//rWTCON|=((1<<5)|(1<<2)|1);//watchdog 复位,时间间隔为4S。
rWTCON|=(1<<5)|(1<<2);//每4S watchdog 一次中断。
//设置watchdog为IRQ中断模式
rINTMOD&=0xFFFFFDFF;
//开中断
EnableIrq(BIT_WDT);
while(f_ucSencondNo<11);
}
/**** watchdog_int ****/
void __irq watchdog_int(void)
{
//清除中断
ClearPending(BIT_WDT);
f_ucSencondNo++;
if(f_ucSencondNo<11)
Uart_Printf("%ds",f_ucSencondNo);
else
{
//mask watchdog timer interrupt
DisableIrq(BIT_WDT);
Uart_Printf("watch dog is ok\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -