TI中文支持网
TI专业的中文技术问题搜集分享网站

zstack使用DMA串口传输数据时,当一次传输数据量过大,数据会分多次读出,在线求解答!

       数据包大于65小于128时,HalUARTRead该函数分三次读出数据,原因是在HalUARTReadDMA该函数中有这么一句

if (!HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead))
{
break;
}

#define HAL_UART_DMA_NEW_RX_BYTE(IDX)  (DMA_PAD == HI_UINT16(dmaCfg.rxBuf[(IDX)]))

当rxBuf中数据的高八位等于DMA_PAD时则表示有数据到来,则读出,否则退出。现在的现象是当数据量较大时,rxBuf不知道是DMA传输没来得及还是什么原因,并没有给rxBuf赋值,然后过一小段时间,再给rxBuf赋值。所以导致当我数据量过大时,小于128字节,数据分多次给我读出来,而不是一次性读完。而在协议栈中,我并没找到把DMA_PAD 赋值给rxBuf前八位的代码,这问题应该怎么解决?

VV:

 static void HalUARTOpenDMA(halUARTCfg_t *config)

osal_memset(dmaCfg.rxBuf, (DMA_PAD ^ 0xFF), HAL_UART_DMA_RX_MAX*2);

JingYong Qu:

回复 VV:

不是这里吧,这里是把DMA_PAD取反,然后赋值给rxBuf,我想知道是在哪里直接把DMP_PAD直接赋值给rxBuf的。  

我所描述的这个问题只有在低版本才会出现,高版本好像没这个现象得。

赞(0)
未经允许不得转载:TI中文支持网 » zstack使用DMA串口传输数据时,当一次传输数据量过大,数据会分多次读出,在线求解答!
分享到: 更多 (0)