PM3模式下胡休眠如何唤醒
我希望通过按键中断来唤醒PM3下的休眠模式,但是总是换不醒。在基础实验中有
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
if(P0IFG>0)
{
P0IFG = 0; //清标志位
}
P0IF = 0;
PCON = 0X00; //正常工作模式
}
在协议战中该放到哪呢,我把PCON = 0X00;放在了HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )里面,但是也还是没什么作用。是不是放错位置了?
请问各位大神该怎么做才能唤醒呢?
关于唤醒,我觉得
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/p/62376/161302.aspx#161302
这里将的比较明白了。
中断触发后打开广播或者周期性事件就是切换到PM2,如果切换电源状态就是进入正常模式。
admsadm 提供的链接很好,已选为标准答案
Thank you Fred.但是我发现系统一旦进入PM3模式的休眠就在也无法唤醒了,在Disassembly窗口中发现指针跳到了FFFFFF,它不应该是停在进入休眠前的程序位置吗,怎么会跳到这里了呢?还有 就是该如何唤醒呢?我的休眠函数是复制8051的:
void DeepSleepMode(void)
{
uint8 i;
SLEEPCMD|=0X03;
for(i=0;i<4;i++);
PCON=0X01;
}
请问这是不是有什么问题啊?又该如何解决呢
休眠不用代码呀,电源切换到电池模式,可以通过设置项目的宏参数,停止广播,停止一切task event,自动就进入PM3了,这个时候只有按键中断才能触发唤醒芯片工作,在中断时间里写工作模式切换的相应代码。
你好,Fred. 抱歉现在才回复。请问您说的停止一切task event 包括底层的task event吗?还是只有自己定义的?
我只是在simpleBLEPheripheral文件中使用了自带的三个事件SBP_START_DEVICE_EVT、SBP_PERIODIC_EVT、SBP_ADV_IN_CONNECTION_EVT。但是我关掉这三个之后发现功耗竟然达到了160uA,在配置中我也关闭了UART,打开了POWER_SAVING.请问还有什么遗漏吗?
修改这些要弄明白他们的用途,不能猜想。
SBP_START_DEVICE_EVT 是设备启动事件,只会在启动后执行一次,不要去掉。
SBP_PERIODIC_EVT是一个App的自定义的周期事件,可以根据自己的需要停止或删除。
SBP_ADV_IN_CONNECTION_EVT这个没见过,不知道是啥,需要分析具体代码看功能。
正常休眠功耗最多1ua