什么是看门狗
在工业现场,往往会由于供电电源、空间电磁干扰或其他原因引起强烈的干扰噪声。这些干扰作用于数字器件,极易使其产生误动作,从而失去应有的控制功能,引起MSP430发生“程序跑飞”事故。若不进行有效的处理,程序就不能回到正常的状态,从而失去应有的控制功能。看门狗定时器正是为了解放这类问题而产生的,尤其是在具有循环结构的程序任务中更为有效。看门狗有一个RST管脚,用来复位。
看门狗的两种工作模式
(一)看门狗模式:看门狗模式是看门狗这个组件的主要功能,(这不是废话嘛,看门狗组件肯定是看门狗啊)提到看门狗,不得不说这个密码保护了(WDTPW watchdog timer password )任何读写操作必须通过他才能正确执行指令,当密码错误,会产生一个PUC使单片机复位,为什么要这样呢?在早期的时候,有些单片机没有看门狗的密码保护,就很容易被窃取单片机的程序,一些公司以零开发成本就得到了源码,不得不说非常危险。这里给出这个寄存器的图,仅仅给出了高八位
谈完了密码保护,那肯定得说说看门狗的工作原理。既然说看门狗能复位程序,那这个看门狗复位程序是怎么做到的呢?(这里仅从寄存器配置说明,不涉及硬件)
大家看第五个WDTNMI,这个寄存器默认配置为 0,意思是说看门狗默认配置为复位模式,当用户配置为 1 时,使用NMI 模式,而我们大多时候使用复位功能。没必要配置NMI
既然是复位,那肯定得发送复位信号到单片机吧,而这个信号就是中断标记。单片机判断有无中断标记来复位。中断标记是怎么产生的?前面已经说了一个,当用户写入密码错了,就会产生一个错误中断标记;另一个就是,到达用户设定的复位时间。比如单片机默认32ms复位一次。而这个时间用户是可以自行配置的。(看门狗模式可以不打开总中断,也没有打开分控位中断一说)
(二)间隔定时器模式:其实这个跟看门狗模式没多大区别,也是产生一个周期性的中断,那区别在哪?主要的不同是看门狗会复位程序,而定时器不会,定时器执行的中断子程序可以由用户配置,看门狗甚至没有中断子程序一说。还有的不同就是中断标记了。定时器需要打开总中断。
给出一个例子供参考
例:使用看门狗定时器功能产生一个方波(周期的取反P1.0)。
#include <msp430x16x.h>
void main(void)
{
WDTCTL = WDT_MDLY_32; // 以SMCLK进行32ms的延迟
IE1 |= WDTIE; // 开WDT中断
P1DIR |= BIT0; // 信号输出
_EINT(); // 总中断开
while(1)
{
_NOP();
}
}
// 看门狗中断服务子程序,这里指的是定时器的中断,
//看门狗模式的中断向量不是这个,看门狗有一个系统的自带的复位中断向量。不需要中断子函数
#pragma vector = WDT_VECTOR
__interrupt void WDT_IRQ(void)
{
P1OUT ^= BIT0; // 对引脚取反
}