您好!
我知道可以使用 IPC 传递、但这会随机花费一些时间。
R5内核是否可以在需要时直接从硬件获得时间、就像 cortex A 内核一样?
提前感谢
安东
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.
您好!
我知道可以使用 IPC 传递、但这会随机花费一些时间。
R5内核是否可以在需要时直接从硬件获得时间、就像 cortex A 内核一样?
提前感谢
安东
您好 Anton Vainer
感谢您的提问、
[quote userid="528434" url="~/support/processors-group/processors/f/processors-forum/1230185/tmds64gpevm-i-need-to-pass-the-exact-time-ptp-from-the-cortex-a-core-to-the-cortex-r-core 是否存在办法可以让 R5内核在需要时直接从硬件获得时间,就像 cortex a core?请详细说明您所说的硬件以及您希望使用或使用的接口。
此致、
斯里尼瓦萨
您好 Anton Vainer。
感谢您的查询。
您是否有关于 所考虑用例的具体详细信息? 或者这是一个一般的"如何开始使用"问题吗?
以下链接可能会很有用
(+) AM6442:CPT -处理器论坛-处理器- TI E2E 支持论坛
(+) AM6442:用于 AM6442上的时间敏感网络(TSN)的 PHY -处理器论坛-处理器- TI E2E 支持论坛
3.2.7.3.1. CPSW3g - Processor SDK AM64X 文档
(+) SK-AM64:A53和 R 内核之间的时间同步。 -处理器论坛-处理器- TI E2E 支持论坛
此致、
斯里尼瓦萨
您好、Anton、
我不是 TI、但我们一直面临类似的 问题、请参阅此主题: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1187706/am6421-synchronizing-r5f-timer-with-a53-linux-system-time/4476732。 我没有跟进该线程、因为我们可以通过其他方法在 FPGA 外部生成所需的基于 clock_REALTIME 的 IRQ。
根据我的理解、没有现成的解决方案。
php2sys 被用来将一个 PHC 同步至 Linux 系统时钟(反之亦然)。 在 ARMv8 (如 AM6x 中的 Cortex-A53)上 、系统时钟基于架构定义的计时器。 这是 AM64x 上自由运行的时钟单调时钟、由 GTC 驱动。
该硬件计时器可由 A53内核快速读取并可用于生成计时器中断、但仅基于从0开始的单调时间、无法进行调优。 在 Linux 中、其他一切都是"软件"。 php2sys 计算交叉时间戳并将其输入到时钟算法、该算法基本上会产生一个绝对偏移和一个频率偏移、可用于将 Linux 系统时钟调整到 PHC 时钟。 Linux 获取架构计时器计数器、将该计数器乘以调整后的频率偏移、然后添加绝对偏移、从而生成"clock_REALTIF"。
遗憾的是、R5f 内核只能访问"原始"GTC 值、该值只能读取、不能用于生成中断。
PHC 本身在 CPSW CPTS 中实现。 这是一种硬件可调计数器、可用于对传入和传出网络数据包进行时间戳记。 Linux PTP 守护程序决定 CPSW CPTS 和"主"之间的绝对偏移和频率偏移、并同步 CPTS 计数器以跟随主。 该 PHC 计数器显示实际的"纳秒"、但遗憾的是、没有寄存器接口来读取该计数器。 读取 CPTS 计数器的唯一方法是写入一个寄存器、该寄存器将具有"当前"时间戳的事件推送到 CPTS、即使是 FIFO、但该事件 FIFO 由 Linux 内核驱动程序维护、因此您无法直接从 R5f 访问该数据。
一些随机想法:
不幸的是,我也没有一个解决方案为你,但如果你想投入努力,我很乐意帮助我已经知道的。
此致、
多米尼克
您好、 Dominic Rath
感谢您的详细回答。
您能否详细说明:
读取 CPTS 计数器的唯一方法是编写一个寄存器,该寄存器将具有"当前"时间戳的事件推送到 CPTS,即使是 FIFO,但该事件 FIFO 由 Linux 内核驱动程序维护,因此您无法直接从 R5f 访问该数据。
如何使用 CPSW CPTS?
我能够生成到 R5的中断吗?
什么是事件 FIFO? 是否是具有寄存器访问权限的硬件组件?
您可以将主 CPTS 与 CPSW CPTS 同步,并从 R5f 读取主 CPTS (相当多的努力,可能更干净)
听起来不错。 我如何同步这2个计数器?
涉及什么硬件以及涉及什么是我的问题。 "我想知道。"
您好、Anton、
CPSW CPTS 有什么用?
什么是事件 FIFO? 是否是具有寄存器访问权限的硬件组件? [/报价]请参阅 TRM (修订版 F)中的12.2.1.4.7章节。 就像我说的、它是一个可以根据其他一些时间主控进行调节的计数器、并且支持"时间戳"。 所有 CPTS 模块都支持 来自系统范围时间同步路由器的_push 输入。 此外、CPSW CPTS 还支持网络数据包时间戳。 这些时间戳会被推入 CPTS 的事件 FIFO 中。 它位于 CPTS 内部、并将(时间戳)事件传递给从 FIFO 读取数据的 CPU、请参阅 TRM 中的第12.2.1.6.3章。
每个 CPTS 还能够在 Genf 上生成派生的输出、 信号。 这些 Genf 信号也可以通过单独的"微移"一个"PPM"寄存器来调节、就像主计数器一样、但是我认为这种用法有可能会有一些问题。 Genf PPM/微移器基于单独的计数器、只有 Genf 输出的初始起点(通过 Genf COMP 设置)基于主计数器。 通过 PTP、您可以通过 PPM/微移寄存器同步主计数器、因为主计数器是唯一可以为其进行时间戳的功能、但之后您需要"瞬间"将相同的设置应用于 Genf PPM/微移寄存器。 Linux 驱动程序通过在禁用中断时"极其快速"尝试实现这一点(请参阅 https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/net/ethernet/ti/am65-cpts.c?h=ti-linux-6.1.y#n465)、但我相信最终 Genf 输出仍然会相对于主计数器发生漂移。 不过、我们从未验证过这一假设。
是否可以生成 R5中断?CPSW CPTS 生成所有类型的中断、并可以路由到 Linux。 如果您根据 CPTS 计数器寻找中断、该计数器可以通过 Genf COMP 功能工作。 Genf 输出的初始起始点由主计数器确定、我相信大家应该能够将它用作一个一次性计时器。 Genf 可以通过 Timesync 路由器路由到 R5f 中断。
在"拥有"CPSW CPTS 的 Linux 驱动程序与 R5f 内核的需求之间进行协调可能会产生问题。
听起来不错。 如何同步2个计数器?"在硬件中"、其工作方式是在两个 CPTS 实例之一上输出同步信号、并通过硬件 在另一个实例中输入_push。 这将使您可以获取交叉时间戳并将其输入到时钟算法、该算法会生成主 CPTS 和 CPSW CPTS 之间的绝对偏移和频率偏移:
CPTS 同步输出 USS CPTS 计数器中用于驱动输出的位之一、因此您会获得"2的幂"数纳秒、例如每33.554.432ns 一次。 您可以使用时间同步路由器将该同步信号路由到其中一个硬件 push 输入、并且每当 CPSW CPTS 同步输出变为高电平时您都会在事件 FIFO 上得到一个事件。 该事件在主 CPTS 事件 FIFO 上推送、并包含 SYNC 输出具有上升沿时的主 CPTS 计数。 现在您需要通过 IPC 向 R5f 提供"当前"CPSW CPTS 计数、但结果为几毫秒。 然后、R5f 可以计算 SYNC 输出变为高电平(即所有低位为零)并具有两个时间戳时 CPSW CPTS 上的时间。
此致、
多米尼克
[/quote]