S3C2440看门狗定时器(Watchdog)

发布者:SparklingMelody最新更新时间:2024-06-06 来源: elecfans关键字:S3C2440  看门狗定时器  Watchdog 手机看文章 扫描二维码
随时随地手机看文章

看门狗定时器(Watchdog

相信大家都看过中国移动前些时间做的一个广告,从城市到山村,到青藏高原,在哪儿都有中国移动的网络,到哪儿都能打电话,由此可以联想到中国移动在全国有无数个信号基站,很多基站建设在环境比较恶劣的地方,我们来思考一个问题?假如,有一天某个基站出了问题不能正常工作了,毫无疑问,移动的工作人员会带各种检测设备去进行修理,如果是出现非硬件故障(如用户电话服务突然巨增,造成繁忙死机或电磁干扰造成CPU运行出错等),导致基站服务器出现异常死机,工作人员只需要进行一个操作,重启一下即可。如果该基站安装在青藏高原上,这样一次上去,成本是很大的。退一步讲,这种情况虽然成本很高,但是还是可以修复的,如果这种情况出现在月球探测器身上,问题就更严重了。因此针对这种特殊情况的设备,我们期待有一种设备能够在机器出现非正常情况下进行自动重启来恢复工作状态,使用看门狗定时器就可以完美解决这个问题了。

看门狗WatchDog的名字形象的描述了它的工作原理,看门狗每隔一段时间(比如:3个小时)它就会饥饿,每次饥饿时都叫,如果不想让它叫,只要我们保证在3个小时内喂狗一次就行。因此我们要及时的对看门狗控制器执行喂狗操作。

看门狗定时器内部有一个递减计数器,当该计数器递减为0的时候,就会自动重启控制器(如下图所示),如果我们写有这样的程序,该程序在定时器计数器递减为0之前,将其递减计数器重新设置一下(喂狗),那么就不会产生重启操作。假如机器设备出现异常情况下如死机,CPU执行出错,程序跑飞等情况,CPU就会陷入非正常的执行流程,就不会去执行重置计数器的程序,当计数器递减为0时,会产生复位控制器信号,机器就会重新启动,恢复正常执行流程。这样的设计原理就解决了很多环境恶劣的情况下,对服务器进行重启的任务。上面的重置倒计数的操作通常叫做“喂狗”。

 

图2-42看门狗定时器

1 看门狗定时器的用途

(1)用于解决远程控制器在出现电磁干扰,噪声,系统错误等外界条件造成的系统死机等不正常运行的问题

(2)它不仅可以产生复位信号,还可以通过设置,产生定时的中断信号

看门狗定时器从单片机时代就开始广泛使用,是嵌入式产品中的一大特色,很明显上述用途如果我们都用不到,就没有必要打开看门狗的功能,在miniOS操作系统里我们不使用它来定时产生中断,也不用它来自动重启异常的开发板(因为出现异常的可能性几乎可以忽略),因为实现miniOs的第一步就是关闭看门狗,在开始裸板驱动之前,先来了解S3C2440 看门狗定时器。

          2  看门狗工作原理

 

图2-43 S3C2440看门狗定时器工作原理

名词解释:

PCLK(Peripherals Clock): APB(Advanced Peripherals  Bus)高级外围设备总线上外设的工作时钟频率,它主要为开发板上的外围低速设备提供工作时钟,如串口,I2C等,

8-bit Prescaler:8位分频器,由程序来控制对PCLK进行分频,它由WTCON寄存器来控制设置。

MUX:多路复合器,它支持多种时钟源,通过设置它来选择一种时钟频率,看门狗控制器里会产生四种时钟频率,分别是1/16,1/32,1/64,1/128的已分频时钟,可以通过WTCON寄存器第3,4位进行选择设置。

WTCNT:看门狗递减寄存器,一旦看门狗使能,WTCNT里的数据(由WTDAT寄存器在使能之前设置)就开始在输入时钟频率下递减。

Interrupt:中断信号,由WTCON寄存器的第2位控制是否产生中断信号。

Reset Signal Generator:Reset信号产生器,默认情况下当递减寄存器里的倒计数为0时,会产生通过Reset信号产生器产生Reset信号,让控制器重启,可以由WTCON寄存器的第0位进行设置。

当看门狗使能时,外围时钟PCLK为看门狗定时器的输入时钟,MINI2440在没有开启时钟时,采用外部晶振(又叫高频振荡器,它每秒钟产生固定频率时钟)提供的12MHz输入时钟频率,PCLK首先进入8位分频器Prescaler,其对PCLK进行分频,可以理解为对PCLK的除法运算,这样PCLK的时钟频率就变成PCLK/Prescaler value,其中分频器Prescaler的值可以在一定范围内自定义,然后经过分频的时钟经过除数因子选择器,这是在分频器的基础上再次对时钟信号进行降频,通过除数因子选择器,选择一个除数因子,然后经过MUX复合器,这时输入时钟变成PCLK/ Prescaler value/除数因子,得到我们想要的输入时钟, 每个时钟周期都会将看门狗定时计数器WTCNT里的值减1,当计数器WTCNT里的值变为0时开始执行超时操作,首先,判断看门狗控制寄存器里bit2 WTCON[2]设置情况,如果为1则产生中断信号,引起系统中断,如果为0不做任何操作,进入复位信号产生器,如果WTCON[0]位为1,则产生控制器复位信号,否则不做任何操作。每次超时操作之后,看门狗WTCON会自动加载看门狗数据寄存器WTDAT里的用户设置值,继续执行递减操作。

表2-5看门狗定时器控制寄存器 (WTCON)

寄存器名

地址

是否读写

描述

复位默认值

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   看门狗实验

MINI2440在没有初始化系统时钟时,整个开发板由一个12MHz的外部晶振提供频率,PCLK工作频率也是12MHz,WTCON[15:8]设置为74,除数因子选择16,通过上面公式可以计算出,看门狗控制器递减时间间隔0.1毫秒。将WTCNT里的值设置为0x2710(十进制10000),那么看门狗会每过一秒钟产生一次超时。


; 关闭看门狗实验


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


喂狗程序对喂狗的时机必须要合适,否则在定时器还没来得及发生中断调用feed_dog函数之前,watchdog已经超时了,也将引起系统复位重启,通常系统里会开启另外一个时钟来为整个系统服务,它会定时的“告知”系统,在看门狗定时器超时之前,自动的调用喂狗程序。


关键字:S3C2440  看门狗定时器  Watchdog 引用地址:S3C2440看门狗定时器(Watchdog)

上一篇:【tiny6410】led裸板程序
下一篇:Linux I2C总线控制器驱动(S3C2440)

推荐阅读最新更新时间:2026-02-16 21:28

s3c6410硬件WATCHDOG TIMER看门狗定时器
先简述看门狗的工作过程,看门狗实际是一个定时器,内部有个计数器,每当时钟信号到来时,计数器寄存器减一。如果减到0,则重新启动系统;如果在减到0之前,系统又设置计数器为一个较大的值,则系统不会重启。系统正常时,就不会重启;当系统发生故障时,不能设置计数寄存器,系统重新启动。 1、OVERVIEW 概述 The 6410 RISC microprocessor watchdog timer is used to resume the controller operation whenever it is disturbed by malfunctions such as noise and system errors. The wa
[单片机]
s3c6410硬件<font color='red'>WATCHDOG</font> TIMER<font color='red'>看门狗</font><font color='red'>定时器</font>
S3C2440看门狗定时器原理
  看门狗定时器(Watchdog)   相信大家都看过中国移动前些时间做的一个广告,从城市到山村,到青藏高原,在哪儿都有中国移动的网络,到哪儿都能打电话,由此可以联想到中国移动在全国有无数个信号基站,很多基站建设在环境比较恶劣的地方,我们来思考一个问题?假如,有一天某个基站出了问题不能正常工作了,毫无疑问,移动的工作人员会带各种检测设备去进行修理,如果是出现非硬件故障(如用户电话服务突然巨增,造成繁忙死机或电磁干扰造成CPU运行出错等),导致基站服务器出现异常死机,工作人员只需要进行一个操作,重启一下即可。如果该基站安装在青藏高原上,这样一次上去,成本是很大的。退一步讲,这种情况虽然成本很高,但是还是可以修复的,如果这种情况出现
[单片机]
<font color='red'>S3C2440</font><font color='red'>看门狗</font><font color='red'>定时器</font>原理
GNU ARM汇编--(八)s3c2440watchdog
从单片机起,watchdog就是必不可少的.在各种应用环境中,程序很可能跑飞或死掉,这时候就需要通过watchdog来保证整个系统重新恢复到正常状态. 照旧,给出s3c2440的datasheet说明: 概述: watchdog timer用于由于噪声或者系统错误引起的程序跑飞了的情况下恢复处理器的正常操作.它可以被用作一个可以请求中断服务的普通16bit的内部定时器.watchdog timer产生128 PCLK的重启信号. 特点: 有中断请求的普通内部定时器模式 当定时器计数为0(超时)时,产生内部的长达128PCLK周期的重启信号 watchdog timer的操作: F18-1显示wa
[单片机]
GNU ARM汇编--(八)<font color='red'>s3c2440</font>的<font color='red'>watchdog</font>
STM32看门狗定时器的工作原理和作用 看门狗定时器的特性
看门狗 定时器 (WDT,Watch Dog Ti mer)是单片机的一个组成部分,它实际上是一个计数器,一般来说都是向下计数的,给看门狗一个数字,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间 CPU 应发出指令让看门狗复位(在计数器减到0之前),重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。本节将对看门狗定时器的 工作原理 和作用进行详细讲解。 看门狗的主要功能是在发生系统软件故障时,将系统复位。也可以用于将系统从休眠或空闲模式唤醒。一般在 嵌入式开发 中,整个程序都是在次循环往复不停的工作,正常运行期间会定时让看门狗复位,一旦程序发生故障,停在某一处,看门狗不能及时复位,计数器减到0
[单片机]
STM32<font color='red'>看门狗</font><font color='red'>定时器</font>的工作原理和作用 <font color='red'>看门狗</font><font color='red'>定时器</font>的特性
CC2530看门狗定时器实现1秒定时
实验要求 代码实现 #include ioCC2530.h #define D4 P1_1 //延迟函数 void Delay(unsigned int t) { while(t--); } //端口初始化函数 void Init_Prot() { //配置4个LED灯的引擎 //选择端口的功能 P1SEL &=~0x1B;//设置通用io端口 //配置端口的方向 P1DIR |=0x1B; //关闭LED灯 P1 &=~0x1B; } //初始化一个看门狗控制寄存器 void Init_WDT() { //配置WDTCTL WDCTL = 0x0C; //IEN2 IEN2 |= 0x
[单片机]
CC2530<font color='red'>看门狗</font><font color='red'>定时器</font>实现1秒定时
【51单片机快速入门指南】8:看门狗定时器(WDT)
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《STC89C52系列单片机器件手册》 适用型号: STC89C51,STC89C52,STC89C53,STC89C14,STC89LE51,STC89LE52,STC89LE53,STC89LE14,STC89C54,STC89C58,STC89C516,STC89C510,STC89C512,STC89C514,STC89LE54,STC89LE58,STC89LE516,STC89LE510,STC89LE512,STC89LE
[单片机]
【51单片机快速入门指南】8:<font color='red'>看门狗</font><font color='red'>定时器</font>(WDT)
ARM之看门狗定时器——WDT
看门狗原理 看门狗原理上是一个定时器,定时器对脉冲进行计数,当定时溢出时,产生复位信号,使整个系统复位,看门狗的作用就是防止系统意外跑飞,而且在无人看守的状态下依然能够复位,正常运行 Exynos,4412处理器的看门狗模块,包括一个预分频因子、一个四分频的分频器和一个16位的计数器。输入时钟为PCLK,它经过两级分频(预分频和分频),将分频后的时钟作为该定时器的输入时钟。当计数器计满后可以产生中断或者复位信号,他的本质是一个磊减器,每放出一个矩形波,他就减一,当为0的时候,就会出现复位或者中断 寄存器的配置 //设置预分频值和分频,以及打开定时器 WTCON =(255 8)| (1 5)|(3 3)(1 2) //
[单片机]
ARM之<font color='red'>看门狗</font><font color='red'>定时器</font>——WDT
单片机MSP430入门-理论⑤--定时器模块-WDT看门狗
上期大概给大家汇总介绍了,在MSP430环境下的时钟寄存器BCSCTL2,他每个位的意义以及他们的设置方法 本期将重点介绍下,定时器模块,这次先讲下看门狗定时器和他的寄存器,设置等 1.0 定义 1.1 定时器: MSP430的定时器大概有4种,看门狗定时器,基本定时器,定时器A,定时器B, 1.2 基本定时器功能: 基本定时,支持软件和各种外围模块工作在低频率,低功耗条件下 1.3 定时器A功能: 基本定时,支持同时进行的多种时序控制,多个捕获,比较功能和多种输出波形(PWM),可以以硬件方式支持串行通信 1.4 定时器B功能: 基本定时,功能基本跟定时器A差不多,但比较定时器A更灵活,功能更强大 1.5 看门口定时器功
[单片机]
单片机MSP430入门-理论⑤--<font color='red'>定时器</font>模块-WDT<font color='red'>看门狗</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved