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.

[参考译文] TMS320F28235:C28x 中断优先级

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1422510/tms320f28235-c28x-interrupt-priorities

器件型号:TMS320F28235
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

我对 C28x 处理器上的硬件中断优先级有疑问。

我是否认为硬件中断优先级只有在两个中断被同时请求时才相关? 否则、没有较高优先级的中断阻止较低优先级中断的概念-由 IER 中的相关位启用的任何中断都可以中断当前正在运行的任何中断处理程序。

例如、如果一个 INT1和一个 INT2同时发生、则 INT1将优先。

但是、如果 INT1中断处理程序在启用 INT2中断的情况下运行、则可以由 INT2中断中断中断中断中断中断。

谢谢!

罗伯特·斯特劳德

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

    获取中断后、所有其他中断都被禁用。  然而、软件能够重新启用中断、从而允许其它人中断正在运行的 ISR。 我们将其称为中断嵌套。  

    本文将提供更详细的说明: https://software-dl.ti.com/C2000/docs/c28x_interrupt_nesting/html/index.html

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

    Lori、您好!

    感谢您提供有关中断嵌套的文章的链接、该文章很有用。  

    正如您所说的、获取中断时、处理器通过将 INTM 设置为1来禁用所有其他中断、因此我的问题应该更加准确。

    我对中断处理程序通过将 INTM 设置为0来启用中断会发生什么情况很感兴趣-我是否认为在这一点上、无论硬件的优先级顺序如何、都可能发生任何未在 IER (或 PIEIERx.y)中屏蔽的中断?

    更具体地说、我的问题与 SYS/BIOS 中的中断调度机制有关、它默认启用自动嵌套支持。 相关代码是 Hwi.c 中 Hwi_dispatchCore()的1145-1155行

    /* Propagate self bit which is auto cleared by hardware */
    IER |= hwi->ierBitMask;
    
    oldIER = IER;
    IER &= ~hwi->disableMask;
    
    __enable_interrupts();
    (hwi->fxn)(hwi->arg);
    __disable_interrupts();
    
    IER |= (hwi->restoreMask & oldIER);
     

    SYS/BIOS 允许使用 MaskingOption 配置中断屏蔽行为、该选项可设置为各种值、包括 ALL、NONESELF。 还有一个较低的选项会在当前和较低的中断优先级禁用所有中断、但文档指出、只有少数目标/器件真正支持该屏蔽选项。

    假设发生 INT2中断且屏蔽选项设置为自身。 我能想到的是、在执行中断服务程序的过程中、不管硬件中断优先级是更高还是更低、都只会禁用 INT2中断并启用其他级别的中断。

    谢谢你。

    罗伯特·斯特劳德

    P.S.就这个问题而言、我忽略 PIE 控制器、该控制器提供了另一层中断优先级划分和屏蔽

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="445931" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1422510/tms320f28235-c28x-interrupt-priorities/5452490 #5452490"]我想如果中断处理程序通过将 INTM 设置为0来启用中断会发生什么情况-我是否认为此时此刻、任何未在 IER (或 PIEIERx.y)中屏蔽的中断都可能发生、无论硬件优先级顺序如何?

    会、但会再次进行硬件优先排序。 这是 PIE /CPU 将获取已启用和已标记的最高中断。 另请注意、进入 ISR 后、IER 位和 INTM 清零。

    [报价 userid="445931" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1422510/tms320f28235-c28x-interrupt-priorities/5452490 #5452490"]假设发生 INT2中断且屏蔽选项设置为 self。 我是否认为在执行中断服务程序期间、无论硬件中断优先级是更高还是更低、都只会禁用 INT2中断并启用其他级别的中断?[/QUOT]

    我将了解一下更熟悉 DSP/BIOS 的人能否作出回应。

    在该示例中、如果采用 INT2、则在中 ISR INTM 将被置位、而 IER 2将被清零。 这将禁用所有中断(INTM = 1)和所有 INT2中断(IRR.2 = 0)。  如果 SW 清除全局屏蔽(INTM=0)、则重新启用 ISR2之前启用的所有中断(ISR2除外)。 (因为 IER 2已由硬件清除)。   

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

    我找到一组入门幻灯片、它描述了以下内容-  

    自我-除了自身之外、所有其它 HWI 可挤占。 我怀疑这只是为了确保 IER 位(示例中为 IER 2)已被清除。 此状态是默认进入中断时的状态。

    All -如果 ISR 短且快速、则是最佳选择。 这必须屏蔽所有 ISR -这可以通过清除 IER 位或设置 INTM 来完成。 当进入中断时、它也是缺省状态(INTM = 1)。  

    bitmask -允许自定义掩码。 这必须让您为 IER 设置自定义掩码并禁用特定中断。  

    从您发布的代码,我假设这些设置在 PIEIERx 级别没有做任何工作-这可能是也可能不是一个良好的假设。

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

    Robert -我想确保您知道 SYS/BIOS 不再更新或维护。 现在所有 TI 处理器都支持免费 RTOS。 C2000Ware 支持 C28x。  

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

    Lori、感谢您跟进我的问题。 是的、我知道 SYS/BIOS 不再被更新或维护、但是我将分析一些 使用 SYS/BIOS 编写的第三方代码的行为。

    尽管如此、我的问题实际上并不是关于 SYS/BIOS、而是关于 C28x 处理器是否有任何中断优先级的概念。 在某些处理器上、如果出现 int4、处理器会自动阻止任何优先级为4或更低的中断。 这意味着如果有 N 个中断级别、在处理器中断级别被设置为最高值并且进一步的中断被阻止之前、您最多可以有 N 个提高的中断优先级。

    据我所知、C28x 的行为并不是这样、尽管您可以通过清除 IER 中的相应位来模拟此行为。

    这意味着、一旦中断处理程序正在运行、硬件中断优先级就无关紧要了-它只用于为同时中断优先级并选择 具有最高优先级的中断矢量。  发送中断后、可以通过硬件中断优先级更高或更低的嵌套中断来中断中断中断处理程序(假设 IER 中已启用嵌套中断)。

    原则上、由于硬件 在发生中断时会清除 IER 中的相应位、因此在 IER 中禁用所有中断之前、最多可以具有 N 个按任何顺序嵌套的中断-在本例中、如果您忽略硬件调试中断、则 N=14。  

    然而、如果中断调度程序重新启用 IER 中的自位、这就是缺省中断调度程序 SYS/BIOS 所做的事情(见上面)、原则上、你可以按照任何硬件优先级顺序拥有无限的嵌套中断序列。

    我的理解是否正确?

    谢谢!

    Robert

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

    如果发生 INT4、则 INTM 会阻止所有其他中断、并且 IER 经过清除。

    由软件来清除 INTM 并在需要时更新 IER (正如您所说的那样、要模拟阻止所有低优先级中断)以重新启用任何中断。

     发送中断后、如果在 IER 中启用了嵌套中断、则可通过硬件中断优先级更高或更低的嵌套中断中断来中断中断处理程序。

    正确。 唯一的硬件优先级是已标记并启用的最高中断、将首先采用该优先级。

    "int4正在运行"不是 硬件优先级的一部分。   SW 设置/清除相应的 IER 位时必须考虑"INT4正在运行"。  

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

    谢谢 Lori、回答了我的问题。 仅当标记了两个或两个以上的中断并同时使能时、硬件优先级才有效;否则、中断优先级由软件控制、特别是启用了 IER 位。

    默认情况下、SYS/BIOS 在调用中断处理程序之前清除 INTM、但使 IER 保持不变、这意味着在执行中断处理程序时启用其他中断、但 禁用相同级别的中断。