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.

[参考译文] RTOS/TMS320F28069:PIE:TI-RTOS 内核中的伪嵌套中断修复

Guru**** 2530350 points
Other Parts Discussed in Thread: TMS320F28069

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/598671/rtos-tms320f28069-pie-spurious-nested-interrupt-fix-in-ti-rtos-kernel

器件型号:TMS320F28069

工具/软件:TI-RTOS

在查看 TMS320F28069器件勘误表(sprz342k)时、我看到了用法注释4.1.1 "PIE:背靠背 PIEACK 写入和手动 CPU 中断屏蔽清除后的伪嵌套中断"。  我使用的是 TI-RTOS、这意味着 TI-RTOS 内核负责确认 PIE。  我假设内核具有此修复程序、但我想知道是否有具有此修复程序的 TI-RTOS 内核版本?  如果是、它修复在哪个版本的 TI-RTOS 中?  了解修复程序的引入时间有助于检查现有应用程序是否使用了具有或不具有修复程序的版本。

谢谢、

Joseph

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在错误跟踪软件中没有任何跳过的内容。 我将与团队一起查看此勘误表是否影响我们在 C28069上的调度程序代码。

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

    在查看 C28器件的最新 SYS/BIOS 内核代码时、我不相信任何代码会使用勘误表中显示的有问题的代码序列。

    勘误表非常具体地描述了以下序列:

    1. 对 PIEACK 寄存器的写操作
    2. "CLRC INTM"

    "CLRC INTM"指令硬启用中断。  SYS/BIOS 不执行硬启用、而是执行禁用/恢复操作(使用_disable_interrupts ()/_restore_interrupts ())。  "恢复"基本上是"POP ST1"、而不是"CLRC INTM"指令、因此我认为 SYS/BIOS 不需要进行此修复。

    此致、

    - Rob

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

    尊敬的 Rob:

    感谢您检查最新的 SYS/BIOS 内核代码。  您能否检查用于 C2000 2.12.1.33的 TI-RTOS?  伪嵌套中断可能会解释一个很难重现的问题、因此知道 2.12.1.33是否专门存在该问题将会大有帮助。

    此致、

    Joseph

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

    很抱歉听到您遇到难以重现的问题。

    TI-RTOS 2.12.1.33中的 SYS/BIOS 版本为6.41.04.54。  我在这里查看了 C28的 Hwi 代码、它与我之前检查过的较新版本基本相同、唯一的区别是与 PIEACK 和中断启用无关的事情。

    因此、我之前针对较新的 SYS/BIOS 的声明也适用于这个较旧的版本- SYS/BIOS 根本不包含任何"CLRC INTM"指令(除了它可能在引导代码中首次启用中断)、 只需执行__disable_interrupts ()和__restore_interrupts (),它们使用的代码序列与勘误表中有问题的代码序列不同。

    您可以使用 C28x TI 编译器中的''工具自行验证这一点。  搜索涉及"CLRC INTM"的所有指令并查看是否有任何 PIEACK 写入它们应该相当简单。

    此致、

    - Rob

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

    感谢您检查先前的版本并将我指向"d 2000 (d 2000)"。

    我尝试了"d 2000 (d 2000)"、发现所有 CLR INTM 实例前面都有 PUSH ST1、例如:

    003ef32d 7608推送 ST1
    003ef32e 2930 CLRC INTM|DBGM 

    为了进行比较、当我生成有问题的代码时、这是汇编代码:

    ;--------------------------------------------------------------
    ;42| PieCtrlRegs.PIEACK.ALL = 0xFFFF;
    ;--------------------------------------------------------------
    MOVW DP、#_PieCtrlRegs+1;[CPU_U]
    MOV @ PieCtrlRegs+1、#65535;[CPU_]|42|
    .dwpsn文件"test.c"、行43、列5、IS_stmt、ISA 0
    ;-------------------
    ;43 | EINT;
    ;--------------------------------------------------------------
    CLRC INTM 

    虽然它没有解释我的问题、但它确实有助于排除这种情况。

    此致、

    Joseph