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.

[参考译文] TMS320F280037C:DMA 和拉 CLB FIFO 连接

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1361641/tms320f280037c-dma-and-pull-clb-fifo-connection

器件型号:TMS320F280037C
主题中讨论的其他器件:SysConfig

您好!

我目前正在开发用于 LED 驱动器的通信协议。 我想知道如何通过 SysConfig 将 DMA 目标地址连接到 CLB 推送 FIFO、从而扩展有效深度。 此外、我想知道是否有任何示例将 DMA 配置为将值从代码中的变量发送到外设寄存器。

提前感谢、

大卫

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

    尊敬的 David:

    遗憾的是、CLB 模块没有 DMA 访问权限。 对于具有 DMA 访问权限的模块、可以在 SysConfig 中执行以下操作:

    要使用"Manual"选项 、您可以直接输入地址作为 目标地址 (例如0x6B38)。

    若要使用"变量/函数名称" 、他们可以在 C 代码中的某个位置定义一个指针(例如、const void * scitdAddr =(const void *)(myLIN0_BASE + LIN_O_SCITD);)、然后使用 指针名称作为 目标地址(scitdAddr)。

    此致、

    德拉尼

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

    您好 Delaney:

    感谢您的解释。 因此、应该可以使用该方法将 DMA 互连到 CLB、而不是直接外设互连? 我之所以提出这个问题、是因为我阅读了 TRM 中的以下内容:

    此致、

    大卫

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

    尊敬的 David:

    我的错误、您是对的。 遗憾的是、DMA 模块无法访问 CLB 模块。 因此、DMA 无法将 CLB 推送或拉取 FIFO 寄存器作为其目标地址。 为了供将来参考、您可以 查看 功能方框图 以查看 DMA 可以访问哪些模块。

    另请注意、在任何情况下都不应选择"Linked to Peripheral"选项。 当另一个模块 添加到嵌入式 DMA 模块时、这是自动选择的选项、不应由用户选择。

    此致、

    德拉尼

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

    尊敬的 Delaney:

    没问题、感谢您的澄清。 是否有其他方式可以在不使用中断的情况下填充 FIFO?

    此致、

    大卫

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

    尊敬的 David:

    CLA 可以访问 CLB 模块、因此您可以设置 CLB 以触发 CLA 上持续写入拉 FIFO 的任务。  

    另一种选择是使用 SPI RX 缓冲区来导出数据、如 TRM 的以下部分所述。

    我 也会在 CLB 专家的环路中对我的建议进行评论。

    此致、

    德拉尼

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

    尊敬的 David:

    我已经与 CLB 专家讨论过、他们在提出建议之前有几个问题:

    • 您能否详细解释您的应用以及希望避免在 PULL FIFO 中使用中断的原因?
    • 你 在原帖中"延伸有效深度"是什么意思? 您是否指的是从不同外设扩展 FIFO 的有效深度?

    此致、

    德拉尼

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

    您好 Delaney:

    您能解释更多有关您的应用程序以及想要避免对 PULL FIFO 使用中断的原因吗?

    当然、我来进一步解释一下我们的应用。 根据 PWM 协议、CLB 用于控制包含21个 LED 的 LED 条。 每个逻辑值对应于不同的占空比。 PWM 频率大约为800kHz。 如您所知、拉取 FIFO 具有4个字的深度、因此、由于 LED 消耗高达32位的数据来理解命令、因此我最多可以控制4个 LED。 调度程序中用于更新 LED 条的更新任务具有1ms 的周期性。

    我们想知道是否有其他选项的原因是、如果我使用中断、它们需要与更重要的中断的其余部分实现很好的同步、这样在重新加载 CLB 时、它们永远不会触发。 这会在数据线中引起延迟、并且可能会达到 LED 发出新命令所需的最短复位时间。 此外、我们目前的 CPU 时间也很短。 我们想让这个管理之王留给另一个外设或另一个简单的外设来减轻 CPU 的负担。

    您 在原帖中"扩展有效深度"是什么意思? 您是指从不同的外设扩展 FIFO 的有效深度吗?

    说到有效的深度、我的意思是如果可以有任何方法将所有 LED 数据放入 FIFO 或类似文件中、这样 CLB 或其他外设就可以直接消耗这些数据、因此无需为 CLB 拉动 FIFO 充电。 理想情况下、DMA 是理想的备选器件、因为它会将数据从一个方向移动到另一个方向、从而有效地增加 FIFO 深度。

    此致、

    大卫

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

    尊敬的 David:

     要在不显著更改 CLB 实现的情况下实现该目标、最直接的方法是让 CLB 触发 CLA 写入前面提到的 Delaney 的 PULL FIFO。 这在您的应用中是否可行、或者 CLA 是否已经执行可能中断进入拉 FIFO 的数据流的任务?

    谢谢!

    卢克

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

    Luke、您好!

    目前、我们没有使用 CLA、我认为这可能是一个合适的解决方案。 谢谢你的建议 Delaney 和 Luke。

    此致、

    大卫