TI中文支持网
TI专业的中文技术问题搜集分享网站

[FAQ] AM6421: 时间同步路由器有什么用?如何使用它?

Part Number:AM6421

就像任何其他处理器一样,AM64x 具有中断路由器。但它还有一个称为时间同步路由器 (TSR) 的中断路由器,旨在将输入中断路由到多个输出中断。TSR 有什么用?它的相关文档目前不是很清晰,那如何使用它呢?

Annie Liu:

时间同步路由器 (TSR):概述

根据设计,TSR 可向多个接收者发送一个同步信号。此同步信号允许处理器内的多个外设或内核将其计数器同步到单个“主时钟”。如果处理器外部的某个器件也需要接收同步信号,则甚至可以将 TSR 信号路由到处理器引脚。

此处有 2 个重要的延迟:

信号从信号源(例如 in1)传输到 TSR 输入端的延迟。我们称之为输入延迟
信号从 TSR 输入端传输到 TSR 输出端再到目标输入端(例如 out1、out2)的延迟。我们称之为路由器 + 输出延迟

AM64x 的输入延迟将小于 9ns。

我们在测试路由器 + 输出延迟时,将其分为两种情况:

情况 1:测试 AM64x 处理器内部的所有 TSR 输出(例如,PRU 和 CPTS 位于 AM64x 处理器内部)

情况 2:测试所有可能的 TSR 输出,包括 SYNC_OUT 处理器引脚

在情况 1 中,路由器 + 输出延迟大于 0ns 但小于 4ns。因此,单个输入到达处理器内部两个不同输出端的时间差将始终小于 4ns。

在情况 2 中,路由器 + 输出延迟大于 0ns 但小于 14ns。因此,当其中一个输出端为处理器引脚时,单个输入到达两个不同输出端的时间差将始终小于 14ns。

那么,这意味着什么呢?假设我们将 GTC 推送事件发送到 CPTS、PRU 和 SYNC_OUT 引脚。GTC 推送事件需要 0 到 13ns 内的时间到达 CPTS,需要 0 到 13ns 内的时间到达 PRU,需要 0 到 23ns 内的时间才能出现在 SYNC_OUT 引脚上。由于这是单个输入信号,因此所有这些目标的输入延迟是相同的。所以,如果我们只是想了解到达时间的差异,我们可以忽略输入延迟。推送事件将在先后间隔 4ns 内到达 CPTS 和 PRU 内核,在到达 CPTS 和 PRU 内核后的 14ns 内到达 SYNC_OUT 引脚。

还会有额外的延迟。例如,一旦信号到达 SYNC_OUT 引脚,信号将需要额外的时间沿电路板布线传输,并进入用户想要同步的任何外部器件。如果同步信号路由到 A53、R5F 或 M4F 内核,则该信号必须首先通过中断聚合器,如下面的“TSR 硬件文档”部分所述。如果同步信号会中断某个运行更高级别操作系统的内核,则该内核需要额外的时间来切换上下文并解决中断问题。关于向处理器内核发送同步信号的注意事项:如果需要高精度/低延迟,我通常会建议使用 RTOS 或 NORTOS(即裸机)内核,而不是 Linux 内核。

TSR 软件:仍在开发中

目前,我们仍在整理时间同步路由器代码。我上次检查时发现,Linux 和 RTOS 软件都会错误地阻止用户根据线程为单个输入设置多个输出https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1011433/processor-sdk-am64x-routing-timesync-event-to-multiple-outputs-not-supported-on-am64x-sciclient-and-sysfw。因此,目前用户需要执行直接的寄存器写入来配置时间同步路由器。请参阅下面的“TSR 硬件文档”部分。

TSR 硬件文档:仍在编制中

目前,我们仍在整理技术参考手册 (TRM) 中的时间同步路由器文档。

TSR 寄存器

从 TRM 存储器映射中,我们知道

TIMESYNC_EVENT_INTROUTER0_CFG 的起始地址是 0x000A40000

偏移量

 缩写

 寄存器名称

TIMESYNC_EVENT_INTROUTER0_CFG

物理地址

0h

TIMESYNC_EVENT_INTROUTER0_PID

 外设标识寄存器

 00A4 0000h

4h + 公式

TIMESYNC_EVENT_INTROUTER0_INTR_MUXCNTL_n

 中断多路复用器控制寄存器

 00A4 0004h + 公式

寄存器定义当前未包含在 TRM 中。但是,我在查看设计文件时发现,TSR 寄存器的格式类似于 MAIN_GPIOMUX_INTROUTER0_CFG 寄存器。因此,TSR 寄存器如下所示:

MUXCNTL 寄存器定义如下所示:

中断多路复用器控制寄存器。偏移量 = 4h + (n * 4h);其中 n = 0h 至 28h。(即总共有 41 个 TSR 输出)

GPIOMUX_INTRTR0_MUXCNTL_n 寄存器字段说明

 字段

 类型

 复位

 说明

31-17

 RESERVED

 R

 0h

 保留

16

 INT_ENABLE

 读/写

 0h

 启用中断输出 N。0h = 禁用。1h = 启用

15-6

 RESERVED

 R

 0h

 保留

5-0

 ENABLE

 读/写

 0h

 中断输出 N 的多路复用器控制。根据 TIMESYNC_INTRTR0

中断映射对该字段进行编程。

注意:当输入中断为有效状态时,请避免对该寄存器进行

编程。这可能会导致虚假的异步输出切换,

从而导致不可预知的行为。

 

TSR 输入

从 AM64x TRM 版本 C 开始,“Time Sync > Time Sync and Compare Events”仍然为空。您可以在“Interrupts > Time Sync and Compare Interrupt Events >

TIMESYNC_INTRTR0 Interrupt Map”部分中找到 TSR 的输入列表。

TSR 输出

从 AM64x TRM 版本 C 开始,还没有这方面的详细文档。如果您使用不同的输出源,通常会在信号列表或图表中找到记载的 TSR 输出。但是,目前还没有包含所有输出的单个整合列表。下面是我从设计文件中整理出来的粗略列表:

timesync_event_introuter_out_0

l2g_event_pend.8

timesync_event_introuter_out_1

l2g_event_pend.9

timesync_event_introuter_out_2

l2g_event_pend.10

timesync_event_introuter_out_3

l2g_event_pend.11

timesync_event_introuter_out_4

l2g_event_pend.12

timesync_event_introuter_out_5

l2g_event_pend.13

timesync_event_introuter_out_6

l2g_event_pend.14

timesync_event_introuter_out_7

l2g_event_pend.15

timesync_event_introuter_out_8

icssg_0.pr1_edc0_latch0_in

timesync_event_introuter_out_9

icssg_0.pr1_edc0_latch1_in

timesync_event_introuter_out_10

icssg_0.pr1_edc1_latch0_in

timesync_event_introuter_out_11

icssg_0.pr1_edc1_latch1_in

timesync_event_introuter_out_12

icssg_1.pr1_edc0_latch0_in

timesync_event_introuter_out_13

icssg_1.pr1_edc0_latch1_in

timesync_event_introuter_out_14

icssg_1.pr1_edc1_latch0_in

timesync_event_introuter_out_15

icssg_1.pr1_edc1_latch1_in

timesync_event_introuter_out_16

main_cpts.cpts_hw1_push

timesync_event_introuter_out_17

main_cpts.cpts_hw2_push

timesync_event_introuter_out_18

main_cpts.cpts_hw3_push

timesync_event_introuter_out_19

main_cpts.cpts_hw4_push

timesync_event_introuter_out_20

main_cpts.cpts_hw5_push

timesync_event_introuter_out_21

main_cpts.cpts_hw6_push

timesync_event_introuter_out_22

main_cpts.cpts_hw7_push

timesync_event_introuter_out_23

main_cpts.cpts_hw8_push

timesync_event_introuter_out_24

SYNC0_OUT 引脚

timesync_event_introuter_out_25

SYNC1_OUT 引脚

timesync_event_introuter_out_26

SYNC2_OUT 引脚

timesync_event_introuter_out_27

SYNC3_OUT 引脚

timesync_event_introuter_out_28

 

timesync_event_introuter_out_29

pcie.pcie_cpts_hw2_push

timesync_event_introuter_out_30

cpsw.cpts_hw1_push

timesync_event_introuter_out_31

cpsw.cpts_hw2_push

timesync_event_introuter_out_32

cpsw.cpts_hw3_push

timesync_event_introuter_out_33

cpsw.cpts_hw4_push

timesync_event_introuter_out_34

cpsw.cpts_hw5_push

timesync_event_introuter_out_35

cpsw.cpts_hw6_push

timesync_event_introuter_out_36

cpsw.cpts_hw7_push

timesync_event_introuter_out_37

cpsw.cpts_hw8_push

timesync_event_introuter_out_38

epwm0_sync.input2

timesync_event_introuter_out_39

epwm3_sync.input2

timesync_event_introuter_out_40

epwm6_sync.input2

 

这些事件中的大多数直接发送到目标,如 ICSSG、位于主域或 CPSW 中的 CPTS、PCIE、EPWM 或处理器 SYNCn_OUT 引脚。但是,任何发送到 A53(通过 GIC)、R5F 内核或 M4 内核的 TSR 事件都会首先经过 L2G,然后经过事件传输通道 (ETL),然后最终到达中断聚合器 (IA)。然后,中断聚合器可以中断任何这些内核。

目前,我还没有对 TSR 通过中断聚合器向 GIC/R5F/M4 发送中断进行过多研究。我在上面提供的延迟是从 TSR 的输入到 L2G 逻辑的输入测得的。因此,信号通过中断聚合器并到达这些内核所需的额外时间(纳秒)未知。任何想要深度了解上述 TSR 输出的用户,都可以先参考 TRM 中的“DMSS L2G 中断输入”、“DMSS 中断请求”和“数据移动子系统 (DMSS)”部分。

 

 

,

Annie Liu:

问题 2:

TSR 允许将单个输入中断信号路由到多个输出端。但是,我能否使用 TSR 将多个输入中断路由到单个输出端?

 

答 2:

不可以。

时间同步路由器旨在实现一对多映射。但是,每个输出只能对应一个输入。这出于寄存器控制方案的限制。每个输出都有一个寄存器。映射到该输出的输入数量会编程为十六进制值。由于只有一个十六进制字段,因此每个输出只能有一个输入。更多详细信息,请参阅上面的“TSR 寄存器”部分。

 

赞(0)
未经允许不得转载:TI中文支持网 » [FAQ] AM6421: 时间同步路由器有什么用?如何使用它?
分享到: 更多 (0)