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

请问MSP430F149可不可以利用PORT1的外部中断实现控制低功耗的开关

//说明:利用P1.5端口的中断功能,第一次进入中断,是系统进入低功耗LPM3;第二次进入中断,退出低功耗LPM3

int count = 0;  //记录进入中断次数
void main()
{

       WDTCTL = WDTPW + WDTHOLD;
        P1IFG &= ~BIT5;    //清除P1IFG
        P1IE |= BIT5;       //打开中断允许
        P1IES |= BIT5; //选择下降沿触发

       P4DIR |= BIT0;        //P4。0输出
       P4OUT |= BIT0;        //P4.0灯点亮

        while(1);
}

#pragma vector = PORT1_VECTOR
__interrupt void P1_5_ISR(void)
  {
if( ( P1IFG & BIT5) == BIT5 ) //中断响应
        {
            P1IFG &= ~BIT5; //清除中断标志
            count++;
                       if(count== 1)        //第一次按下按键,进入低功耗
              {                                   LPM3;
                  P4OUT &= ~BIT0;       //流水灯关闭
              }
            else if(count== 2)   //第二次按下按键,退出低功耗
              {
                  LPM3_EXIT;
                  pedal_count = 0;
                  P4OUT |= BIT0;            //流水灯打开
              }
        }
}

问题是:第一次进入中断可以进入低功耗模式,灯灭;第二次时没响应,不知道怎么回事。
是第一次进入低功耗以后一直处在低功耗之中,P1.5端口不能输入了么?
对于低功耗不是很了解,上述程序写法是否有错,希望能人给予解答,万谢!!!!

wszqq:

可以通过外部中断唤醒低功耗

Ling Zhu2:

#include"msp430.h"

int count = 0; //记录进入中断次数unsigned char enter_lpm3_flag;void main(){

WDTCTL = WDTPW + WDTHOLD;

P1DIR &= ~BIT5; P1OUT |= BIT5; P1REN |= BIT5; P1IFG &= ~BIT5; P1IES |= BIT5; P1IE |= BIT5;

P4DIR |= BIT0; //P4。0输出 P4OUT |= BIT0; //P4.0灯点亮

_EINT(); //开总中断

while(1) { if(enter_lpm3_flag) __bis_SR_register(LPM3_bits); }}

#pragma vector = PORT1_VECTOR__interrupt void P1_5_ISR(void){ if(P1IFG & BIT5) //中断响应 { P1IFG &= ~BIT5; //清除中断标志 count++;

if(count== 1) //第一次按下按键,进入低功耗 { P4OUT &= ~BIT0; //流水灯关闭 enter_lpm3_flag = 1;

} else if(count== 2) //第二次按下按键,退出低功耗 { enter_lpm3_flag = 0; count = 0; P4OUT |= BIT0; //流水灯打开 } } __low_power_mode_off_on_exit();}

在中断里设置标志位,然后在主程序里进入低功耗

在中断里退出低功耗

需要开启总中断

希望可以帮助到你

Ant Lou:

回复 Ling Zhu2:

我是想实现这样的效果:程序运行后,电机一直运转,当按下一次按键后,进入中断并进入低功耗LPM3模式,电机停止;再次按下按键后,进入中断退出低功耗LPM3模式,电机继续运转  (P4OUT可以认为是电机的开关)我按如上代码编写,可以进入低功耗模式,但按下第二次按键就没任何响应,是系统任然处在低功耗模式而没有进入中断?还是别的原因?

我不想在主程序里进入低功耗,只是用外部中断的方法控制低功耗的开关

Ant Lou:

回复 wszqq:

请问如何通过外部中断唤醒低功耗???我想低功耗的开关都在外部中断里实现,这样可不可以?我贴的上述代码哪里出问题了?还望指点

Ling Zhu2:

回复 Ant Lou:

请问为什么不能在主程序里进入低功耗,有特殊考虑么?

因为你在中断里进低功耗,程序就停在中断了,没有跳出来。所以响应不了你同一个IO口的再次中断。

所以不建议在中断里进入低功耗, 建议试一下我的程序,可以实现你要的功能。

Ant Lou:

回复 Ling Zhu2:

Ling Zhu ,您写的程序我试过了,单从您的程序来说,确实可以达到预期效果。但我的实际程序中while(1){}里面还有别的程序在运行。

我实际想要的效果是,按键一下进入中断并进入低功耗,while(1)中程序暂停,等待下一次按键按下进入中断并退出低功耗,继续运行程序,按键只有一个。

我看有的地方说是从LMP3模式下,唤醒进入中断服务程序后,SCG0仍然置位,DC发生器仍被关闭,MCLK不能正常运行需要清除SCG0控制位才行

这个怎么理解?代码的话如何实现

Ant Lou:

回复 Ling Zhu2:

谢谢回答

赞(0)
未经允许不得转载:TI中文支持网 » 请问MSP430F149可不可以利用PORT1的外部中断实现控制低功耗的开关
分享到: 更多 (0)