1.硬件原理
看門狗類似定時器,它的原理是一定時間內(nèi)要喂狗(實質(zhì)是往某個寄存器寫值),否則,它就會咬你(就是重啟)。
2.芯片手冊
3.mini2440電路圖
4.S3C2440寄存器
看門狗時鐘源是PCLK,通過預(yù)分頻器后,會再次分配得到4種頻率,可以通過配置選擇哪一個作為看門狗工作頻率。第一次啟動看門狗,往WTCNT寫初始值,每個時鐘周期WTCNT減1,在減到0以前必須再給它賦值,否則到0后會發(fā)出復(fù)位信號,然后從WATDAT自動再裝入。
WTCON控制寄存器
[0]計數(shù)為零是否輸出復(fù)位信號
[2]中斷使能
[4:3]時鐘選擇,即分配比例
[5]啟動看門狗
[15:8]預(yù)分頻系數(shù)
watchdog.h
#ifndef__WTD_H__
#define__WTD_H__
voidWatchDogInit(void);
#endif
watchdog.c
#include"common.h"
staticvoid__irqWatchDogHandler(void)
{
rGPBDAT|=1;//蜂鳴器響
//清中斷標(biāo)志位
ClearPending(BIT_WDT_AC97);
ClearSubPending(BIT_SUB_WDT);
rWTCNT=50000;
}
voidWatchDogInit(void)
{
rWTCON=(0xF9<<8);//Prescaler=249,Division=16,時鐘頻率為12.5kHz
rWTCON&=~(1<<0);//禁止看門狗復(fù)位
rWTDAT=50000;//設(shè)置看門狗定時器超時時間為4秒(50÷12.5)
rWTCNT=50000;
rINTSUBMSK=~(BIT_SUB_WDT);//使能看門狗子中斷
rINTMSK=~(BIT_WDT_AC97);//使能看門狗和AC97中斷
pISR_WDT_AC97=WatchDogHandler;
rWTCON|=(1<<2|1<<5);//開啟看門狗定時器中斷
}