在使用MSP430F449的过程中,出现问题。
看门狗不能喂狗,重复的复位。
#include <msp430.h>
long i = 0;
void main()
{
P5DIR |= BIT1;
P5OUT = 0X02;
for(i = 0x7fff; i > 1; i–);
P5OUT = 0X00;
WDTCTL = WDT_ARST_250;
BTCTL = BT_ADLY_32;
IE2 |= BTIE;
_EINT();
while(1);
}
#pragma vetor = BASICTIMER_VECTOR
__interrupt void bt_isr(void)
{
WDTCTL =WDT__ARST_250;
}
何解?
为什么会重复的复位呢?
Lichen Wang:
你假定ACLK是32千赫。但事實並非如此。
MSP430F449.H says:
/* WDT is clocked by fACLK (assumed 32KHz) */#define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) /* 1000ms " */#define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms " */#define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms " */#define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms " */
kqian0327:
你好,
看门狗可以做为两个用途:
第一,定时器中断。
第二,看门狗复位。
如果你要求使用看门狗复位功能,不必要利用定时器中断,直接把 WDTCTL =WDT__ARST_250; 加在while(1)循环里面,这样CPU就不会复位了。