新闻  |   论坛  |   博客  |   在线研讨会
CC2430睡眠定时器实现唤醒
0750long | 2009-07-15 13:47:18    阅读:1732   发布文章

CC2430睡眠定时器实现唤醒

 


CC2430的睡眠定时器(SLEEP TIMER)是一个24位的计数器,可以用来作为唤醒中断(仅PM0-2)下面有效,ST的计数时钟是32.768K,向上计数,可以和一个24数比较以产生中断,在PM2仍然工作,可以产生中断和触发DMA。
这里只讲如何设置进入低功耗模式后的唤醒时间,ST0,ST1,ST2可读可写,但是我觉得这3个寄存器类似于串口的BUFFER,实际上是两个寄存器。因此就计数来说,ST(指ST0,ST1,ST2 下同)是不可写的,我这里把它称为STa,对于设置比较数来说,ST是不可读的,我把它称为STb。这样的话相实现定时唤醒就要利用STb和STa的数差,相差32768,就表示1秒唤醒一次,相差n*32768表示n秒唤醒一次,这里的n可以是小数。下面是实现唤醒的代码:

void Set_ST_Period(UINT16 sec)
{
   UINT32 sleepTimer = 0;

   sleepTimer |= ST0;
   sleepTimer |= (UINT32)ST1 <<  8;
   sleepTimer |= (UINT32)ST2 << 16;

   sleepTimer += ((UINT32)sec * (UINT32)32768);

   ST2 = (UINT8)(sleepTimer >> 16);
   ST1 = (UINT8)(sleepTimer >> 8);
   ST0 = (UINT8) sleepTimer;
}

void main(void)
{
 OPEN_ST_INT() ;//开中断
 while(1)
 {
   Set_ST_Period(10);//10sec 一次唤醒
   SET_POWER_MODE(PM2);//进入低功耗模式
 }

}

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客