WWDG ######## .. toctree:: :maxdepth: 2 :caption: 目录: .. contents:: 目录 :depth: 3 简介 ==== Nuclei窗口看门狗(WWDG)用于检测软件故障的发生,通常由外部干扰或不可预见的逻辑条件引起,这些条件导致应用程序放弃其正常序列。看门狗电路在编程时间段到期时生成MCU复位,除非程序在T[21:6]位变为清零之前刷新递减计数器的内容。如果在递减计数器达到窗口寄存器值之前刷新22位递减计数器值(在控制寄存器中),也会生成MCU复位。这意味着计数器必须在有限的窗口内刷新。 WWDG的块图如图4.1所示。 .. figur/assets/images/ip/nuclei_wwdg_doc/images/wwdg_top.jpg :alt: WWDG块图 :name: figure_wwdg_block 图4.1: WWDG块图 主要特性 ======== WWDG的主要特性如下: • 可编程的自由运行递减计数器 • 条件复位: - 复位(如果看门狗激活)当递减计数器值变为小于0x40时 - 复位(如果看门狗激活)如果在窗口外重新加载递减计数器 • 早期唤醒中断(EWI):当递减计数器等于0x40时触发(如果启用且看门狗激活) • 在JTAG调试模式下计数器冻结 功能描述 ======== 如果看门狗被激活(在WWDG_CR寄存器中设置WDGA位),当22位递减计数器(T[21:0]位)从0x40滚动到0x3F(T[21:6]变为清零)时,它启动复位。如果软件在计数器大于存储在窗口寄存器中的值时重新加载计数器,则生成复位。 应用程序必须在正常操作期间定期写入WWDG_CR寄存器以防止MCU复位。此操作必须仅在计数器值低于窗口寄存器值时发生。 当WWDG运行时,WWDG_CFR寄存器不能更改。如果应用程序想要更改WWDG_CFR寄存器值,此过程应在WWDG模块被icb_rstn复位后进行,这可能由子系统的复位控制单元或WWDG复位产生。存储在WWDG_CFR寄存器中的值必须大于0x40。 启用看门狗 ---------- 看门狗在复位后总是禁用的。通过在WWDG_CR寄存器中设置WDGA位来启用它,然后除了复位之外不能再次禁用它。 控制递减计数器 -------------- 当看门狗功能启用时,必须设置T[21:0]位以防止立即产生复位。T[21:0]位包含表示看门狗产生复位前时间延迟的增量数。时间延迟会发生变化由于在写入WWDG_CR时预分频器的状态未知,因此其值介于最小值和最大值之间寄存器(参见图WWDG时序图(第9页))。配置寄存器(WWDG_CFR)包含上限值窗口机制:为防止重置,当递减计数器的值低于窗口寄存器时,必须重新加载递减计数器数值且大于0x3F。图WWDG时序图(第9页)描述了窗口看门狗过程。 高级看门狗中断功能 ------------------ 早期唤醒中断(EWI)可用于在生成实际复位之前必须执行特定安全操作或数据记录。通过在WWDG_CFR寄存器中设置EWI位来启用EWI中断。当递减计数器达到值0x40时,生成EWI中断,相应的中断服务程序(ISR)可用于在复位设备之前触发特定操作(如通信或数据记录)。 在某些应用中,EWI中断可用于管理软件系统检查和/或系统恢复/优雅降级,而不生成WWDG复位。在这种情况下,相应的中断服务程序(ISR)应重新加载WWDG计数器以避免WWDG复位,然后触发所需的操作。 通过向WWDG_SR寄存器中的EWIF位写入'0'来清除EWI中断。 如何编程看门狗超时 ------------------ 您可以使用图6.1 WWDG时序图中的公式来计算WWDG超时。 .. warning:: 写入WWDG_CR寄存器时,始终确保T[21:6]不是0x0以避免产生立即复位。 .. figur/assets/images/ip/nuclei_wwdg_doc/images/wwdg_timing_diagram.jpg :alt: WWDG时序图 :name: figure_wwdg_timing 图6.1: WWDG时序图 计算超时值的公式为: twwdg = twwdg_clk * 4096 * 2^WDGTB[2:0] * (T[21:0]+1) 其中: - twwdg: WWDG超时 - twwdg_clk: WWDG的时钟,以ms为单位测量 - 4096: 对应于内部分频器的值 例如,假设ICB_CLK频率等于24 MHz,WDGTB[2:0]设置为3,T[21:0]设置为63: tWWDG = (1/24000) * 4096 * 2^3 * (63 + 1) = 87.38ms 调试模式 -------- 当子系统进入调试模式时,WWDG计数器根据接口状态(dbg_wwdg_stop)继续正常工作或停止。 中断 ==== .. list-table:: 表 7.1: WWDG中断请求 :header-rows: 1 :widths: auto * - 中断事件 - 使能控制位 * - EWIF - EWI 寄存器 ====== WWDG寄存器 ---------- WWDG中寄存器和相应的偏移地址如下表所示: .. list-table:: 表 8.1: WWDG中寄存器的偏移地址 :header-rows: 1 :widths: auto * - 偏移地址 - 寄存器名称 - 功能描述 * - 0x0 - WWDG_CR - 控制寄存器 * - 0x4 - WWDG_CFR - 配置寄存器 * - 0x8 - WWDG_SR - 状态寄存器 * - 0xC - WWDG_VER - IP_VERSION WWDG_CR ~~~~~~~ 地址偏移:0x0 .. list-table:: 表 8.2: WWDG_CR格式 :header-rows: 1 :widths: 12 10 10 10 58 * - 字段 - 位 - 访问 - 复位值 - 描述 * - T - 21:0 - RW - 0x7f - - 22 位计数器 - 写入:初始计数器值 - 读取:返回运行计数器值或初始计数器 - 注意:如果 WWDG 设计处于安全配置中,对于某些安全应用,读取响应计数器是初始值 * - 保留 - 30:22 - / - 0x0 - / * - WDGA - 31 - RW - 0x0 - - 激活位 - 此位由软件设置,仅在复位后由硬件清除。当 WDGA=1 时,看门狗可以生成复位 - 1'b0:看门狗禁用 - 1'b1:看门狗启用 WWDG_CFR ~~~~~~~~ 地址偏移:0x4 .. list-table:: 表 8.3: WWDG_CFR格式 :header-rows: 1 :widths: 12 10 10 10 58 * - 字段 - 位 - 访问 - 复位值 - 描述 * - W - 21:0 - RW - 0x7f - 22 位窗口值,W 字段包含要与递减计数器比较的窗口值 * - 保留 - 27:22 - / - 0x0 - / * - WDGTB - 30:28 - RW - 0x0 - - 预分频器的时间基数可按如下方式修改 - 3'b000:CK 计数器时钟 (PCLK1 div 4096) div 1 - 3'b001:CK 计数器时钟 (PCLK1 div 4096) div 2 - 3'b010:CK 计数器时钟 (PCLK1 div 4096) div 4 - 3'b011:CK 计数器时钟 (PCLK1 div 4096) div 8 - 3'b100:CK 计数器时钟 (PCLK1 div 4096) div 16 - 3'b101:CK 计数器时钟 (PCLK1 div 4096) div 32 - 3'b110:CK 计数器时钟 (PCLK1 div 4096) div 64 - 3'b111:CK 计数器时钟 (PCLK1 div 4096) div 128 * - EWI - 31 - RW - 0x0 - - WWDG 复位中断启用。当 EWI 字段设置时,当计数器达到值 0x40 时发生中断 - 1'b0:禁用 - 1'b1:启用 .. note:: 当WWDG运行时,不应调整WWDG_CFR寄存器。 WWDG_SR ~~~~~~~ 地址偏移:0x8 .. list-table:: 表 8.4: WWDG_SR格式 :header-rows: 1 :widths: 12 10 10 10 58 * - 字段 - 位 - 访问 - 复位值 - 描述 * - EWIF - 0 - W0C - 0x0 - - 早期唤醒中断标志 - 当计数器达到值 0x40 时由硬件设置。必须通过软件写入 0 来清除。写入 1 无效。如果中断未启用,此位也会设置 * - T_UPD - 1 - RO - 0x0 - - 看门狗计数器值更新标志 - 此位由硬件设置以指示看门狗计数的更新正在进行。如果更新过程完成,此位将由硬件清除 - 1'b0:更新过程完成 - 1'b1:更新过程正在进行 * - 保留 - 31:2 - / - 0x0 - / WWDG_VERSION ~~~~~~~~~~~~ 地址偏移:0xC .. list-table:: 表 8.5: WWDG_VER格式 :header-rows: 1 :widths: 12 10 10 10 58 * - 字段 - 位 - 访问 - 复位值 - 描述 * - VERSION_NUM - 31:0 - RO - 0x0001_0301 - WWDG 的 IP 版本