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.

[参考译文] RTOS/AM4378:EDMA 在 HSR-PRP-Dan 中的使用

Guru**** 2609895 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/654863/rtos-am4378-edma-usage-in-hsr-prp-dan

器件型号:AM4378

工具/软件:TI-RTOS

您好!

我使用:
PDK_AM437X_1_0_6
EDMA3_LLD_2_12_03_27
PRU-ICSS-HSR-PRP-DAN_01.00.02.00

以下是一些问题:

1) PRP-ICSS-HSR-PRP-Dan 使用 EDMA。 它还会创建 EDMA 处理程序。 要使用 EDMA、我需要处理程序。 我找到了函数 EDMA3_DRV_getInstHandle(),但我不知道 phyCtrlerInstId (EDMA3控制器实例 ID (硬件实例 ID,从0开始)和 RegionID ( 需要先前 打开的驱动程序实例句柄的阴影区域 ID )是什么?!

2) 我想在 PRP 应用程序的同时将 EDMA 用于自定义任务、但以下是诀窍:
我想设置具有 ARM 的 EDMA 通道以将数据从 PRU RAM 复制到 DDR、但当数据在其一侧准备就绪时、PRU 必须触发传输。
我担心这应该如何工作、因为访问 EDMA 时需要 LLD 挂起信标、我不知道如何使用 PRU 实现这一点。
有什么想法如何解决?

此致、Mare

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我的驱动程序不正确、那么触发信标是否未使用? 是吗?
    总的来说... 这种方法是否被禁止(将 EDMA 与 ARM 和 PRU 结合使用)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mare:

    1)您可以从 edma3init()获得一个 EDMA 处理程序,而不是使用较低级别的 EDMA3_DRV_getInstHandle(),它会调用下面的 EDMA3_DRV_open()。 您可以将 PRSDK UART 示例作为 EDMA3用例/参考进行查看。 有关 EDMA3干燥器的更多详细信息、请访问 - processors.wiki.ti.com/.../Programming_the_EDMA3_using_the_Low-Level_Driver_(LLD)

    2) 2) 2)您能否详细说明您的定制任务? PRU 接收的数据包在 OCMC 中排队,回调函数 RedRxPktGet()将数据包从 OCMC 内存复制到 DDR。 您是否计划使用 EDMA 更新存储器的"副本"?

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

    你好,Garrett!

    很高兴您能回答我的主题。


    1) 如果我调用 edma3init ()、我会得到"EDMA3_DRV_E_OBJ_NOT_deleted"。 我认为这是因为 在我的任务之前 Timesync_edmaConfig()初始化 EDMA。 那么、如何在打开的 EDMA 处理程序上获取指针呢?

    2) 为了更好地理解问题、让我解释一下系统应该是什么样的。

    ARM 代码:
    -PRP 驱动程序
    -时间同步
    -TCP
    -...
    -::
    -我的硬件定制任务(与 PRU-ICSS0通信)
    -我的自定义任务、用于从 PRU-ICSS0计算数据并通过 TCP/UDP 发送数据...

    PRU-ICSS1:
    -TI bin。 PRP 代码 (使用 L3和 PRU RAM)

    PRU-ICSS0:
    -我的定制代码:从外部传感器获取样片并将数据发送到 ARM。


    我认为您不理解。 我不打算修改 PRP 驱动程序或 PRU-ICSS1代码...

    现在、我制作了"my HW tasks"和 PRU-ICSS0代码。 一般而言、它可以工作、但速度太慢。
    现在、PRU (ICSS0)将 L3和 ARM 上的数据复制表 L3到 DDR... 但数据和 ARM 太多的复制速度太慢。 如果我用 PRU 将数据直接复制到 DDR、则延迟会很大、而 PRU 会错过实时操作的事件。 因此、建议使用 EDMA 将数据 ROM PRU RAM 复制到 DDR。

    目标是:ARM 设置 EDMA (src、dst、len)、当 src 中的数据准备就绪时、PRU 触发数据块传输。 阵列(来自传感器).. 当捕获到 X 个样本时、PRU 触发 ARM 在 DDR 中使用数据。

    所以 Garrett… 下面是我的问题:
    从图中可以看出、PRU 需要访问 EDMA、我的任务需要访问 EDMA、而 Timesync 任务也需要使用 EDMA (PRP 代码包的一部分)。
    "多处理器 EDMA 使用的最巧妙的方法是什么? 如何使用 PRU "挂起"信标? 如果我只想在通道上开始部分传输、是否需要使用 PRU 检查信号量(设置为购买 ARM)?


    此致、Mare

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

    1) edma3init()在 Timesync_edmaConfig()中调用,因此即使尝试设置第二个 EDMA 通道进行数据复制,EDMA 处理程序也是相同的时间 SyncHandle->edmaConfig->gEdmaHandle。 "edma3init 应该被调用一次、并且两个线程都应该使用处理程序来请求具有自己回调函数的通道。" 请参阅主题- e2e.ti.com/.../126883。

    2) 2)好的、现在我了解了您的用例。 我认为您应该能够通过向事件集寄存器写入来手动触发来自 PRU 的 EDMA 传输来实现这一点、请参阅 TRM 10.3.4.1.2手动触发的传输请求、以及 EDMA3_DRV_enableTransfer() API 中的 EDMA3_DRV_TrigMode。

    此致、
    Garrett