看门狗功能规范
- 看门狗功能简介
在产品化的嵌入式系统中,为了使系统在异常情况下能自动复位,一般都需要引入看门狗。
看门狗其实就是一个可以在一定时间内被复位的计数器。当看门狗启动后,计数器开始自动计数,经过一定时间,如果没有被复位,计数器溢出就会对CPU产生一个复位信号使系统重启(俗称“被狗咬”)。系统正常运行时,需要在看门狗允许的时间间隔内对看门狗计数器清零(俗称“喂狗”),不让复位信号产生。如果系统不出问题,程序保证按时“喂狗”,一旦程序跑飞,没有“喂狗”,系统“被咬”复位。
- 看门狗的种类
在现在的嵌入式系统中主要可以分为两种类型的看门狗:
1、CPU内部自带的看门狗:此类看门狗一般是将一个芯片中的定时器来作为看门狗,通过程序的初始化,写入初值,设定溢出时间,并启动定时器。程序按时对定时器赋初值(或复位),以免被咬。这种看门狗是可以被禁用的(只要停止这个定时器即可),好比对那只要咬你的狗来个“葵花点穴手”。大部分CPU都内置看门狗,硬件原理可参考各芯片数据手册。
优点:可以通过程序改变溢出时间;可以随时禁用
缺点:需要初始化;如果程序在初始化、启动完成前跑飞或在禁用后跑飞,看门狗就无法复位系统,这样看门狗的作用就没有了,系统恢复能力降低。
- 独立的看门狗芯片:这种看门狗主要有一个用于喂狗的引脚(一般与CPU的GPIO相连)和一个复位引脚(与系统的RESET引脚相连),如果没有在一定时间内改变喂狗脚的电平,复位引脚就会改变状态复位CPU。此类看门狗一上电就开始工作,无法禁用。现在常用的芯片有:CAT705/CAT706、IMP706等等,溢出时间在1.6秒左右。
优点:无须配置,上电即用。无法禁用,系统必须按时喂狗,系统恢复能力高。
缺点:无法灵活配置溢出时间,无法禁用,灵活性降低。
- 功能开发启用
- 启用看门狗
在加特兰芯片中自带看门狗,直接启动配置即可。
- 看门狗配置
1、设置看门狗计时器步骤
将0x55写入WDT_PASSWD寄存器,以获得对WDT_PERIOD寄存器的访 问权限
向WDT_PERIOD寄存器写入一个32位的值。确保首先设置期间注册值。看门狗计时器用WDT_PERIOD计数器的值加载内部计数器,并每时钟周期减少一个计数器。
将0xAA写入WDT_PASSWD寄存器。此密码写入允许您访问WDT_CTRL寄存器。
在WDT_CTRL寄存器中配置以下字段:
(a) Write 1到WDT_CTRL.E字段,以启用看门狗计时器。
(b)写入给WDT_CTRL。事件字段配置看门狗计时器对超时错误做出反应:
写01配置看门狗计时器在超时发生时引发中(IRQ_18)。
Write 00来配置看门狗计时器,以断言指示已发生超时的外部输出信号。
Write 10来配置监督狗定时器来重置ARC EM处理器。
将0写入WDT_CTRL.F字段,表示正在使用一个新的计时器值重置WDT_PERIOD寄存器。
2、在运行时的编程监视器计时器
在运行时,可以使用看门狗计时器执行以下任务:
重置监视器计时器计数器值
可以编程设置一个ARC EM处理器,以将看门狗计时器计数器重置为WDT_PERIOD寄存器中的值。
1.以内核模式将0x5A写入WDT_PASSWD寄存器。
2.ARC EM处理器自动加载来自WDT_PERIOD寄存器的监视器计时器计数器。
禁用监视器定时器
1.以内核模式将0xAA写入WDT_PASSWD寄存器。