1 看门的概概念
看门狗又叫 watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果超过规定的程序不喂狗(一般程序跑飞时),WDT定时超过,就回给一个复位信号到MCU,MCU复位,防止MCU死机,看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
MUC:微控制单元(Microcontroller Unit;MCU) ,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制
RST端:复位端
2 看门狗的工作原理
工作原理:在系统运行以后也就是启动了看们狗的计数器,看门狗就开始自动计数,如果到了一定时间不去清除看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。
3 看门狗的实现过程(Exynos 4412)
t_watchdog = 1/(PCLK/(Prescaler value + 1)/Division_factor)
实际上就是:看门狗时钟周期=1/(PCLK源时钟频率/预分频值+1)/预分频系数
1/周期=频率
4 看门狗相关寄存器(Watchingdog Timer的Register Description
4.0 寄存器描述
4.1 WTCON
4.2 WTCNT
当我们想要使用看门狗功能的时候,首先我们需要先使能WDT timer ,如果我们时最初使能WDT timer ,WTDAT的值并不能加载到这个定时计数寄存器(WTCNT)中,所以我们需要初始化赋值给WTCNT
WTDAT
在最初使能WDT的时候,这里面的值不能直接赋值给WTCNT,直到超时后的情况下,才会把这个WTDAT里面的值赋值给WTDAT
WTCLRINT
随便写一个值就会清除中断
#include "exynos_4412.h"
void delay(int i)
{
while(i--);
}
void WDT_Init()
{
/* 设置一级分频 156 = 0x9B+1*/
WDT.WTCON = WDT.WTCON & (~(0xFF<<8)) | (0x9B<<8);
/* 设置二级分频 64- 10 */
WDT.WTCON |= (0x2<<3);
//看门狗频率为100000000/156/64 约等为10000Hz
/* 关闭中断 */
WDT.WTCON &= (~(0x1<<2));
/* 打开产生复位信号 */
WDT.WTCON |= 1;
/* 设置计数器计数值 */
WDT.WTCNT = (5*10000); //5秒
/* 使能看门狗 */
WDT.WTCON |= (0x1<<5);
}
int main()
{
WDT_Init();
while(1)
{
printf("WDT.WTCNT = %d\n", WDT.WTCNT); //打印计数器值
delay(100000);
}
return 0;
}
效果会计数,然后当递减计数器清零,便会自动复位,因为这里并没有喂狗