原创 CC2510芯片功能学习:睡眠定时器(Sleep Timer)

2008-5-11 22:46 4497 6 6 分类: MCU/ 嵌入式

睡眠定时器用来控制芯片从睡眠模式PM0/PM1/PM2中退出,返回到激活模式(active mode)。


 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


睡眠定时器包含一个31比特的计数器。可以对睡眠定时器定义一个0事件(Event 0),当0事件发生时,芯片从PM0/PM1/PM2返回到激活模式。


 


睡眠定时器不能在PM3模式和激活模式下工作。


 


两次连续的0事件之间的时间tEvent0由下面的公式决定。(注:datasheet的这段文字产生了歧义:前文说睡眠定时器只能在PM0-2模式下工作,那么当第10事件发生,芯片从回到激活模式,运行处理代码,到再进入睡眠模式的这段时间,是否纳入在tEvent0的范围?)


 


若使用低功耗RC振荡器:


  tEvent0750/fref * EVENT0 * 25*WOR_RES


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


若使用晶振:


  tEvent0=1/32768 * EVENT0 * 25*WOR_RES


 



上式中的EVENT0WOREVT1.EVENT0WOREVT0.EVENT0设定,幂由 WORCTRL.WOR_RES设定。


 


从芯片进入PM2到下一0事件发生之间的时间有个规定的最小值,大约为12ms


 


EVENT0的值必须在芯片进入睡眠模式之前设置。


 


Reset睡眠定时器,设置EVENT0、进入睡眠模式的典型代码为:


WORCTRL |= 0x04; // Reset Sleep Timer


char temp = WORTIME0;


while(temp == WORTIME0); // Wait until a positive 32 kHz edge


temp = WORTIME0;


while(temp == WORTIME0); // Wait until a positive 32 kHz edge


WOREVT1 = desired event0; // Set Event0, high byte


WOREVT0 = desired event0; // Set Event0, low byte


PCON |= 0x01; // Enter PM


 


 


中断:


0事件发生,则WORIRQ.EVENT0_FLAG事件标志被置位,若中断屏蔽位WORIRQ. EVENT0_MASK=1,则中断标志位IRCON.STIF被置位,如果中断允许IEN0.STIE=1,则产生中断。


 


注:如果电源模式SLEEP.MODE00,则不会产生中断。


 


0事件发生,可以用来触发DMA,称为DMA trigger ST


 


sleep timer相关的寄存器有6个:


WORTIME0 (0xA5) - Sleep Timer Low Byte


WORTIME1 (0xA6) - Sleep Timer High Byte


WOREVT1 (0xA4) - Sleep Timer Event0 Timeout High


WOREVT0 (0xA3) - Sleep Timer Event0 Timeout Low


WORCTRL (0xA2) - Sleep Timer Control


WORIRQ (0xA1) - Sleep Timer Interrupt Control


 


 


WOR_RESWORCTRL中,RESresolution的意思,用来控制时间精度。其取值:



取值


精度


WORTIME对应31比特计数器中的比特范围


00


1个时钟周期


15:0


01


25个时钟周期


20:5


10


210个时钟周期


25:10


11


215个时钟周期


30:15


 


 


理解:


 


31比特计数器是一个自由运行的计数器,其驱动时钟是晶振或者RC时钟。


 


根据WORCTRL. WOR_RES的取值从31比特计数器中选出16比特,一方面显示在WORTIME0WORTIME1寄存器中,另一方面用来与WOREVT1WOREVT0中的值比较。WORTIME每递增WOREVT下就产生10事件。


 


WOR_RES的值越大,从31比特计数器中选出的16比特的位置越高,WORTIME递增1下需要的时钟周期也越多,因此延时也越长。


 


 

文章评论0条评论)

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