单片机看门狗定义及其作用分析

嵌入式设计应用

128人已加入

描述

  什么是单片机看门狗

  看门狗(WDT)是一个定时器,开启看门狗定时器之后(比如定时200ms),在单片机程序中每隔一定的时间(小于200ms)要“喂狗”一次,即将看门狗定时器清零。这样做的用处是,一旦单片机程序跑飞,没有在定时的时间之内去喂狗,那么定时达到200ms时,看门狗自动将单片机复位。

  在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watchdog)。

  

  单片机看门狗的作用

  看门狗的作用是系统CPU正常工作时定时给看门狗喂狗,复位定时器,如果系统出问题,没有给看门狗喂狗,看门狗就由于超时将CPU复位。

  系统用初始化后注册看门狗中断request_irq(WDT0_ACCSCSSNBARK_INT, wdog_bark_handler, 0, “apps_wdog_bark”, NULL);

  和初始化看门狗的超时时间bark time,

  __raw_writel(timeout, msm_tmr0_base + WDT0_BARK_TIME);

  __raw_writel(timeout + 3*WDT_HZ, msm_tmr0_base + WDT0_BITE_TIME);

  复位看门狗,使能看门狗和中断极性。

  __raw_writel(1, msm_tmr0_base + WDT0_EN);

  __raw_writel(1, msm_tmr0_base + WDT0_RST);

  enable_percpu_irq(WDT0_ACCSCSSNBARK_INT, IRQ_TYPE_EDGE_RISING);

  并且初始化和启动一个定时器,比如10秒一次,

  schedule_delayed_work_on(0, &dogwork_struct, delay_time);

  static DECLARE_DELAYED_WORK(dogwork_struct, pet_watchdog_work);

  static DECLARE_WORK(init_dogwork_struct, init_watchdog_work);

  static struct msm_watchdog_pdata msm_watchdog_pdata = {

  .pet_time = 10000,

  .bark_time = 11000,

  .has_secure = true,

  .needs_expired_enable = true,

  };

  delay_time = msecs_to_jiffies(pdata-》pet_time);

  schedule_work_on(0, &init_dogwork_struct);

  定时器定时时间到了对定时器复位pet dog 和重新启动定时器。

  static void pet_watchdog_work(struct work_struct *work)

  {

  pet_watchdog();

  if (enable)

  schedule_delayed_work_on(0, &dogwork_struct, delay_time);

  }

  如果系统出问题了,没有办法执行定时器的回到函数,那么看门狗就产生中断,执行中断服务程序static irqreturn_t wdog_bark_handler(int irq, void *dev_id),

  执行panic。 panic(“Apps watchdog bark received!”);

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分