https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1457788/sk-am64b-am64x-pru
器件型号:SK-AM64B主题中讨论的其他器件:SysConfig
工具与软件:
大家好、我想将 R5内核的 PRU 硬件 UART 与 DMA 结合使用。
当前 UART 可以很好地处理轮询、但关于如何使其使用 DMA 的信息很少。 我该怎么做?
谢谢你
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.
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1457788/sk-am64b-am64x-pru
器件型号:SK-AM64B工具与软件:
大家好、我想将 R5内核的 PRU 硬件 UART 与 DMA 结合使用。
当前 UART 可以很好地处理轮询、但关于如何使其使用 DMA 的信息很少。 我该怎么做?
谢谢你
您好、Vaibhav。 我正在从 R5-0-0内核 FIFO 模式配置 PRU UART。 但我想让它可以使用 R5-0-0内核的 DMA。 PDMA 中没有提到 PRU UART 支持、因此我不明白应该怎么做。
但在 PRU UART 中、提到有两个 DMA 事件。 我不知道该怎么说。" (接收事件(URXEVT)和发送事件(UTXEVT))
我使用 SDK 10.0.0.20
谢谢你
这里提到了哪种 DMA?
6.4.8.3.6 PRU_ICSSG UART DMA 事件支持在 FIFO 模式下、PRU_ICSSG UART0生成以下两个 DMA 事件:•接收事件(URXEVT):使用 FIFO 控制 UART_INT_FIFO[7-6] IIR_FIFOEN 位字段设置接收器 FIFO 的触发电平(1、4、8或14个字符)。 每次达到触发电平或发生接收器超时时、PRU_ICSSG UART0都会向 DMA 控制器发送一个接收事件。 作为响应、DMA 控制器通过接收器缓冲寄存器 UART_RBR_TBR[7-0] RBR_DATA 从接收器 FIFO 读取数据。 请注意、如果接收器 FIFO 顶部的数据是错误的、即使已达到触发电平、接收事件也不会有效。 •发送事件(UTXEVT):当发送器 FIFO 为空时(此时发送器 FIFO 中的最后一个字节已复制到发送器移位寄存器中)、PRU_ICSSG UART0会向 DMA 控制器发送 UTXEVT 信号。 作为响应、DMA 控制器通过发送器保持寄存器(THR) UART_RBR_TBR[7-0] RBR_DATA 来重新填充发送器 FIFO。 当使用电源和仿真管理寄存器(UART_PWR)中的[14]UTRST 位使 PRU_ICSSG UART0退出复位时、UTXEVT 信号也会发送到 DMA 控制器。 DMA 通道中的活动可以与这些事件同步。 在非 FIFO 模式下、PRU_ICSSG UART0不会生成 DMA 事件。 任何与其中任一事件同步的 DMA 通道都必须在生成 PRU_ICSSG UART0事件时启用。 否则、DMA 通道将错过事件、除非 PRU_ICSSG UART0生成新事件、否则不会进行数据传输。
尊敬的 Murat:
对延迟响应深表歉意。 我将介绍到目前为止我们与开发团队进行的讨论:
1. TRM 的6.4.8.3.6节提到的 DMA 与 SoC DMA 类似。 我们目前还没有此实现的参考代码、但如果事件 是 映射 SoC DMA 控制器的、那么您可能可以使用此方法。 但是、目前我们没有任何支持这一点的示例。
2. 另一种方法是 XFR2DMA。 此 DMA 使用 PSIL 线程通过 SoC PSI 开关/PSI 总线进行数据交换。
我们在 SDK 中没有示例、但 PRU ICSSG 以太网团队目前在其固件中使用此 DMA 来进行以太网数据包交换。
我将会获得有关该实施的更多信息并与您联系。
此致、
Nitika
你好、妮蒂卡
如果您的 PRU ICSSG 以太网团队可以解释一下创建卓越的 XFR2DMA 的过程。
谢谢你
尊敬的 Murat:
谢谢您的 Ping。 我误解了以太网团队的实施、我们使用基于 XFR2VBUS 硬件加速器的存储器复制、而不是 xfr2dma。
请查找有关 XFR2VBUS 使用的以下步骤:
您必须 将下面的 PRU 内部中断信号映射到主机0或1。 利用这一配置、您将能够轮询 R31寄存器第30/31位以获取 UART UART/Tx Rx 中断。


在 SysConfig 中、在 PRU (ICSS)> INTC Internal signals Mapping 下添加2个实例 事件信号4和5 到主机0/1。 这将添加 PRUICSS_IntcInitData 将结构更改为 ti_drivers_config.c

2.在代码中调用 PRUICSS_intcInit 以初始化中断控制器。 请参阅 此处。
3.接下来、您必须为具有以下实施方式的 PRU 内核编写固件:
-轮询 R31寄存器的第30/31位以等待中断。
-如果发生中断,则跳转至事件处理程序并清除中断状态(请参阅 此处的第187-188行)
-使用 XFR2VBUS 硬件加速器根据中断从 FIFO 读取到内存位置,反之亦然。 您可以参阅 TRM - 6.4.6.3.1.6 XFR2VBUS 编程模型和 此 E2E 中的编程指南部分。
此致、
Nitika