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.

[参考译文] AM6442:在 AM64x R5F 上启用 FreeRTOS 时、EPWM ISR 延迟/错过

Guru**** 2847400 points

Other Parts Discussed in Thread: AM6442, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1631931/am6442-epwm-isr-delayed-missed-when-enabling-freertos-on-am64x-r5f

器件型号: AM6442
主题: SysConfig 中讨论的其他器件

您好:

我正在使用 AM6442 R5F、并尝试将 基于 60Hz ePWM/eQEP‑的实验代码从裸机‑迁移到 FreeRTOS。 启用 FreeRTOS 后、我会看到延迟或有时错过了 ePWM 中断。  

我的设置如下:
- EPWM 生成 60 Hz 频闪信号
-选通在内部路由到两个 eQEP 模块
-每个 EQEP 都在频闪的上升沿上锁存其位置
-在 EPWM ISR 中,我读取锁存的 EQEP 值并调用 SemaphoreP_post()
- FreeRTOS 任务使用 SemaphoreP_Pend() 等待、并执行 60 Hz 处理

重要的一点是:
-这在裸‑金属(无 RTOS)中完美地工作。
-启用 FreeRTOS 后、EPWM 中断会延迟或偶尔跳过。
因此、无法在正确的时序处捕获 eQEP 锁存值、并且 60Hz 环路会变得不稳定。

■问题 1.
 在使用 FreeRTOS 时、实现稳定的 60Hz 周期任务的建议方法是什么?
由于 FreeRTOS 节拍 (1ms ) 具有抖动、无法准确生成 16.66ms 周期、因此我使用与裸机‑Ω 金属相同的方法:
   EPWM 60Hz 中断→信标→任务
在 R5F 上使用 FreeRTOS 时、是否仍建议使用此方法(使用 ePWM 中断作为时序主器件)?

■问题 2.
在 ISR 中调用 SemaphoreP_post() 在 AM64x R5F 上是否有效?

■问题 3
在什么情况下、FreeRTOS 可以延迟 ISR(例如,关键部分,勾选 ISR 优先级)?

■问题 4.
在这个用例中、AM64x R5F 是否有建议设置来避免 ISR 延迟?


系统详细信息:
- AM6464 R5F
- 2 ×EQEP
–60Hz ePWM 选通(内部信号路由)
- EPWM ISR→SemaphoreP_POST→FreeRTOS 任务
-在裸‑金属中 100%工作
-仅在启用 FreeRTOS 时失败

为避免 ISR 延迟而提供的任何建议或建议的中断/SysConfig 设置都将非常有用。

此问题与以下上一主题相关:

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

    与我上一个问题有关的其他信息:

    在我的裸机‑实现中、即使未使用 RTOS、我也使用信标。 EPWM ISR 发出信标、主循环等待它执行 60Hz 工作。 这种模式以稳定的时序运行、而不会错过任何 ePWM 中断。

    切换到 FreeRTOS 时、我将等待部分从主循环移到了一个任务中。
    启用 FreeRTOS 后、ePWM ISR 开始遇到延迟或错过的触发情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Miyako:

    您能告诉我这个 EPWM ISR 的优先级是什么吗?  

    此致、

    会面。

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

    尊敬的会议:

    EPWM ISR 优先级当前设置为 0(R5F 上 FreeRTOS 允许的最高优先级)。
    最初它是优先级 15、但作为调试步骤的一部分、我将其更改为 0。

    但是、即使处于优先级 0、当启用 FreeRTOS 时、ePWM ISR 仍会延迟。

    您能告诉我 在没有抖动或错过周期的情况下、在 FreeRTOS 上实施周期性 60Hz 任务的推荐方法吗?

    我想知道 AM64x R5F 的最佳实践、能够以极小的延迟、无漂移的方式实现稳定的周期性任务 (60Hz 时约为 16.66666ms)。

    此致、
    Miyako

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想了解 AM64x R5F 的最佳实践、以超小的延迟和无漂移的方式实现稳定的周期性任务 (60Hz 时约为 16.66666ms)。[/报价]

    vTaskDelayUntil () 可用于以下目的: https://www.freertos.org/Documentation/02-Kernel/04-API-references/02-Task-control/02-vTaskDelayUntil 

    但是、即使处于优先级 0、当启用 FreeRTOS 时、EPWM ISR 仍会延迟。

    将其设置为优先级 0 是正确的、但您的 ISR 是否使用任何 FreeRTOS API?  对于 R5F 的 FreeRTOS 内核、configMAX_SYSCALL_INTERRUPT_PRIORITY 设置为 4、因此如果任何优先级高于此值的 ISR 使用 FreeRTOS API、则可能会导致一些未定义的行为、如果此 ISR 使用 FreeRTOS API、则可以将优先级设置为 4。 请参阅以下内容: https://www.freertos.org/Documentation/02-Kernel/03-Supported-devices/02-Customization#configkernel_interrupt_priority-configmax_syscall_interrupt_priority-and-configmax_api_call_interrupt_priority 

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

    尊敬的会议:

    感谢您的解释。

    关于 60Hz 周期任务:
    我知道 vTaskDelayUntil () 是推荐的 FreeRTOS 方法、但由于 AM64x R5F 上的 1ms 节拍分辨率和中断延迟、似乎很难实现完全稳定的 16.666ms 周期。

    我还在优先级 0 和其他几个优先级上测试了 ePWM ISR、但只要 FreeRTOS 运行、ISR 仍会显示延迟和抖动。

    在其他 E2E 线程中、由于中断流水线行为和系统活动、EPWM 中断似乎仍会在 R5F 上经历延迟。

    我的问题是:

    1.使用 FreeRTOS 任务调度在 R5F 上实现抖动‑自由 60Hz 环路是否现实可行?
    2.还是使用 EPWM ISR 并通知任务以获得准确计时而不是依赖于任务延迟的推荐方法? (使用信标)
    3.在 R5F 上启用 FreeRTOS 时、通常预计 ePWM ISR 延迟吗?

    对于 AM64x R5F 上低‑抖动周期性控制环路的最佳实践、如有任何指导意见、都将不胜感激。

    此致、
    Miyako

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

    尊敬的 Miyako:

    [quote userid=“659154" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1631931/am6442-epwm-isr-delayed-missed-when-enabling-freertos-on-am64x-r5f/6295974 实际上是否可以使用 FreeRTOS 任务调度在 R5F 上实现抖动‑自由 60Hz 环路?

    只使用任务调度和 vTaskDelay 函数是不可能的。 这是因为 FreeRTOS 节拍的分辨率为 1ms 节拍、因此无法实现 16.66ms 的精确周期。

    [quote userid=“659154" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1631931/am6442-epwm-isr-delayed-missed-when-enabling-freertos-on-am64x-r5f/6295974 或者、是否推荐使用 ePWM ISR 并通知任务的准确计时而不是依赖于任务延迟的方法? (使用信标)

    是的、这将是获得精确的 60Hz 任务的建议方法。

    [quote userid=“659154" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1631931/am6442-epwm-isr-delayed-missed-when-enabling-freertos-on-am64x-r5f/6295974

    在 R5F 上启用 FreeRTOS 时、通常是否需要 ePWM ISR 延迟?

    [/报价]

    是的、由于中断流水线、上下文保存和其他可能的场景(如 FreeRTOS 关键部分)、预计会有一些延迟、但这应该很小、您能告诉我您当前观察到的延迟/抖动量。  

    如果您观察到较大的延迟、则可能来自 FreeRTOS 内核代码的关键部分、这些部分会屏蔽高于优先级  configMAX_SYSCALL_INTERRUPT_PRIORITY (4) 的中断。 您也无法从优先级低于 4 的 ISR 调用任何 FreeRTOS API、因此、如果 ISR 具有 0-3 优先级、则无法调用 Semaphore_POST、如果执行此操作、可能会导致内核数据损坏或任务调度程序损坏、从而导致未定义的行为。

    是的、如果您使用的 ISR 的优先级高于 4、那么您可以观察到一些延迟、如果该延迟对您来说是不可接受的、那么您可以继续使用裸机应用程序。 最好知道您目前观察到的延迟是多少(应该是几个小时)。

    此致、

    会面。