TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430G2433时钟VLO低功耗LPM3时异常复位

 项目因为是电池供电,所以不可避免的要用到低功耗功能,选用的芯片是MSP430G2433。先声明一下,出于产品空间限制的原因,没有用到外接晶振。

因为要求定时检测电池电量,所以选用LPM3模式,这样就只有ACLK可以作为定时器的时钟源,而我用的ACLK时钟源来自VLO(貌似只有VLO可选)。

写了点简单的代码测试一下:

#include<msp430g2433.h>
#define LED_B BIT6 //BLUE LED (P2.6)
void main()
{
      WDTCTL = WDTPW + WDTHOLD;
      P2SEL &= ~BIT6;      //引脚复用
      P2DIR |= LED_B;
      P2OUT &= ~LED_B;
      BCSCTL3 |= LFXT1S_2;       //设置LFXT1Sx为10,VLO(12KHz)
      TACTL |= TASSEL_1 + MC_1 + ID_3;       //ACLK,UP Mode,1/8 devider(1500Hz)
      TA0CCTL0 |= CCIE;
      TA0CCR0 =1500/4;
      __bis_SR_register(LPM3_bits + GIE);
      while(1);
}
static unsigned int Timer0_A0_Counter =0;
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0()
{
      LPM3_EXIT;
      Timer0_A0_Counter ++;
      if(Timer0_A0_Counter ==2)
      {
            Timer0_A0_Counter =0;
            P2OUT ^=LED_B;
      }
      __bis_SR_register(LPM3_bits + GIE);
}

以上代码正常工作现象为:LED灯1S的周期闪烁。

可奇怪的是,闪大约32次后(不变的32次,如果改为4秒的周期,又变成闪16次复位),MCU就自动复位了。

然而如果我把代码改为不进入低功耗模式,就不会有这个问题。

Ling Zhu2:

Frankie Yang

 项目因为是电池供电,所以不可避免的要用到低功耗功能,选用的芯片是MSP430G2433。先声明一下,出于产品空间限制的原因,没有用到外接晶振。

因为要求定时检测电池电量,所以选用LPM3模式,这样就只有ACLK可以作为定时器的时钟源,而我用的ACLK时钟源来自VLO(貌似只有VLO可选)。

写了点简单的代码测试一下:

#include<msp430g2433.h>#define LED_B BIT6 //BLUE LED (P2.6)void main(){       WDTCTL = WDTPW + WDTHOLD;       P2SEL &= ~BIT6;      //引脚复用       P2DIR |= LED_B;       P2OUT &= ~LED_B;       BCSCTL3 |= LFXT1S_2;       //设置LFXT1Sx为10,VLO(12KHz)       TACTL |= TASSEL_1 + MC_1 + ID_3;       //ACLK,UP Mode,1/8 devider(1500Hz)       TA0CCTL0 |= CCIE;       TA0CCR0 =1500/4;       __bis_SR_register(LPM3_bits + GIE);       while(1);}static unsigned int Timer0_A0_Counter =0;#pragma vector=TIMER0_A0_VECTOR__interrupt void Timer0_A0(){       LPM3_EXIT;       Timer0_A0_Counter ++;       if(Timer0_A0_Counter ==2)       {             Timer0_A0_Counter =0;             P2OUT ^=LED_B;       }       __bis_SR_register(LPM3_bits + GIE);}

以上代码正常工作现象为:LED灯1S的周期闪烁。

可奇怪的是,闪大约32次后(不变的32次,如果改为4秒的周期,又变成闪16次复位),MCU就自动复位了。

然而如果我把代码改为不进入低功耗模式,就不会有这个问题。

Frankie Yang:

回复 Ling Zhu2:

这段代码可能表现的不明确,下面这段代码相对更好:

正常初始化时红灯会亮0.5S,之后关掉了,只剩蓝灯不停闪烁。

但是出现红灯又亮了,就说明MCU复位了,这样就没问题了吧?

其实我也不是想让它精确定时,我的本意是设置TA0CCR0=15000,让它10S中断一次,计数到4小时的时候就检测一次电池电量

#include<msp430g2433.h>#define LED_R BIT0 //RED LED(P2.0)#define LED_B BIT6 //BLUE LED (P2.6)void main(){       WDTCTL = WDTPW + WDTHOLD;       P2SEL &= ~BIT6;       //引脚复用       P2DIR |= (LED_R + LED_B);       P2OUT |= (LED_R + LED_B);       __delay_cycles(500000);       P2OUT &= ~(LED_R + LED_B);       BCSCTL3 |= LFXT1S_2; //设置LFXT1S为10,VLO       TACTL |= TASSEL_1 + MC_1 + ID_3; //ACLK,UP Mode,1/8 devider(1500Hz)       TA0CCTL0 |= CCIE;       TA0CCR0 =1500;       __bis_SR_register(LPM3_bits + GIE);       while(1);}static unsigned int Timer0_A0_Counter =0;#pragma vector=TIMER0_A0_VECTOR__interrupt void Timer0_A0(){       LPM3_EXIT;       Timer0_A0_Counter ++;       if(Timer0_A0_Counter ==32)       {             Timer0_A0_Counter =0;             P2OUT ^=LED_B;       }       __bis_SR_register(LPM3_bits + GIE);}

Frankie Yang:

回复 Ling Zhu2:

现在做实验,供电用的JTAG仿真器。

中断里面部配置低功耗,原因是我怕它唤醒不稳定。之前做项目就有出现过,睡到LPM3或者LPM4的时候,唤醒要好几秒。但是在LPM2以上或者,在中断里配置低功耗就不会出问题。尴尬了宝宝

Frankie Yang:

回复 Ling Zhu2:

我现在又做了个实验,去掉中断里面的低功耗配置代码后,就正常了,再加回去又出问题。

Ling Zhu2:

回复 Frankie Yang:

Frankie Yang

我现在又做了个实验,去掉中断里面的低功耗配置代码后,就正常了,再加回去又出问题。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430G2433时钟VLO低功耗LPM3时异常复位
分享到: 更多 (0)