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.

[参考译文] INTx &gt 的 SWPrioritizeDefaultIsr IER 设置示例;= 13

Guru**** 2618835 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/698534/example-swprioritizeddefaultisr-ier-setting-for-intx-13

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

大家好

我想知道 SWPriorititizeedDefaultIsr.c 中提供的示例代码是否正确。 (取自 C2000ware、V1.00.04.00)。

例如、我采用 Timer1_ISR:

#if (INT13PL!= 0)
__interrupt void Timer1_ISR (void) // INT13或 CPU 定时器1
{
IER |= MINT13; //设置“全局”优先级
EINT;

//
//在此处插入 ISR 代码...
//

//接下来的两行只用于调试,以便在此处停止处理器
//插入 ISR 代码后删除
_asm (" ESTOP0");
for (;;);
}
#endif 

通过 IER |=MINT13来设置全局优先级不会清除可能的低优先级中断的任何先前设置位。

对于较低的 INT、我们看到(示例 ADCA1_ISR)。

   IER |= M_INT1;
   IER   &= MINT1;

 在 INT13、INT14 (INT15、Int16)中、示例代码不是相同的原因(使用 OR 和 AND)。

'device_support' 2833x、2837xD、2837xS、2807x 的示例相同。

感谢您的澄清!

此致

Roger

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    IER |=M_INT1线路重新启用当前中断的组(请注意 M_INT1和 MINT1之间的差异)。 由于中断>=13不与 PIE 关联、因此该组不会触发任何其他中断、因此不需要该中断。

    我同意、在第二行执行"或"而不是"和"没有太大意义。 我看不到您为什么不想禁用较低优先级的中断。 我已经做了一些快速测试、对我来说似乎是一个错误、但我将与一些同事进行确认。

    谢谢、
    惠特尼
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已确定这是一个错误。 我将在未来的 C2000Ware 版本中提交错误报告、以使其更改为 IER &= MINT13。

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

    您好、Whitney

    感谢您的回答。 我现在发现有更多时间更深入地研究了...

    我同意您的观点、这似乎是一个错误、但我认为应该像这样进行更正:

    在 INT13 - Int16 ISR 中、IER 应按如下方式处理:

    INT13示例:

    IER |= MINT13;//设置具有更高用户优先级的中断位

    IER &= MINT13;//清除用户优先级较低的中断位

    (OR 和 AND 比=更快,如 Viveks 文章中所示:  )

    示例当 INTPL13 = 2且 INTPL14 = 1时、全部为零->表示 INT14的优先级高于 INT13。

    这会导致 MINT13 = 0x3000、MINT14 = 0

    如果出现 INT13、ISR 将设置 INT13和 INT14的 IER 位。 这似乎还可以。

    请注意、这也是在 TODAYS 代码中完成的。 对于 INT13在系统中具有最低用户优先级的情况、它的行为是正确的

    如果产生 INT14、它将:

    使用今天的代码:进行 IER |= 0 ->对 IER 位无影响。 如果中断产生"嵌套"、则位13和14仍然被置位。 如果中断没有嵌套(IER 位14由 HW 清零)、则位13置位、位14清零。 两种情况下的行为都是错误的。

    更正了代码:IER |= 0;IER &= 0、这会清除所有 IER 位。 这似乎是可以的、因为在我的示例中 INT14具有最高的用户优先级。

    Roger