跳转至

独立看门狗(IWDG)


简介

IWDG(独立看门狗)看门狗定时器是一种硬件定时电路,主要用于检测系统是否发生故障。独立看门狗模块基于一个32bit的递减计数器,使用SRC时钟计数,当计数值达到0时,产生中断请求,计数器重载初值再次进行递减计数,再次当计数值到0时若中断未被清除,将产生复位请求,同时计数器停止计数。

CI14LP系列芯片的IWDG时钟来源可选内部RC4M、内部RC32K或外部晶振,通过 scu_iwdg_clk_select() 接口配置。IWDG支持两种异常模式:第1次异常直接复位(IWDG_MODE_ONCE),或第1次异常产生中断、第2次异常产生复位(IWDG_MODE_TWICE)。


API

函数名 描述
iwdg_init 初始化IWDG设备
iwdg_reset_mode 配置IWDG异常复位模式
iwdg_en 使能/关闭IWDG
iwdg_current_count 获取IWDG当前计数值
iwdg_feed IWDG设备喂狗
iwdg_clear_irq 清除IWDG中断
iwdg_get_irq_raw_status 获取IWDG屏蔽前中断状态
iwdg_get_irq_mask_status 获取IWDG屏蔽后中断状态

关键类型

类型/宏 说明
iwdg_base_t IWDG控制器基地址(IWDG)
iwdg_irqen_t 中断开关:IWDG_IRQEN_ENABLE / IWDG_IRQEN_DISABLE
iwdg_mode_t 异常模式:IWDG_MODE_ONCE(第1次异常直接复位)/ IWDG_MODE_TWICE(第1次异常中断,第2次异常复位)
iwdg_init_t 配置结构体:count(计数值)、irq(中断开关)、clk_sel(时钟选择)
scu_iwdg_clk_t 时钟选择:SCU_IWDG_CLK_INNER_RC4M / SCU_IWDG_CLK_INNER_RC32K / SCU_IWDG_CLK_EXT_OSC
IWDG_S_COUNT 计时1s的count值(默认 get_osc_clk() / 6)
IWDG_MS_COUNT 计时1ms的count值(IWDG_S_COUNT / 1000)

示例

以下代码配置并启动IWDG喂狗时间为1S:

#include "ci_iwdg.h"
#include "ci_scu.h"
#include "ci_system.h"

/* 选择IWDG时钟来源为内部RC4M */
scu_iwdg_clk_select(SCU_IWDG_CLK_INNER_RC4M);

/* 配置IWDG并启动 */
iwdg_init_t init;
init.irq = IWDG_IRQEN_ENABLE;      //使能中断
init.clk_sel = SCU_IWDG_CLK_INNER_RC4M;
init.count = IWDG_S_COUNT;         //1s喂狗时间
iwdg_init(IWDG, init);
iwdg_reset_mode(IWDG, IWDG_MODE_ONCE);  //第1次异常直接复位
iwdg_en(IWDG, ENABLE);             //启动IWDG

在主循环或任务中周期调用喂狗:

while(1)
{
    /* 业务代码 */
    iwdg_feed(IWDG);               //喂狗,防止系统复位
}