青风和大家一起学Stellaris系列ARM——五.看门狗的使用

 在实际的MCU应用系统中,由于常常会受到来自外界的某些干扰,有可能(对规范的设计概率极小)造成程序的跑飞而陷入死循环,从而导致整个系统的陷入停滞状态并且不会自动恢复到可控的工作状态。所以出于对MCU运行的安全考虑,便引入了一种专门的复位监控电路,俗称看门狗(WatchDog)。看门狗电路所起的作用是一旦MCU运行出现故障,就强制对MCU进行硬件复位,使整个系统重新处于可控状态(要想精确恢复到故障之前的运行状态从技术上讲难度大成本高,而复位是最简单且可靠的处理手段)。

    在51单片机中AT89S52也有看门狗,由于看门狗已经是MUC运用中非常重要的以个环节,为了节省成本,现在大部分MUC都集成了看门狗的功能。

Stellaris系列ARM里集成有硬件的看门狗定时器模块。看门狗定时器在到达超时值时会产生不可屏蔽的中断或复位。当系统由于软件错误而无法响应或外部器件不能以期望的方式响应时,使用看门狗定时器可重新获得控制。

 最实用的看门狗就是用在:当系统跑飞后,产生一个中断复位,使系统重新复位运行。为了防止在程序跑飞时意外修改看门狗模块的配置,特意引入了一个锁定寄存器。在配置看门狗定时器之后,只要写入锁定寄存器一个不是0x1ACCE551的任何数值,看门狗模块的所有配置都会被锁定,拒绝软件修改。因此以后要修改看门狗模块的配置,包括清除中断状态(即喂狗操作),都必须要首先解锁。解锁方法是向锁定寄存器写入数值0x1ACCE551。这是个很特别的数字,程序跑飞本身已是罕见的事件,而在一旦发生此罕见事件的情况下又恰好会把这个特别的数字写入锁定寄存器更是不可能。因此可以保证中断复位的产生。

 

但是,正常情况下,程序跑飞是小概率事件,大家如果遇到程序跑飞的情况,应该首先考虑是否是软件编程错误或者硬件的设计错误,这才是跑飞情况下的大概率事件。如果实在是没有发现任何软硬件方面的设计错误,才可以考虑采用看门狗复位。

首先都是设置外设,看门狗设置需要实用下面几个语句,看门狗可以在第一次超时产生一个中断,第二次超时喂狗。

看门狗定时器具有“二次超时”特性。当32位计数器在使能后倒计数到0状态时,看门狗定时器模块产生第一个超时信号,并产生中断触发信号。在发生了第一个超时事件后,32位计数器自动重装并重新递减计数。如果没有清除第一个超时中断状态,则当计数器再次递减到0时,且复位功能已使能,则看门狗定时器会向处理器发出复位信号。

 

 我们下面来编写这样一个功能函数来验证看门狗的功效:

程序正常运行时,使得LED1不断地闪烁,并喂狗。当按键按下时,触发GPIO按键中断,处理器进入死循环,看门狗定时器产生第一个超时信号,进入看门狗中断服务程序,LED2不断闪烁,直到看门狗定时器产生第二次超时信号,导致系统复位,系统再次正常运行,LED1恢复不断地闪烁。

http://www.eefocus.com/bbs/article_1079_179870.html


你可能感兴趣的:(青风和大家一起学Stellaris系列ARM——五.看门狗的使用)