1.WDT简介
Watch Dog Timer即看门狗定时器,其主要作用是当发生软件故障时,可产生复位信号使SOC复位,其本质是一个计数器
WDT工作原理:
2.Exy4412下的WDT控制器
总览:
Exynos 4412 SCP中的监视器计时器(WDT)是一种计时设备。由于噪声和系统错误导致故障后,您可以使用此设备恢复控制器的操作。您可以使用WDT作为一个普通的16位间隔计时器来请求中断服务。WDT产生复位信号。
WDT的特点:
支持具有中断请求的正常时间间隔计时器模式。
如果计时器计数达到0(超时),激活内部重位信号。
支持电平触发的中断机制
WDT使用PCLK作为其源时钟。8位预计算器按PCLK频率生成相应的WDT,并再次划分得到的频率。
上图显示了WDT的功能方框图。WDT控制(WTCON)指定预调节器值和频率划分因子。有效的预计算值范围从0到(28-1)。您可以选择频率划分因子为: 16、32、64或128。使用此公式来计算WDT时钟频率和每个计时器时钟周期的持续时间:
pclk = 100 MHZ;
t_watchdog = 1/(PCLK/(Prescaler value + 1)/Division_factor)
如果Prescaler value = 255,Division_factor = 128;
则 t_watchdog = 3051;
- Register Map Summary
Base Address: 0x1006_000
Register | Offset | Description | Reset Value |
---|---|---|---|
WTCON | 0x0000 | Watchdog timer control register | 0x0000_8021 |
WTDAT | 0x0004 | Watchdog timer data register | 0x0000_8000 |
WTCNT | 0x0008 | Watchdog timer count register | 0x0000_8000 |
WTCLRINT | 0x000C | Watchdog timer interrupt clear register | Undefined |
本次WDT实验主要是要验证在CPU正常运行时,程序间隔地往WDT中赋值,从而让WDT一直存在,当CPU出现错误时,WDT由于不会再被赋值从而减到0,产生复位信号。
主要用到WTCON和WTCNT两个寄存器。
2.1 WTCON
2.1WTCNT
3.WDT编程
#include "exynos_4412.h"
void delay(unsigned int Time)
{while(Time--);
}
int main()
{ /*设置一级分频*/WDT.WTCON = WDT.WTCON | (0xff << 8 );
// WDT.WTCON = WDT./*设置二级分频*/WDT.WTCON = WDT.WTCON | (0x3 << 3);/**WTCNT递减频率 = pclk/256/128 = 3052** *//*禁止中断*/WDT.WTCON = WDT.WTCON & (~(1 << 2));/*使能WDT产生复位信号*/WDT.WTCON = WDT.WTCON | (1 << 0);/*设置计数器的值*/WDT.WTCNT = (3052 * 5);/*使能WDT,计数器开始递减*/WDT.WTCON = WDT.WTCON | (1 << 5);while(1){printf("WDT.WTCNT = %d\n",WDT.WTCNT); /*喂狗*/WDT.WTCNT = 3052;delay(100000);}return 0;
}
本文链接:https://my.lmcjl.com/post/8805.html
展开阅读全文
4 评论