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.

[参考译文] TMS570LC4357:需要有关 GPIO[A|B] DMAREQ 时序的说明。

Guru**** 2606725 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/745317/tms570lc4357-need-explanation-of-gpio-a-b-dmareq-timing

器件型号:TMS570LC4357

您好!
我目前担任德州仪器直接账户的顾问、
但我尚未收到凭据、因此我正在使用我的普通登录帐户。

他们使用的是 TMS570LC4375、我将使用 DMA 驱动程序。

我需要使用 GIOA[6]上的/DMAREQ H/W 触发器从 FPGA 触发 DMA 通道。

这是 DMAREQ[38] PINMMR176[16]将设置为0。   DMAREQPS[1:0]|=(1 << 38)//低电平有效

当/DMAREQ 被置位时、应传输一个单帧。

FPGA 仍在规格范围内、因此对于初始测试、我们将会有一个非常简单的器件
FPGA 设计、用于测试 MCU 软件

计划是让 MCU 在未使用的上生成/DMAREQ 信号
和 FPGA 之间的连接。 (假设这是/MCU_DMAREQ)
简单的 FPGA 设计只需将该引脚配置为输入并对进行路由即可
发送到连接到 CPU /DMAREQ 引脚(GIOA6)的正确 FPGA 引脚的信号。

我不清楚 DMA 请求引脚的时序。

有一个 DMA 请求极性寄存器、您可以在其中选择信号是低电平有效还是高电平有效。

当一个硬件请求被生成时、DMA 状态寄存器被置位。

问题:  

                   如果 CPU 在/DMAREQ 上接收到一个在 DMA 开始传输之前结束的脉冲、会发生什么情况?

                   只要脉冲长度一定、DMA 请求就会被接受吗?

                   如果是、脉冲的最小长度是多少?

                  如果 CPU /DMAREQ 被置为有效、直到 DMA 传输被启动并被置为无效、会发生什么情况?
                  FPGA 将被存储器映射、并且从存储器窗口中进行的任何读取都将使/DMAREQ 无效

                  如果/DMAREQ 只有 DMA 传输完成后才被置为无效、会发生什么情况?
                  (处理初始测试的一种方法是在测试程序中将/MCU_DMAREQ 置为有效、
                   并在 FTCA 中断中将/MCU_DMAREQ 置为无效(帧传输完成)
                  然后、/DMAREQ 在 DMA 传输结束时仍然有效。

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

    DMA_REQ 信号在 DMA 控制器的下一个 HCLK 上升沿上被锁存。 DMA_REQ 信号应该只在一个 VCLK/HCLK 周期内保持有效。 外设需要在一个 HCLK 周期后使 DMA_REQ 无效。

    DMA 控制器具有一个两级缓冲器、用于捕捉每个通道的硬件请求。 当生成硬件请求并启用通道时、DMA 状态寄存器中的相应位置位。 挂起寄存器用作一级缓冲器。

    即使 DMA 尚未将数据传输到目标、外设也可以在 DMA 读取完所有数据后随时发出另一个请求。 一个完整的传输意味着与一个通道相关的所有元件被完全从其源传输到其目的。 在与第一个请求相关联的传输完全完成之前、外设不能将第三个请求置为有效。

    DMA 无法同时捕获两个以上的请求。 在至少一个待处理的请求完全处理之前,将忽略其他请求。

    同样、DMA_REQ 信号应该只在一个 VCLK/HCLK 周期内保持有效。 外设需要在一个 HCLK 周期后使 DMA_REQ 无效。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的答案 有点含糊、因为后一部分可以解释为 DMA 控制器只会在读取帧的最后一个元素后对第二个 DMAREQ 做出反应。 在此状态下、DMA FIFO 中的内容将等待被写入、因此 DMA 传输不会完成。

    我们在 EMIF 上有一个需要 DMA 支持的 FPGA。

    实现 DMA 的自然方法是在需要处理时使外设将 DMAREQ 置为有效。

    当外设检测到对地址范围内地址地址的访问时、DMAREQ 应被置为无效。

    由于我们的帧至少为16个元素、因此在第一次 DMA 读取后将 DMAREQ 置为无效将确保在 最后一次 DMA 读取传输结束时不会将其置为有效。

    您能否确认我们的想法是否有效?

    出现第二个问题。

    我们希望传输多个帧、每个 DMAREQ 一个帧。

    传输完完整块后、我们计划重新编程 DMA 初始目标地址、或在 BTC 中断中启用另一个 DMA 通道。

     如果 DMA 通道已经传输了一个完整的块、并且在 BTC 中断例程运行之前出现了一个新的 DMAREQ、会发生什么情况。

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

    您的想法是有效的。 该请求在 HCLK 上升沿被锁存、并且应该在至少1个 HCLK 周期内保持高电平。

    整个块已传输、但尚未完成、因此该通道的 DMA 状态位仍然置位。 新请求将处于挂起状态、该通道的挂起寄存器中的位将被置位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这又是模棱两可的。

    我想将 DMAREQ 置为有效、并在访问 FPGA 之前使 DMAREQ 保持有效。

     访问 FPGA 时、应将 DMAREQ 信号置为无效。

    DMA 控制器只应传输一个帧。

    如果挂起寄存器由于这个原因被置位、那么我相信这将导致两个帧的传输。

    如果 DMAREQ 在两个时钟周期内有效、这是否意味着将发生两次传输?

    如果 DMA 通道已经完成了块的所有帧的传输、并且接受了 BTC 中断、我还需要对会发生什么情况进行回复、

    但下一个 DMAREQ 在 DMA 通道重新初始化之前出现。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有任何有关这方面的新闻吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ulf、

    我想将 DMAREQ 置为有效、并在访问 FPGA 之前使 DMAREQ 保持有效。
    QJW>没关系。 DMAREQ 可以尽可能保持激活状态。

    访问 FPGA 时、应将 DMAREQ 信号置为无效。

    DMA 控制器只应传输一个帧。
    QJW>是的,它应该只传输1个帧用于1个 DMAREQ

    如果挂起寄存器由于这个原因被置位、那么我相信这将导致两个帧的传输。
    QJW>当一个硬件请求被生成并且通道被启用时、相应的位"通道挂起寄存器(PEND)"被置位。 PEND 位在帧结束时清零。 这不会导致两个帧的传输。

    如果 DMAREQ 在两个时钟周期内有效、这是否意味着将发生两次传输?
    QJW>否,因为它被触发一次(如果极性为高电平则为上升沿)。

    如果 DMA 通道已经完成了块的所有帧的传输、并且接受了 BTC 中断、我还需要对会发生什么情况进行回复、
    但下一个 DMAREQ 在 DMA 通道重新初始化之前出现。
    QJW>最后一次传输完成后。 新的 DMAREQ 将设置 PEND 位。 但是、当控制数据包被修改时、PEND 位将被清零。

    如果我的答案不清楚、请告诉我。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的:这是我解释功能的方式。
    当 CPU H/W DMAREQ 被激活时、挂起位被置位、并且如果一个 DMA 被启用、DMA 传输开始
    DMAREQ 信号可以是有效的、而不会导致第二个帧被发送、直到在帧结束时挂起位被清零。

    如果在挂起位清零前 DMAREQ 信号已经被停用、DMA 开始等待下一个 DMAREQ
    如果在挂起位清零前 DMAREQ 信号没有被置为无效、那么新的传输就会开始。

    *您能确认这是它的工作方式吗?
    ===========================
    *这就是我怀疑 DMA 工作的方式:您能否确认每个项目。

    *已排队的 DMA 传输?
    一旦 DMAREQ 被激活并且传输开始:
    如果 DMAREQ 在当前传输的挂起位清零前被置为无效、
    但在挂起位被清除之前被再次激活、将会出现一个新的请求

    *暂挂寄存器清除?
    在 DMA 从源读取帧的最后一个字后、挂起寄存器被清除。
    这以及之前的几个字可能位于 DMA FIFO 中、正在等待此时写入。

    ===========================
    我的应用程序将从源到两个缓冲区中的 DMA、每个缓冲区包含一个块。
    为了避免开销、我的计划是使用两个 DMA 通道、每个通道处理一个缓冲区。
    它们将共享相同的 DMAREQ 信号、但一次只有一个有效。
    计划使用块传输完成中断在 DMA 通道之间切换。

    假设通道#1用于块1、通道#2用于块2。

    DMA 通道1。块传输完成中断
    启用 DMA #2

    DMA 通道2.块传输完成中断:
    启用 DMA #1

    ===================================================================================
    在初始化时、我将把控制数据包写入两个 DMA 通道。
    这两个信号都将被初始化以使用相同的 DMAREQ 信号
    然后、我将启用 DMA 通道#1、但不启用 DMA 通道#2。

    *当 DMAREQ 被激活时、即使它未被启用、DMA #2挂起位是否会被置位?

    我知道、如果启用了 DMA 通道、并且激活了 DMAREQ、则将设置挂起位
    并保持置位、即使我禁用 DMA 通道也是如此。

    当通道处于非活动状态时、如果 DMAREQ 上的 DMA #挂起位没有置位:

    *如果 DMAREQ 处于活动状态且启用了 DMA 通道、会发生什么情况?
    这将设置挂起位并执行传输吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请注意 TI 文档中不可能找到的内容:
    当外部 DMAREQ 信号在相应的 HWCHENA*位之前有效时,DMA 控制器静默忽略此请求。
    请参阅 e2e.ti.com/.../467894
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jiri、

    *已排队的 DMA 传输?
    一旦 DMAREQ 被激活并且传输开始:
    如果 DMAREQ 在当前传输的挂起位清零前被置为无效、
    但在挂起位被清除之前被再次激活、将会出现一个新的请求

    QJW> DMA 具有一个用于捕获硬件请求的两级缓冲器和一个用于捕获软件请求的一级缓冲器。 如果 DMA 没有完全处理待处理的请求、并且某个外设在同一通道上生成了硬件请求、则 DMA 将捕获此硬件请求并将其识别到其请求缓冲区(二级缓冲区)中。 如果第一个软件请求仍处于待处理状态、DMA 无法识别同一通道上的两个软件请求。 因此软件请求将被忽略。

    *暂挂寄存器清除?
    在 DMA 从源读取帧的最后一个字后、挂起寄存器被清除。
    这以及之前的几个字可能位于 DMA FIFO 中、正在等待此时写入。

    QJW>传输结束时挂起位被清零。 一个完整的传输意味着与一个通道相关的所有元件被完全从其源传输到其目的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果 HWCHENAS 内部的通道未启用、并且映射到该通道的硬件请求被置为有效、则硬件请求仍将被置为有效
    在通道挂起寄存器(PEND)内捕获。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问题是,它在硬件/软件之间存在竞争条件,这是无法解决的。

    激活外部 DMA 请求关闭 HWCHENAS 位。 在这种情况下、软件读取挂起位且该位处于活动状态。 这意味着什么? 我们不知道! 可能的原因有:

    1. 挂起位被激活、这是因为在 HWCHENAS 位之前外部信号被激活。 在这种情况下、DMA 控制器没有启动传输、我们必须通过 SWCHENAS 位启动传输。
    2. 挂起位是有效的、因为 DMA 控制器有更高优先级的传输、我的传输必须等待。 在这种情况下、我们无法设置 SWCHENAS 位、因为它可能会启动重复传输。

    结果:它没有仅在 DMA 控制器上的解决方案。 我们必须控制 PINMUX 上的外部信号源或 DMA 请求连接