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.
您好!
我对多个 F28004x 控制卡之间的 FSI 通信有疑问。 我想使用 DMA 发送和接收8个字的帧,我在主控器件中进行了这些设置:
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);
我将 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字帧、因此您有以下两个选项:
最棒的
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字缓冲区大小。问题是、在我的情况下、我只想在每个 ePWM 周期发送一个8字的帧、在这个周期中、要发送的数据在下一次发送帧之前由 DMA 更新。 我 想避免在软件中重置缓冲区指针、我想在 TX 完成传输时通过 DMA 重置它。 您是否知道其他最佳方法?
此致、谢谢
Alfayed
您好、Alfayed、
您可以执行我在#2中提到的操作。 DMA 将移动8个字、然后传输 FSI 数据包、然后 DMA 将再将8个字移动到接下来的8个缓冲槽中、并传输一个 FSI 数据包。 FSI 发送缓冲区指针将在第二个数据包之后自行重置回起始值。
您需要将 DMA 配置为在返回开始前向 FSI TX 缓冲区执行两个8字传输。 我认为这是避免额外软件控制的最佳方法。
最棒的
Kevin