在实际的MCU应用系统中,由于常常会受到来白外界的某些干扰,有可能(对规范的设计概率极小)造成程序的跑飞而陷入死循环,从而导致整个系统的陷入停滞状态并且不会自动恢复到可控的工作状态。所以出于对MCU运行的安全考虑,便引入了一种专门的复位监控电路,俗称看门狗(WatchDog)。看门狗电路所起的作用是一旦MCU运行出现故障,就强制对MCU进行硬件复位,使整个系统重新处于可控状态(要想精确恢复到故障之前的运行状态从技术上讲难度大成本高,而复位是最简单且可靠的处理手段)。
在51单片机中AT89S52也有看门狗,由于看门狗已经是MUC运用中非常重要的一个环节,为了节省成本,现在大部分MUC都集成了看门狗的功能。在Stellaris系列CORTEX M4里集成有硬件的看门狗定时器模块。看门狗定时器在到达超时值时会产生不可屏蔽的中断或复位。当系统由于软件错误而无法响应或外部器件不能以期望的方式响应时,使用看门狗定时器可重新获得控制。
最实用的看门狗就是用在:当系统跑飞后,产生一个中断复位,使系统重新复位运行。为了防止在程序跑飞时意外修改看门狗模块的配置,特意引入了一个锁定寄存器,向锁存器中写一个特别酌数字来实现。程序跑飞本身已是罕见的事件,而在一旦发生此罕见事件的情况下又恰好会把这个特别的数字写入锁定寄存器更是不可能。因此可以保证中断复位的产生。
但是,正常情况下程序跑飞是小概率事件,大家如果遇到程序跑飞的情况,应该首先考虑是否是软件编程错误或者硬件的设计错误,这才是跑飞情况下的大概率事件。 首先都是设置外设,看门狗设置需要使用下面几个语句,看门狗可以在第一次超时产生一个中断,第二次超时喂狗。当32位计数器在使能后倒计数到O状态时,看门狗定时器模块产生第一个超时信号,并产生中断触发信号。在发生了第一个超时事件后,32位计数器自动重装并重新递减计数。如果没有清除第一个超时中断状态,则当计数器再次递减到0时,且复位功能已使能,则看门狗定时器会向处理器发出复位信号。
我们下面来编写这样一个功能函数来验证看门狗的功效:程序正常运行时,使得LED1不断地闪烁,并喂狗。当按键按下时,触发GPIO按键中断,处理器进入死循环,看门狗定时器产生第一个超时信号,进入看门狗中断服务程序,LED2不断闪烁,直到看门狗定时器产生第二次超时信号,导致系统复位,系统再次正常运行,LED1恢复不断地闪烁.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !