微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > zstack DMA传输的BUG,请官方确认!

zstack DMA传输的BUG,请官方确认!

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

版本:2.5.1a

描述:使用DMA作为串口输出,HalUARTPollDMA会轮询DMA状态,但是以下代码中的decr计算发送延时有问题,因为dmaCfg.txShdw的值会跟着HalUARTPollDMA轮询周期进行刷新,导致ST0的值和刷新后的dmaCfg.txShdw的值一直达不到maCfg.txTick的要求,导致DMA触发发送有很长延迟。

if (dmaCfg.txShdwValid)
{
uint8 decr = ST0;

decr -= dmaCfg.txShdw;
if(decr > dmaCfg.txTick )
{
    // No protection for txShdwValid is required
    // because while the shadow was valid, DMA ISR cannot be triggered
    // to cause concurrent access to this variable.
    dmaCfg.txShdwValid = FALSE;
}
}

DMA中断函数中给了dmaCfg.txShdw初始值,但HalUARTPollDMA函数中在以下条件下会不停的刷新(通过调用HalUARTIsrDMA();)

if ((dmaCfg.txIdx[dmaCfg.txSel] != 0) && !HAL_DMA_CH_ARMED(HAL_DMA_CH_TX)
&& !HAL_DMA_CHECK_IRQ(HAL_DMA_CH_TX))
{
HAL_EXIT_CRITICAL_SECTION(his);
HalUARTIsrDMA();
}

该现象在低速率波特率下很明显,例如9600波特率经串口发送60个字节,连续发送4次,间隔20ms,240个字节有时候输出延时会到达8~10s,但由于缓存未溢出,倒是不会丢包。

你的发现是正确的,尤其在波特率低的时候,你需要调整这个值。

那要调为多少才没有延时啊?

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

网站地图

Top