微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540 待机唤醒疑问

CC2540 待机唤醒疑问

时间:10-02 整理:3721RD 点击:

亲们,

我在看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模式在这里并不推荐。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top