【硬件】:方波发生器+F1121A。1121A不接晶振,采用内部DCO工作,MCLK=2M,SMCLK=1M;方波输出接1121A的INCLK脚(P2.1)。
功能:测方波频率
【实现】:由于1121A只有Timer A,所以看门狗作为定时器用;看门狗定时器周期为32ms;测量时启动看门狗定时器和Timer A,并进入LMP0模式;在看门狗定时器中断中退出LMP0,停止Timer A 和看门狗定时器,返回Timer A的计数值;
【问题】:
1,Timer A和看门狗定时器单独使用时都是正常的;
2,调用measure函数(参见下面附的代码)时,程序会跑飞掉;
3,有些板子是正常的,有些板子会出现问题2,很奇怪。
恳请高手指教!◎#◎¥
【附代码】:
unsigned int measure(void)
{
WDTCTL = WDT_MDLY_32; //- start WDT in timer mode with 32 ms
TACTL|=(MC_2+TACLR); //- clear TAR and start TA in continous up mode
LPM0; //- wait for WDT interrupt after 32 ms
return(TAR);
}
//--- WTD interrupt service routine ---
#if __VER__ < 200
interrupt [ WDT_VECTOR ] void Timer_A( void )
#else
#pragma vector=WDT_VECTOR
__interrupt void WDT (void)
#endif
{
WDT_cnt++;
if(WDT_cnt==2)
{
TACTL&=~MC_3; //- stop TA
WDTCTL = WDTPW + WDTHOLD; //- Stop WDT
WDT_cnt=0;
LPM0_EXIT; //- exit low power mode
}
}
void main(void)
{
//---initialize Watch Dog Timer ---
WDTCTL = WDTPW + WDTHOLD; //- Stop WDT
IE1 |= WDTIE; //- ena××e WDT interrupt
...
...
...
}