看门狗定时器(Watchdog)
相信大家都看过中国移动前些时间做的一个广告,从城市到山村,到青藏高原,在哪儿都有中国移动的网络,到哪儿都能打电话,由此可以联想到中国移动在全国有无数个信号基站,很多基站建设在环境比较恶劣的地方,我们来思考一个问题?假如,有一天某个基站出了问题不能正常工作了,毫无疑问,移动的工作人员会带各种检测设备去进行修理,如果是出现非硬件故障(如用户电话服务突然巨增,造成繁忙死机或电磁干扰造成CPU运行出错等),导致基站服务器出现异常死机,工作人员只需要进行一个操作,重启一下即可。如果该基站安装在青藏高原上,这样一次上去,成本是很大的。退一步讲,这种情况虽然成本很高,但是还是可以修复的,如果这种情况出现在月球探测器身上,问题就更严重了。因此针对这种特殊情况的设备,我们期待有一种设备能够在机器出现非正常情况下进行自动重启来恢复工作状态,使用看门狗定时器就可以完美解决这个问题了。
看门狗WatchDog的名字形象的描述了它的工作原理,看门狗每隔一段时间(比如:3个小时)它就会饥饿,每次饥饿时都叫,如果不想让它叫,只要我们保证在3个小时内喂狗一次就行。因此我们要及时的对看门狗控制器执行喂狗操作。
看门狗定时器内部有一个递减计数器,当该计数器递减为0的时候,就会自动重启控制器,如果我们写有这样的程序,该程序在定时器计数器递减为0之前,将其递减计数器重新设置一下(喂狗),那么就不会产生重启操作。假如机器设备出现异常情况下如死机,CPU执行出错,程序跑飞等情况,CPU就会陷入非正常的执行流程,就不会去执行重置计数器的程序,当计数器递减为0时,会产生复位控制器信号,机器就会重新启动,恢复正常执行流程。这样的设计原理就解决了很多环境恶劣的情况下,对服务器进行重启的任务。上面的重置倒计数的操作通常叫做“喂狗”。
看门狗工作原理
图1 s3c2440看门狗工作原理
名词解释:
PCLK(Peripherals Clock):APB(Advanced Peripherals Bus)高级外围设备总线上外设的工作时钟频率,主要是为开发板上的外围低速设备提供工作时钟,如串口,I2C等。
8-bit Prescaler:8位分频器,由程序来控制对PCLK进行分配,它由WTCON寄存器来控制。
MUX:多路复合器,它支持多种时钟源,通过设置它来选择一种时钟频率,看门狗控制器里会产生4种时钟频率,分别是1/16,1/32,1/64,1/128的已分频时钟,可以通过WTCON寄存器第3,4位进行选择设置。
WTCNT:看门狗递减寄存器,一旦看门狗使能,WTCNT里的数据(由WTDAT寄存器在使能前设置)就开始在输入时钟频率下递减。
Interrupt:中断信号,由WTCON寄存器的第2位控制是否产生中断信号。
Reset Signal Generator:Reset信号产生器,默认情况下当递减寄存器里的倒计数为0时,会通过Reset信号产生器产生Reset信号,让控制器重启,可以由WTCON寄存器的第0位进行设置。
原理:
当看门狗使能时,外围时钟PCLK为看门狗定时器的输入时钟,MINI2440在没有开启时钟时,采用外部晶振(又叫高频振荡器,它每秒产生固定频率时钟)提供的12MHz输入时钟频率,PCLK首先进入8位分频器Prescaler,其对PCLK进行分频,可以理解为PCLK的除法运算,这样PCLK的时钟频率就变成了PCLK/Prescaler value,其中分频器Prescaler的值可以在一定范围内自定义,然后经过分频的时钟再经过除数因子选择器,这是在分频器的基础上再次对时钟信号进行降频,通过除数因子选择器,选择一个除数因子,然后经过MUX复合器,这时输入时钟变成PCLK/Prescaler value/除数因子,得到我们想要的输入时钟,每个时钟周期都会将看门狗定时器WTCNT里的值减1,当计数器WTCNT里的值变为0时,开始执行超时操作,首先,判断看门狗控制寄存器里BIT2 WTCON[2]设置情况,如果为1,则产生中断信号,引起系统中断,如果为0则不做任何操作,进入复位信号产生器,如果WTCON[0]位为1,则产生控制器复位信号,否则不做任何操作。每次超时操作之后,看门狗WTCON会自动加载看门狗数据寄存器WTDAT里的用户设置值,继续执行递减操作。
图2 看门狗定时器控制寄存器(WTCON)
图3 看门狗定时器数据寄存器
图4 看门狗定时器计数寄存器
通过对上面寄存器描述分析,可以得出以下结论:
1、通过设置WTCON[5]来设置看门狗定时器的使能。
2、在开启看门狗定时器后,通过设置WTCON[15:8]和[4:3]位来设置看门狗控制器的工作时钟频率,具体看门狗的递减时间间隔可以通过下面的公式算出:
t_watchdog = 1 / ( PCLK / (Prescaler + 1) / Division_factor )
注:t_watchdog:看门狗控制器递减时间间隔(单位:秒)
PCLK:APB总线工作时钟(单位:Hz)
Prescaler value:8位分频器预设值
Division_factor:除数因子
3、通过设置WTCON[2]和WTCON[0]位,来使能产生中断和复位信号。
4、通过设置WTDAT来设置计数值。