概述

看门狗定时器(Watchdog Timer, WDG)是一种硬件定时器,主要用于检测和恢复由软件故障引起的系统异常。它是一个自动递减的计数器,期间需要系统周期性地“喂狗”(复位计数器),否则计数器归零后会触发复位。 WDG 可以分为独立看门狗(Independent WDG)和系统看门狗(System WDG),其中系统看门狗又可以分为安全看门狗和非安全看门狗, 看门狗的架构图如下:

功能特性

  • 共同特性

    • 一旦使能后,不能除能。

    • 可选的提前中断功能,可在看门狗超时前的可编程时间生成中断。

    • 每个看门狗定时器都有独立的启动原因。

  • 独立看门狗特有的特性

  • 由 AON 区域的电源和时钟源供电。

  • 可以配置在休眠模式下是否工作。

  • 可以通过提前中断从休眠模式唤醒系统。

  • 当 KM4 或 KM0 处于调试模式时会自动暂停。

  • 使能后,超时时间只能减小,不能增大。

  • 系统看门狗特有的特性

  • 当 KM0 处于调试模式时,WDG0 暂停工作;当 KM4 处于调试模式时,WDG1 和 WDG2 暂停工作。

  • 在休眠模式下暂停工作,并保持设置不变。

  • 使能后,窗口保护功能和超时时间将无法更改。

备注

独立看门狗和系统看门狗都有窗口功能,但是由于 AON 的 100k 时钟是未校准的时钟,所以不建议使能独立看门狗的窗口功能。

硬件默认使能

独立看门狗在 Efuse 中默认使能,系统每次启动时 IWDG 都是使能的,IWDG 的超时时间是 64 秒, 同时软件中会创建 rtos 定时器,每 500 毫秒执行一次喂狗任务。

低功耗模式

  • 在 Deepsleep 状态下,所有看门狗都不能工作。

  • 在 sleep 状态下,系统看门狗不能工作,独立看门狗可以配置在 sleep 状态下继续工作或者暂停工作。

  • 独立看门狗可以在 sleep 状态下继续工作的情形,推荐使能提前中断用于唤醒系统,执行提前中断函数进行喂狗。

复位域

在看门狗计数到 0 时,会触发全局复位。

应用示例

SDK 提供了两类功能示例,帮助开发者了解和使用看门狗功能:

  • mbed 示例

    • 路径:{SDK}\component\example\peripheral\mbed\Watchdog\mbed_watchdog

    • 展示如何在 mbed 环境中实现看门狗控制。

  • raw 示例

    • 路径:{SDK}\component\example\peripheral\raw\Watchdog\raw_watchdog

    • 展示如何在无抽象层的情况下直接控制看门狗。

以下是对 raw 示例功能的简要说明:

备注

要了解示例支持的芯片,请查看示例路径下的 README.md 文件。

API 参考

要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_wdg.h