最近项目里beacon的调试涉及到电源管理以及串口的使用,瓶颈了许久许久....
宏定义了POWER_SAVING之后,意味着也就打开了相关电源管理功能,在使用DMA进行串口收发时,就会出现串口无法工作的情况。
开始调试的时候,依旧DMA方式使用串口,打开POWER_SAVING,注释掉协议栈中所有和POWER_SAVING相关的代码之后,会发现串口依旧无法使用。
最终放弃了DMA方式,改用ISR方式串口收发,在去年写的博客中已经介绍了相关ISR方式:http://blog.youkuaiyun.com/xiaoleiacmer/article/details/41750491
这样在开启POWER_SAVING的时候,串口可以使用,但是会出现收发字符丢失的现象。
原因是在串口收发的时候,RF中断(优先级高)会抢串口中断,并且因为电源管理功能的开启,会使晶振的振频降低。
解决方法:
使用HCI_EXT_HaltDuringRfCmd函数
/*******************************************************************************
* @fn HCI_EXT_HaltDuringRfCmd API
*
* @brief This HCI Extension API is used to enable or disable halting the
* CPU during RF. The system defaults to enabled.
*
* Related Events: HCI_VendorSpe