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.

[参考译文] CC3200-LAUNCHXL:CC3200 - UART 乒乓 UDMA -溢出错误- UART_RXERROR_溢出

Guru**** 674950 points
Other Parts Discussed in Thread: ENERGIA
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1194049/cc3200-launchxl-cc3200---uart-ping-pong-udma---overrun-error---uart_rxerror_overrun

器件型号:CC3200-LAUNCHXL
主题中讨论的其他器件:Energia

我正在制作一个器  件,以2MHz 的频率连续传输 UART 接收的数据*-我已经在乒乓模式下使用 uDMA 实现了这一点,uDMA 和无线传输*工作正常-不会错过任何数据包,DMA 在 PRI 和 ALT 通道之间很好地切换。

不幸的是,我发现我每  发送54个缓冲区(27对 PRI 和 ALT),就会收到一个溢出错误(用 ulStatus = uDMAErrorStatusGet ()检查,返回8,UART_RXERROR_overrun) ,并且我发现它始终是由 ALT 缓冲区引起的! 因此、会发送一个空的缓冲 区、并且缺少通常包含在缓冲区数据包中的采样数据数量。 我正在使用 Energia IDE。

有什么解决方法的想法吗?

编辑:*与传输相关的所有字都是指无线传输而不是 UART Tx

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Maciej、

    您能否发布有关如何设置 DMA 的代码片段? 我想知道为什么您设置 UART 进行传输、但却遇到 RX 错误。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉、混淆了-通过传输/传输、我只指无线传输、而不是 UART Tx。

    总之、这是我的 UART 初始化函数:

    空 InitUART0传输(空)

    unsigned int uIdx;

    MAP_PRCMPeripheralReset (PRCM_UARTA0);
    MAP_PRCMPeripheralClkEnable (PRCM_UARTA0、PRCM_RUN_MODE_CLK);

    MAP_UARTConfigSetExpClk (控制台、SYSCLK、UART_BAUD_RATE、
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
    UART_CONFIG_PAR_NONE | UART_FlowControl_RX ();

    MAP_uDMAChannelAssign (UDMA_CH8_UARTA0_RX);
    MAP_UARTIntRegister (UARTA0_BASE、UART0IntHandler);

    //流量控制-这可能会起作用
    MAP_UARTFlowControlSet (UARTA0_BASE、UART_FlowControl_RX);

    //将 TX 和 RX 触发阈值设置为4。 这将由使用
    // uDMA 控制器发出信号,指示何时应传输更多数据。 。
    //将配置 uDMA TX 和 RX 通道,以便可以传输4个通道
    当 UART 准备传输更多数据时、//以突发方式传输字节。
    MAP_UARTFIFOLevelSet (UARTA0_BASE、UART_FIFO_TX4_8、UART_FIFO_RX4_8);

    //启用 UART 以进行操作,并为两个 TX 启用 UDMA 接口
    //和 RX 通道。
    MAP_UARTEnable (UARTA0_BASE);

    //启用 UART 外设中断。 UDMA 控制器将导致
    UDMA 传输完成时、UART 中断信号上的//中断。
    MAP_UARTIntEnable (UARTA0_BASE、UART_INT_DMARX);

    //配置 UART TX 的控制参数。 UDMA UART TX
    //通道用于将数据块从缓冲区传输到 UART。
    //数据大小为8位。 源地址增量为8位字节
    //因为数据来自缓冲区。 目的增量为
    //由于数据将被写入 UART 数据寄存器,因此不存在。 。
    //仲裁大小设置为4,与 UART TX FIFO 触发器匹配
    //阈值。
    设置传输(UDMA_CH8_UARTA0_RX | UDMA_PRI_SELECT、UDMA_MODE_PINGONG、
    sizeof (g_ucRxBufA)-buff_margin、udma_size_8、udma_arb_4、
    (void *)(UARTA0_BASE + UART_O_DR)、UDMA_SRC_INC_NONE、
    G_ucRxBufA、UDMA_dst_INC_8);

    设置传输(UDMA_CH8_UARTA0_RX | UDMA_ALT_SELECT、UDMA_MODE_PINGONG、
    sizeof (g_ucRxBufB)-buff_margin、udma_size_8、udma_arb_4、
    (void *)(UARTA0_BASE + UART_O_DR)、UDMA_SRC_INC_NONE、
    G_ucRxBufB、UDMA_dst_INC_8);

    MAP_UARTDMAEnable (UARTA0_BASE、UART_DMA_RX);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您要禁用乒乓模式、问题是否已解决? 您是否需要乒乓模式带来的更高吞吐量?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不确定如何测试乒乓模式的禁用-这将使我的代码无法完全正常工作、因为我在乒乓 uDMA 中断中发送了 WiFi 数据包。

    我确实尝试了以下操作: 如果我移除了 WiFi 传输部件-没有发生溢出错误、乒乓 UDMA 似乎运行顺畅。

    我还尝试将 wifi 传输移出 DMA 中断并进入循环。  这会停止溢出错误、但数据包现在丢失、从而造成更多问题。

    至于吞吐量、我 每秒需要大约1000 128字节的块- 这是以连续方式发送的、因此我需要乒乓模式。

    我可以向您发送代码、以便您查看。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Maciej、

    如果您要切换到 UART1、您会发现同样的问题吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我尝试过它-没有更改相同的错误