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.

[参考译文] TMS320F280039C:F28003x 上的 EPWM 中断延迟 (~200ns)

Guru**** 2796425 points

Other Parts Discussed in Thread: TMS320F280039C, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1620887/tms320f280039c-epwm-interrupt-latency-on-f28003x-200ns

器件型号: TMS320F280039C
主题: C2000WARE 中讨论的其他器件

您好、

我正在使用 TMS320F280039C 器件、其 SYSCLK = 120MHz。

我将 EPWM1 中断配置为在 TBCTR = 0 时触发。
在 ISR 内、我将 GPIO 引脚设置为高电平、然后立即设置为低电平以测量时序。

系统中只启用这个单个中断。

当我在示波器上测量时、可以观察到 GPIO 在 TBCTR = 0 事件后大约 200ns 变为高电平。

我正在从闪存运行代码。

此延迟是由于中断延迟而导致的预期延迟、还是有其他原因?

谢谢你。

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

    Bhandavi、

    是的、这是预期行为、您的假设是正确的。 除了中断延迟之外、如果 GPIO 缓冲器与 SYSCLK 同步、则还存在与 GPIO 开启和关闭相关的软件写入延迟以及几个 1~2SYSCLK。

    此致、

    Sumit

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

    感谢您的解释。

    我知道中断延迟和 GPIO 同步会导致延迟。 然而,我对数字还是有点困惑。

    在测试中、中断延迟约为 75ns
    AT 120MHz 、一个 SYSCLK 周期为~μ s 8.33ns 甚至考虑在内 1–2 个 SYSCLK 周期 对于 GPIO 同步、仅会增加大约 8ns 至 16ns

    所以大致来说、总延迟应该约为 90ns 但我却在观察 200ns 添加一条滤波器。

    您能否解释一下造成额外延误的原因?

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

    Bhandavi、

    您使用什么代码进行 GPIO 开/关? 是 C2000 API 函数还是位域代码?

    除 GPIO 之外、ISR 中是否有其他相关代码?

    此致、

    Sumit

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

    Bhandavi、

    我刚刚观察到您从闪存运行代码、在这种情况下、 延迟为 200ns、即 120MHz 处的延迟约为 24 个时钟周期、与从闪存执行时的预期中断响应时间一致。 以下是整个过程的时间细分:

    1. 中断识别和流水线清空 :8-12 个周期
    2. 上下文保存 :14-16 个周期(将 CPU 寄存器保存到堆栈)
    3. 闪存访问开销 :5-10 个周期(闪存等待状态)
    4. ISR 进入和 GPIO 操作 :3-5 周期

    此致、

    Sumit

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

    您好 Sumit、

    感谢您的详细说明。

    我想知道是否有任何进一步减少这种延迟的推荐方法

    是否有有助于减少 ISR 延迟的编译器优化设置?

    如果有任何其他实现更低延迟的最佳实践、敬请告知。

    此致、
    Bhandavi

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

    Bhandavi、

    请注意、通常是任何数字控制软件代码、建议 ePWM 事件 (CMPA/B、ZERO、PRD) 启动 ADC 转换开始 (SOC)、一旦 ADC 转换完成、ADC 转换结束 EOC 触发 ISR、这样可以确保样本已准备好在 ISR 中进行处理。 我们很少在闭环数字控制中看到 ePWM 触发中断

    关于您的问题、尽管 ISR 延迟是不可避免的、但可以通过多种方法来减小此延迟、如下所示:

    1.使代码从 RAM 而不是闪存执行:闪存具有等待状态、使代码执行速度变慢。 在初始化期间将关键 ISR 代码和相关函数从闪存复制到 RAM (.TI.ramfunc)。 您可参考 C2000Ware DPSDK 中的一些参考设计代码示例、以了解语法或实现。

    2.您可以将此中断设为“HPI I E.高优先级中断。 这样、所有浮点值和指令都将在一个周期内复制。 默认情况下、C2000 中任何给定的中断均为 LPI、如果需要、您需要显式声明为 HPI。 这将进一步减少延迟。

    对于 ISR 分析、如果您使用 GPIO、可以像您所做的那样使用位域代码、或使用 HWREG 指令来减少与 API 相关的延迟。

    4.默认情况下、GPIO 与 SYSCLK 同步、您可以选择使其异步以减少延迟。

    5.经过分析后,这些延迟与您的代码相关,您可以提前触发 ISR 或 EPWM 延迟,这将帮助您抵消这些延迟。

     6.虽然并非在所有器件上都可用、但只要可用、您就可以使用 CLA 代替主 CPU 来执行时间关键型数学密集型控制任务(例如 PI 控制器)。 CLA 可以直接由 ePWM 触发、因此响应速度比 CPU 快得多。

    这实际上取决于您的应用程序上列出的解决方案。

    此致、

    Sumit

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

    好的、我会尝试、谢谢。

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

    好的、如果有任何问题、请随时联系 e2e。

    此致、

    Sumit