0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

单片机

请教一个MSP430单片机低功耗问题

if(DLOCK == 1)//在WOR周期内,收到数据包或者超时时间到,都将退出WOR,开始下一循环

        {

            if(RFReceive(rXFIFO) == 0)

            {

              //__disable_interrupt();

              P1OUT &= ~BIT6;//点亮LED

              P1OUT &= ~P62730_ON;//通过ON信号点亮LED

              P1IFG &= ~P62730_ON;

              TA0CTL &= ~MC_1;//停止定时器0

              delay_2us(60000);//delay_2us(50000);delay_2us(50000);

              delay_2us(60000);delay_2us(60000);

              P1OUT |= LED;//熄灭LED

              P1OUT |= P62730_ON;

              //delay_2us(60000);

              T0_R = 0;

              TA0R = 1;

              END_CY = 0;//进入下一循环

              DLOCK = 0;

              

              T1_R = 10;

              //__enable_interrupt();

            }

            else

            {

              END_CY = 1;

              DLOCK = 0;

            }            

        }

        if(END_CY == 0)

       {

         qq=TI_CC_SPIReadStatus(CCxxx0_MARCSTATE);

          //  __bis_SR_register(LPM3_bits + GIE);                // Enter LPM3 until VBUS-on event

            _NOP();      

       }

       if(T0_R)

       {

          halSpiStrobe(CCxxx0_SIDLE);

          TA0CTL &= ~MC_1;//停止定时器0

          END_CY = 0;

       }

      //END_CY = 0;

       if(USBPre == 1)

       {

         END_CY=1;

         break;   

       }   

                        P1IFG &= ~RFSPI_GDO0;

            P1IE |= RFSPI_GDO0;//开启GDO0中断

        initWorMode();

         __bis_SR_register(LPM3_bits + GIE);_NOP();

    }

以上代码放在一个无穷循环中。程序的本意是在LPM3模式下被GDO0中断触发,然后转到RFReceive接收函数,接收正确则闪烁LED一次。仿真调试的时候发现,如果一进仿真直接全速运行,则LED一次都不闪烁,也就是根本就不能唤醒CPU;

暂停CPU,PC指向最后一条进入睡眠的语句,然后单步运行,则CPU可以被正常唤醒,然后正常接收,LED闪烁。如果再全速运行,则CPU不能被中断。

我以为是发送机发数据太快了,在发送端加了延时,没用。

如果直接给接收端加电源,不进行仿真,LED一样不能闪烁。

求前辈指教一下。谢谢!

提问者:jacksonqwj 地点:- 浏览次数:5466 提问时间:10-26 09:27
我有更好的答案
提 交
2条回答
60user93 04-01 16:40 回答数:0 被采纳数:0
唤醒LPM3的IO中断函数:
#pragma vector = PORT1_VECTOR
__interrupt void GDO_ISR(void)
{
  P1IFG &= (~BIT0) & (~BIT5);//ON,CSN
  if(P1IFG&RFSPI_GDO0)
  {
   //  __disable_interrupt();//禁止定时器运行
    P1IFG &= ~RFSPI_GDO0;
    DLOCK = 1;   
  }
  else;
             __bic_SR_register_on_exit(LPM3_bits);   // Exit LPM0-3
             __no_operation();                       // Required for debugger
}
wufengju 04-06 13:42 回答数:0 被采纳数:0
设置断点 看看能不能进中断唤醒啊。 你也可以下载进去后,复位然后看现象是否正确。
撰写答案
提 交
1 / 3
1 / 3
相关单片机
具有音调控制的单片机立体声前置放大器
用于单片机与电子装置中的开关电源
单片机软硬件复位的条件都有啥
电动机的单片机控制
单片机应用系统开发实例导航