看门狗与定时器关系

ARM体系结构-看门狗

一、什么是看门狗

1、看门狗,又叫 watchdog,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到CPU系统。 看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。
2、可以想象一下,系统在运行的时候,系统怎么判断自己是否允许正常?一个思路就是,设备在一般正常情况下,会重复做一件事情,假如检测到这个事情没有做了,就认为系统异常,就会执行相应的操作。比如说有个模块设备在计数,进行减一操作,例如从1000减到0,当减到0时,认为系统异常,执行相应操作。若系统正常,每隔一段时间就给重新计数,就是在值还没有减到0的时候,重新给一个值1000.即在正常情况下,设备的值始终无法减到0.
3、看门狗定时器和普通的定时器并无本质区别。
4、定时器可以设定一个时间,在这个时间完成之前定时器不断计时,时间到的时候定时器会复位CPU(重启系统)。

二、为什么会有看门狗

1、现实中因为一些外部因素,电子设备经常会跑飞或者死机(譬如极端炎热、极端寒冷、工业复杂场合)。在这种情况下我们希望设备自动复位而不需要人工干预(无人值守)。看门狗用来完成这个工作。看门狗其实是我们SoC内部的一个定时器(类似于闹钟,类似于门口的狗),定好时间之后看门狗定时器会去计时,时间到之前(狗饿了之前)必须去重新置位看门狗定时器(喂狗),如果没有喂狗则系统会被强制复位。
2、系统在正常工作时,系统软件会自己去喂狗,所以看门狗定时器不会复位。但是系统一旦故障跑飞啥的,看门狗就没人喂了,然后下一个周期就会自动复位,达到我们期望的效果。
3、一般CPU设计,在CPU启动后看门狗默认是工作的(为什么默认不关闭而要工作?我猜测是因为怕你的程序在启动代码前端就死机了或者跑飞了没人管),好处就是没有空当和漏洞,坏处就是在启动代码段我们不方便去喂狗(或者说懒得去喂狗)时看门狗会复位,所以为了偷懒我们就在启动代码前端先去关闭看门狗,然后在后面系统启动起来之后再根据需要决定是否要打开看门狗(一旦打开就必须同时提供喂狗)。

三、看门狗与定时器

1、SOC中自带了一个看门狗,然后这又有一个看门狗定时器。那么这两个有什么区别呢?相同点就是他们的功能都一样,当系统受到干扰、极端环境等可能会产生异常工作或者不工作,这种状态可能会造成不良影响(至少是不工作),此时设备就会自动重启系统。区别就是有时候为了绝对的可靠,我们并不会用SOC中自带的看门狗,而是使用专门的外置的看门狗芯片来实现看门狗。

看门狗操作:
1、看门狗是一种电路,那么肯定就会被控制,,因为看门狗属于内部外设,且没有外部相关的原件与他有关。但是CPU设计者,已经给留了控制看门狗工作的开关。也就是和看门狗相关的寄存器。因此,只需要操作相关的寄存器,就会控制看门狗。

猜你喜欢

转载自blog.csdn.net/weixin_46089486/article/details/108973951