急切求助:利用CC2541的Timer1测量外部时间遇到的问题
尊敬的TI工程师:
您好!
我遇到这样一个问题:
我用CC2541的Timer1来通过IO口测量一个外部电路电平从3.3V降到0V的时间,并且运行了蓝牙协议栈。利用Timer1的Capture模式 。
选了定时器时钟为32分频,所以1个clk为1us,因为Timer1最大计到0xFFFF,所以最大量程为65535us,即65ms。
当这个外部电路放电时间在大约1ms量级及以下时,测量都是十分准确,并且稳定的。并且测量值不随我程序中在哪里启动测量而变化。
但是,当外部电路时间放电时间在大约10ms量级及以上时(<65ms),测出来波动十分大,例如从0x1100波动到0x2E00,波动十分厉害。并且,如果我在程序中不同的地方启动测量,测量出的结果差异会非常大。
我的设备是用电池工作的,会进入休眠状态。这个和休眠有关系吗?是什么问题,应该如何解决呢?
我觉得这个是和协议栈有关,因为我不带协议栈裸跑测量是稳定的。
十分期盼回复,感激不尽!
Frank
Feng,
在初始化函数里面,加入这个试试看:HCI_EXT_MapPmIoPortCmd(HCI_EXT_DISABLE_CLK_divIDE_ON_HALT);
Yan,
非常感谢回复!
你是想说HCI_EXT_ClkDivOnHaltCmd(HCI_EXT_DISABLE_CLK_divIDE_ON_HALT);吧
我试了,测量值依然不准。
1、其实我不太理解这个函数,想请教一下。它禁止CPU降频,CPU降频工作,也还是处于Active模式吧,对吗?另外,CPU降频降到多少MHz啊,我在CC2541的明细手册里Power Management and Clocks一章中并没有看到有提到降频啊。
2、我定位了我问题的原因,只要禁止休眠测量值就正确且稳定了。
因为当外部时间达到10ms时,启动定时器计数一段时间后,OSAL让MCU进入了休眠PM2模式,定时器被关闭了。造成测量不准。
我现在在每次测量时,先关闭休眠,测量完再打开就OK了。不过这样就是测量时不能休眠,比较费电,我电池能用的时间缩短了很多。
有什么办法,既可以让MCU休眠,又可以让定时器在休眠时继续计数吗?
或者有什么其他建议?
非常感谢!
Frank