原创 Sleep Timer使用方法测试

2008-5-29 23:07 4568 7 7 分类: MCU/ 嵌入式

按照之前对datasheet的理解:


 


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


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


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


 


3、歧义:前文说睡眠定时器只能在PM0-2模式下工作,那么当第10事件发生,芯片从回到激活模式,运行处理代码,到再进入睡眠模式的这段时间,是否纳入在tEvent0的范围?


 


这些理解是否对呢?写个程序来测试一下。


 


  //测试1:定时取Sleep Timer的计数器的值。


  modInitSleepTimer(1, 10000, 0); //该方法设置WORCTL=1,WOREVT=10000


 


  while (1) {


    modWait(255);


    modWait(255);


    modWait(255);


    modWait(255);


    pBuffer[1]= WORTIME0;


    pBuffer[0]= WORTIME1;


 


    modUartSendPkt(0, 2, pBuffer); //该方法将pBuffer的数据通过串口发往PC


    P1_0 = !P1_0; //toggle led


  }


 


PC通过串口得到的数据为:


00 41 , 04 F2 , 09 A4 , 0E 55 , 13 07 , 17 B8 , 1C 6A , 21 1B , 25 CD , 03 6E , 08 20 , 0C D1 , 11 83 , 16 34 , 1A E6 , 1F 97 , 24 49 , 01 EA , 06 9C , 0B 4D , 0F FF , 14 B0 , 19 62 , 1E 13 , 22 C5 , 00 66


 


前后值相差:12011202(dec)



 



从该实验可以证明:


1、  即使在active状态下,Sleep Timer的计数器仍然在计数


2、  Sleep Timer的计数器在计数到WOREVT1*256+WOREVT0的值时,自动回0


 


另外还可以得到以下结论:


1、  WORTIME的顺序是先读WORTIME0再读WORTIME1


2、  若使用32k晶振作为本振,当WOR_RES1时,Sleep Timertime tick1ms,当WOREVT的值为1024时,对应延时1秒;相应地推算,WOR_RES=2时,time tick4msWOR_RES=3时,time tick8ms


 


以上数据是在Sleep Timer初始化时不重启计数器时取得的。



 

 


文章评论0条评论)

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