ADuC7026单片机看门狗详解
0赞ADuC7026单片机集成了一个看门狗定时器,在系统中也成为定时器T3, 它有2种运行模式,正常定时器模式和看门狗模式。看门狗定时器常用于从非法的软件状态恢复,一旦被激活,它将要求周期性的“喂狗",防止它被处理器强制性复位。
(1)定时器模式
定时器3的时钟源是来自PLL同步逻辑的32.768kHZ时钟频率,并可以按1,16,或256的比例进行分频,如下图所示。展示了其工作模式。

(2) 看门狗模式
通过置位T3CON存储寄存器的第5位可进入看门狗模式。定时器3从T3LD寄存器中的当前值开始递减至0。
T3LD被用于计时。选择1/256的比例分频时可得到最大的计时时间512秒,此时T3LD为满值。定时器3运行在看门狗模式时,由外部32kHZ晶振时钟控制。需要注意的是要成功的进入看门狗模式,T3CON 寄存器中的第5位要在向T3LD存储寄存器执行写操作之后置位。
如果定时器计时至值0,产生复位还是中断取决于T3CON寄存器中的第1位。若要避免复位或中断,则必须在终止周期之前向T3ICLR进行写操作。这样就重装了计数器中的T3LD,且开始了一个新的计时周期。
一进入看门狗模式,T3LD 和T3CON就被写保护了。这两个寄存器只有当复位信号清除看门狗使能位,导致定时器3退出该模式时才能被修改。
下面演示的是看门狗溢出产生中断的例子程序。要注意的是,在看门狗中断执行之后,需要软件复位以便重新开始下一次代码执行。
#include<aduc7026.h>
void delay(int);
void IRQ_Handler(void)__irq;
/*********************************************************************
* 函数名称:main()
* 函数功能:配置输出及定时器3,使能中断
*******************************************************************/
int main(void){
char i;
GP1DAT = 0x01000000; // 将引脚P1.0设为输出引脚
GP4DAT = 0x04000000; // 将引脚P4.2设为输出引脚,指示灯LED点亮
T3LD = 0x1000; // 设定计数器值0x1000/32768 = 125ms
T3CON = 0xE2; // 用IRQ 代替复位,仅用于测试
IRQEN = 0x00000020; // 定时器3中断使能
while (1){
for (i=0;i<4;i++){
delay(0x30000);
T3CLRI = 0xff;
GP4DAT ^= 0x00040000;
}
delay(0xA0000); // 长时间延时=>提供看门狗中断t
T3CLRI = 0xff;
GP4DAT ^= 0x00040000;
}
}
void delay (int length){
while (length >=0)
length--;
}
/*********************************************************************
* 函数名称:IRQ_Handler()
* 函数功能:中断服务程序
*******************************************************************/
void IRQ_Handler()__irq{
if ((IRQSTA & WATCHDOG_TIMER_BIT)!= 0)
// 判断是否为定时器3中断
{ // 看门狗中断允许需要时在复位前进行数据保存
GP1DAT ^= 0x00010000; // 引脚P1.0取补
RSTSTA = 0x4; // 软件中断
}
return ;
}
