原创 CC2430睡眠定时器实现唤醒(自emot)

2009-7-8 09:49 2768 7 7 分类: 通信

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);//进入低功耗模式
 }


}


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条