TI中文支持网
TI专业的中文技术问题搜集分享网站

cc2540串口睡眠如何去唤醒

我的程序是基于simpleperipheral,加了串口和powersaving,这是我的预编译选项

INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
POWER_SAVING
xPLUS_BROADCASTER
HAL_UART=TRUE
HAL_LED=FALSE
HAL_UART_DMA=1
HAL_UART_ISR=0
HCI_UART_BR=4
HAL_KEY=FALSE

经过验证,程序可以进入PM2模式,现在的问题是怎样实现PM2的唤醒,保证串口的正常收发。

由于开启了POWER_SAVING选项,CTS和RTS都参与工作,现在得情况是,BTOOL连接到串口模块后,开启通知,通过串口调试助手发送数据,BTool收到数据有错,这是因为没唤醒的原因吗。BTool发数据到CC2540,串口调试助手不能立马收到数据,要把CTS拉低,才可以收到数据,不能通过无线唤醒吗,CC2540收到数据必须要通过外部中断唤醒才能开启串口发送吗。

Yan:

ethan,

通过无线唤醒系统也能达到目的的。

你可以尝试代码里面把流控关闭试试看。

WIND JXC:

回复 Yan:

从机进入睡眠后,能有主机无线唤醒么?

Yan:

回复 WIND JXC:

yueliangz0123,

进入PM3之后是不可以的,只有本身IO口的中断才可以唤醒。

WIND JXC:

回复 Yan:

进入PM3只有外部中断可以???PM3进入的条件之一是不能有任何定时任务,包括睡眠定时唤醒??

PM2可以用睡眠定时唤醒吧?

PM2模式下能有主机无线唤醒从机??机制是什么样的??

ethan:

回复 Yan:

Hi Yan:

关闭流控只需定义#define NPI_UART_FC                    FALSE吗,流控关闭后对CTS,RTS有什么影响,目前我修改这个参数,测试串口传输功能发现没多大影响,是否还要修改其他参数

Yan:

回复 WIND JXC:

yueliangz0123,

请看我回复你的另一个帖子。

PM2 可以用定时唤醒。

PM2 模式下只要建立者连接,只要有RF的中断,就会被唤醒,用于保持连接。

ethan:

回复 Yan:

YAN,

simpleBLEperipheral例程中,PM2唤醒是通过sleeptimer在每个连接事件唤醒,也就是说只有在每个连接事件才可以发数据。如果想做到主机发个数据到从机,从机能不能马上建立连接事件

ethan:

回复 Yan:

YAN,

谢谢你的细心解答,我的串口程序,现在测得PM2模式功耗有140多UA,进入PM2之前,我做了IO口的处理

P1SEL = 0;
HAL_SLEEP_SET_POWER_MODE();
P1SEL = 0x40;

请问这样做是可行吗,我测了下,电流没多大变化,开启串口后进入睡眠还要做哪些处理

/****************************************************************************** * @fn HalUARTSuspend * * @brief Suspend UART hardware before entering PM mode 1, 2 or 3. * * @param None * * @return None *****************************************************************************/void HalUARTSuspend( void ){#if HAL_UART_ISR HalUARTSuspendISR();#endif}

这个函数要在什么时候使用

Yan:

回复 ethan:

ethan,

最好不要直接调用HAL_SLEEP_SET_POWER_MODE(), 这个函数是只给系统OSAL 去自动调用的,如果你看halsleep() 代码的话,在调用这个函数之前会有许多操作,你直接调用会造成系统紊乱。 

你可以试一下 osal_pwrmgr_device()这个函数。

HalUARTSuspend()是在定义了HAL_UART_ISR 模式不等于0的情况下,并且POWER_SAVING是使能的时候才会用到的。默认的UART应该是DMA模式。

赞(0)
未经允许不得转载:TI中文支持网 » cc2540串口睡眠如何去唤醒
分享到: 更多 (0)