07-笔记:LPC1788-看门狗

概述

看门狗定时器的用途是使微控制器在进入错误状态后的一定时间内复位。当看门狗使能时,
如果用户程序没有在预定的时间内“喂狗”(或重装),会产生一个看门狗事件。看门狗事件会
导致产生一次芯片复位(如果被配置这么做的话)。

特性

特性
 如果没有在可编程的超时周期内重装,则产生片内复位;
 可选的窗式操作要求重装在最小超时周期和最大超时周期之间出现,两个超时周期都
是可编程的;
 可选的报警中断可以在看门狗超时之前的一个可编程时间点产生;
 带内部固定预分频器的可编程 24 位定时器;
 看门狗定时周期可以选择为定时所需看门狗时钟数目的 4 倍:从 1024 个看门狗时钟
(T WDCLK ×256×4)到超过 6700 万个看门狗时钟(T WDCLK ×2 24 ×4);
 “安全”的看门狗操作。一旦看门狗使能,要求禁止硬件复位或看门狗复位;
 专用片内看门狗振荡器提供一个可靠的时钟源,这个时钟源在看门狗定时器正在运行
时不能关闭;
 如果看门狗使能,错误的喂狗时序会导致看门狗立即复位;
 可以选择保护看门狗重装值,使得重装值只能在“报警中断”时间达到后才能更改;
 指示看门狗复位的标志。

描述

看门狗包括一个固定的 4 分频预分频器和一个 24 位的计数器。计数器在时钟作用下递减计
数。计数器开始递减的最小值是 0xFF。如果设置一个小于 0xFF 的值,系统会将 0xFF 装入计
数器。因此最小看门狗间隔为(T WDCLK ×256×4),最大看门狗间隔为(T WDCLK ×2 24 ×4),两者都
是(T WDCLK ×4)的倍数。看门狗应当根据下面的方法来使用:
 在 WDTC 寄存器中设置看门狗定时器的固定装载值;
 在 WDMOD 寄存器中设置看门狗定时器工作模式;
 如果需要窗式操作,在 WDWINDOW 寄存器中设置一个看门狗窗口时间值;
 如果需要一个报警中断,在 WDWARNINT 寄存器中设置一个看门狗报警中断值;
 通过向 WDFEED 寄存器顺序写入 0xAA 和 0x55 使能看门狗;
 为了防止一个看门狗事件,看门狗必须在看门狗计数器到达零之前再次喂狗。如果一
个看门狗窗口值被设置,喂狗必须也在看门狗计数器经过这个值以后再出现。
可以检查看门狗超时标志(WDTOF)来确 定看门狗是否已经产生了复位条件。WDTOF 标志必须通过软件清零。

看门狗喂狗寄存器(WDFEED - 0x4000 0008)
向该寄存器写入 0xAA,然后写入 0x55 会使 WDTC 的值重新装入看门狗定时器。如果设
置好了看门狗的溢出模式,该操作还将启动看门狗运行。置位 WDMOD 中的 WDEN 位之后,
还必须完成一次有效的喂狗时序,然后看门狗才能产生复位。
在看门狗真正启动之前。看门狗 将忽略错误的喂狗
在看门狗启动后,如果向 WDFEED 寄存器写入 0xAA 之后的下一个操作
不是向 WDFEED 寄存器写入 0x55,而是访问任何一个看门狗寄存器,那么会立刻造成复位/
中断。在喂狗时序中,一次对看门狗寄存器不正确访问之后的第二个 PCLK 周期将产生复位。
在喂狗时序过程中应禁止中断。如果在喂狗时序期间出现中断,那么将会产生一个中止条
件。
/*  关中断 */
LPC_WDT->FEED = 0xAA;  /*  喂狗 [1] */
LPC_WDT->FEED = 0x55;
/*  开中断 */
4
 
1
/*  关中断 */
2
LPC_WDT->FEED = 0xAA;  /*  喂狗 [1] */
3
LPC_WDT->FEED = 0x55;
4
/*  开中断 */

WDT 中断

看门狗中断占用 NVIC 的通道 16,中断使能寄存器 ISER 用来控制 NIVC 通道的中断使能。
当 ISER0[0]=1 时,通道 16 中断使能,即看门狗中断使能。
中断优先级寄存器 IPR 用来设定 NIVC 通道中断的优先级。IPR5[7:3]用来设定通道 16 的优
先级,即看门狗中断的优先级
WDT 的中断标志位无法通过软件清零,只能通过硬件复位清零。
因此,当发生 WDT 中断时,只能通过禁止 WDT 中断的方式返回。

使用示例


看门狗定时器的用途是在微控制器进入错误状态后的一段合理的时间内将其复位。
看门狗 被使能后,如果用户程序没有在预先设定的时间内喂狗(即给看门狗定时器重载定时值),
那么将会产生一个看门狗事件。看门狗事件会导致芯片复位(如果事先已做好相关设置)。

看门狗定时器包括一个 4 分频的预分频器和一个 24 位的计数器(递减计数)。
看门 狗定时器的最小定时间隔为(T WDCLK ×256×4),最大定时间隔为(TWDCLK×2 24 ×4),两
者都是 TWDCLK×4 的倍数

使用方法:
 在 WDTC 寄存器中设置看门狗定时器常数重载值。
 在 WDMOD 寄存器中设置看门狗定时器的工作模式。
 若要求窗口式操作,应在 WDWINDOW 寄存器中设置看门狗窗口时间值。
 若要求报警中断,应在 WDWARNINT 寄存器中设置一个用于产生看门狗报警
中断的值。
 通过向 WDFEED 寄存器依序写入 0xAA 和 0x55 来启动看门狗。
 为了避免出现看门狗事件,在看门狗计数器递减至 0 之前,应再次―喂狗‖。如
果已经通过程序设置了一个窗口值,那么在看门狗计数器超过这个值以后也应
再次―喂狗‖。

若看门狗定时器被设置为当看门狗事件发生时会导致复位且计数器为 0,那么当看门狗事件
发生时,会引发 CPU 复位,并从向量表中加载栈指示器和编程计数器(与外部复位时的情
况一样)。通过检查看门狗超时标志(WDTOF)可以判断系统复位是否由看门狗引发。
WDTOF 标志必须由软件清零。
若看门狗定时器被设置为产生报警中断,那么当计数器中的值与 WDWARNINT 寄存器中所
定义的值相匹配的时候,就会产生中断。
看门狗模式寄存器(WDMOD—0x4000 0000 )
WDMOD 寄存器通过 WDEN 位和 RESET 位的组合来控制看门狗的操作。需要注意的是,
必须在任何 WDMOD 寄存器改变生效之前喂狗。


看门狗定时器包括一个 4 分频的预分频器和一个 24 位的计数器(递减计数)。计数器递减 的最小值为 0xFF

导致窗口看门狗复位的情况:
在看门狗被使能的情況下,若有错误的喂狗序列会马上导致看门狗复位。
如果在可编程超时期间内没有被重载,可内部复位芯片。
窗口看门狗工作模式:

窗口看门狗触发的中断:
在看门狗超时之前一段时间(可通过编程设定)可选择生成报警中断。

正确的喂狗方法
向WDFEED寄存器写入 0xAA,然后写入 0x55 将会使看门狗定时器重新载入 WDTC 的值
如果通 过 WDMOD 寄存器使能了看门狗,该操作还将启动看门狗运行

WDWINDOW-看门狗定时器窗口寄存器(WDWINDOW—0x4000 0018)
WDWINDOW 寄存器决定在喂狗过程中允许的最大 WDTV 值。如果在 WDTV 的值没有达
到这个最大值之前已完成了一个有效的喂狗序列,那么将发生看门狗事件。
WDWINDOW 复位为这个最大可能的 WDTV 值,因此窗口不受此影响。

  看门狗定时器报警中断寄存器(WDWARNINT—0x4000 0014 )
WDWARNINT 寄存器决定产生看门狗中断的看门狗定时器计数值。当看门狗定时器计数器
的值与 WDWARNINT 所设定的值相匹配的时候,就会在接下来的 WDCLK 时钟周期之后
产生中断。

看门狗定时器常数寄存器(WDTC—base + -x04 )
WDTC 寄存器决定看门狗定时器的超时值。每当喂狗序列产生时,WDTC 中的常量就会被
重装入看门狗定时器。一旦发生复位,就会预先装入 0x00 00FF。若写入一个小于 0xFF 的
值,系统会将 0x0000 00FF 装入WDTC寄存器中。因此最小超时间隔为 TWDCLK×256×4。
若 WDMOD 寄存器中 WDPROTECT 位为 1,那么如果在看门狗计数器小于 WDWARNIN
和 WDWINDOW 之前试图改变 WDTC 的值就会导致看门狗复位和 WDTOF 标志被置位。

WDTC-----------------------------------------窗口超时值-初装值
该段喂狗,看门狗复位
WDWINDOW ------------------------------窗口最小值,之后允许喂狗
该段喂狗,重装看门狗超时值
WDWARNIN--------------------------------窗口警告值,之后触发中断
该段喂狗,看门狗复位
0x00 00FF-----------------------------------超时触发看门狗 复位

喂狗时间错误或方法错误,都会导致窗口看门狗 复位
WDTV 看门狗定时器值寄存器。该寄存器读出看门狗定时器的当前 值。
可通过读取当前看门狗计数值,判断喂狗时机是否达到


WWDT_Init(WDT_TIMEOUT); /*  初始化 WDT */
WWDT_Enable(ENABLE);
WWDT_SetMode(WWDT_RESET_MODE, ENABLE);
WWDT_Start(WDT_TIMEOUT);
WWDT_Feed(); /*  喂狗 */
5
 
1
WWDT_Init(WDT_TIMEOUT); /*  初始化 WDT */
2
WWDT_Enable(ENABLE);
3
WWDT_SetMode(WWDT_RESET_MODE, ENABLE);
4
WWDT_Start(WDT_TIMEOUT);
5
WWDT_Feed(); /*  喂狗 */























猜你喜欢

转载自www.cnblogs.com/bog-box/p/LPC1788-WDG.html