请问msp430F5310的看门狗喂狗操作的同时需要设置看门狗的触发时间吗?我这样喂狗 WDTCTL = WDTPW + WDTCNTCL 后看门狗不能生效啊,但这样喂WDTCTL = WDTPW + WDTCNTCL+WDTSSEL0+WDTIS2后看门狗就能在1s重启单片机。希望高手指教一下,谢谢。
wang junzheng:
回复 Lina Lian:
那如果我这样喂狗
MOV #WDTPW+WDTCNTCL,&WDTCTL
那就应该是32ms就重启系统啊,但这样喂狗后系统就不会重启了(喂狗后我加了很长的延时3s以上,但并没有重启),这是怎么回事啊?还有就是喂狗的同时必须要重新设置看门狗时间吗?
wang junzheng:
回复 Lina Lian:
如果我这样喂狗
MOV #WDTPW+WDTCNTCL,&WDTCTL
那就应该是32ms就重启系统啊,但这样喂狗后系统就不会重启了(喂狗后我加了很长的延时3s以上,但并没有重启),这是怎么回事啊?还有就是喂狗的同时必须要重新设置看门狗时间吗?
Lina Lian:
回复 wang junzheng:
wang junzheng,你试着把你程序中的喂狗WDTCTL = WDTPW + WDTCNTCL ,改为WDTCTL |= WDTPW + WDTCNTCL,再试试看,应该就可以32ms重启系统了。因为默认WDTIS=4 【1(1M/32k)=32ms 】,但是按照WDTCTL = WDTPW + WDTCNTCL 喂狗后,则为WDTIS=0 【1(1M/2G)=2000s 】,故在你即使延时了3s,也没有复位。你先试试看看是不是这样。
wang junzheng:
回复 Lina Lian:
改为WDTCTL |= WDTPW + WDTCNTCL后单片机根本起不来,我把看门狗时间设为16ms开机都能运行,但好像WDTCTL |= WDTPW + WDTCNTCL这个不是设置我32ms了,开机立马就重启了。
wang junzheng:
回复 Lina Lian:
我在while(1)中这样喂狗WDTCTL |= WDTPW + WDTCNTCL,但开机就重启了,一直不能上电运行;我把看门狗时间设置为WDT_ARST_16模式,16ms都能开机运行。
好像WDTCTL 不能这样操作,我WDTCTL |= WDTPW + WDTCNTCL+WDTSSEL0+WDTIS2这样设置1s也是立刻重启了,好像一喂狗就产生了puc,我推断WDTCTL 控制寄存器不能或操作,只能赋值
Delta:
您好。
这个操作可以用宏来操作,并同时会设置时间,具体可参考MSP430F5310.h的内容,例如:
#define WDTSSEL__ACLK (1*0x0020u) /* WDT – Timer Clock Source Select: ACLK */
和
/* WDT is clocked by fACLK (assumed 32KHz) */
#define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL0+WDTIS2) /* 1000ms " */
Lina Lian:
回复 wang junzheng:
wang junzheng,我试了试,你说的是对的,的确不能用WDTCTL |= WDTPW + WDTCNTCL,但是我用WDTCTL = WDTPW + WDTCNTCL进行喂狗操作,是可以成功的,不过我用的是MSP430G2553。测试程序如下:
#include <msp430g2553.h>
void main(void)
{
// WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
WDTCTL = WDTPW + WDTCNTCL;
P1DIR |= 0x01; // Set P1.0 to output direction
for (;;)
{
volatile unsigned int i;
P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR
i = 32000; // Delay
do (i–);
while (i != 0);
WDTCTL = WDTPW + WDTCNTCL;
}
}
wang junzheng:
回复 Lina Lian:
我用的是MSP430F5310,你这样是可以的,我是自己试出来在喂狗那要重新设置看门狗时间间隔的,但我在手册中没看到有说在喂狗时要重新设置看门狗时间间隔啊,我是初次弄单片机,对这个不是很懂,想弄明白。
TI中文支持网



