看门狗定时器参考资料
- 格式:doc
- 大小:38.00 KB
- 文档页数:2
WATCHDOG定时器-jammys3c2440的看门狗定时器是当操作发生如噪声干扰、系统错误等故障时重启控制器。
看门狗定时器是可以作为一般的16位定时器用于响应中断请求,也可以是用于产生复位信号。
看门狗定时器的工作频率是将PCLK经过8位预分频器后,再通过16分频、32分频、64分频、或者128分频后得到的。
分频可在WTCON中设置。
用下面的公式算出watchdog定时器的工作频率:看门狗定时器的工作频率= 1/[ PCLK / (Prescaler value + 1) / Division_factor ]Prescaler value = 0~255Division_factor = {16,32,64,128}WTDAT & WTCNT当看门狗寄存器启动时,看门狗定时器数据寄存器(WTDAT)不能自动重装到定时计数器(WTCNT)。
因此,初始值必须在看门狗定时器启动前写入定时计数寄存器(WTCNT)。
l WATCHDOG TIMER CONTROL (WTCON) REGISTER 该寄存器用于允许/禁止看门狗定时器、中断,四种时钟信号的选择,以及预分频系数的设定。
l WATCHDOG TIMER DATA (WTDAT) REGISTERWTDAT寄存器用于设置看门狗定时持续时间。
在初始化看门狗定时器WTDAT的数值不能自动重载到定时计数器。
但是,当计数到0时,WTDAT会自动重载到WTCNT。
l WATCHDOG TIMER COUNT (WTCNT) REGISTERWTCNT寄存器是当前看门狗定时器正常工作下的数值。
注意,WTDAT寄存器的数值在初始化时不能重在到WTCNT寄存器,因此WTCNT寄存器需要在启动看门狗前设置好初始值。
演示程序:启动看门狗定时器后,程序进入LED闪烁循环,并且显示WTCNT的数值。
当WTCNT到0时候,系统重启。
/******************************************************函数名:void init_watchdog(void)作者:jammy-lee创建日期:2009-02-21说明:初始化看门狗定时器******************************************************/void init_watchdog(void){rWTCON = ((0x60<<8)|(3<<3)); //设置预分频值0x60,分频因子128rWTDAT = 0x6000;rWTCNT = 0x6000;rWTCON &= ~(1<<2); //禁止中断rWTCON |= ((1<<5)|(1<<0)); //启动看门狗,允许复位信号}/******************************************************函数名:void Main(void)作者:jammy-lee创建日期:2009-02-21说明: 主函数******************************************************/void Main(void){int wt_count;rGPBCON = 0x55555;rGPBUP = 0x7ff;while(1)Led(1,1);Uart_Printf("LED 1 power ON\n");delay(100);Led(1,0);Uart_Printf("LED 1 power ON\n");delay(100);wt_count = rWTCNT; //读取WTCNT寄存器当前的值Uart_Printf("the value of WTCNT is %d\n",wt_count); }}。
一、外部看门狗
一般硬件设计的时候使用芯片外部看门狗,该看门狗使用一个不停翻转GPIO来控制。
二、内部看门狗
一般ARM芯片都是有内部看门狗模块。
S5PV210内部看门狗模块有两个功能:
1、作为看门狗。
打开看门口狗后,如果没有“喂狗”,看门狗计数值减到0,会产生一个reset信号,S5PV210就会复位,从BL0重新执行代码。
2、普通的定时器。
可以产生周期性的中断。
三、210看门狗模块的框图
1、看门狗“喂狗”就是向计数寄存器赋一个新的计数值。
2、看门狗clock(基准周期)=
四、看门狗的寄存器
1、WTCON
2、WTDA T
3、WTCNT
4、WTCLRINT
五、实验程序。
016:MSP430_WDT看门狗定时器1, 看门狗定时器概述看门狗定时器(WDT)是 MSP430 系列单⽚机中常⽤的⼀种部件。
在⼯业现场,往往会由于供电电源、空间电磁⼲扰或其他原因引起强烈的⼲扰噪声。
这些⼲扰作⽤于数字器件,极易使其产⽣误动作,从⽽失去应有的控制功能,引起 MSP430 发⽣“程序跑飞”事故。
若不进⾏有效的处理,程序就不能回到正常的状态,从⽽失去应有的控制功能。
看门狗定时器正是为了解放这类问题⽽产⽣的,尤其是在具有循环结构的程序任务中更为有效。
在正常操作器件,⼀次 WDT 定时时间到,将产⽣⼀次器件复位。
如果通过编制程序使 WDT 定时时间稍⼤于程序执⾏⼀遍所⽤的时间时,并且程序执⾏过程中都有对看门狗定时器清零的指令,使计数器重新计数,则程序正常执⾏时,就会在 WDT 定时时间到达之前对 WDT 清零,不会产⽣ WDT 溢出,如果由于⼲扰使程序跑飞,则不会在 WDT 定时时间到达之前执⾏ WDT 清零指令,WDT 就会产⽣溢出,从⽽产⽣系统复位 CPU 需⽤重新运⾏⽤户程序,这样程序就可以⼜恢复正常运⾏状态。
MSP430 看门狗除了具有上述系统监测的特定⽤途之外,还可以作为内部定时器来使⽤,当选择的时间到达之后,和其他定时器⼀样产⽣⼀个定时中断。
此外 WDT 还可以被完全停⽌活动以⽀持超低功耗应⽤2 看门狗定时器结构3 看门狗定时器寄存器[1] WDTCTL 看门狗控制寄存器WDTCTL 由两部分组成:⾼ 8 位是对 WDT 操作的控制命令。
要写⼊操作 WDT 的控制命令,出于安全原因必须先正确写⼊⾼字节看门狗⼝令。
⼝令位 5AH,如果⼝令写错将导致系统复位。
读 WDTCTL 时,不需要⼝令,可直接读取地址 120H 中的内容,读出数据低字节位 WDTCTL 的值,⾼字节始终位 69H。
WDTCTL 除了看门狗定时器的控制位之外,还有两个⽤于设置 NMI 引脚功能。
WDTISx:选择看门狗定时器的计时输出其中 T 是 WDTCNT 的输⼊时钟源周期。
MSP430学习点滴——看门狗定时器看门狗有三种工作模式:停止模式,计时器模式,看门狗模式。
控制寄存器WDTCTL 由两部分组成,高8 位用作口令,低8 位实现对WDT 的控制操作。
要实现对WDT 的操作控制,必须先写入高字节看门狗口令。
口令为5AH,头文件里一般将WDTPW 宏定义为5AH.WDTCTL 寄存器各位定义如下:15~8 7 6 5 4 3 2 1 0 口令HOLD NMIES NMI TMSEL CNTCL SSEL IS1 IS0IS0 IS1 选择看门狗定时器的定时输出,其中T 是WDTCNT 的输入时钟源周期。
一般宏定义WDTIS0 为0x0001,WDTIS1 为0x0002. 0 T*2(PUC 复位后的值)1 T*22 T*23 T*2SSEL选择WDTCNT 的时钟源。
一般宏定义WDTISSEL 为0x0004. 0 SMCLK (PUC 复位后的值) 1 ACLKCNTCL 当该位为1 时清除WDTCTL。
一般宏定义WDTCNTL 为0x0008.TMSEL 工作模式的选择。
一般宏定义WDTTMSEL 为0x0010. 0 看门狗模式(默认) 1 定时器模式NMI选择RST/NMI 引脚功能,在PUC 后被复位。
一般宏定义WDTNMI 为0x0020.0 RST/NMI 引脚为复位端 1 RST/NMI 引脚为边沿触发的非屏蔽中断输入。
NMIES 选择中断的边沿触发方式。
一般宏定义WDTNMIES 为0x0040. 0 上升沿触发NMI 中断1 下降沿触发NMI 中断HOLD 停止看门狗定时器工作降低功耗。
一般宏定义WDTHOLD 为0x0080. 0 WDT 功能激活1 时钟禁止输入,计数停止。
因此,可以根据WDTCTL 寄存器的TMSEL 和HOLD 控制位设置WDT 工作在看门狗模式、定时器模式和低功耗模式。
C 语言实现低功耗模式的语句:WDTCTL = WDTPW + WDTHOLD;C 语言实现定时器模式的语句:WDTCTL =WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0;C 语言实现看门狗模式的语句:设置看门狗:WDTCTL = WDT_MRST_0_5。
看门狗电路所在院系:化工学院化工机械所在班级:10级自动化<1>班学生姓名:学生学号:看门狗定时器看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数。
如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。
如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。
使能时,WDT将递增,直到溢出,或称“超时”。
除非处于休眠或空闲模式,WDT 超时会强制器件复位。
为避免WDT 超时复位,用户必须定期用PWRSAV 或CLRWDT 指令将看门狗定时器清零。
如果WDT 在休眠或空闲模式下超时,器件将唤醒并从PWRSAV 指令执行处继续执行代码。
在上述两种情况下,WDTO 位(RCON<4>)都会置1,表示该器件复位或唤醒事件是由于WDT超时引起的。
如果WDT 将CPU从休眠或空闲模式唤醒,“休眠”状态位(RCON<3>)或“空闲”状态位(RCON<2>)也会置1,表示器件之前处于省电模式。
在正常操作期间,一次WDT超时溢出将产生一次器件复位。
当器件处于休眠状态时,一次WDT超时溢出将唤醒器件,使其继续正常操作(即称作WDT 唤醒)。
对WDTE 设置位清零可以永久性地关闭WDT。
后分频器分配完全是由软件控制,即它可在程序执行期间随时更改。
为避免发生不可预测的器件复位,当从Timer0 预分频器的分配改为WDT 后分频器的分配时,必须执行下列指令序列。
即使WDT 被禁止,也要执行这个指令序列。
WDT框图看门狗定时器是单片机的一个组成部分,在单片机程序的调试和运行中都有着重要的意义。
它的主要功能是在发生软件故障时,通过使器件复位(如果软件未将器件清零)将单片机复位。
也可以用于将器件从休眠或空闲模式唤醒,看门狗定时器对微控制器提供了独立的保护系统,当系统出现故障时,在可选的超时周期之后,看门狗将以RESET信号作出响应,像x25045就可选超时周期为1.4秒、600毫秒、200毫秒三种。
u p .wh ut.ed u.c nUM10398第14章:LPC111x看门狗定时器(WDT)ReRev v.00.10—11J a nuary2020110U s er manual 1.如何阅读本章所有LPC111x系列处理器的WDT模块完全一致。
2.特性•如果没有周期性重装计数值(即喂狗),则产生片内复位。
•支持调试模式。
•可通过软件允许看门狗,但禁止看门狗需要硬件复位或看门狗复位/中断。
•如果看门狗被允许,不正确/不完整的喂狗时序会产生复位/中断。
•具有看门狗复位的标志。
•可编程的32位定时器(带有内部预分频器)。
•时钟周期可选,从(T WDCLK×256×4)到(T WDCLK×232×4),取(T WDCLK×4)的倍数。
•可在系统控制块中选择内部RC振荡器(IRC)、主时钟或看门狗振荡器,来做为看门狗的时钟(WDCLK)源,见表3–23。
这样,看门狗定时器在不同功耗条件下,有多种可能计时选择。
为增加可靠性,还提供了一个看门狗定时器专用的完整内部时钟源,它不依赖于外部晶振及其相关元件和线路。
3.应用看门狗的目的是为了使微控制器在程序运行进入错误状态时,使系统在一个合理的时间内复位。
当看门狗被允许之后,如果用户程序没有在预定的时间内进行“喂狗”(或重新装载计数值),看门狗将复位系统。
4.描述看门狗定时器包括一个固定的4分频器和1个32位计数器,时钟通过4分频器送给送定时器。
每到一个时钟,定时器计数值减1。
开始递减的值,最小必须是0xFF;如果设定小于0xFF的值,则默认将0xFF装载到计数器。
因此,看门狗最小时间是(TWDCLK×256×4),最大时间是(TWDCLK×232×4),取(TWDCLK×4)的倍数。
看门狗必须按如下方法使用:1.在WDTC寄存器中设定看门狗定时器重装载值。
LPC2103之看门狗定时器WatchDog Timer (WDT)page225 看门狗定时器的定时范围为TPCLK x 256x 4 到TPCLK x 232 x 4)。
看门狗定时器的设置步骤如下:?在WDTC 寄存器设置看门狗定时器的重装值?在WDMOD 寄存器设置模式?先后写入0xaa 和0x55到WDFEED 寄存器以启动看门狗定时器?为防止看门狗产生复位/中断,必须在看门狗计数器下溢前进行喂狗当看门狗定时器下溢,程序计数器将如同产生了外部复位信号一样从0x00000000 地址重新启动。
看门狗定时输出标志(WDTOF)能够检测并是否看门狗导致了复位。
WDTOF 标志位必须软件清除。
看门狗相关寄存器寄存器功能访问复位值地址WDMOD 看门狗模式寄存器,这个寄存器包括了看门狗定时器的基本模式和状态R/W00xE000 0000WDTC 看门狗定时器常量寄存器,存放定时器计数值R/W0XFF0xE0000004WDFEEDWatchdog Feed sequence register,写入oxaa 和0x55 重新加载计数值WONA0xE000 0008WDTV 看门狗定时器值寄存器,该寄存器读出定时计数当前值RO0XFF0xE000 000CWatchdog Mode register (WDMOD - 0xE000 0000)看门狗操作模式选择WDENWDRESET 操作模式0X (0 or 1)不启动看门狗定时器10 看门狗中断模式。
运行看门狗中断,但WDRESET 不使能。
当看门狗定时器下溢,WDINT 标志位将置位并且产生看门狗中断请求11 看门狗复位模式。
运行看门狗中断且WDRESET 使能。
看门狗定时器下溢将复位控制器,一旦WDEN 或WDRESET 位设置后将不能够软件清除,只有在外部复位或者看门狗定时器下溢时才会被清除。
当看门狗定时器溢出时,看门狗定时器溢出标志位WDTOF 置位。
看门狗定时器参考资料:S3C2410A 的看门狗定时器有两个功能:作为常规时钟,并且可以产生中断; 作为看门狗定时器使用,当时钟计数减为0(超时)时,它将产生一个128 个时钟周期(PCLK)的复位信号. 主要特性如下:通用的中断方式的16bit 定时器. 当计数器减到0(发生溢出) ,产生128 个PCLK 周期的复位信号. 下图为看门狗的电路示意图,看门狗时钟使用PCLK 作为他的时钟源,PCLK 通过预分频产生适合的看门狗时钟.看门狗模块包括一个预比例因子放大器,一个是四分频器,一个16bit 计数器.看门狗的时钟源来自PCLK,为了得到较宽范围的看门狗信号,PCLK 先被预分频,之后再经过分频器分频.预分频比例因子的分频值,都可以由看门狗控制器(WTCON)决定,预分频值的有效范围从0 到256-1.分频因子可以选择16,32,64 或者128. 看门狗定时器记数值的计算公式如下: t_watchdog=1/ [PCLK/( prescaler value +1)/ Division_factor ] 看门狗的定时周期为T=WTCH×t_watchdog 一旦看门狗定时器被允许,看门狗定时器数据寄存器(WTDAT)的值不能被自动的装载到看门狗计数器(WTCNT)中.因此,看门狗启动前要将一个初始值写入看门狗计数器(WTCNT)中. 调试环境下的看门狗当S3C2410A 用嵌入式ICE 调试的时候,看门狗定时器的复位功能不能启动,看门狗定时器能从CPU 内核信号判断出当前CPU 是否处于调试状态, 如果看门狗定时器确定当前模式是调试模式,尽管看门狗能产生溢出信号,但是仍然不会产生复位信号.5,S3C2410A 相关寄存器WTCON――看门狗定时器控制寄存器看门狗控制寄存器能够禁止或者允许看门狗时钟,从四个不同的时钟源中挑选时钟信号,允许或禁止中断,并且能允许或禁止看门狗时钟输出.如果用户想要使用看门狗作为普通时钟,应该中断使能,禁止看门狗定时器复位.WTDAT――看门狗定时器数据寄存器WTDAT 用于设置看门狗定时器的超时时间值,在初始化看门狗过程中,WTDAT 的值不会自动加载到定时计数器中,首次使用定时器超时值为其初始值即0x8000,以后该寄存器的值会被自动加载到WTCNT 寄存器中.WTCNT――看门狗定时器计数寄存器WTCNT 为看门狗定时器工作的时间计数器的当前计数值,注意在初始化看门狗操作后,看门狗数据寄存器(WTDAT)的值不能自动装载到看门狗计数寄存器(WTCNT)中, 所以看门狗被允许之前应高初始化看门狗计数寄存器的值.6,实验程序由于看门狗是对系统的复位或者中断的操作,所以不需要外围的硬件电路.要实现看门狗的功能,只需要对看门狗的寄存器组进行操作.即对看门狗的控制寄存器(WTCON) , 看门狗数据寄存器(WTDAT) ,看门狗计数寄存器(WTCNT)的操作. 设计流程如下: 设置看门狗中断操作, 包括全局中断和看门狗中断的使能, 看门狗中断向量的定义. 对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子,分频器的分频值,中断使能和复位使能等. 对看门狗数据寄存器(WTDAT)和看门狗技术寄存器(WTCNT)的设置. 启动看门狗定时器.6.1 主功能函数int Main(void) {ChangeClockDivider(1,1);ChangeMPllValue(0xa1,0x3,0x1);Port_Init();Uart_Select(0);Uart_Init(0,115200);Uart_Printf("watchdog test is beginning\n");watchdog_test();while(1); }6.2 看门狗复位功能程序实现void watchdog_test(void) {//Prescaler value=100; lock division factor=128 ;PCLK=67.5MHz//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.0002//disable watchdogrWTCON=((100<<8)|(3<<3));//看门狗时钟周期T=WTCNT*t_watchdog=3S//看门狗喂狗rWTDAT=15000;rWTCNT=15000;//disable watchdog interruptrWTCON &= ~(3<<1);//enable Watchdog timer;reset signal.rWTCON|=((1<<5)|(1<<0));while(1); }6.3 看门狗定时器功能程序实现void watchdog_test(void) {//initialize interrupt registersClearPending(BIT_WDT);//建立WatchDog 中断pISR_WDT=(unsigned)watchdog_int;//Prescaler value=100,clock division factor=128//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856//disable watchdogrWTCON=((100<<8)|(3<<3));//看门狗时钟周期T=WTCNT*t_watchdog=4S//看门狗喂狗rWTDAT=15000;rWTCNT=15000;rWTCON|=((1<<5)|(1<<2)); //enable Watchdog timer ang watchdog interrupt //rWTCON|=((1<<5)|(1<<2)|1);//watchdog 复位,时间间隔为4S.rWTCON|=(1<<5)|(1<<2); //每4S watchdog 一次中断.//设置watchdog 为IRQ 中断模式rINTMOD&=0xFFFFFDFF;//开中断EnableIrq(BIT_WDT);while(f_ucSencondNo<11);}。
看门狗定时器看门狗定时器(⼀)什么是看门狗为了给初学者⼀个系统的概念,先介绍⼀下看门狗的基本概念。
当嵌⼊式系统运⾏时受到外部⼲扰或者系统错误,程序有时会出现"跑飞",导致整个系统瘫痪。
为了防⽌这⼀现象的发⽣,在对系统稳定性要求较⾼的场合往往要加⼊看门狗(WATCHDOG)电路。
看门狗的作⽤就是当系统“跑飞”⽽进⼊死循环时,恢复系统的运⾏。
(⼆)看门狗的⼯作原理给出看门狗的基本的⼯作原理:见下两条:1. 其基本原理为:设本系统程序完整运⾏⼀周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序运⾏⼀周期后就修改定时器的计数值,只要程序正常运⾏,定时器就不会溢出,若由于⼲扰等原因使系统不能在Tp 时刻修改定时器的计数值,定时器将在Ti 时刻溢出,引发系统复位,使系统得以重新运⾏,从⽽起到监控作⽤。
2. 在⼀个完整的嵌⼊式系统或单⽚机⼩系统中通常都有看门狗定时器,且⼀般集成在处理器芯⽚中,看门狗实际上就是⼀个定时器,只是它在期满后将⾃动引起系统复位。
(三)S3C2410 的看门狗对于我们所使⽤的S3C2410 的看门狗定时器有两个功能:1. 作为常规时钟,并且可以产⽣中断。
2. 作为看门狗定时器使⽤,当时钟计数减为0(超时)时,它将产⽣⼀个128个时钟周期的复位信号。
S3C2410的看门狗可以被⽤做⼀个普通的⼗六位的记数器来请求中断服务。
下图为看门狗时钟的电路⽰意图,看门狗时钟使⽤PCLK 作为它的时钟源,PCLK通过预分频产⽣适合的看门狗时钟。
预分频值和分频因⼦在看门狗时钟控制器寄存器(WTCON)中被指定。
预分频值的有效范围从0 到28-1。
分频因⼦可以选择16,32,64 或者128。
看门狗定时器计数值的计算公式如下:输⼊到计数器的时钟周期为t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]看门狗的定时周期为T=WTCN T×t_watchdog注意:⼀旦看门狗的时钟已经开始使⽤,它的数据寄存器(WTDAT)中的值将不会⾃动读到时间寄存器中间去(WTCNT),由于这个原因,你必须在看门狗记时器启动之前就将⼀个初始值写⼊到看门狗时间记数寄存器(WTCNT)中间去(四)看门狗的相关寄存器看门狗控制寄存器(WTCON)它能够禁⽌或允许看门狗时钟,从四个不同的时钟源中挑选时钟信号,允许或禁⽌中断并且能允许或禁⽌看门狗时钟输出。
看门狗定时器实验1.实验目的(1)掌握LM3S8962中的看门狗定时器(WDT)的功能和使用方法(2)掌握正确使用看门狗的方法2.实验内容(1)ARM的初始化配置(2)WDT的初始化和中断/复位设置(3)编程演示使用看门狗对系统进行监控3.WDT的功能图1 WDT模块结构图嵌入式控制系统运行时受到外部干扰或者系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。
为了防止这一现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗(Watchdog)电路。
看门狗电路的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。
在Stellaris 系列ARM里集成有硬件的看门狗定时器模块。
该模块有两个功能:当看门狗定时器的复位功能禁能时,可以把看门狗作为一个普通定时器来使用;当看门狗定时器的复位功能使能时,用作看门狗定时器,一旦产生了“二次超时”事件,将引起处理器复位。
看门狗定时器具有“二次超时”特性。
当32位计数器在使能后递减计数到0 状态时,看门狗定时器模块产生第一个超时信号,并产生中断触发信号。
在发生了第一个超时事件后,32 位计数器自动重装看门狗定时器装载寄存器(WDTLOAD)的值并重新递减计数。
如果没有清除第一个超时中断状态,则当计数器再次递减到0 时,且复位功能已使能,则看门狗定时器会向处理器发出复位信号。
如果中断状态在32位计数器到达其第二次超时之前被清除,则自动重装32位计数器,并重新开始计数,从而可以避免处理器被复位。
为了防止在程序跑飞时意外修改看门狗模块的配置,特意引入了一个锁定寄存器。
在配置看门狗定时器之后,只要写入锁定寄存器一个不是十六进制0x1ACCE551的任何数值,看门狗模块的所有配置都会被锁定,拒绝软件修改。
因此以后要修改看门狗模块的配置,包括清除中断状态(即喂狗操作),都必须要首先解锁。
解锁方法是向锁定寄存器写入十六进制数值0x1ACCE551 。
如果在看门狗定时器计数器正在计数时把新的值写入WDTLOAD,则计数器将装入新的值并继续计数。
看门狗定时器参考资料:
S3C2410A 的看门狗定时器有两个功能:作为常规时钟,并且可以产生中断; 作为看门狗定时器使用,当时钟计数减为0(超时)时,它将产生一个128 个时钟周期(PCLK)的复位信号. 主要特性如下:
通用的中断方式的16bit 定时器. 当计数器减到0(发生溢出) ,产生128 个PCLK 周期的复位信号. 下图为看门狗的电路示意图,看门狗时钟使用PCLK 作为他的时钟源,PCLK 通过预分频产生适合的看门狗时钟.
看门狗模块包括一个预比例因子放大器,一个是四分频器,一个16bit 计数器.看门狗的时钟源来自PCLK,为了得到较宽范围的看门狗信号,PCLK 先被预分频,之后再经过分频器分频.预分频比例因子的分频值,都可以由看门狗控制器(WTCON)决定,预分频值的有效范围从0 到256-1.分频因子可以选择16,32,64 或者128. 看门狗定时器记数值的计算公式如下: t_watchdog=1/ [PCLK/( prescaler value +1)/ Division_factor ] 看门狗的定时周期为T=WTCH×t_watchdog 一旦看门狗定时器被允许,看门狗定时器数据寄存器(WTDAT)的值不能被自动的装载到看门狗计数器(WTCNT)中.因此,看门狗启动前要将一个初始值写入看门狗计数器(WTCNT)中. 调试环境下的看门狗当S3C2410A 用嵌入式ICE 调试的时候,看门狗定时器的复位功能不能启动,看门狗定时器能从CPU 内核信号判断出当前CPU 是否处于调试状态, 如果看门狗定时器确定当前模式是调试模式,尽管看门狗能产生溢出信号,但是仍然不会产生复位信号.
5,S3C2410A 相关寄存器
WTCON――看门狗定时器控制寄存器看门狗控制寄存器能够禁止或者允许看门狗时钟,从四个不同的时钟源中挑选时钟信号,允许或禁止中断,并且能允许或禁止看门狗时钟输出.如果用户想要使用看门狗作为普通时钟,应该中断使能,禁止看门狗定时器复位.
WTDAT――看门狗定时器数据寄存器WTDAT 用于设置看门狗定时器的超时时间值,在初始化看门狗过程中,WTDAT 的值不会自动加载到定时计数器中,首次使用定时器超时值为其初始值即0x8000,以后该寄存器的值会被自动加载到WTCNT 寄存器中.
WTCNT――看门狗定时器计数寄存器WTCNT 为看门狗定时器工作的时间计数器的当前计数值,注意在初始化看门狗操作后,看门狗数据寄存器(WTDAT)的值不能自动装载到看门狗计数寄存器(WTCNT)中, 所以看门狗被允许之前应高初始化看门狗计数寄存器的值.
6,实验程序
由于看门狗是对系统的复位或者中断的操作,所以不需要外围的硬件电路.要实现看门狗的功能,只需要对看门狗的寄存器组进行操作.即对看门狗的控制寄存器(WTCON) , 看门狗数据寄存器(WTDAT) ,看门狗计数寄存器(WTCNT)的操作. 设计流程如下: 设置看门狗中断操作, 包括全局中断和看门狗中断的使能, 看门狗中断向量的定义. 对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子,分频器的分
频值,中断使能和复位使能等. 对看门狗数据寄存器(WTDAT)和看门狗技术寄存器(WTCNT)的设置. 启动看门狗定时器.
6.1 主功能函数
int Main(void) {
ChangeClockDivider(1,1);
ChangeMPllValue(0xa1,0x3,0x1);
Port_Init();
Uart_Select(0);
Uart_Init(0,115200);
Uart_Printf("watchdog test is beginning\n");
watchdog_test();
while(1); }
6.2 看门狗复位功能程序实现
void watchdog_test(void) {
//Prescaler value=100; lock division factor=128 ;PCLK=67.5MHz
//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.0002
//disable watchdog
rWTCON=((100<<8)|(3<<3));
//看门狗时钟周期T=WTCNT*t_watchdog=3S
//看门狗喂狗
rWTDAT=15000;
rWTCNT=15000;
//disable watchdog interrupt
rWTCON &= ~(3<<1);
//enable Watchdog timer;reset signal.
rWTCON|=((1<<5)|(1<<0));
while(1); }
6.3 看门狗定时器功能程序实现
void watchdog_test(void) {
//initialize interrupt registers
ClearPending(BIT_WDT);
//建立WatchDog 中断
pISR_WDT=(unsigned)watchdog_int;
//Prescaler value=100,clock division factor=128
//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856
//disable watchdog
rWTCON=((100<<8)|(3<<3));
//看门狗时钟周期T=WTCNT*t_watchdog=4S
//看门狗喂狗
rWTDAT=15000;
rWTCNT=15000;
rWTCON|=((1<<5)|(1<<2)); //enable Watchdog timer ang watchdog interrupt //rWTCON|=((1<<5)|(1<<2)|1);
//watchdog 复位,时间间隔为4S.
rWTCON|=(1<<5)|(1<<2); //每4S watchdog 一次中断.
//设置watchdog 为IRQ 中断模式
rINTMOD&=0xFFFFFDFF;
//开中断
EnableIrq(BIT_WDT);
while(f_ucSencondNo<11);
}。