|
MSP430F169单片机编程基础——(五)WDT 看门狗定时器
[复制链接]
Watchdog Timer Module
看门狗定时器(WDT)是MSP430系列单片机中常用的一种部件。
在工业现场,往往会由于供电电源、空间电磁干扰或其他原因引起强烈的干扰噪声。这些干扰作用于
数字器件,极易使其产生误动作,从而失去应有的控制功能,引起 MSP430发生“程序跑飞”事故。若不
进行有效的处理,程序就不能回到正常的状态,从而失去应有的控制功能。
看门狗定时器正是为了解放这类问题而产生的,尤其是在具有循环结构的程序任务中更为有效。
在正常操作器件,一次 WDT 定时时间到,将产生一次器件复位。如果通过编制程序使 WDT 定时时
间稍大于程序执行一遍所用的时间时,并且程序执行过程中都有对看门狗定时器清零的指令,使计数器重
新计数,则程序正常执行时,就会在WDT定时时间到达之前对WDT清零,不会产生WDT溢出,如果由
于干扰使程序跑飞,则不会在WDT定时时间到达之前执行WDT清零指令,WDT就会产生溢出,从而产
生系统复位CPU 需用重新运行用户程序,这样程序就可以又恢复正常运行状态。
MSP430看门狗除了具有上述系统监测的特定用途之外,还可以作为内部定时器来使用,当选择的时
间到达之后,和其他定时器一样产生一个定时中断。此外 WDT 还可以被完全停止活动以支持超低功耗应
用。
看门狗定时器寄存器
(一) WDTCTL 看门狗控制寄存器
WDTCTL由两部分组成:
高 8 位是对 WDT 操作的控制命令。要写入操作 WDT 的控制命令,出于安全原因必须先正确写入高字节
看门狗口令。口令位5AH,如果口令写错将导致系统复位。
读WDTCTL时,不需要口令,可直接读取地址 120H中的内容,读出数据低字节位WDTCTL的值,高字
节始终位69H。WDTCTL除了看门狗定时器的控制位之外,还有两个用于设置NMI引脚功能。
捕获
WDTISx:选择看门狗定时器的计时输出
其中T是WDTCNT的输入时钟源周期。
0 T×215
1 T×213
2 T×29
3 T×26
WDTSSEL:选择WDTCNT的时钟源
0 SMCLK
1 ACLK
由WDTISx 及WDTSSEL位便可确定WDT定时时间, 因此通过软件对计数器设置不同的初始值就可实现不同时间的定时。与其他定时器不同之处在于,WDT最多只能定时 8种和时钟源相关的时间。
下表列出了WDT可选的定时时间(晶振为 32.768KHz,SMCLK=1MHz)。
捕获
WDTCNTCL:看门狗计数器清零位
0: 无操作
1: 将WDTCTL的值清零
当该位为1时,清除WDTCNT。
WDTTMSEL:工作模式选择
0 看门狗模式;
1 定时器模式。
WDTNMI:选择RST/NMI引脚功能(在PUC 后被复位)
0 RST/NMI引脚为复位端;
1 RST/NMI引脚为边沿触发的非屏蔽中断输入。
WDTNMIES:选择中断的边沿触发方式
0 WDT功能激活;
1 时钟禁止输入,计数停止。
WDTHOLD:停止看门狗计数器
0 WDT功能激活
1 时钟禁止输入,计数停止
(二) WDTCNT 计数单元
捕获
WDTCNT 时 16 位增计数器,由于 MSP430 所选定的时钟电路产生的固定周期脉冲信号对计数器进行加法计数。 如果计数器事先被预置的初始状态不同, 那么从开始计数到计数溢出为止的时间就不同。 WDTCNT不能直接通过软件直接通过软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。
(三) IE1 中断允许寄存器
捕获
WDTIE:看门狗定时器模式中断允许控制位
0 看门狗定时器中断禁止
1 看门狗定时器中断允许
NMIIE:非屏蔽中断允许控制位
0 禁止非屏蔽中断
1 允许非屏蔽中断
(四) IFG1 中断标志寄存器
捕获
WDTIFG:看门狗定时器模式中断标志
0 无看门狗定时器中断标志
1 有看门狗定时器中断标志
NMIIFG:非屏蔽中断标志
0 无非屏蔽中断标志
1 有非屏蔽中断标志
看门狗定时器操作
(一)看门狗模式
由于在上电复位或系统复位时,WDTCNT和WDTCL两寄存器内容被全部清除(晶振为 32768Hz,
SMCLK=1MHz):
复位后,工作在看门狗模式,以 ACLK为时钟,WDT定时时间为32ms。
上述情况将导致WDT的运行自动进入看门狗模式。
所以,用户软件一般都需要进行如下操作:
■ 进行WDT的初始化:设置合适的时间(通过 SSEL、IS0、IS1位来选定) 。
■ 周期性的对WDTCNT清零:防止WDT溢出,保证WDT的正确使用。
■ 在看门狗模式下,如果计数器超过了定时时间,就会产生复位和激活系统上电清除信号,系统从上电
复位的地址重启动。
■ 如果系统不用看门狗功能,应该在程序开始处禁止看门狗功能。
(二)定时器模式
WDTCTL 的 WDTTMSEL 位置位选择定时器模式。这一模式产生选定时间的周期性中断。定时时间
可以通过WDTCTL的WDTCNCTL位置位来开始。
■ 改变定时时间而不同时清楚 WDTCNT 将导致不可预料的系统立即复位或中断。定时时间可以通过
WDTCTL的 CNCTL位置位来开始。
■ 如果先后分别进行清除和定时时间选择,则可能立即引起不可预料的系统复位或中断。
■ 另外,在终场工作时。改变时钟源可能导致WDTCNT额外的计数时钟。
(三) 低功耗模式
当系统不需要WDT做看门狗和定时器时,可关闭WDT以减小功耗。
控制位WDTHOLD=1时关闭WDT,这时看门狗停止工作。
看门狗示例程序
例:使用看门狗定时器功能产生一个方波(周期的取反 P1.0) 。
#include
void main(void)
{
WDTCTL = WDT_MDLY_32; // 以SMCLK进行32ms的延迟(can't understand it)
IE1 |= WDTIE; // 开WDT中断(can't understand it)
P1DIR |= BIT0; // 信号输出
_EINT(); // 总中断开
while(1)
{
_NOP(); //空语句
}
}
// 看门狗 中断服务子程序
#pragma vector = WDT_VECTOR
__interrupt void WDT_IRQ(void)
{
P1OUT ^= BIT0; // 对引脚取反
}
|
|