关于CC2540 BLE 的功耗问题,我有以下问题:
1。OSAL_SET_CPU_INTO_SLEEP函数,是真正进什么sleep状态?pm1?pm2?pm3?
2。在编译程序里选择了power_save,如果没有task运行了进入sleep,我可否用某些IO口来输出方波来驱动其它电路?
3.进入sleep状态后,整个程序是已32K的时钟在运行吗?还是暂停不动了?如果在运行是在哪个函数?如果暂停不动了,是否只能外部中断,定时中断,蓝牙通讯中断,定时task才能唤醒?
Fred Wang:
PM1-3是三种工作状态,与程序定义的模式不等价。当power_save打开后程序将进入PM2,此时会启动32K的sleep定时器(此定时器只用于维持事件的定时唤醒,不用做处理)。此时osal只接收事件唤醒:LL层的定时任务、osal timer的event任务、外部中断。在PM2这种状态时,如果不在执行任何定时任务,则32K的sleep定时器会停止运行,此时就进入了PM3。这个时候 只能通过外部中断才能唤醒系统。任何时候系统运作都是32M晶振负责的,32K晶振只负责计时和定时唤醒系统, 所以在PM1时外部32K晶振是可以不用的,比如usb dongle,而进入PM2后32K晶振启用,如果有异常,系统将不能继续运行。
li Mike:
回复 Fred Wang:
我希望程序在正常运行和PM2时,都用p1.0口线输出1KHz方波,可行吗?要如何做?
Fred Wang:
回复 li Mike:
PM2时会周期休眠,不能使timer保持工作,需要切换到PM1的状态,输出完成后再切换回来,运行时PM状态可以随时切换。