1. 硬件原理
看门狗类似定时器,它的原理是一定时间内要喂狗(实质是往某个寄存器写值),否则,它就会咬你(就是重启)。
2. 芯片手册
3. mini2440电路图
4. S3C2440寄存器
看门狗时钟源是PCLK,通过预分频器后,会再次分配得到4种频率,可以通过配置选择哪一个作为看门狗工作频率。第一次启动看门狗,往WTCNT写初始值,每个时钟周期WTCNT减1,在减到0以前必须再给它赋值,否则到0后会发出复位信号,然后从WATDAT自动再装入。
WTCON控制寄存器
[0]计数为零是否输出复位信号
[2]中断使能
[4:3]时钟选择,即分配比例
[5]启动看门狗
[15:8]预分频系数
watchdog.h
#ifndef __WTD_H__
#define __WTD_H__
void WatchDogInit(void);
#endif
watchdog.c
#include "common.h"
static void __irq WatchDogHandler(void)
{
rGPBDAT |= 1; //蜂鸣器响
//清中断标志位
ClearPending(BIT_WDT_AC97);
ClearSubPending(BIT_SUB_WDT);
rWTCNT = 50000;
}
void WatchDogInit(void)
{
rWTCON = (0xF9<<8 ); //Prescaler = 249,Division = 16,时钟频率为12.5kHz
rWTCON &= ~(1<<0); //禁止看门狗复位
rWTDAT = 50000; //设置看门狗定时器超时时间为4秒(50÷12.5)
rWTCNT = 50000;
rINTSUBMSK = ~(BIT_SUB_WDT); //使能看门狗子中断
rINTMSK = ~(BIT_WDT_AC97); //使能看门狗和AC97中断
pISR_WDT_AC97 = WatchDogHandler;
rWTCON |= (1<<2 | 1<<5); //开启看门狗定时器中断
}