TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] TMS320F280049C:使用 DMA 重置循环缓冲器 FSI 通信

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165233/tms320f280049c-reset-of-circular-buffer-fsi-communication-using-dma

器件型号:TMS320F280049C

您好!

我对多个 F28004x 控制卡之间的 FSI 通信有疑问。 我想使用 DMA 发送和接收8个字的帧,我在主控器件中进行了这些设置:

Fullscreen
1
2
3
4
5
6
7
FSI_setTxFrameType(FSITXA_BASE, FSI_FRAME_TYPE_NWORD_DATA);
FSI_setTxSoftwareFrameSize(FSITXA_BASE, nWords); // nWords = 8
FSI_setTxDataWidth(FSITXA_BASE, nLanes);
FSI_setTxUserDefinedData(FSITXA_BASE, txUserData);
FSI_setTxFrameTag(FSITXA_BASE, txDataFrameTag);
FSI_setRxSoftwareFrameSize(FSIRXA_BASE, nWords); // nWords = 8
FSI_setRxDataWidth(FSIRXA_BASE, nLanes);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我将 DMA 配置为升级 TX 缓冲区。 我对重新设置 RX 和 TX 循环缓冲区有疑问、目前我在 DMA_ISR 中将其复位、但是否有必要执行该操作、或者它将自动重新启动以从第8个字开始、因为我们将帧大小指定为8个字?

如果有必要 的话、我们可以用 CPU 以外的其他方法、使用 DMA 或其他方法来实现它吗?

提前感谢您的回答!

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

    您好!

    [引用 userid="541908" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165233/tms320f280049c-reset-of-circular-buffer-fsi-communication-using-dma ]]我对重置 RX 和 TX 循环缓冲区有疑问,目前我正在 DMA_ISR 中重置它们,但是否有必要执行此操作,或者它将自动重新启动,以便在第8个字之后开始,因为我们将帧大小指定为8个字?

    它只会在16个字被发出后自动复位回起始位置。 因此、由于您使用的是8字帧、因此您有以下两个选项:

    1. 在每个帧 TX 之后、在软件中复位缓冲区指针、在这种情况下仅使用缓冲区的前8个字槽。
    2. 将 DMA 配置为在移动16个字后换行并使用完整的16字缓冲区大小。
      1. DMA 会将8个字移入 FSI TX 缓冲区的前半部分(第1帧)、然后将8个字移入 FSI TX 缓冲区的后半部分(第2帧)。 在这种情况下、FSI TX 缓冲区指针将自动回绕、无需额外的软件。

    最棒的

    Kevin

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

    尊敬的 Kevin Allen:

    非常感谢您的回复、

    [引用 userid="315587" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1165233/tms320f280049c-reset-of-circular-buffer-fsi-communication-using-dma/4383023 #4383023">将 DMA 配置为在移动16个字后换行并使用完整的16字缓冲区大小。
    1. DMA 会将8个字移入 FSI TX 缓冲区的前半部分(第1帧)、然后将8个字移入 FSI TX 缓冲区的后半部分(第2帧)。 在这种情况下、FSI TX 缓冲区指针将自动回绕、无需额外的软件。
    [/报价]

    问题是、在我的情况下、我只想在每个 ePWM 周期发送一个8字的帧、在这个周期中、要发送的数据在下一次发送帧之前由 DMA 更新。 我 想避免在软件中重置缓冲区指针、我想在 TX 完成传输时通过 DMA 重置它。 您是否知道其他最佳方法?

    此致、谢谢

    Alfayed

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

    您好、Alfayed、

    您可以执行我在#2中提到的操作。 DMA 将移动8个字、然后传输 FSI 数据包、然后 DMA 将再将8个字移动到接下来的8个缓冲槽中、并传输一个 FSI 数据包。 FSI 发送缓冲区指针将在第二个数据包之后自行重置回起始值。

    您需要将 DMA 配置为在返回开始前向 FSI TX 缓冲区执行两个8字传输。 我认为这是避免额外软件控制的最佳方法。

    最棒的

    Kevin