如题,使用cc2540,再宏里面开了POWER_SAVING 这个宏后, 串口一直打印不出来,串口使用了DMA模式,无流控, NPI的api ! 去掉POWER_SAVING 后能够正常打印信息!这里我大体知道是开启POWER_SAVING后进入了休眠模式PM2 导致 串口的晶振 关闭了!!
我尝试使用了osal_start_timerEx( MyAPP_TaskID, SBP_MyAPP_EVT, 2000 );定时器来唤醒串口,定时启动打印信息,无效!
网上查询可以使用osal_pwrmgr_device(PWRMGR_ALWAYS_ON); 来唤醒,同样没有打印输出!
相关代码如下:
MyApp_processEvent()
{
…..
if ( events & SBP_MyAPP_EVT)
{
osal_pwrmgr_device(PWRMGR_ALWAYS_ON);
……………
NPI_WriteTransport(Msg,strlen(Msg));
……………..
osal_pwrmgr_device(PWRMGR_BATTERY);
}
}
由于这边没有外部中断 ,也使用不了流控来唤醒, 能不能通过其他代码的中断或者其他来唤醒串口打印信息???
TI的大神,帮忙看看, 万分感谢
Viki Shi:
请参考http://processors.wiki.ti.com/index.php/SerialBLEbridge_V_1.4.1中 UART (with power management) 这部分
MYC huang:
回复 Viki Shi:
不行的,http://processors.wiki.ti.com/index.php/SerialBLEbridge_V_1.4.1这里提供了三个方法,一个是SPI,一个是不适用电源管理的UART,一个是使用电源管理的流控串口,
SPI (with or without power management): using MRDY/SRDY handshaking. The handshaking will be the same regardless of whether or not power management is enabled.
UART (without power management): there is no handshaking needed as the device is not going to sleep. Therefore, only the Tx and Rx lines are needed.
UART (with power management): using CTS/RTS handshaking to control sleep.这里我需要使用power management,所以只有第三种, 我考虑是串口发送,不需要接受,同样也就是我这边的CTS管脚是接受不到信息的,也就是唤醒不了sleep,,
有没有其他方法,比如内部发指令来等同于CTS接受到低电平, 来唤醒串口????
我能够控制到串口睡眠就睡眠???
yongguang liu:
回复 MYC huang:
楼主好,我也遇到了同样的问题,开启POWER_SAVING后串口无输出,数据仍然在DMA缓冲txBuf中,这个问题您是怎么解决的?