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.

[参考译文] TMS320F28388D:具有单个 DMA 通道的 FSI RX DMA

Guru**** 2802905 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1612408/tms320f28388d-fsi-rx-dma-with-single-dma-channel

器件型号: TMS320F28388D
主题: C2000WARE 中讨论的其他器件

与 FSI 菊花链应用手册类似、我使用 F28388D 作为 FSI 引线、使用 F280039C 作为菊花链配置中的 FSI 节点。  

我在两个 F28388D CPU1/CPU2 内核上平均分配了 8 个 FSI RX 通道(每个内核管理 4 个 FSI RX)。 我成功完成了 FSI RX DMA c2000ware 示例、该示例使用 2 个 DMA 通道用于 FSI RX、1 个通道用于 TAGUDATA、1 个通道用于数据。 每个 FSI RX 通道使用 2 个 DMA 通道、我遇到了每个 F28388D CPU 的 DMA 通道数量(每个 CPU 6 个通道)的限制、只能处理 3 个 FSI RX 通道、而不是 4 个通道。

 

是否可以使用单一 DMA 通道通过 FSI RX 触发器的单次突发来移动传入的 FSI RX 数据包 TAGUDATA(1 个字)和数据(16 个字)?

我的基本问题是 FSIRX_TAGUDATA 寄存器与存储器中的 FSIRX_DATA 不相邻。 C2000ware 示例通过使用两个 DMA 通道解决了这一问题、一个用于 TAGUDATA、一个用于数据。 但因为只有 6 个 DMA 通道、所以这将您限制为 3 个 FSI RX。

看看 FSI RX 存储器映射、表 32-40。 F28388D TRM 的 FSI_RX_REGS 寄存器、
RX_FRAME_TAG_UDATA @ 7h 偏移
RX_BUF_BASE_y @ 40h +公式偏移

要尝试将一切从 RX_FRAME_TAG_UDATA 一直移动到 RX_BUF_BASE_y 的末尾、需要移动 72 个 uint16 字、这超出了 DMA 功能 — 即使在单个突发中使用 32 位字、突发内的 num 也限制为 32、即 64 个 uint16。 (不确定这是否起作用,因为 28388D TRM 在表 11-2 中仍显示每次突发最多 32 个 16 位字。 BURSTSIZE 和 DATASIZE 行为。

单个 DMA 是否有权变措施来将 RX_FRAME_TAG_UDATA @ 7h(一个字)移动、然后将 SOURCE_addr 跳转到 RX_BUF_BASE_y @ 40h (16 个字、burst_step = 1)、以便从单个 FSI RX 触发器一次突发总共移动 17 个字?

或者、在 FSI RX TAGUDATA 和 DATA 相邻的存储器中设置一个空间、那么 DMA source_addr 可直接递增 1(BURST_STEP 为 1 个地址)?

此致、

Jesse