LPC2294看门狗定时器

tech2022-09-13  102

看门狗定时器(WDT)

1.特点

1.如果不定期重新装载,会内部重置芯片 2.调试模式 3.由软件启动,但是需要硬件复位或者看门狗复位/中断才能禁用。 4.如果看门狗启用了之后,采用不正确或者不完全的喂狗顺序会导致复位/中断 5.指示看门狗复位的标志 6.可编程的32位定时器与内部预分频。 7.可选择时间段,从(T PCLK x 256 x 4)到(TPCLK x 232 x4)

2.应用

看门狗的目的是在微控制器进入错误的状态时在合理的时间之内进行复位,当使能后,如果用户程序在预定时间之内错误地喂狗或者没有喂狗,看门狗将产生一个系统复位,

3.说明

看门狗由一个固定除以4的分频器和一个32位计数器组成,系统时钟通过预分频器送到定时器,定时器采用递减的方式计时。计数器递减的最小值是0xFF,设置一个低于0xFF的值将导致在计数器中加载0xFF,因此看门狗最小定时间隔是(T PCLK x 256 x 4),最大定时间隔是(T PCLK x 232 x 4),其倍数为(T PCLK x 4)。门狗计数器下溢时,程序计数器将从0x0000 0000开始,就像外部复位的情况一样。可以检查Watchdog超时标志(WDTOF),以确定是否该Watchdog导致了重置条件。WDTOF标志必须通过软件清除。

4.寄存器描述

寄存器功能地址WDMOD看门狗模式寄存器。这个寄存器包含看门狗定时器的基本模式和状态。0xE0000000WDTC看门狗定时器常量寄存器。这个寄存器决定超时值。0xE0000004WDFEED看门狗FEED序列寄存器。将0xAA后面跟着0x55写入这个寄存器将重新将看门狗计时器加载到它的预置值。0xE0000008WDTV看门狗定时器值寄存器。这个寄存器读出看门狗计时器的当前值。0xE000000C

4.1 Watchdog Mode register

WDMOD 寄存器根据WDEN和复位位(WDRESET)的组合控制看门狗的操作。

WDENWDRESET运行方式0X(0或者1)调试/操作,不运行看门狗。10看门狗中断模式:使用看门狗中断但不启用WDRESET进行调试。当选择此模式时,看门狗计数器下溢将设置WDINT标志,并产生看门狗中断请求。11看门狗复位模式:操作看门狗中断和WDRESET使能。当选择此模式时,看门狗计数器下溢将复位微控制器。虽然看门狗中断也在这种情况下也使能(WDEN = 1),但是它将不会被识别,因为看门狗复位时将清除WDINT标志。

一旦WDEN或WDRESET位被设置,他们不能被软件清除。这两个标志都可以通过外部复位或看门狗定时器下溢来清除。

WDTOF:看门狗超时标志的WDTOF在看门狗超时时设置。这个标志需要软件清除。 WDINT :当看门狗超时时设置看门狗中断标志WDINT。当发生任何重置时,此标志将被清除。一旦看门狗中断得到服务,就需要在在VIC中禁用它,否则看门狗中断请求将无限期地产生

WDMOD寄存器位描述:

位符号描述0WDENWDEN看门狗中断启用位(只设置)。1WDRESET看门狗复位启用位(只设置)。2WDTOF看门狗超时标志3WDINT看门狗中断标志(只读)7:4保留

4.2 Watchdog Timer Constant register

WDTC寄存器决定超时值,每当出现一个FEED序列时,WDTC内容将被重新加载到看门狗计时器中,它是一个32位寄存器,在重置时将8个LSB设置为1。将0xFF以下的值写入将导致0xFF被加载到WDTC。因此,最小超时间隔是T PCLK×256×4。

位符号描述31:0Count看门狗超时间隔。

4.3 Watchdog Feed register

将0xAA后面跟着0x55写入这个寄存器将重新将看门狗计时器加载到WDTC值。这个操作也将启动看门狗,如果已经通过WDMOD寄存器使能。在WDMOD寄存器中只设置WDEN位不足以启用看门狗。在看门狗能够产生一个中断/重置之前,一个有效的FEED序列必须首先被完成,在这之前,看门狗将忽略feed错误。一旦0xAA被写到WDFEED寄存器,看门狗寄存器空间中的下一个操作必须是写到WDFFED寄存器(0x55),否则看门狗将被触发,在一个FEED序列期间对看门狗定时器寄存器的不正确访问,中断/重置将在第二个PCLK期间产生。

备注:在FEED过程中,中断必须被禁用。如果在FEED序列期间发生中断,将出现中止条件。

位符号描述7:0FeedFEED值应该是0xAA后跟0x55。

4.4 Watchdog Timer Value register

WDTV寄存器用于读取看门狗定时器的当前值。

位符号描述31:0Count计数定时器值。

5.实例

由上图可以看出LPC2294看门狗定时器的时钟来自Cpclk,Cpclk是由外部高速晶振HES osc产生送到PLL产生系统时钟,然后进行预分频得到的,

#define Fosc 11059200 /*晶振频率,10MHz~25MHz,应当与实际一致*/ #define Fcclk (Fosc * 6) /*系统频率,必须为Fosc的整数倍(1~32) #define Fpclk (Fcclk / 4) * 1 /*PB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍*/

看门狗定时器的频率是Fpclk经过4分频之后得到的,所以看门狗定时器的预设值为: 假设设定1S,则11059200*6/4/4=4147200=0xFD2000。 看门狗定时器应该以下列方式使用。

在WDTC寄存器中设置看门狗定时器常量重新加载值。在WDMOD寄存器中设置模式启动定时器需要按顺序写入0xAA和0x55到WDFEED寄存器应该在看门狗计数器下溢出之前进行再次喂狗,以防止复位/中断 /************************************************* 名称:Wdtfeed() 功能:看门狗喂狗 入口参数:无 出口参数:无 *************************************************/ void Wdtfeed(void) { WDTC=0xAA; WDTC=0x55; } /************************************************* 名称:WDTINT() 功能:看门狗初始化 入口参数:无 出口参数:无 *************************************************/ void WDTINT(void) { WDTC=0xFD2000;//0xFD2000 Fpclk=16.5888Mhz pclk/4=4147200=0xFD2000 WDMOD=0x03;//采用复位模式, Wdtfeed(); }

然后在main函数一开始时对看门狗进行初始化(WDTINT),在while循环中对看门狗进行喂狗(Wdtfeed)即可。

最新回复(0)