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.

[参考译文] TMS320F28P659DK-Q1:当 ISR 因可传输而溢出时、重新进入 ePWM ISR

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1601296/tms320f28p659dk-q1-epwm-isr-re-entry-when-isr-overruns-due-to-can-transmit

器件型号: TMS320F28P659DK-Q1

大家好、TI 专家。

我正在处理的  “single_axis_servo_drive_fcl_QEP_f28p65x"</s>“ 工程。  
PWM 频率= 20kHz、每个 ISR 的时间 = 50 μ s。

通常、当 ISR 执行时间小于 50usec(我们的间隔为 7-10us)时、工作正常。

又了解了  ISR 结束 、我明确地清除 EPWM ETFLG.INT、 ADC 中断标志、PIE ACK、也验证了 CPU IFR (IFR = 0x0000)。

现在、在该 ISR 中、我会定期传输 CAN 消息。CAN 传输所需的时间  ~ó n 420µs 、在 CAN 呼叫前后使用 GPIO 切换确认。 在发生这种情况时、 退出 ISR 后、 我预计会执行这一操作 无挂起的中断 下一个 ISR 应发生在下一个 PWM 周期边界处 (~450usec)。  然而,我观察到这一点 ISR 几乎立即重新进入(稍后~1–2µs) 而不是在预期的剩余 PWM 时间 (~20 μ s) 之后。

 

我的目标不是对错过的中断进行排队。 我只想确保在 ISR 退出后不会立即重新进入、并且该控制会在发生下一个 PWM 事件时干净地恢复。  

是否有任何支持的机制

1) 清空所有 挂起的 ePWM/CPU/CPU PIE 中断状态、和

2) 保证下一个 ISR 只发生在下一个 PWM 周期边界?

3) 在 C2000 上、在高频 ePWM ISR (20kHz) 内执行长 CAN 发送 (~420µs) 是否在架构上有效?  

谢谢、此致

Raghu

 

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

    您好、

    由于专家不在办公室、请预计响应会延迟。

    此致、
    Shaunak

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

    再次大家好、

    如果我们只清除标志、或者这些标志仅用于指示还是轮询、INT 是否会被清除?  

    是否有安全的方法来清除/刷新 INT 锁存器以使 INT 不会传播?

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

    您好、

    在退出 ISR 后、用户需要清除 ePWM 的 INT 标志、以便 ePWM 可以在发生 IT 事件时触发另一个中断。

    以下是从外设到 PIE 再到 CPU 的中断形式流程

    退出 ISR 后、 我期望看到的结果 无挂起的中断 下一个 ISR 应发生在下一个 PWM 周期边界处 (~450usec)。  然而,我观察到这一点 ISR 几乎立即重新进入(稍后~1–2µs) 而不是在预期的剩余 PWM 时间 (~20 μ s) 之后。

    前面您说过、您的 PWM 以 20usec 的间隔触发、尽管在上述声明中您提到 PWM 边界为 450usec、这在我看来并不清楚。

     如果我 正确理解您的问题陈述、您希望 在 420usec 后 CAN 传输完成后触发 PWM ISR?

    ISR 仅在配置的 PWM 事件触发发生时发生。 如果您想并知道您的 ISR 更长、那么为什么如此频繁地触发 PWM 中断呢? 能否更改 PWM 周期并延迟下一个 ISR 触发? 如果您可以对要实现的时序图进行布局、将会很有帮助。

    谢谢

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

    你好 Prarthan、

    感谢您的答复。 在我的查询中有一个小错误。 我说“ 而不是在预期的剩余 PWM 时间 (~20usec) 之后。“ 实际上是 (~30usec)。 很抱歉。 我的意思是、假设在 t=0 时、ISR 进入每 50 μ s 发生一次。 在我的 ISR 中、我一直可以传输、传输的时间~420usec。 现在、在当前 ISR 退出后、将有一个挂起的 INT 等待重新生成、但我不想这样做。 我需要的是在 420usec 之后、当 ISR 退出时、不应该有挂起的 INT、然后下一个 INT 应该 仅在 450usec 时触发。  

    如果您想并知道您的 ISR 时间长于为什么如此频繁地触发 PWM 中断? 能否更改 PWM 周期并延迟下一个 ISR 触发器?“ - 我们不想更改 PWM 频率。 我们想以这个为例进行测试。 我们实际上有其他 nFault 和跳闸区 ISR、占用的时间超过 50usec、当发生这种情况时、控制几乎没有关闭、即使在故障期间、仍会让挂起的 INT 丢失、但我的目标不是对错过的中断进行排队。 我只想确保在 ISR 退出后不会立即重新进入、并且该控制会在发生下一个 PWM 事件时干净地恢复。  

    谢谢。此致

    Raghu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只想确保 ISR 退出后不会立即重新进入、并且该控制在下一个 PWM 事件时干净地恢复。  [/报价]

    如果在退出 ISR 时触发的中断已经存在、则会触发另一个 ISR。

    如果您想控制下一个 ISR 从代码的进入、可以通过禁用和启用代码中的中断来实现。

    您还可以使用另一个 PWM 仅以另一个频率触发中断、或使用事件预分频功能、在此功能中、您实际上可以在第 15 个事件上触发中断或有效地更改频率。

    谢谢

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

    你好 Prarthan、

    我尝试在进入 ISR 时禁用 INT、并在 ISR 退出时启用、但无法正常工作。 如果我在 ISR 内禁用 INT、是否会出现任何未定义的行为?

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

    您好、

    中断触发的 PWM 事件在退出 ISR 之前是否已到达?

    如果是、则禁用 INT 将不起作用、因为已触发 PWM INT。

    在这种情况下、您可以执行的操作是仅根据需要使用事件预分频(如上所述)触发 PWM 中断、这样您就不需要修改 PIE 中断设置、这将是一种更清晰的方法。

    谢谢

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

    您好、

    要求在不更改任何配置的情况下在任何位置放置 CAN 发送、并且 PWM 和 ADC 必须平稳运行。

    无论如何,我们不能在这个时候投入时间。 我们从 ISR 获取 CAN 并在后台任务中发送它。

    感谢您的支持。