微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > zstack使用DMA串口传输数据时,当一次传输数据量过大,数据会分多次读出,在线求解答!

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

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

       数据包大于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前八位的代码,这问题应该怎么解决?

 static void HalUARTOpenDMA(halUARTCfg_t *config)

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

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

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

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

网站地图

Top