Watchdog ============ 概述 ------- 看门狗(WDG)实质上是一种定时器,当计时达到设定数值后超时会引起系统复位。 当程序开始运行后,WDG 开始计数,系统会在 WDG 达到设定数值之前发出喂狗信号指示 WDG 置零,并重新开始计数,以保证系统继续正常运行。若 WDG 在设定时间内未收到喂狗信号而导致计数超时,则判定所属系统出现异常,并产生复位信号,从而达到保护系统的目的。 WQ7036 每个 CPU/DSP 有一个 WDG 模块,此外还有一个 PMU WDG 用于 Always ON 检测全局复位。 功能特性 ------------------ - 配置密码保护,若写入密码错误则不可进行写入配置。 - feeddog 操作码保护,写入正确的码才能喂狗成功。 - 产生 timeout 中断。 - 计数 counter 和超时状态开关。 工作原理 --------- WDG 计数器在时钟有效和复位撤销后开始计数,计数到设定值时产生 inter_wdg 中断信号并清零计数器,重新开始计数。WDG 每到达一次设定值,timeout、cpurst 和 fullrst 计数器各加 1。这三个计数器到达各自的设定值时产生 timeout 中断、CPU 复位和全局复位请求。 .. image:: ../../../_static/WDG_operation_principle.png :align: center .. centered:: WDG 工作原理图 用法流程 --------- - 初始化 :c:func:`wq_wdt_init` :c:func:`wq_wdt_global_init` - 使能看门狗 :c:func:`wq_wdt_enable` :c:func:`wq_wdt_global_enable` - 喂狗 :c:func:`wq_wdt_do_feed` :c:func:`wq_wdt_global_do_feed` - 设置超时时间 :c:func:`wq_wdt_set_feed_period` :c:func:`wq_wdt_global_set_feed_period` - 判断是否需要喂狗 :c:func:`wq_wdt_need_feed` :c:func:`wq_wdt_global_need_feed` - 重启看门狗 :c:func:`wq_wdt_do_reset` :c:func:`wq_wdt_global_do_reset` - 关闭看门狗 :c:func:`wq_wdt_disable` :c:func:`wq_wdt_global_disable` :c:func:`wq_wdt_disable_all` API 介绍 ------------- .. doxygenfile:: wq_wdt.h