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.

[参考译文] J784S4XEVM:SDK 示例计时器并非始终如预期那样

Guru**** 2379510 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1464387/j784s4xevm-sdk-example-timer-is-not-constantly-as-expected

器件型号:J784S4XEVM

工具/软件:

我将下面的任务切换示例加载到 Lauterbach 调试器、并检查 Timer1中断

ti/binary/freertos_test_task_switch/bin/j784s4_evm/freertos_test_task_switch_mcu1_0_release.xer5f

我在中断 ISR 上放置一个断点、中断 ISR 应在计时器编程的时间执行、此时间应该是常量。 但它的周期每次都有很大的不同。 这是怎么发生的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    这种可能性很小、系统中是否还有其他正在运行的内容、导致 ISR 持续时间过长? 这可能是 ISR 不一致的一个原因。  

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    没有其他设备正在运行、我只需将 SDK 示例加载到 EVM 板上。

    计时器非常短、最低为384us。 任务切换示例中的计时器应该是什么? 如果它被阻止、则需要更长的时间、而不是更短的时间。

    使用的时钟默认为  HFOSC0_CLK。 该时钟的频率是多少?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    但在您放置断点后、它 不会保持不变。 对吧?  根据为该断点提供服务的时间、将其移至运行状态、计时器可能存在差异。 如果第一个中断被延迟、那么下一个中断可能会被短接、对吧?

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    CFG_TIOCP_CFG 寄存器中的 EMUFREE 位设置为0

    根据 SPRU52、计时器在调试模式下被冻结、因此不应影响中断周期

    这是程序中唯一的 ISR。 它是 TI SDK 示例程序。 您应该知道代码。  即使我在 C 处理程序中放置断点、结果也是相同的。 您是否可以挂钩调试器并运行相同的样本并进行检查?  看看是否具有相同的行为。

    您还能否回答我在上一个回复中的问题: HFOSC0_CLK。 该时钟的频率是多少?

    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    该  HFOSC0_CLK 通常来自输入 OSC0时钟、因此它应该与 SoC 的输入晶体相同。   

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    很抱歉耽误你的时间。 您没有其他任务或应用程序正常运行? 您是否在其他内核上测试过此示例并复制了此问题?

    谢谢、

    Neehar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是一个全面的 TI SDK 示例。 代码来自 TI SDK、我按照 SDK 指令构建了应用、并使用 TI 提供的脚本加载应用、电路板为 J784S4_EVM。 从我这边看什么都没有。 该应用专为 mcu1_0构建。 我认为它不能在其他内核上执行。   

    我有自己的程序运行方式相同、这就是我使用纯 TI 应用程序验证它的原因。

    你能运行相同的应用程序,并检查在你身边吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    可能有任何与时钟配置相关的内容?

    TI SDK 示例使用 MCU_Timer1、时钟为 HF0_SC0_CLKOUT

    MCU_Timer1配置如下:

    TLDR 值为0xFFFFB500、周期看起来像:(0xffffF-0xB500)/32K = 586ms

    我们如何确保时钟配置正确?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    该应用程序是为 mcu1_0构建的。 我认为它不能在其他内核上执行。   [/报价]

    您也可以为其他内核构建该应用。 通过在构建目录中运行"make -s freertos_test_task_switch_info"、可以查看可在其上运行应用程序的内核

    我们如何确保时钟配置正确?

     在调用 Board_init ()之前、确保将 Board_init_module_clock 添加到 boardCfg 中、以确保正确初始化 MCU 和主时钟。

    您可以运行相同的应用程序并检查您的侧边吗?

    我运行了应用程序、并且在 ISR 中看到了 由 HwiP_post()触发的硬件中断与信标等待的相同周期。

    Unknown 说:
    我在中断 ISR 中放置一个断点、中断 ISR 应在计时器编程的时间执行、该时间应该是常数。 但它的周期每次都有很大的不同。 这种情况怎么会发生?

    您能详细说明一下调试的运行时间吗?  它在 ISR 结束、但您从哪里开始?

    谢谢、

    Neehar

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的断点是 HwiP_IRQ_HANDLER_c (),计时器 ISR ,它应该在配置的同一周期内执行。

    您的测量期是多久?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    FreeRTOS 有3个版本的 cortex R5 port.c、在 TI SDK 示例中、使用哪个版本的 port.c?  

    我注意到 SDK 下有2个不同的版本、我想确认应该使用哪个版本
    ./pdk_j784s4/packages/ti/kernel/freertos-LTS/freertos-Kernel/portable/GCC/arm_Cs Rx_No_ gic/port.c
    ./pdk_j784s4/packages/ti/kernel/freertos/freertos-LTS/freertos-Kernel/portable/GCC/arm_CR5/port.c

    谢谢、

    Jim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此问题有任何进展?  在您上次评论后、您能回答我的所有问题(我在下面再次列出这些问题)吗?

    在示例中:

    1:MCU_Timer1的中断周期是多少?

    2:什么是 MCU_TIMER0的默认时钟,即使它没有被使用?  是!GHHz/4吗?

    3:示例中使用的 FreeRTOS 版本是什么?

    4:SVC 异常处理程序应大约为0x0 (由 SCTLR 配置)、如何在示例中将其设置为0x8005xxxx?

    5:最新的 FreeRTOS LTS 版本202406-LTS 是否支持 J784S4 r5f?   如果是、哪个版本的 FreeRTOS 适合此处理器? 在 FreeRTOS 版本 202406-LTS 中、有3个版本可用:

    drwxr-xr-x 1 zhangz1 1049089 0 Feb 7 16:26 arm_CR5/
    drwxr-xr-x 1 zhangz1 1049089 0 Feb 3 10:17 arm_CRx_mpu/
    drwxr-xr-x 1 zhangz1 1049089 0 Feb 3 10:17 arm_Cs Rx_No_ GIC/

    如果您认为我需要在单独的主题中提出一些问题、请告诉我、我将在新主题中提出

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    您的测量间隔是多久?  [/报价]

    我将需要进行测试以获得确切的周期、但是、我的初始测试大约是2微秒。

    我将更深入地了解、并在明天回答您剩余的问题。

    谢谢、

    Neehar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    周期不应该按如下方式计算?

    (0xFFFFFFFF - TLDR 值)/HF0_SC0_CLKOUT

    TLDR 值为0xFFFFB500、周期看起来像:(0xFFFFFFFFF-0xFFFFB500)/(32K)= 586ms

    另外、请告知我寄存器值的正确计算方法

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    [引述 userid="346969" url="~/support/processors-group/processors/f/processors-forum/1464387/j784s4xevm-sdk-example-timer-is-not-constantly-as-expected/5647922 #5647922"]

    FreeRTOS 有3个版本的 cortex R5 port.c、在 TI SDK 示例中、使用哪个版本的 port.c?  

    我注意到 SDK 下有2个不同的版本、我想确认应该使用哪个版本
    ./pdk_j784s4/packages/ti/kernel/freertos-LTS/freertos-Kernel/portable/GCC/arm_Cs Rx_No_ gic/port.c
    ./pdk_j784s4/packages/ti/kernel/freertos/freertos-LTS/freertos-Kernel/portable/GCC/arm_CR5/port.c

    [/报价]

    您可以在以下位置找到该文件:  /packages/ti/kernel/freertos/portable/TI_CGT/r5f/port_r5f.c

    2: MCU_TIMER0的默认时钟是什么、即使它没有被使用?  它是!GHHz/4吗?

    除非   以其他方式操作 MCU_TIMERn_CLKSEL_clk_sel[2:0]、否则所有 MCU_Timern 实例默认都具有 HFOSC0_CLK。

    3:示例中使用的 FreeRTOS 版本是什么?

    您使用的是什么 SDK? SDK 9.2及更高版本使用 FreeRTOS 内核10.5.1。

    4:SVC 异常处理程序应大约为0x0 (根据 SCTLR 的配置)、如何在示例中将其设置为0x8005xxxx?

    让我深入了解一下"注册"、然后返回给您。

    5:最新的 FreeRTOS LTS 版本202406-LTS 是否支持 J784S4 r5f?   如果是、哪个版本的 FreeRTOS 适合此处理器? 在 FreeRTOS 版本 202406-LTS 中、有3个版本可用:

    我们已经测试并支持 FreeRTOS LTS 版本 202210-LTS。 尚未在202406-LTS 上进行验证。

    [引述 userid="346969" url="~/support/processors-group/processors/f/processors-forum/1464387/j784s4xevm-sdk-example-timer-is-not-constantly-as-expected/5652126 #5652126"]

    (0xFFFFFFFF - TLDR 值)/HF0_SC0_CLKOUT

    TLDR 值为0xFFFFB500、周期看起来像:(0xFFFFFFFFF-0xFFFFB500)/(32K)= 586ms

    另外、请告知我寄存器值的正确计算方法

    [/报价]

    是的、鉴于 TIMER_TCLR[5] PRE 位设置为0、这是正确的。 我只是测试调用 Ping ISR 或 Pong ISR 的频率。

    谢谢、

    Neehar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    MCU_TIMER1~10默认为 HFOSC0_CLK、但 MCU_TIMER0默认为 MCU_SYSCLK/4、但您可以检查 debugger 的时钟配置。

    如果我的计算结果正确、周期为586ms;我认为您的测试结果与我的计算结果不同。 请解释一下  

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在使用以下脚本加载并运行应用、但没有发生任务切换。 我将断点放在 ping_main/pong_main (),断点从不是 hite2e.ti.com/.../cmm_2D00_tda4vh_5F00_j784s4.zip

    我运行的脚本为: d:\cmm-tda4vh_j784s4.zip\cmm-tda4vh_j784s4\x_gel_to_cmm\pdk_rtos_test\cat_launch_freertos_r5.cmm

    elf 文件位于 D:\cmm-tda4vh_j784s4\freertos_test_task_switch_mcu1_0_release.xer5f 下

    我想确保我构建的应用程序正确无误、并且我启动应用程序和运行该应用程序的方式正确无误

    另外、请提供从您这边构建的 elf、我想在我的设备上运行它以进行比较。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jim、

    MCU_TIMER1~10默认 为 HFOSC0_CLK、但 MCU_TIMER0默认为 MCU_SYSCLK/4、您可以从 debugger 检查时钟配置。

    如果  操作 MCU_TIMERn_CLKSEL_clk_sel[2:0]并设置为1、则 MCU_TIMER0将设置为 MCU_SYSCLK/4。 否则、默认值仍为000或 HFOSC0_CLK。

    抱歉、我不熟悉您提供的 zip 文件。 如何启动 EVM?

    此外、您能否介绍如何构建示例? 您是否使用基于 PDK 的构建系统?

    您使用的是哪个 SDK 版本? 我可以提供二进制文件以查看是否存在任何差异。  

    谢谢、

    Neehar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Neehar:

    是的、请提供您构建的二进制文件;我使用的是 SDK 10.01

    编译步骤:

    cd ~/SDK-RTOS-j784s4/pdk_j784s4/packages/ti/build$

    make -s All BOARD=j784s4_evm SOC=j784s4 build_profile=release core=mcu1_0 build_os_type=freeRTOS

    我需要知道的最重要信息是您如何根据寄存器值计算周期;我发送了一封电子邮件给 TI 坐标、并复制了下面的电子邮件

    我想得到您对第3步和第4步的回答。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    摘要: 我正在等待以下信息:

    1:请提供您的二进制文件供我检查

    2:MCU 计时器寄存器中的计时器周期计算方法(步骤3)以及计算结果

    3:验证计时器在计算周期中断的方式

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    我附上了以下二进制文件:

    e2e.ti.com/.../freertos_5F00_test_5F00_task_5F00_switch_5F00_mcu1_5F00_0_5F00_release.appimage

    e2e.ti.com/.../freertos_5F00_test_5F00_task_5F00_switch_5F00_mcu1_5F00_0_5F00_release.xer5f

    e2e.ti.com/.../freertos_5F00_test_5F00_task_5F00_switch_5F00_mcu1_5F00_0_5F00_release_5F00_strip.xer5f

    本周、我将再次向您介绍所测量的计时器周期。

    您能否确认如何运行二进制文件并引导电路板?

    谢谢、

    Neehar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    给电路板上电、然后在 上次运行应用时运行脚本 D:\cmm-tda4vh_j784s4.zip\cmm-tda4vh_j784s4\x_gel_to_cmm\pdk_rtos_test\cat_launch_freertos_r5.cmm

    我检查了你的二进制,结果是一样的。 只有一个 IRQ MCU_Timer1。 已在每次仅触发此 IRQ 时验证、但两次 ISR 执行之间的时间不同。 可能我测量计时器的方法不正确?  当我在调试器中停止程序时、计时器计数器未冻结、它仍然会增加、这可能会影响测量。

    我启用/禁用 EMUFree 位、它不影响计数器。 当调试器停止程序时、是否有办法冻结计时器计数器?

    谢谢、  

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    当我在调试器中停止程序时、计时器计数器不会冻结、它仍然会增加、这可能会影响测量。

    这可能是您看到任意值的原因。  您是否在 评测 Ping ISR 和 Pong ISR 之间的时间差? 还是测试两次调用 ping ISR 之间的时间差?

    您可以使用计时器控制寄存器 TIMER_TCLR[0]手动启动/停止计时器。 将 Timer_TCLR[0]设置为0将冻结计数器、直到再次设置为1。

    谢谢、

    Neehar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我知道如何启动和停止计时器;我想知道为什么 EMUFREE 位不起作用。 计数器应在调试模式下停止

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    抱歉耽误了时间、我与一位更熟悉 Lauterbach 调试和仿真的同事交谈、他能够 获取有关 EMUFREE 位的更多信息。

    此功能确实有效、但使用它还需要执行几个步骤。 有关摘要和一些示例、请参阅以下文本文件。 您需要将其添加到 CMM 脚本文件中或在运行时运行它。 您还必须根据给定映射下的 CPU 和外设进行细微更改。

    e2e.ti.com/.../cpu_2D00_suspend_2D00_mapping.txt

    如果这 对我有帮助、或者您有任何后续问题、请随时告知我。

    此外、此练习是否是学习计时器并了解其工作原理的一种方法? 或者、这是嵌入式应用中的计时器问题吗?

    谢谢、

    Neehar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是非常好的信息。 我将添加 Data.Set EAPB:0x9D3001A8 %LE %LONG (0x10000|17) 至  _J784S4_r5.cmm 并启用 EMUFREE 位、然后进行检查。

    这在我的应用程序中是个问题;但当我运行这个 TI SDK 示例应用程序时、遇到了类似的问题。 因此、我使用此应用程序获得支持并解决我的应用程序问题  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、您能否重新打开此问题?  我们取得了很大进展、但仍然有更多关于此测试应用程序的问题。 我在 HwiP_IRQ_HANDLER_c 和 HwiP_IRQ_HANDLER 处放置断点、并执行程序。 我发现在一个中断周期中、 HwiP_IRQ_HANDLER_c 会执行两次、但 HwiP_IRQ_HANDLER 会执行一次。 为什么 会执行 HwiP_IRQ_HANDLER_c 两次? 它应该与 HwiP_IRQ_HANDLER 执行时间相匹配

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您提供的测试二进制文件不存在上述问题。  您使用哪个版本的 SDK 来构建二进制文件? 我使用 Processor SDK RTOS J784S4 10_01_00构建该应用。   

    该应用程序应该测试任务切换、但在我的测试中、执行不会在任务之间切换。 虽然任务列表显示 freertos_main 正在运行、但我在 ping_main ()和 pong_main 处放置了断点、但我没有发现已达到这些断点

    从我的计算来看、周期也应该是

    (0xFFFFFFFF - TLDR 值)/HF0_SC0_CLKOUT

    TLDR 值为0xFFFFB500、周期看起来像:(0xFFFFFFFFF-0xFFFFB500)/(32K)= 586ms

    从你的二进制测试,周期约为1.5ms,为什么周期与我的计算不同?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    我还为 J784S4 SDK 10.1构建了二进制文件、这是我一直在测试的 SDK 以及我构建的 SDK 并为您提供了二进制文件。

    我的 TLDR 值也为0xFFFFB500、 HF0_SC0_CLKOUT 也将为19.2 MHz、但这可能会 根据 您电路板上的晶体而变化。 请查看 TRM 中的以下时钟信息。

    预期周期应为(0xFFFFFFFF - TLDR + 1)/ 19.2 MHz = 19200 /  19200000 = 0.001s = 1ms。   您能否确认  MCU_TIMERn_CLKSEL_clk_sel[2:0]的值?

    谢谢、

    Neehar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jim、

    接下来、该问题是否仍然存在?

    谢谢、

    Neehar