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.

[参考译文] TMS320F280049:TMS320F280049的中断嵌套配置

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1442809/tms320f280049-interrupt-nesting-configuration-of-tms320f280049

器件型号:TMS320F280049

工具与软件:

您好、专家
 
     我 对 C2000中断嵌套有疑问。   我的应用中有3个 ISR:EPWM_ISR、TIMER0_ISR 和 SCI_RXB_ISR。 EPWM_ISR 是用于生成 PWM 波的主要函数、其频率为50kHz。 TIMER0_ISR 主要用于后台任务、其中断频率为5kHz、SCI_RXB_ISR 用于与 GUI 进行通信。 我已经阅读了 C28x_INTERRUPT 嵌套和 TMS320f280049系统中断的 TRM 白皮书。
我发现 SCI_RXB_ISR 受到 TIMER0中断和 EPWM1中断的干扰。 因此、我在 TIMER0中断和 EPWM1中断中添加了中断。 代码如下。
SCI_ISR:
SCI_Code
TIMER0_ISR
EPWM1_ISR 代码:
我的问题是:
1. 在中断嵌套中、 不同的 PIE 组是否不需要控制 PIE 寄存器;只需要修改 IER 寄存器。 即使 IER 可能不需要在不同的 PIE 组中。 如果我不想屏蔽其他两个中断、只有 EINT 可以启用中断嵌套。 例如、在  TIMER0_ISR 中:
uint16 TempIER;
TempIER = IER;
//IER |= M_INT9;//;//通过调整 IER 设置全局优先级
IER &= M_INT9;
PieCtrlRegs.PIEACK.all = 0xFFFF;// Enable PIE interrupts
asm (" NOP");//等待一个周期
EINT;
我是否可以删除 IER 代码和 PIE 代码、并且只保留 EINT、、这将导致 SCI_ISR 和 EPWM_ISR 中断嵌套在 TIME0_ISR 中。 使用 IER 可以根据需要屏蔽和启用中断。  
2. 当 CPU 响应中断时、不会清除不同组的 IER 寄存器。 因此、对于涉及不同组的中断嵌套、无需在嵌套的中断服务例程中启用 IER 寄存器。 但是、对于同一组内的中断嵌套、IER 寄存器必须启用。 我能理解这种情况吗?
3.对于3个中断嵌套、例如、 EPWM1_ISR 由 TIME0_ISR 嵌套、 TIME0_ISR 由 SCI_ISR 嵌套。  是否需要启用  SCI_ISR 的 IER 位。 我想、由于 TIME0_ISR 被 SCI_ISR 嵌套 、当 EPWM1_ISR 被 TIME0_ISR、中断并且 TIME0_ISR 正在执行时、 SCI_ISR 即将发生、它将中断 TIME0_ISR 。 当 SCI_ISR 完成时、 TIME0_ISR  继续执行、然后进入 EPWM1_ISR。 是这样的。
4. 禁用 PIEIERx 寄存器的中断。 我们必须 遵循以下程序:

需要在 ISR 末尾添加 DINT。
为什么  违反上述规则、则可以触发虚假 INTx.1中断。 您可以详细说明一下还是举个例子? 我还有一些关于这些的问题、不了解详细信息。  非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Yun:

    我们有一个中断软件优先级示例、演示了通过 CPU 计时器中断实现的软件中断优先级。 中断的软件优先级是通过启用中断嵌套来实现的。

    请查看这些主题帖:

     (+) TMS320F28379D:中断嵌套- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    (+) TMS320F280039C:中断嵌套- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    让我回顾一下您上面提到的情况、我们再回来看看。
    谢谢
    Aswin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Aswin:

    有反馈吗? 谢谢!

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

    尊敬的 Yun:

    很抱歉耽误你的时间。 您尝试使用的中断位于 ePIE 表中的以下位置:

    EPWM1 - INT3.1

    TIMER0-INT1.7

    SCIB_RX - INT9.3

    根据 ePIE 中的顺序、以下是硬件的优先级:

    1. TIMER0-INT1.7
    2. EPWM1 - INT3.1
    3. SCIB_RX - INT9.3

    如果您可以处理上述优先级顺序、但是只想允许较高优先级中断在较低优先级中断内嵌套、您只需在低优先级 ISR 内添加一个 EINT 即可。 例如:

    • 在 SCIB_RX ISR 内部添加 EINT 以允许 EPWM1和 TIMER0中断使其中断
    • 在 EPWM1 ISR 内部添加 EINT、以允许 TIMER0中断对其进行中断

    如果要将这些优先级的顺序更改为与 ePIE 中定义的顺序不同、这时需要更改 IER 寄存器并使用屏蔽定义。

    由于您只想嵌套所有来自不同组的中断、因此无需访问 PIEIER 寄存器。 如果要更改组内的优先级、只需要使用 PIEIER 寄存器。 例如、如果您正在使用 TIMER0中断和 XINT1中断、并希望 TIMER0拥有更高的优先级。  

    请告诉我您要使用的优先级顺序、如果需要、我可以帮助您进行特定的代码实现。

    此致、

    Delaney

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

    尊敬的  Delaney:

    感谢您的耐心等待并予以答复。

    1.你的答案解决了我的问题1和  3、解决问题请详细解释第四个问题? 我不太明白。 我希望 SCIB_RX ISR 为最高优先级、  最后是 TIMER0_ISR 和 EPWM1。 因为当 EPWM 周期非常小时、SCI 通信可能会受到 EPWM 中断的干扰。

    2.对于检测问题、当 CPU 响应中断时、CPU 不会清除不同组的 IER 寄存器。   我能理解这种情况吗?  因此、对于不同组的中断嵌套、无需在嵌套的中断服务例程中启用 IER 寄存器。 但是、对于同一组内的中断嵌套、IER 寄存器必须启用、以便可以 将中断发送 到 CPU。 我能理解这种情况吗?

    非常感谢!

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

    尊敬的 Yun:

    很抱歉耽误你的时间。

    如果您想详细解释第4个问题? 我不太明白。

     有关这方面的说明、请参阅此处链接的《C28x 编程指南》的使用位字段时的6个读-修改-写注意事项部分(尤其是6.1和6.1.1)。

    并且我希望 SCIB_RX ISR 是最高优先级、  最后使用 TIMER0_ISR 和 EPWM1。

    在这种情况下、您需要 使用掩码更改除 SCIB_RX ISR (最高优先级)之外的所有 ISR 中的 IER 寄存器。

    对于 sencond 问题、当 CPU 响应中断时、CPU 不会清除不同组的 IER 寄存器。   我能理解这种情况吗?  因此、对于不同组的中断嵌套、无需在嵌套的中断服务例程中启用 IER 寄存器。 但是、对于同一组内的中断嵌套、IER 寄存器必须启用、以便可以 将中断发送 到 CPU。 我能理解这一点吗?

    正确、在正常操作中、当 ISR 跳转到时、其他中断组的 IER 位保持启用。 但是、如果您尝试对3个或更多个中断进行嵌套、您需要优先级方案。 例如、在您的情况下、您希望:

    来自 SCIB_RX ISR -无嵌套

    从 TIMER0 ISR -仅启用嵌套的 SCIB_RX 中断

    从 EPWM1 ISR -启用/同时启用 SCIB_RX ISR 或 TIMER0 ISR 以嵌套

    在这种情况下、您希望在 TIMER0 ISR 内禁用 EPWM1 ISR 的 IER、以保持优先级方案。 您正确地认为需要为同一组内的嵌套重新启用 IER、因为这在 ISR 分支到时会自动清除。

    请对对您有帮助的任何回答投赞成票

    此致、

    Delaney

x 出现错误。请重试或与管理员联系。