看门狗计时器(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),其倍数为) 门计数器下溢时,程序计数器从0x0000 0000开始,与外部复位时相同。 可以检查Watchdog超时标志(WDTOF )以确定Watchdog是否导致了重置条件。 WDTOF标志必须通过软件清除。
4 .寄存器描述寄存器功能地址WDMOD看门狗模式寄存器。 这个寄存器包含看门狗计时器的基本模式和状态。0xE0000000WDTC看门狗定时器常数寄存器。 这个寄存器决定超时值。0xE0000004WDFEED看门狗FEED顺序寄存器。 写入0xAA后跟0x55的寄存器时,看门狗计时器会重新加载到其预设值中。0xE0000008WDTV看门狗定时器值寄存器。 该寄存器读取看门狗计时器的当前值。0xe 00000 c 4.1 watchdogmoderegisterwdmod寄存器通过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 watchdogtimerconstantregisterwdtc寄存器以确定超时值,然后输入序列这是一个32位寄存器,如果在复位时将8个LSB设置为1,并写入0xFF以下的值,则0xFF将加载到WDTC中。 因此,最小超时间隔为T PCLK2564。
位符号说明31:0计数看门狗超时间隔。 4.3写入watchdogfeedregister0x aa后跟0x55的寄存器时,看门狗计时器将重新加载到WDTC值中。 如果在WDMOD寄存器中启用了此操作,也会启动看门狗。 在WDMOD寄存器中仅设置WDEN位并不足以启用看门狗。 有效的订阅源序列必须首先完成,看门狗才能生成中断/复位。 在此之前,看门狗会忽略订阅源错误。0xAA写入WDFEED寄存器后,看门狗寄存器空间的下一个操作必须写入WDFFED寄存器(0x55 )。 否则,将触发看门狗,在单个订阅源序列中对看门狗计时器寄存器进行未授权访问,并在第二个PCLK期间进行中断/复位。
备注:提要中,中断必须禁用。 进料序列中发生中断时,会发生中止条件。
位符号说明7:0提要的值应该是0xAA后面跟0x55。 4.4 watchdogtimervalueregisterwdtv寄存器用于读取看门狗计时器的当前值。
位符号描述31:0计数计时器值。
5 .由上图可见,LPC2294看门狗计时器的时钟来自Cpclk,Cpclk由外部高速晶振HES osc产生,并送入PLL生成系统时钟,然后进行预分频得到,
#define Fosc 11059200 /*晶体频率,10 MHz至25 MHz,必须与实际相符*/#definefcclk(fosc*6)/*系统频率
率,必须为Fosc的整数倍(1~32)#define Fpclk (Fcclk / 4) * 1 /*PB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍*/看门狗定时器的频率是Fpclk经过4分频之后得到的,所以看门狗定时器的预设值为:
假设设定1S,则11059200*6/4/4=4147200=0xFD2000。
看门狗定时器应该以下列方式使用。
然后在main函数一开始时对看门狗进行初始化(WDTINT),在while循环中对看门狗进行喂狗(Wdtfeed)即可。