首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

看门狗介绍(2)

看门狗介绍(2)

看门狗软件复位
  •   看门狗复位电路主要是利用ARM正常工作时,定时复位计数器,使得计数器的值不超过某一值;当ARM不能正常工作时,由于计数器不能被复位,因此其计数会超过某一值,从而产生复位脉冲,使得ARM恢复正常工作状态。
      看门狗复位电路的可靠性主要取决于软件设计,即将定时向复位电路发出脉冲的程序放在何处,在一般设计中,将此段程序放在定时器中断服务子程序中。然而,有时这种设计仍然会引起程序工作不正常,原因主要是,当程序异常发生在定时器初始化及开中断之后时,这种情况就有可能不能由Watch dog复位电路校正回来。
      因为定时器中断一直在产生,即使程序工作不正常,Watch dog也能被正常复位。为此可以使用定时器加预设的设计方法,即在初始化时压入堆栈一个地址,在此地址内执行的是一条关中断和一条死循环语句。在所有不被程序代码占用的地址尽可能地用子程序返回指令代替,这样,当程序异常后,其进入陷阱的可能性将大大增加。而一旦进入陷阱,定时器就会停止工作并且关闭中断,从而使Watch dog复位电路产生一个复位脉冲将ARM复位。
      看门狗应用程序如下所示。




看门狗工作原理
  •   由看门狗WDT引发系统复位的电路结构等效图如图所示。从该图中可以看出,只有当状态信号SLEEP=1,即单片机处于非睡眠状态时,看门狗超时溢出才会引发单片机的复位操作。而在单片机处于睡眠状态,即状态信号SLEEP=0时,看门狗超时溢出会唤醒单片机。

      图  看门狗复位电路结构等效电路
      看门狗就是一个用独立时钟源提供的脉冲进行累加计数的计数器,无需任何外部元件。独立的RC时钟信号源是指RC振荡器与OSC1(ULKIIN)引脚的外接RC振荡器,OSC1和OSC2外接晶体振荡器/陶瓷谐振器构成的单片机系统时钟是分离的。这就意味着,即使单片机进入系统时钟停振的睡眠状态,监视定时器WDT仍然能够运行。
      在单片机执行程序期间,一次看门狗WDT超时溢出,将使单片机产生复位操作(称为WDT复位)。如果单片机处于睡眠状态,一次看门狗WDT超时溢出将使单片机被唤醒,恢复正常运行状态,并且继续执行在进入睡眠之前被搁置的程序(称为WDT唤醒)。
      每次看门狗超时溢出,都会使得状态寄存器STATUS中的了T0位被清0,以记录曾经发生的这次看门狗溢出事件,供作程序查询判断用。
      即当WDTE=0时,看门狗WDT将被永久禁止;当WDTE=1时,看门狗WDT将被永久启用。就是说,只要WDTE被定义成1,以后在用户程序中将再也无法禁止看门狗的运行。
      若想不让看门狗WDT发生超时溢出,在用户程序中只能不停地、周期性地将看门狗计时器清0,使它不会因计数到超过最大值而溢出。
      看门狗计时器的计时周期取决于独立RC振荡源的频率和计时器的宽度,同时在一定程度上受到工作电压、环蟑温度、制作工艺等因素的影响。
      另外,看门狗的超时周期还可以借助于分频器以及分频器的分频比,在一定范围内改变和延长。分频器是否配置给看门狗使用,可以通过用户程序定义选项寄存器OPTION KEG的PSA位进行设置。
继承事业,薪火相传
返回列表