看门狗的使用及妙用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax:38730925 Http://www.zlgmcu.com
P87LPC76X 内部 WDT 的妙用
摘要 本文讲述了 WDT 分别为 3 种不同用途的的实现方法 (1)用看门狗复位防止程序非正常运行 (2)用看门狗中断定时将 CPU 从 Power down 模式中唤醒 (3)用看门狗作为一个定时器(CPU 时钟)
1. 概述
P87LPC76X 的看门狗定时器由一个完全独立的振荡器来控制 我们可在软件中控制其溢出时间 一 旦它被启动 可以定时清除定时装置 以防止其溢出 当不作为看门狗定时器时 它可作为一个内部的定 时器来使用 这时可以选择它的时钟源是 MCU 时钟还是 RC 振荡器时钟 它的溢出还可产生中断
2. 用看门狗复位防止程序跑飞
KEY_CLK 键 按此键将取反看门狗的时钟选择 并通过 LED_WDCLK 灯显示之 KEY_WDT 键 按此键将循环递减选择看门狗的溢出周期 并通过 LED_WDS2-0 灯指示
4. 演示操作说明及现象
WDTE 位为 1 时 即允许看门狗复位 首先 程序运行后 可以看到 LED 循环点亮 3 次进行自检 然后 LED_WDRUN 灯闪烁 LED_WDS2-0 全部点亮 LED_WDCLK 熄灭 这说明此时 WDCON 的 WDRUN 位被强拉为 1 WDCLK 被强制选择为 0 即看门狗内部 RC 振荡器时钟 溢出周期初始为 111 我们通 过按 4 个功能键来进入不同的演示 按下 KEY_WDT 后 LED_WDRUN 灯立即点亮而不闪烁 持续大约 2.1s 后复位 与上次复位后相比 LED_WDS2-0 变为 110 再按此键 可以看到到复位之前的持续时间缩短 这是由于溢出周期变短了的缘故 继续按键 情形类似 当按了几次后 发现 LED_WDRUN 灯熄灭 而 LED 也没有自检 这是由于溢出周期太短程序还没有到达运行到自检就被看门狗给复位了 不过不要紧 程序中已经安排当复位次数达到一定次数后 便修改溢出周期为 111 此时程序又回到初次复位状态 按下 KEY_CLK 键后 可以看到 LED_WDRUN 的闪烁越来越慢 最后复位回到初始状态 这是通过不断 增加 CPU 的分频系数使得喂一次狗后所能执行的指令相对少了 从而看门狗溢出复位 并置溢出周期为
循环递增选择看 Y
门狗的溢出周期
Y 键码为 1? N 键码为 2?
N 键码为 3? N 键码为 4? N
Y 增加 CPU 分频数 WDRUN 不可变
Y 进入低功耗模式 看门狗溢出复位
Y 分频系数增 1 看 门狗溢出复位
Y 进入死循环 由看 门狗溢出复位
程序清单
;*******************************************************************************************
;为 WDT 内部 RC 振荡器时钟
LED_WDRUN KEY_DIVM
EQU
P1.6
EQU
P0.1
;运行指示灯.点亮时为 0,熄灭时为 1 ;分频键,按此键 MCU 时钟被分频
KEY_LPD
EQU
P0.3
;低功耗键,按此键进入"低功耗"模式
KEY_CLK
EQU
P1.4
;亦可以按此键退出 ;看门狗禁能时时钟选择键. 在 CPU 时钟与 RC 振荡器
LED_WDS2-0 为看门狗溢出周期指示灯 全亮时表示 WDCON.2-0 为 111 即溢出时间为 2.1s 全灭时 WDCON.2-0 为 000 依次类推 第一次复位后 WDCON.2-0 为 111
KEY_DIVM 键 分频系数初值为 0 每按一次分频系数增 1 为 4 时被重置为 0 KEY_LPD 键 按此键进入低功耗 KEY_CLK 键 按此键进入死循环 此死循环中安排有喂狗子程序 在死循环中分频系数每循环 1 次增 1 即 CPU 时钟频率越来越低 每喂一次狗所执行的指令就越来越少 最终由看门狗溢出复位 并初 始化看门狗溢出周期为 2.1s KEY_WDT 键 按此键进入死循环 看门狗溢出复位 复位后看门狗溢出周期 WDCON.2-0 减 1
LED_WDRUN 灯闪烁时表示程序运行正常 且可以通过按键来控制程序的运行 点亮不闪烁时表 示进入了死循环 只有复位才能退出 熄灭时为进入低功耗模式
LED_WDCLK 灯点亮时表示选择 CPU 时钟作为看门狗时钟 熄灭时为选择看门狗内部 RC 振荡器 此时它被强行设为内部 RC 振荡器时钟 所以为熄灭状态
KEY_DIVM 键 分频系数初值为 0 每按一次分频系数增 1 为 2 时清零 WDRUN 位 看门狗定时 器停止运行 LED_WDS2-0 不再闪烁 为 4 时被重置为 0 并置位 WDRUN 位 看门狗继续运行
KEY_LPD 键 按此键进入低功耗 这时 WDCLK 被设为看门狗内部 RC 振荡器时钟 使能看门狗 中断和键盘中断 当看门狗中断时定时将 CPU 从 Power-down 模式中唤醒 当看门狗 WDCON 的 WDRUN 位被清 0 时 看门狗停止运行 所以不能产生中断来唤醒 CPU 或者当看门狗 WDCON 的 WDCLK 位为 1 时为 CPU 时钟 低功耗时停振亦不能唤醒 CPU 此时只可以按此键来唤醒之
LED_WDRUN 灯闪烁时表示程序运行正常 且可以通过按键来控制程序的运行 熄灭时为进入低 功耗模式
LED_WDCLK 灯点亮时表示选择 CPU 时钟作为看门狗时钟 熄灭时为选择看门狗内部 RC 振荡器 此时它可以被 KEY_CLK 键切换
LED_WDS2-0 为看门狗作为定时器时的溢出周期指示灯 全闪烁时表示 WDCON.2-0 为 111 全 不闪时 WDCON.2-0 为 000 依次类推 第一次复位后 WDCON.2-0 为 111 当看门狗运行时它们不 断地闪烁 且闪烁的的周期为看门狗溢出周期的 2 倍 当看门狗停止时不闪烁 可以通过 KEY_WDT 键修 改其溢出周期值 从而改变其闪烁的个数和快慢
此时 WDTE 位为 1 看门狗定时器溢出时产生复位 复位后 WDCON 寄存器中 WDRUN 位和 WDCLK 位被自动地分别设置为 1 和 0 且不可更改 程序运行中 WDCON.2-0 不能被更改 即每次复位后只能对 WDCON 操作一次 本演示板沿用 76Xdemo 板 应用了 76Xdemo 板中的 4 个按键和 5 个 LED P87LPC76X 演示板中 LED 及按键的连接原理如图 1
EQU
05H
;WDT 的 CLK 状态标志
FLAG2 ;常数定义
EQU
04H
;看门狗使能状态标志
TH0_VAL
EQU
0DCH
;定时器 0 的重载值
TL0_VAL
EQU
STACK_POINTER EQU
00H 050H
;堆栈指针
RUN_SPAN
EQU
50
;运行灯闪烁的间隔
;地址定义 DIVM_CNT
111 同时还可以看到 当按了 KEY_WDT 后使得溢出周期改变后 再按此键后到复位的时间长短明显 改变 按下 KEY_PDT 键后 LED 循环点亮 2 次 这表示系统进入低功耗状态 不过由于此时看门狗使能 过了其溢出周期后便被迫复位 按下 KEY_DIVM 后分频系数增 1 可以看到 LED_WDRUN 灯闪烁得越来 越慢 当按下 4 次后分频系数恢复到 0 CPU 时钟分频后再去操作其它键会发现复位更容易而闪烁更缓慢
EKB
EQU
0E9H
LED_WDS0
EQU
P1.7
;看门狗溢出周期指示灯.点亮时代表二进制 1,熄灭时 ;代表 0
LED_WDS1
EQU
P0.6
;全亮时周期最长 WDS2-0 为 111
LED_WDS2 LED_WDCLK
EQU
P0.0
EQU
P0.7
;全灭时周期最短 WDS2-0 为 000 ;看门狗时钟选择指示灯.点亮时为 CPU 时钟,熄灭时
5. 程序
程序说明 本程序分为两个分支部分 WDTE 位为 1 即看门狗使能时的程序段部分和 WDTE 位为 0 看门狗禁 能时的程序段部分 由于仿真器的限制 不能通过判断 WDTE 位来决定程序的流程 利用 WDTE 位为 1 时 WDCLK 位为 0 且不可修改 而 WDTE 位为 0 时 WDCLK 位可以置 1 从而把此区别用一个标志位表 示 程序中便可以通过判断标志位来复用按键和 LED 显示 把两个程序和二为一 流程图


溢出次数减 1=0?
N 系统初始化
Y 溢出周期设为最长
N 看门狗使能否?
Y 喂狗子程序
N 有键输入?
N 有键输入?
Y 键码为 1? N 键码为 2?
N 键码Baidu Nhomakorabea 3? N 键码为 4? N
Y
增加 CPU 分频数
变换 WDRUN 位
Y
进入和退出低功
耗模式的开关键
Y
取反 WDCLK 位
LED_WDCLK 显示
-2-
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax:38730925 Http://www.zlgmcu.com
只有再次按下此键使键盘中断来唤醒它 从这可以看出 CPU 进入掉电状态后其振荡器会停止振荡 按下 KEY_DIVM 后分频系数增 1 为 2 时清零 WDRUN 位 看门狗定时器停止运行 LED_WDS2-0 不再闪烁 此时如果按下 KEY_PDT 键后看门狗不能产生中断来唤醒 CPU 为 4 时被重置为 0 并置位 WDRUN 位 看门狗继续运行 LED_WDS2-0 继续闪烁
WDTE 位为 0 时 即禁止看门狗复位 首先 程序运行 LED 自检后 LED_WDRUN 灯闪烁 LED_WDS2-0 全部闪烁 LED_WDCLK 熄灭 我们又可以通过按 4 个功能键来进入不同的演示 按下 KEY_WDT 后发现 LED_WDS2-0 变为 110 且闪烁变快了 继续按键 情形类似 这是由于循环减少 溢出周期的缘故 我们可以由此而知道此时的溢出周期值及其时间长短 因为闪烁周期刚好设为溢出周期 长度的 2 倍 按下 KEY_CLK 键后 可以看到 LED_WDCLK 被交叉地点亮和熄灭 同时可以看到 LED_WDS2-0 的闪烁也跟着改变了 这是因为改变了时钟选择而使得溢出周期也有所变化 如果当 CPU 时钟被分频后其现象会更加明显 按下 KEY_PDT 键后 LED 循环点亮 2 次进入低功耗状态 如果此时看 门狗在运行且时钟为看门狗内部 RC 振荡器时钟 可以看到过一片刻后看门狗中断会定时唤醒 CPU 否则
AUXR1
EQU
0A2H
;辅助功能累加器
IEN0
EQU
0A8H
;中断使能 0
IEN1
EQU
0E8H
;中断使能 1
-3-
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax:38730925 Http://www.zlgmcu.com
KBI P0M1
EQU
86H
图1
-1-
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax:38730925 Http://www.zlgmcu.com
3. 看门狗作为一个定时器
此时 WDTE 位为 0 看门狗定时器溢出时产生中断 WDCON 寄存器可以修改 这时可以通过 WDRUN 位控制它的运行和停止 WDCLK 可以选择它的时钟源 程序运行中 WDCON.2-0 可以被不断更改 此时 4 个按键和 5 个 LED 如图 1 所示 功能说明如下
EQU
84H
;键盘中断 ;P0 口输出模式选择 1
P0M2
EQU
85H
;P0 口输出模式选择 2
P1M1 P1M2
EQU
91H
EQU
92H
;P1 口输出模式选择 1 ;P1 口输出模式选择 2
WDCON
EQU
0A7H
;看门狗控制寄存器
WDRST
EQU
0A6H
;看门狗复位寄存器
EWD
EQU
0AEH
;IEN0
;之间切换 当看门狗使能时按此键进入 MCU 分频递
KEY_WDT
EQU
P1.5
;增安排喂狗的死循环中 分频足够大时溢出复位 ;看门狗使能时看门狗便能键.模拟死循环
;看门狗禁能时循环选择看门狗溢出周期
MCU_STATUS KEY_STATUS
EQU
00H
EQU
01H
;CPU 状态 ;键盘状态
FLAG1
相关文档
最新文档