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.

[参考译文] AM2434:使用 DMA 进行16位并行 GPIO 读取

Guru**** 2419530 points
Other Parts Discussed in Thread: AM2434

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1295610/am2434-16-bit-parallel-gpio-read-with-dma

器件型号:AM2434

您好、TI!

我将使用两个8通道 ADC、每个 ADC 均为16位、并提供一个16位并行接口来读回转换数据。

我将 AM2434上的 PRU 用于其他目的、因此我想将这些 ADC 与 Cortex R5F 内核连接。

下面是我正在考虑的高层方法:

  1. 我将使用来自 Cortex R5F 的单个时钟信号将数据移出两个 ADC。 我想为此使用一个 SPI 时钟、以便它可以通过 DMA 在硬件中完成、而不是通过位拆裂来完成。
  2. 我要将每个 ADC 的每个16位并行信号映射到16位 GPIO 端口。 这将使我能够在一个固定 GPIO 端口存储器位置、在单个时钟/移位中移位和读取每个 ADC 的转换结果。
  3. 我想使用硬件来执行第2步、使用由 SPI 时钟触发的带有 DMA (或类似)的链接列表(上升沿或下降沿)。 理想情况下、我可以配置两个 DMA 传输、每个传输具有一个固定的源地址(相应的16位 GPIO 端口)和一个带有8个16位链接列表/环缓冲器的目标地址。

上述内容是否合理以及是否可以使用 Cortex R5F 的 GPIO 和 DMA 功能? 我已经通读了 TRM 中的 GPIO 和块复制 DMA (BCDMA)部分、没有看到任何建议这不可行的内容、但我非常感谢您的专家见解! 如果以上条件可行、我在实施时是否需要牢记 DMA 频率/吞吐量限制? 如果需要、我可以在两个 ADC 之间共享16位并行总线并使用 CS 线路在两者之间切换、但我更想先看看双路16位并行读取方法。

谢谢!

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

    您好!

    我们有关此主题的专家已外出、将于11月28日之前返回、请预计本周早些时候收到回复。

    此致、

    萨哈纳

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

    嗨、jars121、

    感谢您在美国节假日期间与我们联系并等待。

    首先、让我确保我理解您的方法。
    -点1:你知道如何通过位拆裂来使用 R5F 时钟来移动 ADC 数据、点2和点3是你正在考虑的一个潜在的硬件解决方案。 第1点似乎是为了帮助解释其他要点和问题、这是正确的吗?
    -点2:听起来你知道如何做 ADC 和 GPIO 映射,这是正确的?
    -第3点:你询问由 SPI 时钟触发的链接列表传输(理想情况下通过 DMA )是否可以执行 ADC 数据的移位和转换-这是在 GPIO 端口内存中。 我是否清楚地理解您?

    您的确认将有助于回答以下问题、并允许我继续回答帖子中的其他问题。

    上述声音是否合理以及是否可以使用 Cortex R5F 的 GPIO 和 DMA 功能?


    此致!
    哈雷

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

    您好、Haley:

    不用担心,感谢您的及时响应,我希望您度过了愉快的假期。

    首先我要说的是、我目前正处于项目的规划阶段、因此、根据我在之前设计中对 ADC Bit-banging、shift 等的使用经验、我已经注意到的一切都是理论性的。 我将针对您在下面的要点提供单独的回答:

    点1:您知道如何通过位拆裂来使用 R5F 时钟来转换 ADC 数据、点2和点3是您正在寻找的潜在硬件解决方案。 第1点似乎是为了帮助解释其他要点和问题、这是正确吗?

    是的、这是正确的。 从理论上讲、切换 R5F GPIO 线路来将数据移出所连接的 ADC 是没有问题的。 在 R5F GPIO 线路(即仿真时钟线路)的下降沿、我可以读取16位 GPI 寄存器以获得转换结果。 这表示基准或"最坏情况"情形、因为它完全基于软件/CPU。

    Point 2:您好像知道如何进行 ADC 和 GPIO 映射,这是正确的吗?

    是的、这是正确的。 将 ADC 的16条并行输出线映射到 AM2434上的一个连续16位 GPI 端口是我很舒服的。 同样、我比较适合将 AM2434中的 GPIO 线路(位拆裂方法)或 SPI 时钟(硬件/DMA 方法)映射到 ADC 上的时钟输入。

    点3:您要问的是由 SPI 时钟触发的链接列表传输(理想情况下是通过 DMA)是否可以执行 ADC 数据的移位和转换-该数据位于 GPIO 端口存储器中。 我是否清楚地理解您?

    是的、这也是正确的。 如果我可以在 SPI 时钟下降沿触发16位 GPI 端口的自动读取(如上所述、该端口已正确映射到 ADC 的16条并行输出线路)、 我可以将 ADC 转换读取功能卸载到硬件上、而无需在软件中执行此操作(即、如上所述、通过切换模拟时钟线路来进行位拆裂)。 在这种情况下、链接列表或循环缓冲区是合理的、但我愿意接受建议。 由于要读取8个通道、理想的解决方案将允许128个连续的 SPI 时钟传输(每通道16位 x 8个通道)、并将固定16位 GPI 端口以 DMA 方式传输到8个16位缓冲器中。

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

    您好、jar121、

    感谢您的回复。 我今天有如下确认:

    • BCDMA 通过具有通向 GPIO 路径的 VBUS 执行从存储器到存储器的块复制
    • 共有三种通道类别可供选择、其中在带宽和延迟之间进行了折衷。
      • 这可能会影响吞吐量和您的决策、
      • 详情见第 11.1.5.2节。 TRM 的通道类别

    以下各项将需要更多时间、我将在12月1日前向您通报最新进展情况。

    • 任何其他 DMA 限制、例如频率
    • 如果 SPI 时钟是 DMA 传输的有效触发器或事件
    • 审核转账方法的链接列表/环形缓冲区部分

    通常、您希望对软件的依赖性更小、因此 ADC 具有一种硬件转换启动功能、并由 DMA 为 ADC FIFO 提供服务。 页6402-6416 可能有助于提供其他以硬件为中心的方法。 (和页6417-6450提供了寄存器和位级详细信息。)

    您能否浏览这些页面、并告诉我这是否会改变您的方法? 或者 SPI 时钟是否是您的实施中的重要部分?

    在此期间、我仍将处理上述列表。

    此致!

    哈雷

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

    您好、Haley:

    再次感谢您的快速响应。

    Unknown 说:
    BCDMA 通过具有 GPIO 路径的 VBUS 执行存储器块复制,因此

    您的部分回答似乎被切断了、您会介意修改吗?

    有三个通道类别可供选择,这些类别将在带宽和延迟之间进行权衡。
    • 这可能会影响吞吐量和您的决策、
    • 详情见第 11.1.5.2节。 TRM 的通道类别
    [/报价]

    谢谢、我将详细阅读链接的部分。

    通常、您希望对软件的依赖性更小、因此 ADC 具有一种硬件转换启动功能、并由 DMA 为 ADC FIFO 提供服务。 页6402-6416 可能有助于提供其他以硬件为中心的方法。 (和页6417-6450提供了寄存器和位级详细信息。)

    您能否浏览这些页面、并告诉我这是否会改变您的方法? 或者 SPI 时钟是否是您的实施中的重要部分?

    [/报价]

    我需要在16个模拟输入通道上同时采样、因此在这种特定情况下需要使用外部 ADC (精确地说是 AD7606C-16)。 如果这不是硬性要求、我很乐意使用内部多路复用 ADC、从 DMA 的角度来看、这无疑要容易得多。

    谢谢!

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

    嗨、jars121、

    我对切断反应感到抱歉,它应该说"这样部分的方法看起来很好"。

    关于 SPI 时钟、同步时钟的上升沿被视为一个事件。 可以使用 DMSS INTAGGR 将其映射到本地或全局事件。 如果可以选择故障、DMA_CLK 或其他时钟。

    回顾-高级方法概述:

    • 设置 INTAGGR 以将时钟映射到 DMSS 触发器的事件
    • 触发时、发送传输请求让 BCDMA 向 GPIO 地址执行块复制

    您询问了限制。 我在上一篇文章中提到了折衷方案、但我还有一些其他想法:

    • 由于您提到了两个 ADC 和并行输出、因此如果对一个 ADC 同时使用全局事件0、对另一个 ADC 同时使用全局事件1、则第5973页的注意事项适用。
    • 由于开发尚早、因此当前详细信息中无法找到其他限制

    这会使 POST 的链接列表部分占用更多时间。 我将在12月5日前向您提供最新进展情况。

    谢谢。

    哈雷

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

    嗨、jars121、

    我从事链接列表部分。 通常、数据包和 PKTDMA 更适合链路列表、但 RINGACC 和 Ring 操作有助于创建循环缓冲区。 为此、请执行以下操作:

    • 设置通过参考环的说明和通道
    • 阅读11.1.4.2以了解您是否可以在方法中使用一个软件位、因为软件是向队列添加项目的唯一方法
    • 对于您的情况、有足够的条目、但在选择最终实现时请注意元素大小

    我希望这对您的发展和决策有所帮助。

    谢谢。

    哈雷

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

    非常感谢 Haley、非常感谢您为这组问题提供的帮助。

    我想我现在已经足够了、但在不久的将来、可能会在出现问题时提出后续问题。

    再次感谢!