HT8 MCU 看门狗 (WDT) 应用范例 防止死机 文件编码 :AN0426S 简介 Holtek Flash MCU 提供了一个功能单元 WDT (Watch Dog Timer) 看门狗定时器, 其最主要的功能是避免程序因不可预期的因素 ( 如 : 电路噪声 ) 造成系统长时间的瘫痪 ( 如 : 跳至死循环或未知地址造成无法预测的结果 ) 功能说明 Holtek 新推出的 MCU 已无 2 Instructions 清看门狗架构, 都为 1 Instruction 清看门狗 (CLR WDT) 架构, 说明如下 WDTC Register WE4~WE0 bits Reset MCU HALT Instruction CLR WDT Instruction CLR LIRC LXT M U X f SUB 11-stage Divider Low Speed Oscillator Configuration option 8-to-1 MUX 7-stage Divider WDT Time-out (2 n /f SUB ~ 2 m /f SUB) WS2~WS0 Watchdog Timer 注 : 不同 MCU 的看门狗计数频率来源有 f LXT f SYS /4 f LIRC f SYS 中的至少一个, 以及溢出 时间的 n m 值并不完全相同, 具体情况应以实际 MCU datasheet 所提供参数为准 上图为一般 HT8 微控制器的 WDT 架构, 其计数频率 (f SUB ) 来源来自芯片内部振荡器 LIRC 或外部振荡器 LXT WDTC 除了选择 WDT 计数频率来源 (WS2~WS0) 之外, 还控制 WDT 的启动与复位 (WE4~WE0:01010/10101 WDT 使能, 其它值 MCU 复位 ) 当 WDT 溢出时会启动系统复位机制, 若发生不可预期的因素导致程序运行异常时, 造成无法在预期的时间内执行 WDT 清除指令, 此时因 WDT 计数溢出导致系统复位, 使 MCU 重新恢复原程序的运行 WDT 溢出时间的选择视系统的应用需求而定 溢出时间越短, 系统瘫痪后重新恢复的速度越快, 但因单位时间内需执行 WDT 清除指令较多, 将致使 MCU 效率降低 选用较长的溢出时间, 虽可减少 WDT 清除指令的执行频率, 但系统恢复正常运行所需的时间也较长 需特别注意, 使用 LIRC 振荡器作为 WDT 的计数频率来源, 这样其时钟周期会随 V DD, 温度的变化而发生变化 AN0426S V1.00 1/ 10 2016-12-09
工作原理 WDT 的操作状态 ( 溢出或是清零 ) 会影响到状态寄存器的 TO 和 PDF 位, 请见下图 如果 WDT 产生计数溢出,MCU 会自动复位 (Reset) 回到初始状态, 让程序从头开始执行 ( 此时会设定 TO=1), 避免长时间的死机 若是在正常工作模式 (Normal Mode) 下发生 WDT 计数溢出, 此时系统会自动产生 " 芯片复位 (Chip Reset)" 动作, 让系统内部所有特殊功能寄存器恢复至初始状态 如果计数溢出是发生在 IDLE 或 SLEEP 模式时, 只有程序计数器 PC 和堆栈指针 SP 会被复位为 "0h", 此即热复位 看门狗定时器控制寄存器 WDTC 寄存器用于控制 WDT 功能的使能 / 除能及选择溢出周期, 寄存器结合配置选项控制看门狗定时器的工作 看门狗定时器控制寄存器 WDTC 配置选项请见下图 注 :WDTC 配置略有不同, 具体内容请参考具体单片机的规格书 AN0426S V1.00 2/ 10 2016-12-09
看门狗定时器操作 当 WDT 溢出时, 它产生一个芯片复位的动作 这也就意味着正常工作期间, 用户需要在应 用程序中看门狗溢出前适时清看门狗定时器, 防止 MCU 复位, 可使用清除看门狗指令实现 无论什么原因, 程序失常跳转到一个未知的地址或进入一个死循环, 这些清除指令都不能被正确执行, 此种情况下, 看门狗将溢出以使 MCU 复位, 通过配置选项选择看门狗定时器的一些选项, 如使能控制及时钟源选择 WDTC 寄存器中的 WE4 ~ WE0 位用来使能看门狗定时器及其复位控制 刚上电时这些位被设置为 01010 将这些位设置成 01010, 则看门狗会有最强的抗干扰性 程序正常运行时,WDT 溢出将导致芯片复位, 并置位状态标志 TO 位, 若系统处于休眠或空闲模式, 当 WDT 发生溢出时, 状态寄存器中的 TO 应置位, 仅 PC 和堆栈指针复位 有三种方法可以用来清除 WDT 的内容 第一种是外部硬件复位, 即将复位引脚置位低电平 第二种是通过软件清除指令, 第三种是通过 "HALT" 指令 软件指令使用 "CLR WDT" 清除看门狗寄存器, 只要执行 "CLR WDT" 便清除 WDT 当设定分频比为 2 15 时, 溢出周期最大 例如, 时钟源为 32.768kHz LXT 振荡器, 分频比为 2 15 时最大溢出周期约 1S, 分频比为 2 8 时最小溢出周期约 7.8ms 如果看门狗定时器的时钟源为 f SYS /4 时钟, 应当注意的是, 当系统进入休眠模式或 IDLE0 模式, 那么指令时钟停止且看门狗定时器可能会失去保护的作用 如果系统需要在嘈杂的环境中运行, 强烈推荐使用 f SUB 时钟源 看门狗定时器 (WDT) 的典型应用 防止 MCU 闭锁是 WDT 的一个典型应用, 通常软件有一个 " 主循环 " 程序, 用其调用子程序以实现不同的任务 每次程序循环对 WDT 进行一次复位, 如果任何原因造成程序循环操作失败, 看门狗定时器则发生超时, 对系统进行复位 具有 WDT 功能的系统非常适合检测误码, 中断 ( 包括储存器故障,EMI 对储存器或接口放电 ) 可能导致处理器输入 输出数据的极性翻转, 当误码没引入到程序信息中时, 微处理器将会执行错误的代码 很有可能造成处理器的开始执行操作数, 而非操作代码 程序开始执行这种错误代码时, 将造成程序运行不正常, 无法提供看门狗清零信号, 从而导致处理器复位 需要注意的是,WDT 不能检测瞬态系统故障, 按照定义, 只有在 WDT 计数器达到预定的时间间隔时才会复位处理器 正是这一原因, 需要选择一个最短超时周期, 以便在系统失控前由 WDT 产生复位, 使系统恢复正常工作 如果系统处于休眠状态,WDT 溢出将置位 TO 标志位并唤醒系统, 使系统继续正常操作 如果看门狗定时器需要高精度的计时, 可以采用外部时钟源提供看门狗定时器所需时钟 AN0426S V1.00 3/ 10 2016-12-09
硬件说明 说明 : 在此以 HT45F3520 应用电路为例 对 WDT 而言, 如果看门狗定时器发生溢出, 系 统将复位, 在 HT45F3520 外围连接 LED 灯, 用于观察看门狗定时器是否溢出 按 键用于控制系统是否正确清除看门狗定时器 软件说明 S/W Flowchart ( 范例 1) 开始 关闭 A/D 功能将 I/O 端口设为通用 I/O 端口 使能 WDT 功能, 设置溢出周期为 1s, 设置 PA1 与 PA3 为输出类型 清零看门狗定时器, 设置 PA.1 位为 High 按键是否按下? N Y 设置 PA.1 为 Low, PA.3 为 High 循环跳转 AN0426S V1.00 4/ 10 2016-12-09
程序说明 ( 范例 1) 本范例是使用 WDT 的程序, 通过 "CLR WDT" 语句来清除看门狗定时器, 避免看门狗定时器溢出导致程序复位 主程序流程介绍 : 程序首先所使用到的数据寄存器清除为零初始化 设置 ENADC 为零, 除能 A/D 功能 PA 端口设置为输出模式, 且 PA 设置为低位 WS[2:0] = 111, 设定看门狗定时器分频比为 2 15, 此时溢出周期为 1s 未按下按键, 由于程序中有清除看门狗定时器指令, 系统正常运行 按下按键, 程序跳入死循环, 此循环中无清除看门狗定时器指令, 因此看门狗定时器将溢出, 导致程序复位 若在循环中增加 "CLR WDT" 语句, 则看门狗定时器被清除, 程序在循环中持续运行, 不会导致程序复位 程序范例 ( 范例 1) 本范例 1 程序是使用 HT45F3520 为范例撰写, 如附件 wdt_asm.zip 档案 实际输出波形图及说明 注 : 上图为根据 WDTC 设置的看门狗定时器计数时间 AN0426S V1.00 5/ 10 2016-12-09
S/W Flowchart ( 范例 2) 开始 关闭 A/D 功能, 将 I/O 端口设为通用 I/O 端口 使能 WDT 功能, 设置溢出周期为 62.5ms, 设置 PA1 与 PA3 为输出类型 定时器中断使能定时器中断时间为 60ms STM 定时器中断处理 Y N CLR WDT, 设置 PA.3 为 High 设置 PA.1 为 High 返回 循环跳转 程序说明 ( 范例 2) 本范例是使用 WDT 的程序, 通过 "CLR WDT 语句来清除看门狗定时器, 避免看门狗定时器溢出导致程序复位 主程序流程介绍 : 程序首先将所使用到的数据寄存器清除为零初始化 设定 ENADC 为零, 除能 A/D 功能 PA 端口设置为输出模式, 且 PA 设置为低位 WS[2:0] = 011, 设置看门狗定时器分频比为 2 11, 此时溢出周期为 62.5ms STMC0[6:4] = 010 为选择 STM 定时器的时钟源为 f H /16,STMC0[3] = 1 使能 STM 定时器,STMC1[7:6] = 11 为定时器功能选择位 本程序中, 如果看门狗定时器复位时间大于定时器计数时间, 程序正常运行, 反之程序会因看门狗定时器溢出而复位 AN0426S V1.00 6/ 10 2016-12-09
程序范例 ( 范例 2) 本范例 2 程序是使用 HT45F3520 为例撰写, 如附件 wdt_asm.zip 档案 实际输出波形图及说明 注 : 上图为定时器 STM 定时时间 注 : 上图为看门狗定时器溢出时间, 由于定时器定时时间比看门狗溢出时间短, 在定时器 中中断子程序中加入清看门狗定时器的指令, 能防止看门狗定时器溢出复位 AN0426S V1.00 7/ 10 2016-12-09
S/W Flowchart ( 范例 3) 开始 关闭 A/D 功能将 I/O 端口设置为通用 I/O 端口 使能 WDT 功能, 设置溢出周期为 125mS, 设置 PA1 与 PA3 为输出类型 设置 PA.1 位为 High 按键是否按下? N Y 调用 CLR WDT, 设置 PA.3 为 High 返回 程序说明 ( 范例 3) 本范例是使用 WDT 的程序, 通过 "CLR WDT" 语句来清除看门狗定时器, 避免看门狗定时器溢出导致程序复位 主程序流程介绍 : 程序首先所使用到的数据寄存器清除为零初始化 设置 ENADC 为零, 除能 A/D 功能 PA 端口设置为输出模式, 且 PA 设置为低位 本程序中使用到函数, 在函数中有 "CLR WDT" 语句用于清除看门狗定时器, 只有在调用函数的情况下, 看门狗定时器被清, 否则看门狗定时器溢出, 程序复位 AN0426S V1.00 8/ 10 2016-12-09
程序范例 ( 范例 3) 本范例 3 程序是使用 HT45F3520 为例撰写, 如附件 wdt_asm.zip 档案 实际输出波形图及说明 注 : 上图为根据 WDTC 设置的看门狗定时器计数时间 结论 本文通过上面 WDT 的应用实例, 对 WDT 的运用进行了阐述, 使用者可根据具体情况来设 置 WDTC, 以选择合理的 MCU 复位时间, 在程序中清除 WDT 计数器, 防止 MCU 复位 程序范例 C 语言范例 HT45F3520_C.zip ASM 语言范例 HT45F3520_ASM.zip 参考资料 参考文件 HT45F3520 DataSheet 如需进一步了解, 敬请浏览 Holtek 官方网站 www.holtek.com AN0426S V1.00 9/ 10 2016-12-09
版本及修改信息 日期作者发行 修订说明 2015.12.22 霍运军 First Version 免责声明 本网页所载的所有数据 商标 图片 链接及其它资料等 ( 以下简称 资料 ), 只供参考之用, 盛群半导体股份有限公司 ( 以下简称 本公司 ) 将会随时更改资料, 并由本公司决定而不作另行通知 虽然本公司已尽力确保本网页的资料准确性, 但本公司并不保证该等资料均为准确无误 本公司不会对任何错误或遗漏承担责任 本公司不会对任何人士使用本网页而引致任何损害 ( 包括但不限于计算机病毒 系统故障 数据损失 ) 承担任何赔偿 本网页可能会链接至其他机构所提供的网页, 但这些网页并不是由本公司所控制 本公司不对这些网页所显示的内容作出任何保证或承担任何责任 责任限制 在任何情况下, 本公司并不须就任何人由于直接或间接进入或使用本网站, 并就此内容上或任何产品 信息或服务, 而招致的任何损失或损害负任何责任 管辖法律 本免责声明受中华民国法律约束, 并接受中华民国法院的管辖 免责声明更新 本公司保留随时更新本免责声明的权利, 任何更改于本网站发布时, 立即生效 AN0426S V1.00 10/ 10 2016-12-09