This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SerialApp - UART DMA接收

Other Parts Discussed in Thread: CC2530

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中