ZHCADW7 March 2024 AM2434
图 2-3 中的宏展示了可以发送串行数据的其中一种方式。通过延迟补偿可调整不同的比特率。无延迟补偿的 single-bit 的发送时间应为 7 个 PRU 时钟周期。如果 PRU 内核在 333MHz 下运行,则周期时间为 21ns 或 47.6MHz。
图 2-3 用于数据传输的宏需要考虑的一点是,当帧数据超过 PRU 内核通用寄存器可以保存的最大长度后,从外部存储器或共享存储器内的 PRU 提取数据产生的额外延迟会直接影响通信带宽。如果在整个过程中有较高的带宽,则必须减小带宽。与流水线型 CPU 相比,PRU_ICSSG 集成了宽边 RAM (BS RAM),可通过指令 Xin 和 XOUT (10.6Gb/s) 来访问。此数据处理加速器让 PRU 可以在单个 PRU 时钟周期内从 BS RAM 读取或写入多达 32 字节的数据。这在大数据量或高通信带宽的情况下非常有用。在将数据移出到外部存储器或 PRU 内部的共享存储器之前,可以将数据暂时存放在 BS RAM 中,等待帧数据传输。PRU 固件执行图 2-4 中的步骤来写入到 BS RAM。
图 2-4 对 BS RAM 进行编程应该注意的是,自动索引启用会导致每个 PRU 或 RTU_PRU 内核对 BS RAM 进行写入或读取,进而导致 RAM 地址递增 1 位。RAM 地址的每个增量都相当于 32 个字节。无论读取或写入数据大小如何,下一个读取或写入地址始终在 32 个字节之后。在上述讨论的基础上,图 2-5 和图 2-6 展示了 PRU GPIO 根据直接模式和软件工作流程实施串行通信的系统方框图。
应用内核先初始化 PRU 内核,然后 PRU 才能正常启动,例如,PRU 初始化 GPIO 接口和工业以太网外设 (IEP),这是工业以太网功能所需的硬件工作。IEP 模块采用具有 16 个比较事件的工业以太网计时器、工业以太网同步发生器和锁存捕获、工业以太网看门狗计时器和数字 I/O 端口 (DIGIO)。在这种情况下,可以通过 IEP 触发的事件定期查询紧耦合存储器 (TCM) 中的数据。IEP 计时器触发周期设置为 10kHz (100μs),以便在任务中轮询 TCM 中的有效数据。在任务中使用 Xin 和 Xout 指令来保护上下文,以避免与寄存器发生重叠,然后使用 XFR2VBUS DMA 小工具在紧耦合存储器 (TCM) 指定的地址加载数据,这一点很重要。XFR2VBUS 是一款简单的硬件加速器,用于实现多核存储器子系统 (MSMC) 的最低读取往返延迟,以及将 PRU 所感知到的延迟与其他部分隔离开来。当应用内核将帧数据存储到 TCM 时,PRU 会使用头数据来确定是否需要执行数据传输,并在执行数据传输之前将数据预存储到 BSRAM 中,从而消除存储器访问延迟的影响。
实施串行端口的另一种方法是 GPIO 移出和移入模式。在移出模式下,在 PRU_CLK 的每个上升沿从 PRU_DATAOUT 引脚移出数据。移位速率由应用于 PRU 内核时钟的两个级联分频器的有效除数控制。为了在串行通信中实现 100Mbit 数据速率,必须将 100MHz 时钟与除以三的 250MHz 内核时钟结合使用。为避免数据加载过程对串行通信产生影响,PRU 移位数据模式提供了两个影子寄存器(GPO_SH0 和 GPO_SH1),这两个寄存器可用于支持乒乓缓冲器。影子寄存器可通过 PRUx_R30[29:30] 单独编程,当设置 PRUx_R30[29:30] 时,将 PRUxR30[0:15]/[15:0] 中的数据加载到 GPO_SH0 和 GPO_SH1 中。PRU 移出模式可以设置为自由运行模式和固定时钟计数模式。对于自由运行时钟模式,移位操作将继续,直到清除 PRUx_ENABLE_SHIFT(PRUxR30[31])。清除 PRUx_ENABLE_SHIFT 后,移位操作将完成移出当前影子寄存器,停止,然后复位。对于固定时钟计数模式,要移出的数据位数由配置寄存器定义。图 2-7 展示了移出模式的系统架构。
图 2-7 PRU R30 (GPO) 移出模式方框图在 28 位移入模式下,对通用输入引脚 PRU_DATAIN 进行采样,并在内部时钟脉冲作用下移入 28 位移位寄存器。该寄存器填充最低有效位 (LSB) 顺序(从位 0 到位 27),然后溢出到一个位桶中。在移入检测到开始位 (1/0) 后,28 位寄存器映射到 PRU_R31[0:27],每 16 个移位时钟设置一次 Cnt_16,映射到 R31 寄存器的串行数据可以复制到其他系统寄存器。与移出模式类似,选择具有 250MHz 内核时钟的 100MHz 采样时钟。图 2-8 展示了 PRU GPI 移入模式的方框图。在此应用中,传输在自由运行模式下运行。图 2-9 展示了编程工作流程。
需要注意的是,SH0 和 SH1 的深度为 16 位,分频因子为 3 时,数据加载和处理时间必须小于 48 个 PRU 周期。在移入模式中,数据输入节点不知道此通信的总字节长度,因此可以在起始帧中包括总数据长度来定义移入模式的周期数。
有关更多用于串行通信的 PRU,请参阅使用 8b-10b 线路编码和可编程实时单元的驱动器内通信 和适用于多轴伺服控制的 FSI 带宽优化