S3C2440看门狗定时器(Watchdog)
看门狗定时器(Watchdog)
相信大家都看过中国移动前些时间做的一个广告,从城市到山村,到青藏高原,在哪儿都有中国移动的网络,到哪儿都能打电话,由此可以联想到中国移动在全国有无数个信号基站,很多基站建设在环境比较恶劣的地方,我们来思考一个问题?假如,有一天某个基站出了问题不能正常工作了,毫无疑问,移动的工作人员会带各种检测设备去进行修理,如果是出现非硬件故障(如用户电话服务突然巨增,造成繁忙死机或电磁干扰造成CPU运行出错等),导致基站服务器出现异常死机,工作人员只需要进行一个操作,重启一下即可。如果该基站安装在青藏高原上,这样一次上去,成本是很大的。退一步讲,这种情况虽然成本很高,但是还是可以修复的,如果这种情况出现在月球探测器身上,问题就更严重了。因此针对这种特殊情况的设备,我们期待有一种设备能够在机器出现非正常情况下进行自动重启来恢复工作状态,使用看门狗定时器就可以完美解决这个问题了。
看门狗WatchDog的名字形象的描述了它的工作原理,看门狗每隔一段时间(比如:3个小时)它就会饥饿,每次饥饿时都叫,如果不想让它叫,只要我们保证在3个小时内喂狗一次就行。因此我们要及时的对看门狗控制器执行喂狗操作。
看门狗定时器内部有一个递减计数器,当该计数器递减为0的时候,就会自动重启控制器(如下图所示),如果我们写有这样的程序,该程序在定时器计数器递减为0之前,将其递减计数器重新设置一下(喂狗),那么就不会产生重启操作。假如机器设备出现异常情况下如死机,CPU执行出错,程序跑飞等情况,CPU就会陷入非正常的执行流程,就不会去执行重置计数器的程序,当计数器递减为0时,会产生复位控制器信号,机器就会重新启动,恢复正常执行流程。这样的设计原理就解决了很多环境恶劣的情况下,对服务器进行重启的任务。上面的重置倒计数的操作通常叫做“喂狗”。
图2-42看门狗定时器
1 看门狗定时器的用途
(1)用于解决远程控制器在出现电磁干扰,噪声,系统错误等外界条件造成的系统死机等不正常运行的问题
(2)它不仅可以产生复位信号,还可以通过设置,产生定时的中断信号
8-bit Prescaler:8位分频器,由程序来控制对PCLK进行分频,它由WTCON寄存器来控制设置。
WTCNT:看门狗递减寄存器,一旦看门狗使能,WTCNT里的数据(由WTDAT寄存器在使能之前设置)就开始在输入时钟频率下递减。
Interrupt:中断信号,由WTCON寄存器的第2位控制是否产生中断信号。
寄存器名 |
地址 |
是否读写 |
描述 |
复位默认值 |
WTCON |
0X53000000 |
R/W |
看门狗定时器控制寄存器 |
0x8021 |
WTCON |
位 |
描述 |
初始值 |
Prescaler value |
[15:8] |
8位分频器预设值,有效范围0~255(28 - 1) |
0x80 |
Reserved |
[7:6] |
保留,正常情况下必须为00 |
00 |
Watchdog timer |
[5] |
看门狗定时器使能位 0 = 无效,1 = 有效 |
1 |
Clock select |
[4:3] |
选择除数因子来决定输入时钟 00 = 16,01 = 32 10 = 64,11 = 128 |
00 |
Interrupt generation |
[2] |
中断使能位 0 = 无效,1 = 有效 |
0 |
Reserved |
[1] |
保留,正常情况下该位必须为0 |
0 |
Reset enable/disable |
[0] |
复位使能位 1:看门狗定时器超时,发出CPU复位信号 0:看门狗定时器复位无效 |
1 |
表2-6看门狗定时器数据寄存器 (WTDAT)
寄存器名 |
地址 |
是否读写 |
描述 |
复位默认值 |
WTDAT |
0x53000004 |
R/W |
看门狗定时器数据寄存器 |
0x8000 |
WTDAT |
位 |
描述 |
初始值 |
Count Reload value |
[15:0] |
该值在超时后,自动载入计数寄存器 |
0x8000 |
注:WTDAT寄存器用于指定计数寄存器的初始值,也就是它的超时时间,系统上电之后硬件自动的将0x8000的初始值载入到WTCNT里,在发生了第一次超时操作时,WTDAT的值才会载入到WTCNT寄存器。
表2-7看门狗定时器计数寄存器 (WTCNT)
寄存器名 |
地址 |
是否读写 |
描述 |
复位默认值 |
WTCNT |
0x53000008 |
R/W |
看门狗定时器计数寄存器 |
0x8000 |
WTCNT |
位 |
描述 |
初始值 |
Count value |
[15:0] |
看门狗定时器的当前计数值 |
0x8000 |
通过对上面寄存器描述分析,可以得出以下结论:
l 通过设置WTCON[5]来设置看门狗定时器的使能
l 在开启看门狗定时器后,通过设置WTCON[15:8]和[4:3]位来设置看门狗控制器的工作时钟频率,具体看门狗的递减时间间隔可以通过下面的公式算出:
t_watchdog = 1/( PCLK / (Prescaler value + 1) / Division_factor )
注: t_watchdog:看门狗控制器递减时间间隔(单位秒)
PCLK:APB总线工作时钟(单位Hz)
Prescaler value: 8位分频器预设值
Division_factor:除数因子
l 通过设置WTCON[2] 和WTCON[0]位,来使能产生中断和复位信号
l 通过设置WTDAT来设置计数值
3 看门狗实验
; 关闭看门狗实验
ldr r0, = 0x53000000 ; WTCON寄存器地址加载到r0
mov r1, #0 ; r1 = 0
str r1, [r0] ; 将r1里的值存到r0里地址里
通过分析前面的寄存器的设置位可知,只要设置WTCON[5]为0即可,上述代码里,直接将整个WTCON寄存器里的位设置为0。
开启看门狗实验:
WTCON EQU 0x53000000 ; 看门狗控制寄存器
WTCNT EQU 0x53000008 ; 看门狗计数寄存器
AREA WATCHDOG_ENABLE,CODE,READONLY
ENTRY
; 设置看门狗控制寄存器
ldr r0, =WTCON ; 加载WTCON寄存器地址
; 0x4a21 = [15:8]=74, [5]=1, [0]=1
ldr r1, =0x4a21 ; 将0x4a21保存到r1里
str r1, [r0] ; 将r1里的值存入r0指向的地址
; 设置看门狗计数寄存器,该寄存器的值在上电后被加载, 1秒超时
ldr r2, = WTCNT ; 加载WTCNT寄存器地址
ldr r3, =0x2710 ; 将0x2710保存到r1里
str r3, [r2] ; 将r3里的值存入r2指向的地址
IMPORT led_on ; 引入led_on符号
bl led_on ; 调用led_on代码
loop
B loop ; 死循环
END
程序开始定义两个常量地址,分别是WTCON,WTCNT的地址,ENRTY后面是程序的正文部分,首先通过ldr指令加载WTCON的地址到r0里,将0x4a21这个数加载到r1里,0x4a21是我们通过设置WTCON [15:8]=74 [7:6]=0,[5]=1,[4:1]=0, [0]=1得到的16进制数,将其值存入到r0地址里,这样WTCON里就是我们设置各位的值,然后同样道理再将0x2710存到WTCNT数据寄存器里,设置数据寄存器的值为0x2710。
为了看到看门狗的重启效果,我们加入了一个小程序,用来点亮led灯,将上述代码在ADS下编译完后,通过H-JTAG烧写到NORFLASH里可以看到每过1秒钟,开发板的led灯就闪一下。
知识扩展
开启了看门狗之后,控制器会定时的复位,为了防止不停的复位,就要进行“喂狗”操作,喂狗操作相对比较简单,只要在WTCNT里的计数减为0之前,将其值重置一个非0的数值即可,看下面的函数:feed_dog(该代码仅供读者参考,光盘源码中没有给出具体例子)
; 喂狗程序
feed_dog
ldr r0, =WTCNT
ldr r1, =0x2710
str r1, [r0]
mov pc, lr
喂狗程序对喂狗的时机必须要合适,否则在定时器还没来得及发生中断调用watchdog已经超时了,也将引起系统复位重启,通常系统里会开启另外一个时钟来为整个系统服务,它会定时的“告知”系统,在看门狗定时器超时之前,自动的调用喂狗程序。
S3C2440看门狗定时器(Watchdog)相关推荐
- c语言看门狗指令pic,PIC单片机的窗口看门狗定时器.PDF
PIC单片机的窗口看门狗定时器 TB3123 PIC® 单片机的窗口看门狗定时器 作者: Ashutosh Tiwari Microchip Technology Inc. 简介 窗口看门狗定时器(W ...
- Keil5 平台 S3C2440裸机程序开发-----看门狗定时器
目录 前言 一.看门狗定时器配置 二.源码 前言 本博文介绍mini2440开发板,在keil5平台上进行外部中断开发的一些基本配置. 一.看门狗定时器配置 PCLK=50MHz,预分频值设置为249 ...
- 用看门狗定时器做计时器,计算程序耗时,超声波测距,FL2440
开发板:FL2440 核心芯片:S3C2440(ARM9) 超声波模块:HC-SR04 超声波模块工作原理:共四个脚,VCC接5V,GND接地,Trig脚接芯片通过IO传出的高电平(持续时间不低于10 ...
- MSP430F5529 DriverLib 库函数学习笔记(十四)看门狗定时器 (WDT)
目录 硬知识 看门狗定时计数器 (WDTCNT) 看门狗模式 定时计数模式 看门狗定时器中断 时钟故障保护功能 低功耗模式下的看门狗操作 看门狗定时器控制寄存器 WDT_A API (机翻) 参数 上 ...
- 【转载】外设使用Tips之MPC574xP系列汽车级MCU的SWT看门狗定时器配置与使用
外设使用Tips之MPC574xP系列汽车级MCU的SWT看门狗定时器配置与使用 原创 2017-09-13 胡恩伟 汽车电子expert成长之路 内容提要 引言 1. SWT的功能概述 2. SWT ...
- LabVIEW CompactRIO 开发指南10 确保可靠性与看门狗定时器
LabVIEWCompactRIO 开发指南10 确保可靠性与看门狗定时器 在设计将要部署的嵌入式系统时,考虑纳入看门狗定时器以确保可靠性.看门狗定时器是一个硬件计数器,它与嵌入式软件应用程序接口,用 ...
- ARM 看门狗定时器
一.什么是看门狗.有什么用 (1) 看门狗定时器和普通的定时器并无本质区别.定时器可以设定一个时间,在这个时间完成之前定时器不断计时,时间到的时候,定时器会复位 CPU(重启系统). (2 )系统正常 ...
- S5PC100看门狗定时器
转自: S5PC100看门狗定时 作者:杨胜利,华清远见嵌入式培训讲师. 看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,在单片机程序的调试和运行中都有着重要的意义.它的 ...
- 【51单片机快速入门指南】8:看门狗定时器(WDT)
目录 硬知识 测试程序 main.c 现象 普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9. ...
- (18)Zynq FPGA 看门狗定时器介绍
1.1 Zynq FPGA 看门狗定时器介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Zynq FPGA 看门狗定时器介绍: 5)结束语. 1.1.2 本节引言 ...
最新文章
- js 空数组是true还是false
- win10家庭版 VMware Workstation 和 Device/Credential Guard 不兼容
- ubuntu声音太小的解决方案
- Oracle数据库表空间占用过大的解决办法
- 7-2 有理数比较 (10 分)
- [蛋蛋涂鸦]蜡笔蛋&某蛋真面目(表被吓着)
- QVideoWidget遇到的坑。
- C++ 中typedef用法
- h2o java,h2o深度学习权重和规范化
- 疯狂游戏-研发一面-校招面经
- 【苹果相册推送查找推】 “ 网站推送ID ”是指您用于签署您的网站的注册包
- 网络----OSI模型
- 显示器几种常见的接口
- Uefi ABL读取XBL设置的标志位
- 【Cartographer参数详解,调参,降低计算量调优笔记记录】
- JavaWeb在线租车服务系统
- Viewpage使用
- hessian矩阵特征值
- adb remount 失败
- 仿蜻蜓FM详情页嵌套滑动效果(IOS版本效果)