原创 CC2430进入休眠模式2如何唤醒?睡眠定时器计时时间到就会唤醒吗?唤醒后如何让它正常的进行无线收发数据?

2010-6-19 22:16 2879 2 2 分类: 通信

   下面是我的RFD的部分程序,要实现的是进入while循环后系统休眠100MS,然后进睡眠定时器唤醒,开中断开始同协调器(coord)通讯,既发送接收数据5次,然后进入休眠100ms,被唤醒发送接收数据5次,休眠,唤醒,接收发送……


    但是当进了睡眠定时器的中断出来,开始从下面程序的DISABLE_GLOBAL_INTERRUPT(); IEN0 = IEN0 & ~(1<<5); 依次往下运行倒是没有问题,但是就是不能通过无线接收发送数据了,协调器(coord)也不往 RFD发送数据了!不知道是还没有唤醒,还是少写了一些关键接收发送的程序,不是进了睡眠定时器的中断就可以唤醒了吗?还是在睡眠定时器里难道还要有专门的语句来唤醒呀?是什么呀?呵呵但是进了睡眠定时器后又回到主程序了,不是就代表被唤醒了吗?呵呵!问题多多呀!!!
   我在网上搜到一个参考程序你们也可以看一下http://blog.csdn.net/beeboobeeboo/archive/2009/08/26/4485119.aspx 我不太懂,不过我的程序确实比人家少了些东西,但是又不知道少的是什么???它的一些子程序没有共享出来呢!
   希望高手们帮我解答一下上面的问题哦!(*^__^*) 嘻嘻……谢谢谢谢!!!
   
   
while(1)
{


  void halSleep_set(100)
 {
   UINT32_UNION t;
   UINT32 delta;
   BYTE i;


   SAVE_AND_DISABLE_GLOBAL_INTERRUPT(gie_status);//保存中断的状态,并屏蔽
                                               //read the sleep timer
   delta = (32768 * msecs)/1000;
   t.bytes[UINT32_LOWORD_LSB] = ST0;
   t.bytes[UINT32_LOWORD_MSB] = ST1;
   t.bytes[UINT32_HIWORD_LSB] = ST2;
                                           //给睡眠定时器赋比较值compute the compare value
   t.val = (t.val + delta)&0x00FFFFFF;
                                       //write the new sleep timer value
   ST2 = t.bytes[UINT32_HIWORD_LSB];
   ST1 = t.bytes[UINT32_LOWORD_MSB];
   ST0 = t.bytes[UINT32_LOWORD_LSB];
                                     //clear the sleep flag, enable the interrupt
   IRCON = IRCON & 0x7F;               //clear the sleep flag IRCON.STIF = 0;
   IEN0 = IEN0 | (1<<5);              //enable the interrupt  IEN0.STIE = 1;



   ENABLE_GLOBAL_INTERRUPT();         //开中断interrupts must be enabled to wakeup!
                                    //configure the power mode and sleep
   SET_POWER_MODE(POWER_MODE_2);             //设置进入省电模式2(既休眠模式2)


   DISABLE_GLOBAL_INTERRUPT();              //关中断
   IEN0 = IEN0 & ~(1<<5);  // IEN0.STIE = 0;//清标志位
   while(!XOSC_STABLE);
   asm("NOP");
   RESTORE_GLOBAL_INTERRUPT(gie_status);    //还原进入休眠之前所在的中断。
   ISRXON;
   ISTXON;
   conPrintROMString("\n DDDDFFFGGG\n ");
   ppState = PP_STATE_START_RX;
   for(i=0;i<5;i++)
    {
     PingPong();        //无线接收发送子程序


     }


  }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /3 下一条