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:较高优先级的 ePWM 中断不会抢占较低优先级的 ISR(同一 PIE 组)

Guru**** 2885260 points

Other Parts Discussed in Thread: TMS320F280039C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1642397/tms320f280039c-tms320f280039c-higher-priority-epwm-interrupt-not-preempting-lower-priority-isr-same-pie-group

器件型号: TMS320F280039C

您好、
我正在开发 TMS320F280039C。  我观察到一种与中断优先级相关的行为、我无法理解。  我使用来自同一 PIE 组(第 3 组)的两个 ePWM 中断:

  • ePWM5→10µs 周期 ISR
  • ePWM6→20µs 周期 ISR

设置:

  • ePWM5 ISR 执行时间≈1.1µs
  • ePWM6 ISR 执行时间≈11µs

预期行为:

如果在 20µs ISR (ePWM6) 正在执行时发生 10µs 中断 (ePWM5)、则应抢占 ePWM6 ISR 并立即执行。 为什么 ePWM5 即使应该具有更高的优先级也不会抢占 ePWM6 ISR?  

代码片段:

__ interrupt void epwm5_timer_isr (void)

  GpioDataRegs.GPASSET.bit.GPIO8 = 1;
  for (j=0;j<10;j++);  
  GpioDataRegs.GPACLEar.bit.GPIO8 = 1;

  //清除 EPWM5 中断标志
  EPwm5Regs.ETCLR.bit.INT = 1;

  //确认 PIE 组 3
  PieCtrlRegs.PIEACK.ALL = PIEACK_GROUP3;
}

__ interrupt void epwm6_timer_isr (void)

  GpioDataRegs.GPASSET.bit.GPIO23 = 1;
  for (l=0;l<100;l++);  
  GpioDataRegs.GPACLEar.bit.GPIO23 = 1;

  //清除 EPWM6 中断标志
  EPwm6Regs.ETCLR.bit.INT = 1;

  //确认 PIE 组 3
  PieCtrlRegs.PIEACK.ALL = PIEACK_GROUP3;
}

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

    尊敬的 Bhandavi:

    本质上、输入后 C28x 上的 ISR 将运行至完成、因为上下文保存操作会全局禁用中断。 PIE 中的优先级只决定了在多个中断挂起时中断的处理顺序。 所以、您看到的行为实际上是预期行为。

    您描述的是中断嵌套。 要启用此功能、请按照 此处链接的步骤操作。 如果您有任何问题、请告诉我。 请注意、严格按照软件步骤操作非常重要、以免将 PIE 置于意外状态。

    此致、

    Delaney

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

    尊敬的 Delaney Woodward

    感谢您的澄清—这确实有帮助。

    此致、
    Bhandavi