看门狗

一、概念

看门狗的简称是WDT(Watch Dog Timer),exynos4412scp中的看门狗定时器(WDT)是一种定时装置。

1. 工作原理

由(一般需要客户编写)软件读写定时器相关的寄存器,打开看门狗,并设定计数时间(以秒或分钟计算),定时器计数计满,由软件清零,以表明系统状态正常,这时,定时器计数重新开始,反复,否则,看门狗认为系统异常或有其他特定事件发生,触发系统复位信号,或提供中断,系统正常后重复定时器计数。

这样只要软件正常运行,就不会出现复位或触发中断。当软件死机或运行出错时,由看门狗定时器对系统进行复位或触发中断,从而保证系统的正常运行。

看门狗的定时时间可以由用户设定,这样可以根据需要在指定的时间内复位系统。

2. 作用

看门狗的作用是微处理器收到干扰进入错误状态后,使系统在一定时间间隔内复位。因此看门狗是保证系统长期、可靠和稳定运行的有效措施。目前大部分的嵌入式芯片内部都集成了看门狗定时器来提高系统运行的可靠性。

4412处理器的看门狗是当系统由于噪音和系统错误而出现故障后,用于处理器的复位操作,也可以作为一个通用的16位定时器来请求中断操作。看门狗定时器产生128个PCLK周期的复位信号。主要特性有如下两个。

1)通用的中断方式的16位定时器。

2)当计数器减到0(发生溢出)时,产生128个PCLK周期的复位信号。

3. Watchdog Timer Block Diagram



看门狗模块包括一个预比例因子放大器,一个四分频的分频器,一个16位计数器。

看门狗的时钟信号源来自PCLK,为了得到宽范围的看门狗信号,PCLK先被预分频,然后再进过分频器分频。预分频比例因子和分频器的分频值,都可以由看门狗控制寄存器(WTCON)决定,预分频比例因子的范围是0~255,分频器的分频比可以是16、32、64或128。看门狗定时器时钟周期的计算如下:



式中Prescaler value 为预分频比例放大器的值;Divison_factor是四分频的分频比,可以是16、32、64或128。

4. 工作流程

一旦看门狗定时器被允许,看门狗定时器数据寄存器(WTDAT)的值就不能被自动地装在到看门狗定时器(WTCNT)中。因此,看门狗启动前要将一个初始值写入看门狗计数器(WTCNT)中。

【注意】

当4412用嵌入式ICE调试时,看门狗定时器的复位功能就不被启动,看门狗定时器能从CPU内核信号判断出当前CPU是否处于调试状态。如果看门狗定时器确定当前模式是调试模式,尽管看门狗产生溢出信号,但是仍然不会产生复位信号。

每个时钟周期都会将看门狗定时计数器WTCNT里的值减1,当计数器WTCNT里的值变为0时开始执行超时操作,首先,判断看门狗控制寄存器里bit2 WTCON[2]设置情况,如果为1则产生中断信号,引起系统中断,如果为0不做任何操作,进入复位信号产生器,如果WTCON[0]位为1,则产生控制器复位信号,否则不做任何操作。每次超时操作之后,看门狗WTCON会自动加载看门狗数据寄存器WTDAT里的用户设置值,继续执行递减操作。

二、寄存器设置

1)看门狗定时器控制寄存器(WTCON)



WTCON寄存器的内容包括:

  1. WDT timer:[5] 用户是否启动看门狗定时器、
  2. Clock select:[4:3] 4个分频比的选择、
  3. Interrupt generation:[2] 是否允许中断产生、
  4. Reset enable/disable: [0] 是否允许复位操作等。

1) 使用起看门狗功能

开启看门狗复位功能、允许中断、16分频、开启看门狗定时器、Prescaler value设置为249

WDT.WTCON = (249 << 8) | (1 << 5) | (1 << 2)|(1 << 0);

2)当普通定时器使用

如果用户想把看门狗定时当做一般定时器使用,应该中断使能,禁止看门狗定时器复位。

WDT.WTCON = (249 << 8) | (1 << 5) | (1 << 2);

2) 看门狗定时器数据寄存器(WTDAT)



WTDAT用于指定超时时间,在看门狗把复位功能禁止并打开中断使能后,此时看门狗定时器就是一个普通的定时器,使用方法和普通定时器一样。当使用复位功能后,由于WTCNT的值减到0时,系统就会复位,所以WTDAT的值装不进看门狗计数寄存器(WTCNT)中。复位后初始值为0x8000。

3) 看门狗计数寄存器(WTCNT) 喂狗用

WTCNT包含看门狗定时器工作的时候,计数器的当前计数值。WTCNT描述如下:

4) WTCLRINT

写入任意值清中断。

三、看门狗定时器的程序编写

1、看门狗软件程序设计流程

因为看门狗是对系统地复位或中断的操作,所以不需要外围的硬件电路。要实现看门狗的功能,只需要对看门狗的寄存器组进行操作,即对看门狗的控制寄存器(WTCON)、看门狗数据寄存器(WTDAT)、看门狗计数寄存器(WTCNT)的操作。

其一般流程如下:

  1. 设置看门狗中断操作,包括全局中断和看门狗中断使能及看门狗中断向量的定义,如果只是进行复位操作,这一步不用设置。

  2. 对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子、分频器的分频值,中断使能和复位使能等。

  3. 对看门狗数据寄存器(WTDAT)和看门狗计数寄存器(WTCNT)的设置。

  4. 启动看门狗定时器。

void do_irq(void)
{
static int a = 1;
int irq_num;
irq_num = CPU0.ICCIAR&0x3ff; //获取中断号
switch(irq_num)
{ case 75:
printf("in the WDT interrupt!\n");
//WDT.WTCNT = 25000;//喂狗
WDT.WTCLRINT = 0;
ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 11); //清GIC中断标志位
break;
}
CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num; //清cpu中断标志位
}
void wdt_init(void)
{
WDT.WTCON = (249 << 8) | (1 << 5) | (1 << 2)|(1 << 0);//复位使能
//WDT.WTCON = (249 << 8) | (1 << 5) | (1 << 2); //关闭复位使能
WDT.WTDAT = 25000;
ICDDCR = 1; //使能分配器
ICDISER.ICDISER2 = ICDISER.ICDISER2 | (0x1 << 11); //使能相应中断到分配器
ICDIPTR.ICDIPTR18 = ICDIPTR.ICDIPTR18 & (~(0xff << 24))|(0x1 << 24); //选择CPU接口
CPU0.ICCPMR = 255; //中断屏蔽优先级
CPU0.ICCICR = 1; //使能中断到CPU
}
int main (void)
{
wdt_init();
printf("hello reset!\n");
while(1)
{
WDT.WTCNT = 25000;//喂狗,如果一旦停止喂狗,系统就reset
mydelay_ms(100);
}
return 0;
}

上述是正确运行的代码,将WDT.WTCNT = 25000; 注释掉,就会停止喂狗,超时后系统就会reset。

14. 从0学ARM-exynos4412-看门狗裸机程序编写的更多相关文章

  1. 13. 从0学ARM-Cortex-A9 RTC裸机程序编写

    一.RTC RTC(Real-Time Clock) 实时时钟. RTC是集成电路,通常称为时钟芯片.在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关 ...

  2. linux设备驱动归纳总结(十一):写个简单的看门狗驱动【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-112879.html linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxx ...

  3. at91 看门狗

    看 门狗的驱动一般来说比较简单,只要做寄存器的设置实现开启.关闭.喂狗功能.本项目中我们使用的是at91sam9g45处理器,带有看门狗定时器.这个 看门狗的驱动却比较复杂,应用层想用它的话,将涉及到 ...

  4. 【Linux开发】linux设备驱动归纳总结(十一):写个简单的看门狗驱动

    linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  5. mini2440裸机试炼之——看门狗中断和复位操作

    看门狗的工作原理: 设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器 ...

  6. tiny4412 裸机程序 三、关闭看门狗和调用C程序【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37112779 一.原理说明 上是章中大家可能有会觉得奇怪,CPU不是有看门狗嘛?为什么CPU没有 ...

  7. (stm32f103学习总结)—独立看门狗(IWDG)

    一.IWDG介绍 1.1 IWDG简介 STM32F1芯片内部含有两个看门狗外设,一个是独立看门狗IWDG,另 一个是窗口看门狗WWDG.两个看门狗外设(独立和窗口)均可用于检测 并解决由软件错误导致 ...

  8. STM32之看门狗(独立与窗口)

    广大的互联网网友们,大家早上中午晚上好,我是某某某..对于狗..看过<忠犬八公>的我.无不深深的被狗的义气与灵气所震撼..我也觉得在所有mcu中用看门狗来形容让系统复位的功能是很恰当的.也 ...

  9. [ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG

    引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~ 1.看门狗概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一 ...

随机推荐

  1. 【Docker】CentOS7 上无网络情况下安装

    自建虚拟机,但是连接不上网络,只能通过下载rpm包进行安装docker 环境:CentOS 7.3.1611 x64 rpm镜像下载地址用的阿里的https://mirrors.aliyun.com/ ...

  2. kubernetes机理之调度器以及控制器

    一 了解调度器 1.1  调度器是如何将一个pod调度到节点上的 我们都已然知晓了,API服务器不会主动的去创建pod,只是拉起系统组件,这些组件订阅资源状态的通知,之后创建相应的资源,而负责调度po ...

  3. Kubernetes CoreDNS 状态是 CrashLoopBackOff 报错

    查看状态的时候,遇见coredns出现crashlookbackoff,首先我们来进行排错,不管是什么原因,查看coredns的详细信息,以及logs [root@k8s-master coredns ...

  4. linux多路径(multipath)

    https://www.itread01.com/articles/1475909423.html

  5. Python批量 png转ico

    Python 批量 png 转 ico 一.前言: 首先说一下ico文件的作用:ico是windows的图标文件格式,可以用于浏览器首段图标显示,也可以用于Windows软件.我的话一般用来美化文件夹 ...

  6. Django Full Coverage

    Django(个人推荐, 如果项目较大 需要协同开发, 建议使用django这种重量级框架, 如果类似于纯api的后端应用建议使用 flask, 轻量小巧 , 麻雀虽小五脏俱全) 1.Django是什 ...

  7. DNS是如何工作的?

    今天很多人都在讲域名系统和互联网作为一个整体是如何工作的,域名系统---也就是大家所熟知的DNS.不幸的是,对于天龙人和普通人来说,他们并不了解DNS到底是什么鬼.今天就来聊聊DNS,和那些想了解DN ...

  8. vfd-cloud——一个适合练习上手的云存储网盘springboot项目(开发中)

    vfd-cloud           ​ 一个基于SpringBoot的云存储网盘项目,适合练手学习SpringBoot,用到的技术栈列到了下面.支持用户的注册登陆及修改密码,利用邮箱进行验证.支持 ...

  9. Servlet中的一些注意事项

    servlet中的一些注意事项 1 什么是servlet? 1)Servlet是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案.而具体的Servle ...

  10. 基于GTID恢复误篡改数据

    问题描述:创建测试库和测试表,先update数据,在delete数据,在update数据,通过gtid查找两次update的值. 参考文档:https://baijiahao.baidu.com/s? ...