请问msp430F5310的看门狗喂狗操作的同时需要设置看门狗的触发时间吗?我这样喂狗 WDTCTL = WDTPW + WDTCNTCL 后看门狗不能生效啊,但这样喂WDTCTL = WDTPW + WDTCNTCL+WDTSSEL0+WDTIS2后看门狗就能在1s重启单片机。希望高手指教一下,谢谢。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
请问msp430F5310的看门狗喂狗操作的同时需要设置看门狗的触发时间吗?我这样喂狗 WDTCTL = WDTPW + WDTCNTCL 后看门狗不能生效啊,但这样喂WDTCTL = WDTPW + WDTCNTCL+WDTSSEL0+WDTIS2后看门狗就能在1s重启单片机。希望高手指教一下,谢谢。
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,也没有复位。你先试试看看是不是这样。
您好。
这个操作可以用宏来操作,并同时会设置时间,具体可参考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 " */
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, 抱歉,我前面那个测试,我测试不完全。我认为就像我前面说的,如果我们使用 WDTCTL = WDTPW + WDTCNTCL;的话对应WDTIS=0 【1(1M/2G)=2000s 】,这个需要约为半小时才会导致系统复位,我正在做这个测试。半小时后,才可给出最终结论。而喂狗时,就像你说的,不能通过或运算来对WDT寄存器进行操作,因为Watchdog timer password,故需要直接写入寄存器,故若要保证固定的时间间隔,则每次喂狗时,均需要写入看门狗的时间间隔,其实 WDTCTL = WDTPW + WDTCNTCL; 也就相当于写了时间间隔为2000s,当然,这些结论,在我们验证了2000s后复位,就更确定了。
验证成功,约半小时后,系统成功复位。前面的结论全部成立。故如果想要用WDTCTL = WDTPW + WDTCNTCL;直接喂狗,又想让时间较短,你还可以将SMCLK的频率设高,这样系统复位时间就会对应变短,也可减少你验证的时间。
wang junzheng, O(∩_∩)O~,这也是我自己学习和验证的过程。关于你说的晶振停振问题,请问你的外部晶振使用的是哪个?XT1的LFmode, HF mode还是XT2。对于MSP430F5310而言,不论是哪种,它都有很完善的晶振失效保护机制,具体请参考 5.2.12 UCS Module Fail-Safe Operation。外部晶振失效时,UCS会使得系统时钟MCLK,SMCLK,ACLK 的时钟源转为内部clock源,例如REFO或者DCO,应该是不会有单片机死机情况的出现的。你可以将外部晶振作为某个系统时钟源,从特定pin引出来,用示波器进行观察。