BlueNRG-1 的低功耗模式 SLEEPMODE_NOTIMER参数
[复制链接]
本帖最后由 gs001588 于 2018-3-5 09:25 编辑
BlueNRG-1 的低功耗模式 SLEEPMODE_NOTIMER参数
在测试“BLE_Beacon”工程时,有个参数一直有疑问,那就是关于SLEEPMODE_NOTIMER。
出现在“BLE_Beacon_main.c”函数的第218行。
BlueNRG_Sleep(SLEEPMODE_NOTIMER, 0, 0);
SLEEPMODE_NOTIMER之后的两个参数都是0,也就是说没有任何唤醒源。对注释内容不太理解,只说了广播的间隔期间允许节能,但没有说如何唤醒。
这里先借坛友“cruelfox”的帖子,这说明一下几种低功耗模式。见以下链接:
BlueNRG-1 的低功耗模式浅析
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=611873&fromuid=449420
(出处: 电子工程世界-论坛)
BlueNRG-1 的低功耗模式
API级别 | 硬件状态 | 开启的时钟 | 唤醒事件 | SLEEPMODE_RUNNING | Running | 16MHz & 32kHz | -- | SLEEPMODE_CPU_HALT | CPU Idle | 16MHz & 32kHz | IRQ * | SLEEPMODE_WAKETIMER | Sleep | 32kHz | GPIO, BLE Timer (RESET) | SLEEPMODE_NOTIMER | Standby | N/A | GPIO (RESET) |
的确对照各方面资料,SLEEPMODE_NOTIMER 时就是Standy状态。
在AN4820的第10页找到如下说明。
还是不明白为什么能够从Standby状态唤醒。猜想,会不会就没有进入Standby,而是进入了Sleep。
在PM0275手册()的第47页找到了详细的注释。广播和连接间隔可以为SLEEPMODE_WAKETIMER的唤醒源。但是可不可以同时也为SLEEPMODE_NOTIMER的唤醒源,却不得而知。
在我提交的挑战赛程序中,其实也是用了SLEEPMODE_NOTIMER的,但是同时虚拟定时器也是使用了的,并且计时准确,说明32K的时钟是一直在工作的。那么应该是SLEEPMODE_WAKETIMER模式,而不是SLEEPMODE_NOTIMER模式,或者是由于某种原因自动由SLEEPMODE_NOTIMER转变到了SLEEPMODE_WAKETIMER模式。
也就说在这里执行的“BlueNRG_Sleep(SLEEPMODE_NOTIMER, 0, 0);”,实际等效于“BlueNRG_Sleep(SLEEPMODE_WAKETIMER, 0, 0);”。
不知道,有没有对SLEEPMODE_NOTIMER有个权威的解释。
|