1 WDT简介
Watch Dog Timer即看门狗定时器,其主要作用是当发生软件故障时可产生复位信号使SOC复位,其本质是一个计数器(独立于CPU,但是集成在SOC中的芯片)
2 Exynos4412下的WDT控制器
2.1 概述
Exynos 4412 SCP中的看门狗定时器(WDT)是一种计时设备。可以使用该设备在系统错误引起的故障后恢复控制器的操作。可以将WDT用作普通的16位间隔定时器,以请求中断服务。WDT也可以生成复位信号。
2.2 WDT的特性
2.3 工作原理
看门狗定时器使用的时PCLK时钟,100Mhz ,由soc提供给我们。
减到0时可以发送2种信号,中断(和普通定时器一样)和复位(监控CPU)
WTCON寄存器[15:8]位,设置预分频器,降低频率,可以设置0~255,降低1~256倍。
WTCON寄存器[4:3]位,二级分频,再次降低频率,可以降低1/16 1/32 1/64 1/128。
2.4 其他细节
3 WDT寄存器详解
3.1 WTCON控制寄存器
3.2 WTDAT 实时中断寄存器
WTDAT寄存器可以指定超时持续时间。在初始WDT操作中,您无法将WTDAT的内容加载到计时器计数器中。然而,通过使用0x8000(初始值),可以驱动WDT计数器首次超时。设置Count reload value每当超时,都会把WTDAT里的值复制到WTCNT中,来产生实时中断。
3.3 WTCNT 递减计数器
不好超过65535
3.4 WTCLRINT清除中断寄存器
4 WDT编程
#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*/
WDT.WTCON = WDT.WTCON | (0x3 << 3);
/*禁止WDT产生中断信号*/
WDT.WTCON = WDT.WTCON & (~(1 << 2));
/*使能WDT产生复位信号*/
WDT.WTCON = WDT.WTCON | 1;
/*设置计数器的初始值*/
WDT.WTCNT = (3052 * 5);
/*使能WDT,计数器开始递减*/
WDT.WTCON = WDT.WTCON | (1 << 5);
while(1)
{
printf("WDT.WTCNT = %dn",WDT.WTCNT);
/*喂狗*/
//WDT.WTCNT = 3052;
Delay(100000);
}
return 0;
}
编程实现将WDT的递减频率设置为10000HZ,程序运行5s后开发板复位
#include "exynos_4412.h"
void Delay(unsigned int Time)
{
while(Time--);
}
int main()
{
/*设置一级分频*/
WDT.WTCON = WDT.WTCON | (0x4D << 8);
/*设置二级分频*/
/*WTCNT递减频率 = PLCK(100000000)/(0x4D + 1)/128 ≈ 10000*/
WDT.WTCON = WDT.WTCON | (0x3 << 3);
/*禁止WDT产生中断信号*/
WDT.WTCON = WDT.WTCON & (~(1 << 2));
/*使能WDT产生复位信号*/
WDT.WTCON = WDT.WTCON | 1;
/*设置计数器的初始值*/
WDT.WTCNT = (10000 * 5);
/*使能WDT,计数器开始递减*/
WDT.WTCON = WDT.WTCON | (1 << 5);
while(1)
{
printf("WDT.WTCNT = %dn",WDT.WTCNT);
/*喂狗*/
//WDT.WTCNT = 10000;
Delay(100000);
}
return 0;
}
注:开发板已经帮我们实现了串口的功能,所以直接调用printf即可,否则串口也不会打印上电的信息。
原文地址:https://blog.csdn.net/m0_60718520/article/details/134656995
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_27078.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!