打印

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

[复制链接]
1442|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangzeyue|  楼主 | 2012-12-22 06:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        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一样不能闪烁。

求前辈指教一下。谢谢!

相关帖子

沙发
wangzeyue|  楼主 | 2012-12-22 06:24 | 只看该作者
唤醒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
}

使用特权

评论回复
板凳
chenyu988| | 2012-12-22 09:19 | 只看该作者
设置断点 看看能不能进中断唤醒啊。 你也可以下载进去后,复位然后看现象是否正确。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:爱21ic,爱你们,所以爱技术。

94

主题

499

帖子

3

粉丝