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**** 2782615 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

 

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

    嘿、Jesse、

    明天我会回来联系您、需要咨询我们团队中的 DMA 专家以了解这是否可行。

    谢谢您、

    Luke

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

    您好 Jesse:

    您是否考虑过专门使用 CLA 来用于 TAGUDATA、以及使用相同的 FSI 事件触发 CLA 以在 DMA 移动 16 个字的同时移动该值? 有多达 8 个 CLA 任务、因此器件上的每个 FSIRX 通道总共可以有一个 CLA 任务。

    或者在存储器中设置一个空间、其中 FSI RX TAGUDATA 和数据相邻、因此 DMA source_addr 可以简单地递增 1 (1 个地址的 burst_step)

    上述情况似乎也是可行的。 在您的情况下、这是否是一个包含 17 个可用字节的数据包?

    谢谢您、

    Luke

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

    您好 Luke、

    最初、我分别在 CPU1/CPU2 上使用 FSI_Interrupt1 来维护 FSI RX 数据包、并处理一个 FSI RX 通道的流量。 一旦控制环路中断开始扩展并添加更多 FSI RX 通道、FSI RX INT1 就会出现问题、我开始获取缓冲区溢出和丢失数据包。

    我提出的两个解决方案是将所有内容移动到 CLA、主要是在 CPU1/CPU2 上进行 1:1 的 FSI RX INT1 传输、并移动到 CLA。 另一个是 DMA。 我有更多的 DMA 相关经验、所以我走了这条路由、还没有浏览 CLA 示例。 如果我可以使 DMA 与每个 FSI RX 通道 1 个 DMA 通道一起使用、我更喜欢该路由。

    您为 FSI RX 数据使用 DMA 和为 FSI RX UDATA 使用 CLA 的混合方法很有趣、但看起来好像必须拆分 RAM 空间、我是否正确回顾了 CLA/CPU 需要使用 LSRAM、而 DMA 只连接到 GSRAM? 因此、对于 DMA、FSI RX 数据必须位于 GSRAM 上、而对于 CLA、FSI RX UDATA 需要位于 LSRAM 中?

    [引述 userid=“529193" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1612408/tms320f28388d-fsi-rx-dma-with-single-dma-channel/6218554
    或者、在 FSI RX TAGUDATA 和数据相邻的存储器中设置一个空间、因此 DMA SOURCE_addr 可直接递增 1(BURST_STEP 为 1 个地址)
    [/报价]

    我熟悉内存映射外设和  表 32-40。 F28388D TRM 的 FSI_RX_REGS 寄存器。 是否可以重新映射这些寄存器以使 RX_FRAME_TAG_UDATA 与 RX_BUF_BASE_y 相邻? 对于 1 个 DMA 通道来说、这将是一个非常简洁的解决方案、用于移动 FSIRX UDATA 和 FSIRX 数据。 重映射或添加辅助备用映射(以便原始寻址不会中断)的确切程度如何?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此对于 DMA、FSI RX 数据必须位于 GSRAM 上、而对于 CLA、FSI RX UDATA 需要位于 LSRAM 中?

    我相信,我理解这可能是不方便的。

    在我看来、如果您不需要 CLA 用于任何其他目的、纯 CLA 方法将是最干净的解决方案、但明白这是额外的工作、因为您已经完成了 DMA 路由。 如果您最终决定使用 CLA、我可以将此主题重新分配给我们的一位 CLA 专家来帮助进行实施。

    我熟悉存储器映射外设和  表 32-40。 F28388D TRM 的 FSI_RX_REGS 寄存器。 是否可以重新映射这些寄存器以使 RX_FRAME_TAG_UDATA 与 RX_BUF_BASE_y 相邻? 对于 1 个 DMA 通道来说、这将是一个非常简洁的解决方案、用于移动 FSIRX UDATA 和 FSIRX 数据。 重新映射或添加辅助备用映射(以便原始寻址不会中断)的确切程度如何?

    「我知道 ,我知道你想要我为你舔妈妈的小骚穴。」

    谢谢您、

    Luke

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

    您好 Jesse:

    从读取 TRM 并分析 FSI 驱动程序来看、RX_FRAME_TAG_UDATA 似乎始终位于固定地址、这与可配置的 RX_BUF_BASE_y 寄存器不同。

    谢谢您、

    Luke