发 帖  
原厂入驻New
[问答] MSP430单片机低功耗不能唤醒CPU
139 华强芯城 cpu LED
分享
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一样不能闪烁。
求前辈指教一下。谢谢!
0
2020-3-27 09:00:04   评论 分享淘帖 邀请回答

相关问题

2个回答
唤醒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
}
2020-3-27 11:11:12 评论

举报

设置断点 看看能不能进中断唤醒啊。 你也可以下载进去后,复位然后看现象是否正确。
2020-3-27 11:24:39 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表