WDT寄存器
作用:监控CPU是否出现错误,出现错误向CPU发送复位信号
工作原理:向WDT写入一个100的值,递减,正常程序执行时会定时向WDT发送一个比较大的定时数,这样就不会减到零
有两种功能:
1. 当一个普通的定时器,递减,时间一到会向CPU发送一个中断信号
2. 当计数器到达0的时候,会产生一个内部的复位信号
WDT工作逻辑:
PCLK -> 一级分频器 -> 二级分频器 -> WTCNT -> interrupt / Reset Signal
PCLK原始时钟100M
一级分频器 1-256倍 WTCON[15:8]
二级分频器 16,32,64,128倍 WTCON[4:3]
WTCNT : 递减的速度会根据分频器传过来的速度减 当前计数器的值
interrupt / Reset Signal: 中断 / 复位信号 根据WTCON[0] WTCON[1]来决定
WDT看门狗实验目的:实现倒计时结束向CPU发送复位信号,从而实现开发板复位功能
#include "exynos_4412.h"
void Delay(unsigned int Time)
{
while(Time--);
}
int main()
{
/*设置一级分频*/
WDT.WTCON = WDT.WTCON | (0xFF << 8);
/*设置二级分频*/
/*WTCNT递减频率 = PLCK(100000000)/(0xFF + 1)/128 = 3052
* 3052频率就是1秒就是3052,
*/
WDT.WTCON = WDT.WTCON | (0x3 << 3);
/*禁止WDT产生中断信号*/
WDT.WTCON = WDT.WTCON & (~(1 << 2));
/*使能WDT产生复位信号*/
WDT.WTCON = WDT.WTCON | 1;
/*设置计数器的初始值 5秒*/
WDT.WTCNT = (3052 * 5);
/*使能WDT,计数器开始递减*/
WDT.WTCON = WDT.WTCON | (1 << 5);
/*
* 上面代码可以综合写成
/*设置WDTCON寄存器*/
WDT.CON = 0xFF39;
/*设置计数器的初始值 5秒*/
WDT.WTCNT = (3052 * 5);
*/
while(1)
{
printf("WDT.WTCNT = %d\n",WDT.WTCNT);
/* 添加定时喂狗程序将不会复位 */
/*喂狗*/
WDT.WTCNT = 3052;
Delay(100000);
}
return 0;
}