在低功耗中使用串口通信,我CC2530的串口读脚设为中断脚。每次串口中断后使用
osal_pwrmgr_task_state(SampleApp_TaskID, PWRMGR_HOLD);//不允许进入低功耗
串口通信正常。不过再次进入低功耗输入串口命令调用
osal_pwrmgr_task_state(SampleApp_TaskID,PWRMGR_CONSERVE);//允许进入低功耗
不能进入低功耗
问题是第二次输入串口命令的时候是先响应串口中断再响应外部中断。
case KEY_CHANGE:
SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
break;
case CMD_SERIAL_MSG: //由 串口收到数据后由 T MT_UART
SampleApp_SerialCMD((mtOSALSerialData_t *)MSGpkt);
break;
先响应CMD_SERIAL_MSG,再响应KEY_CHANGE
所以不能进入低功耗。
Tianhao Wang:
我在串口响应函数SampleApp_SerialCMD((mtOSALSerialData_t *)MSGpkt);中设了一个标志位,让他不响应下一次的外部中断。功能可以正常工作。感觉还是没有从根本上解决问题
VV:
协议栈默认按键是通过轮询实现的,100ms轮询一次。需要改成外部中断方式