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.

[参考译文] CCS/TMS320F28069:具有相同组的中断嵌套(INT3.6和 INT3.7)

Guru**** 2578945 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/650077/ccs-tms320f28069-interrupt-nesting-with-the-same-group-int3-6-and-int3-7

器件型号:TMS320F28069

工具/软件:Code Composer Studio

 我在 INT3.6和 INT3.7上遇到中断嵌套问题、INT3.6是500kHz 中断 、INT3.7是50kHz 中断。 当 count =零且 count 为同步时、它们都将触发。

 当这两个中断溢出 INT3.6将错过 中断时。 我的 ISR 代码如下所示:

_interrupt void epwm6_timer_ISR (void)

EPWM6Regs.ETCLR.bit.INT = ePWM_INT_FLAG_CLEAR;

PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;

#if debug_PWM == 1
SCPwmRegs.AQSFRC.bit.OTSFA = 1;
SCPwmRegs.AQSFRC.bit.ACTSFA = 1;
#endif

_interrupt void epwm7_timer_ISR (void)

EINT;
IER&=M_INT3;

…………

EPWM7Regs.ETCLR.bit.INT = ePWM_INT_FLAG_CLEAR;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;

#if debug_PWM == 1
SLPwmRegs.AQSFRC.bit.OTSFA = 1;
SLPwmRegs.AQSFRC.bit.ACTSFA = 1;
#endif

测试图片如下:

期待您的回复。

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要将对 PIEACK 的写入移动到每个 ISR 的开始位置。 在确认 PIE 组之前、该行上的进一步中断不会发生。

    此外、如果您使用 EINT 在 ISR 内部启用内核中断、则需要在结束前再次禁用内核中断以保护上下文恢复。 最后、我认为在 IER 中重新启用 INT3的指令是错误的。

    您的3.7 ISR 将如下所示:

    _interrupt void epwm7_timer_ISR (void)

    PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
    IER |= M_INT3;
    EINT;

    …………

    EPWM7Regs.ETCLR.bit.INT = ePWM_INT_FLAG_CLEAR;

    #if debug_PWM == 1
    SLPwmRegs.AQSFRC.bit.OTSFA = 1;
    SLPwmRegs.AQSFRC.bit.ACTSFA = 1;
    #endif

    Dint;


    请尝试此操作、看看它是否起作用。

    此致、

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