CC2540 待机唤醒疑问
亲们,
我在看CC2540的串口中断服务(_hal_uart_isr.c)的时候,看到那文档里面的最后一个程序:
#if (defined POWER_SAVING && defined HAL_UART_GPIO_ISR)
/***************************************************************************************************
* @fn PortX Interrupt Handler
*
* @brief This function is the PortX interrupt service routine.
*
* @param None.
*
* @return None.
***************************************************************************************************/
#if (HAL_UART_ISR == 1)
HAL_ISR_FUNCTION(port0Isr, P0INT_VECTOR)
#else
HAL_ISR_FUNCTION(port1Isr, P1INT_VECTOR)
#endif
{
HAL_ENTER_ISR();
HalUARTResume();
if (dmaCfg.uartCB != NULL)
{
dmaCfg.uartCB(HAL_UART_DMA-1, HAL_UART_RX_WAKEUP);
}
PxIFG = 0;
PxIF = 0;
HAL_EXIT_ISR();
}
#endif
这个程序的意思是在POWER-SAVING允许的情况下,可以响应外部IO口中断从而来唤醒串口吗?
还有为什么下面的两行程序里是dmaCfg.uartCB 这个回调函数呢,为什么不是 isrCfg.uartCB 呢?这是uart_isr下啊,不是 uart_dma 啊,谢谢!
if (dmaCfg.uartCB != NULL)
{
dmaCfg.uartCB(HAL_UART_DMA-1, HAL_UART_RX_WAKEUP);
}
Jacen,
IO口的中断包括UART的确实能唤醒系统。
这段代码我的理解是,中断产生后,事实上UART搬数据,最终还是通过DMA来完成,以节省8051的资源。。。
串口底层用DMA 传送数据的 , 你这段程序 是哪一个工程里面的啊 ?我没找到你这段程序的相对应工程
Hi Yan,
谢谢您的回复!我看在这个uart_isr文件里面数据还是直接存到定义的串口buffer里面的。
还有搬uart数据一定得用DMA来完成吗?谢谢!
Hi xie yuanfu,
这段程序是BLE-1.4.0 的 SimpleBLEPeripheral这个工程里面的!这个文件可以在 Texas Instruments\BLE-CC254x-1.4.0\Components\hal\target\CC2540EB
这个路径下的 _hal_uart_isr.c 文件里找到。
串口数据一定得用DMA来传送吗?
你好,
串口数据当然不一定得用DMA来传输,只是51core这样做的目的是为了节省CPU开销,CPU去跑协议栈和OS,DMA来搬运串口数据。
Jacen,
请务必使用DMA模式,ISR模式在这里并不推荐。