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.
您好专家、
我修改 了 GPIO_LED_BLINK 演示代码、以测量将 GPIO 从高电平设置为低电平或从低电平设置为高电平的延迟。 我的代码很简单。
1、不使用器件驱动程序直接操控寄存器。
2. 通过添加一个可无限执行切换的函数将代码放入 TCMA。
void __attribute__((section ("GPIO_toggle")) toggle_GPIO1_8 (void)
{
while (1)
{
* GPIO1_8_SET_ADDRESS = GPIO1_8_MASK;
* GPIO1_8_CLEAR_ADDRESS = GPIO1_8_MASK;
}
}
链接器命令文件
第{
GPIO_toggle:palign (8)
}> R5F_TCMA
3.将构建环境设置为释放模式,并将优化级别更改为快速。
4.编程到器件并进行测量。
附件是我的项目文件。 我使用 SDK 8.3
e2e.ti.com/.../gpio1_5F00_8_5F00_toggle_5F00_am243x_2D00_lp.zip
以下是测量结果。
根据测量结果、切换 GPIO 的延迟为184ns、但来自数据表。
最小脉冲可以是3.6ns + 8ns * 0.975 FICLK = 500MHz /4 =125MHz = 8ns。
间隙很大、我是否可以通过使用 GPIO 模块切换 GPIO 来知道这个典型值?
我们如何获得数据表结果?
此致
Andre
您好 Andre、
您能否共享同一个用例? 您还可以使用 PRU 来切换 GPIO,而不是 R5内核吗?
谢谢、此致、
Aakash
Aakash、
我们知道 PRU 可以对切换 GPIO 进行快速响应。 目的是了解从 R5F 写入 GPIO 设置/输出寄存器到信号实际变化电平的延迟。 客户需要了解限制。 我认为这不是不合理的要求。
AM2434 R5F 的运行速度@800MHz 1.25ns、GPIO FCLK 为125MHz 8ns。 CPU 向 GPIO 信号变化写入 GPIO 设置寄存器的184ns 结果是否合理?
此致
Andre
安德烈曾、您好!
切换功能不在 TCM 中。 请检查您的地图文件。 您可以尝试修复该问题并重试吗?
此致、
Aakash
阿克桑
我已仔细验证测试代码。 编译器选项会导致问题。 我将优化级别更改为"无"。 代码现在被放置到 TCMA 中。
但是、结果与原始结果几乎相同。
这不会让我感到意外。 这是一个非常简单的测试程序、它仅切换 GPIO。 指令缓存后、它们不会成为缓存之外的受扰对象。 只要高速缓存始终命中、性能就应该与将它们放入 TCMA 相同。
GPIO 延迟如此长有何理想原因? FAST 编译器选项为什么会忽略代码段分配?
此致
Andre
您好 Andre、
我想它来自 GPIO 输出。 您能否 使用 DPL 函数:CycleCounterP_getCount32来测量* GPIO1_8_SET_ADDRESS = GPIO1_8_MASK 的执行时间。
实际上、您所获得的范围捕获已得到某种程度的确认、 ** GPIO1_8_CLEAR_ADDRESS = GPIO1_8_MASK"或"* GPIO1_8_SET_ADDRESS = GPIO1_8_MASK"花费了大约184ns (从高到低或从低到高)。
我听说 PRU-ICSSG GPIO 比 SOC GPIO 具有更好的性能(更短的延迟和更高的确定性)。 如果 GPIO 性能对系统至关重要、您可能需要考虑 PRU-ICSS GPIO。
此致、
Ming
明
目的是了解从 R5F 写入 GPIO 设置/输出寄存器到信号实际变化电平的延迟。 使用 CycleCounterP_getCount32只能获取执行的循环指令。 它不能表示 GPIO 延迟。
AM2434 R5F 的运行速度@800MHz 1.25ns、GPIO FCLK 为125MHz 8ns。 CPU 向 GPIO 信号变化写入 GPIO 设置寄存器的184ns 结果是否合理?
184ns 与数据表规格相差很远。 与3.6ns + 0.975*8ns 相比,它几乎比规格高10倍。 100Mhz 的 C2K 可在最大25MHz (40ns)时切换 GPIO、请参阅以下规格。 MSP430FR 约为16MHz。 2.71Mhz 似乎与 AM2434的速度不匹配。
您能否再次确认 AM243x 上的 GPIO 延迟是否正确? 如果是、请告知 数据表中的参数是否正确? 如何测量它?
此致
Andre
您好 Andre、
我们认为额外的延迟184ns-18.6ns = 165.4ns 最类似于中断延迟、因为 GPIO_bankIsrFxn 中的"* GPIO1_8_SET_ADDRESS = GPIO1_8_MASK"可能会导致另一个 GPIO 中断。 是否可以在未启用 GPIO 中断的情况下测试 GPIO 输出?
此致、
Ming
明
该测试代码使用 while 循环来测试 GPIO 切换。 测试代码仅切换 GPIO、未启用任何中断。 请勿与其他讨论主题混用。
根据您的信息184ns 与规格18.6ns 相差很远。 我们想知道为什么? 以及如何获得此类结果。
此致
Andre
明
BTW、即 LP-AM263x 上的相同测试、GPIO 延迟仅显示~35ns。 因为我在 TRM 或数据表中找不到 GPIO 模块的 FICLK、结果看起来更合理。
我可以帮您检查为什么 AM243x 上的 GPIO 延迟如此长?
此致
Andre
安德烈曾、您好!
我们有 一个测量 GPIO 延迟的实验结果。 AM243x-EVM 上的数据大约为130ns。 我建议您更改项目中的一些 MPU 设置以查看改进。
禁用外设 MMR 的严格排序配置(默认情况下由 MCU SDK 针对4G 外设空间完成)。 这将允许 R5F 执行流水线优化。 这可以通过 MPU 配置为此选择高级配置并将 TEX 用作0和可缓冲(B) 1高速缓冲(C) 0来完成。
我们将在内部进行同步、并在下周之前回来、对数据表提供的数字进行一些更新。
谢谢、此致、
Aakash
Aakash、
感谢您的回答。 我听从您的建议 并修改了 MPU 设置。
因此、最小延迟变为6ns。 但是、GPIO 的时序不可预测。 最长时间为160ns、是它们最小时间的10倍。
我使用调试模式并将代码加载到器件中、以检查修改后的 MPU 设置与修改后的 MPU 设置之间的差异。 装配体显示它们是相同的。 您可以看到这两个文件:strongly_ordered.txt 和 mpu_optimized.txt
e2e.ti.com/.../strongly-ordered.txte2e.ti.com/.../mpu_5F00_optimized.txt
R5F 流水线会产生很大的影响。
但是、对于 I/O 区域、我认为严格排序是强制性的。 没有严格排序的访问 I/O、我们无法优化管道
我建议我们表示 GPIO 规格的测试条件、并在 数据表中提供有关管道优化影响的一些注意事项。
此致
Andre
您好 Andre、
以下是我们的软件开发团队提供的答案:
------
来自 R5F 的 GPIO 访问延迟为130ns。 您可以通过禁用外设 MMR 的严格排序配置(默认情况下由 MCU SDK 针对4G 外设空间完成)来提高写入延迟。 这将允许 R5F 执行流水线优化。
这可以通过 MPU 配置为此选择高级配置并将 TEX 用作0和可缓冲(B) 1高速缓冲(C) 0来完成。
如果存在这种低延迟要求、则可能需要结账 ICSS GPI 和 GPO 引脚、您可以在此处以4ns (@ 250MHz)和3ns (@ 333MHz)的粒度进行轮询。
------
此致、
Ming
明
是否可以提供测试条件,如编译器选项、代码段位置......... 还是测试代码达到130ns?
我们希望在这一领域重现这种情况。 谢谢。
此致
Andre
安德烈曾、您好!
我们有一个内部项目、得到130ns。 共享前需要进行一些清理、因此我们将在8月16日之前与您共享该项目
软件团队和系统架构师 评论: “AM243x 继承了 K3互连基础架构的大量延迟行李。 这就是为什么 AM263性能远超人的原因。"
我们拥有的数据证明了从 R5F 内核到 OCRAM 的访问~ 60ns 、因此 GPIO 访问的性能将更差。
在计算中、您没有考虑从 CPU (R5F 内核)到 GPIO 外设地址的时间。 我们正在讨论如何分享这些信息。
谢谢、此致、
Aakash
Aakash、
我将向您发送另一封邮件、说明客户为何关心此讨论。 如果某些信息不适合在此处发布、我们还倾向于在内部发布、并仅向 NDA 客户披露。
安德烈曾、您好!
根据我们在电子邮件中的讨论、结束此主题。
BR、
Aakash