MSP430单片机看门狗面面观
以MSP430F2274为例。其中汇编实现采用的是IAR汇编,CCE汇编实现稍作修改即可。
1. 看门狗有三种工作模式:停止模式,计时器模式,看门狗模式。
2. 其中后两种模式可以选择的时钟源有:SMCLK和ACLK。
3. 在使用后两种模式时候要注意单片机所处的状态下看门狗能否工作,如单片机处在LPM3时候只有ACLK时钟,处在LPM4下,没有时钟可以使用。
4. 看门狗模式的使用方法:当看门狗计数溢出时,程序复位。在程序中开启看门狗,在计数溢出前清空看门狗,或重置看门狗,以使其重新计数。若程序跑飞,看门狗可能没有被清空或重置,就会溢,使程序复位。
5. 在MSP430F2274中,看门狗模式下可以计时最长为1s,若需要以更长的时间复位,可采取的方法,使用其他计数器,计数满后执行((void (*)())RESET_VECTOR)();或计数满后往看门狗控制寄存器写个错误值或执行一条无效命令:如((void (*)())0x170)();0x170是外围模块的一个地址,不可能是一个函数地址,所以执行此句将使程序复位。
停止模式:关闭看门狗
C语言实现:WDTCTL = WDTPW + WDTHOLD
汇编语言实现:mov.w #WDTPW+WDTHOLD,WDTCTL
计时器模式:作为一个计时器使用,计数器满产生中断时执行看门狗中断函数。
C语言实现:
主程序中:开启看门狗计时器,如:WDTCTL = WDT_MDLY_8;或WDTCTL = WDT_ADLY_250;等
看门狗中断函数为:
#pragma vector=WDT_VECTOR
__interrupt void wATchdog_timer(void)
{
//..................................
}
汇编语言实现:
开启看门狗计时器,如:
mov.w #WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0 ,WDTCTL
或 mov.w #WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0 ,WDTCTL等
中断向量表中的看门狗中断向量:
ORG 0FFF4h ;msp430f2274的看门狗中断地址
DW RESET ;程序开始处以REST作为标号
看门狗中断函数:
WDT_ISR
;....................
reti
看门狗模式:计数溢出时,执行复位中断函数。
C语言实现:
清看门狗:WDTCTL = WDTPW+WDTCNCTL;
设置看门狗:WDTCTL = WDT_MRST_0_5;
或WDTCTL = WDT_ARST_1000;等
汇编语言实现:
中断向量表中的复位向量:
ORG 0FFFEh ;msp430f2274的复位地址
DW RESET ;程序开始处以REST作为标号
清看门狗:mov.w #WDTPW+WDTCNCTL,WDTCTL
设置看门狗:
mov.w # WDTPW+WDTCNTCL+WDTIS1 ,WDTCTL
mov.w # WDTPW+WDTCNTCL+WDTSSEL,WDTCTL;等
————————————————————————————————————————————
关于喂狗
喂狗,也就是在看门狗定时器溢出之前对其进行清零的操作。
网上和书里对喂狗的介绍不多,大部分都只说使用“WDTCTL = WDTPW + WDTCNTCL;”即可。一般使用起来没什么问题,但是当不使用默认的看门狗时钟源和分频系数之后,问题就来了。(以G2XXX系列,SMCLK=1M,ACLK=32K为例)直接使用“WDTCTL = WDTPW + WDTCNTCL;”喂狗之后,看门狗就被重置成复位状态,看门狗复位时间就变成了32ms,如果远小于你的喂狗时间,程序就没法正常工作了,典型表现为定时重新启动。仔细查看WDTCTL寄存器之后,就能发现问题。
要正确喂狗最好的办法就是不改变原有看门狗配置的情况下将WDTCNTCL置1。这样看来,简单的就是“WDTCTL |= WDTPW + WDTCNTCL;”,其中需要注意的是WDTPW位读出来是0x69,而需要写入的是0x5A,实际上0x69|0x5A=0x7B,这就造成了在喂狗的时候,密码错误造成单片机重启。所以正确的喂狗语句就初始化看门狗的语句。当然如果想使用通用的喂狗语句,“WDTCTL = WDTPW + WDTCNTCL + (WDTCTL 0x00FF);”应该是最正确的(其中(WDTCTL 0x00FF)是用来获取看门狗配置的)。
不过430头文件已经很清新了,喂狗一般直接加上时间(头文件里面都处理过了)。
———————————————————————————————————————
MSP430单片机之看门狗的作用
看门狗定时器是一个计数器,基本功能是在发生软件问题和程序跑飞后使系统重新启动。看门狗计数器正常工作时自动计数,程序流程定期将其复位清零,如果系统在某处卡死或跑飞,该定时器将溢出,并将进入中断。在定时器中断中执行一些复位操作,使系统恢复正常的工作状态,即在程序没有正常运行期间,如期复位看门狗以保证所选择的定时溢出归零,使处理器重新启动。
1. 看门狗问题及相关实验
现今市面上流行的一些单片机,多嵌有内部WDT,如TI的MSP430系列,Philips的P87XXX和P89XXX系列,Microchip的PIC列,Atmel的AT89SXX系列和Holtek公司的Htxxx系列。但是这些内部看门狗在工作时,多存在一定的误差。一些工程师在设计的过程中,由于
- μC/OS-Ⅱ在MSP430F149上的移植(03-01)
- MSP430与I2C总线接口技术的研究(06-14)
- 基于MSP430单片机的超声波倒车雷达监测报警系统设计(08-14)
- 2010年中国(成都)电子展胜利闭幕(08-15)
- 基于MSP430单片机的电子汽车限速器的研究(08-20)
- 基于MSP430的微功耗数据采集系统的开发应用(10-16)