Quantcast
Channel: 蓝牙论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 7485

cc2540 串口问题

$
0
0
  for (uint16 cnt = 0; cnt < len; cnt++)
  {
    dmaCfg.txBuf[dmaCfg.txTail] = *buf++;
    dmaCfg.txMT = 0;
    if (dmaCfg.txTail >= HAL_UART_DMA_TX_MAX-1)
    {
      dmaCfg.txTail = 0;
    }
    else
    {
      dmaCfg.txTail++;
    }
    // Keep re-enabling ISR as it might be keeping up with this loop due to other ints.
    IEN2 |= UTXxIE;
  }
上面的是在串口写数据的函数中,IEN2 |= UTXxIE;这个是什么意思?是不是每执行到IEN2 |= UTXxIE这句就跳到HAL_ISR_FUNCTION( halUart0TxIsr, UTX0_VECTOR ) 这个服务程序中执行?执行完HAL_ISR_FUNCTION 到第2次 IEN2 |= UTXxIE时,第一个字节它一定已经发送完?会不会出现发送的字节还没有发送完,又执行到IEN2 |= UTXxIE,此时往UxDBUF 中写数据导致此次的数据丢失?
还有它能保证每一个字节都能成功发送?比如我写60个字节,都能保证全部发送?
UxDBUF = dmaCfg.txBuf[dmaCfg.txHead++]; 这句往buf中写一个字节后,不用判断那个字节已经发送完的?
#if (HAL_UART_DMA == 1)
HAL_ISR_FUNCTION( halUart0TxIsr, UTX0_VECTOR )
#else
HAL_ISR_FUNCTION( halUart1TxIsr, UTX1_VECTOR )
#endif
{
  HAL_ENTER_ISR();
  if (dmaCfg.txHead == dmaCfg.txTail)
  {
    IEN2 &= ~UTXxIE;
    dmaCfg.txMT = 1;
  }
  else
  {
    UTXxIF = 0;
    UxDBUF = dmaCfg.txBuf[dmaCfg.txHead++];
    if ((HAL_UART_DMA_TX_MAX != 256) && (dmaCfg.txHead >= HAL_UART_DMA_TX_MAX))
    {
      dmaCfg.txHead = 0;
    }
  }
  HAL_EXIT_ISR();
}
求回答。谢谢

Viewing all articles
Browse latest Browse all 7485

Trending Articles