存在串口轮询就进不了PM2?
时间:10-02
整理:3721RD
点击:
实验中发现进不了PM2休眠状态,但将HAL_UART置为false,或者直接注释掉串口轮询函数HalUARTPoll(),就能进去了,所以要实现pm2休眠必须得屏蔽掉 串口么?还是我哪儿弄错了,望大神不吝赐教!
1)检查UART里面是否设置了osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
2)只要没有定时事件,系统就会进去PM2,你检查下UART轮询间隔
谢谢了,osal_pwrmgr_device( PWRMGR_ALWAYS_ON )倒是没有,也没有启用任何定时器,
我追踪进去发现是HalUARTPollDMA函数中有这样一句:
if (dmaRdyDly == 0)
{
(void)osal_set_event(Hal_TaskID, HAL_PWRMGR_HOLD_EVENT);
}
这样导致pwrmgr_attribute.pwrmgr_task_state不为0,从而进不了休眠(osal_pwrmgr_powerconserve里有对这个变量的判断,若不为0则不进入休眠
那所以我只能不用HalUARTPoll这个函数,自己写串口的函数来实现串口传输?
有定时事件也能进PM2吧,有定时事件不能进PM3
一般来说,启用UART时,就禁止休眠;用完了,再启动休眠
不知道你们的使用场景是什么
楼上正解 低功耗模式时晶振是关闭的 串口不能正常工作