static uint16 HalUARTReadDMA(uint8 *buf, uint16 len)
{
uint16 cnt;
for (cnt = 0; cnt < len; cnt++)
{
if (!HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead))
{
break;
}
*buf++ = HAL_UART_DMA_GET_RX_BYTE(dmaCfg.rxHead); //dmaCfg.rxHead在哪裡初始化的呢
HAL_UART_DMA_CLR_RX_BYTE(dmaCfg.rxHead); //讀完之後就清零了嗎?
if (++(dmaCfg.rxHead) >= HAL_UART_DMA_RX_MAX)
{
dmaCfg.rxHead = 0;
}
}
PxOUT &= ~HAL_UART_Px_RTS; // Re-enable the flow on any read.
return cnt;
}
#define HAL_UART_DMA_NEW_RX_BYTE(IDX) (DMA_PAD == HI_UINT16(dmaCfg.rxBuf[(IDX)]))
這裡有一個不明白的地方:在初始化的時候rxBuf中填充的是DMA_PAD^0xFF,為什麼將HI_UINT16(dmaCfg.rxBuf[(IDX)與DMA_PAD比較,且兩者相同時就說明rxBuf中有數據了。然後就是每次串口接收數據將其發送到rxBuf中某個內存的低地址還是高地址,this is a problem!
另外,HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead))這句話很詭異,似乎是當串口收到數據後,DMA自動將數據搬到damCfg.rxBuf中
請問是哪一個 function 自動數據搬到damCfg.rxBuf中