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.

[参考译文] TMS320F280025:HWBIST 测试后的虚假中断

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1510748/tms320f280025-spurious-interrupts-after-hwbist-test

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

工具/软件:

您好:

我使用的是 TMS320F280025微控制器和安全诊断库 v4.01.00。 我目前遇到以下问题:

1.每次执行 HWBIST 微运行测试后、都会触发一个意外的计时器2中断。
2.有时、在 HWBIST 微运行测试之后、我必须手动清除 PIE 中断组的确认位、就像正在生成虚假中断一样。

这些行为是否符合预期?  
是否有防止或处理这些问题的建议方法?

提前感谢您的支持。

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

    Andrea、

    对延迟表示歉意、我正在研究这一点、并将在一周结束时给出答复。

    此致、

    Matthew

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

    Andrea、

    这看起来与此勘误表相关:

    https://www.ti.com/document-viewer/lit/html/SPRZ466C#GUID-35E690A0-2BAA-4D53-BED0-70FD566B84E7/GUID-46C92F20-5B89-40A5-84A5-7FEAF9C7A2A3

    但是、在与 SDL 所有者交谈后、勘误表中提到的解决方法应包含在您正在使用的 SDL V4.01中。

    您能否在 stl_hwbist_s.asm 文件中查找它、以验证您看到的内容与勘误表中提到的内容类似?

    此致、
    Matthew

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

    您好 Matthew、

    我确认包括勘误表中提到的权变措施。
    无论如何、我的问题似乎与描述的问题不同、因为每次执行时都会触发计时器2中断、并且也涉及 PIE 中断。

    此致、

    Andrea

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

    是否有任何更新?

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

    Andrea、

    我目前正在尝试重现上面的第1点;我这边还有一些问题:

    您是否可以提供正在运行的系统时钟设置(即120MHz 或其他设置)以及主时钟源。  此处的默认值为 INTOSC2。

    [quote userid="653552" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1510748/tms320f280025-spurious-interrupts-after-hwbist-test 有时、在 HWBIST 微运行测试之后、我必须手动清除 PIE 中断组的确认位、就像正在生成虚假中断一样。

    您是否还能提供哪些 PIE 国际财务报告准则?  

    这些中断是您在正常代码执行中期望实现的、还是与您的应用完全无关?

    如果上述问题的答案是肯定的、那么所涉及的模块是在 HWBIST 执行时保持运行还是禁用了这些模块?

    此致、

    Matthew

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

    您好 Matthew、

    1. SYSCLK 在100 MHz 下运行 、根据使用以下 PLLSYSCLK 配置的外部晶体振荡器(XTAL)得出:12 MHz (XTAL_OSC)× 50 (IMULT)/[2 (REFDIV)× 3 (ODIV)× 1 (SYSDIV)]。
      计时器2由 INTOSC1提供时钟、预分频器为1、并配置为每500ms 生成一个中断 。
      STL_HWBIST_runMicro()会在每个55 µs 中执行。 每次执行后STL_HWBIST_runMicro()、我都会观察到计时器2 ISR 被触发。

    2. PIE IFRS 对应于在执行 HWBIST 测试期间启用并可能发生的中断。
      经过进一步调查后、似乎(尽管不确定)该问题仅在 HWBIST 执行期间发生中断事件时出现。
      在这种情况下、需要调用Interrupt_clearACKGroup()(如下面的代码所示)、否则不再触发相应的 ISR。

    代码如下所示:

    // ADC ISR
    中断无效 ADC_ISR (void)

      //一些代码...
       
      //确认中断组1以允许来自该组的进一步中断
      INTERRUPT_CLEARACKGROUP (INTERRUPT_ACK_GROUP1);

      //一些代码...

      //执行 HWBIST 微运行
      STL_HWBIST_runMicro ();

      //一些代码...

      //此确认不是必需的
      INTERRUPT_CLEARACKGROUP (HWREGH (PIECTRL_BASE + PIE_O_ACK));
    }

    此致、

    Andrea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PIE IFRS 对应于在执行 HWBIST 测试期间启用并可能发生的中断。
    经过进一步调查后、似乎(尽管不确定)该问题仅在 HWBIST 执行期间发生中断事件时出现。
    在这种情况下、需要调用Interrupt_clearACKGroup()(如下面的代码所示)、否则不再触发相应的 ISR。

    Andrea、感谢这一点;从我们这边来看、这是预期的行为、HWBIST 会将在 HWBIST 执行期间发生的所有中断记录到缓冲区中、然后在执行完成后将这些中断恢复到系统中。  https://www.ti.com/lit/an/spraca7a/spraca7a.pdf (第5页)  

    我将使用上面#1上的设置来查看是否可以在我的设备上复制此行为。

    此致、
    Matthew

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

    Andrea、

    我想我得到了答案、在 stl_hwbist_s.asm 文件中假设用户正在清除计时器 ISR 中的 TIF (计时器中断标志)位15。  但是、对于重复的计时器 ISR、清除 TIF 位并非绝对必要、因此我需要您检查是否在计时器2 ISR 中执行此操作。  

    如果未清除 TIF、那么您将在每次 HWBIST 运行时获得一个计时器2 INT (这是您看到的内容)。即使您清除该位、也可能会发生这种情况、但这会假设计时器2周期与微运行之间的时间~μ s 相同、我认为情况并非如此。

    背景如下:

    在我们在 HWBIST 微运行之前启用中断记录之前、我们先保存 Timer1和 timer2 TCR 寄存器(包含 TIF 和 tie (计时器中断使能)的状态、然后再清除 tie 位以避免虚假 ISR、如上所述

            MOVW    DP, #TmrRegs
            MOV     AL, @TMR1TCR            ; Save TCR registers in the ACC
            MOV     AH, @TMR2TCR
    
            AND     @TMR1TCR, #~(3 << 14)   ; Clear TIE bit without clearing TIF
            AND     @TMR2TCR, #~(3 << 14)   ; Clear TIE bit without clearing TIF
    
            EALLOW
    
            MOVW    DP, #HWBRegs
            MOVW    @CSTCGCR3, #0x0A        ; Start logging interrupts

    现在、当我们从微运行恢复上下文恢复时、我们在以下代码中重新查看 TCR 寄存器的存储版本。

       ; Restore the CPU Timer 1 & 2 interrupt enable status. If the TCR.TIF bit
        ; is set and interrupts were enabled force the corresponding bit in IFR.
        ;
            MOVW    DP, #TmrRegs
    
            TBIT    AL, #14             ; Branch if TIE wasn't set
            SB      noEnableTIE1, NTC
    
            TBIT    @TMR1TCR, #15       ; Branch if TIE was set, but TIF isn't
            SB      enableTIE1, NTC
            OR      IFR, #(1 << 12)     ; Set the IFR flag for INT13
    
    enableTIE1:
            MOV     AL, @TMR1TCR        ; Reenable CPU Timer 1 interrupts
            AND     AL, #~(1 << 15)     ; TIF is W1C, so take care not to clear it
            OR      AL, #(1 << 14)
            MOV     @TMR1TCR, AL
    
    noEnableTIE1:
            TBIT    AH, #14             ; Check if TIE was set
            SB      noEnableTIE2, NTC
    
            TBIT    @TMR2TCR, #15       ; Branch if TIE was set, but TIF isn't
            SB      enableTIE2, NTC
            OR      IFR, #(1 << 13)     ; Set the IFR flag for INT14
    
    enableTIE2:
            MOV     AL, @TMR2TCR        ; Reenable CPU Timer 2 interrupts
            AND     AL, #~(1 << 15)     ; TIF is W1C, so take care not to clear it
            OR      AL, #(1 << 14)
            MOV     @TMR2TCR, AL
    
    noEnableTIE2:

    如果没有设置 TIE 位(意味着用户没有使用计时器中断)、我们跳到下一个计时器、因为我们不关心 TIF (根据计时器的工作方式、这些计时器在复位后启用、因此即使未使用、也会设置 TIF)。

    本例中、由于未使用计时器1、因此我们跳过它并继续介绍计时器2。

    现在、由于计时器2设置了连接、我们完成了评估、然后继续评估位15 TIF。  如果在我们启动 HWBIST 之前设置了它、则假设我们在为 ISR 提供服务之前捕获了它、因此在我们返回时需要为其提供服务。

    如果用户未有意清除计时器2 ISR 中的 TIF、则始终设置该位;因此 ASM 代码将手动设置与计时器2相对应的 IFR 位。

    因此、我们有两种选择:

    1)清除计时器2 ISR 中的 TIF 位。  我认为这是最简单的

    2)更改代码  stl_hwbist_s.asm 以在保存上下文时特意清除 TIF 位。  最糟糕的是、这会将计时器2 ISR 延迟一个计时器2周期。  这样做的缺点是我们必须重新编译 stl_diagnostic.lib、因为 asm 文件是该库的一部分。  该工程确实存在于 C2000Ware 中、因此不会太难、而是需要额外执行一个步骤、具体取决于您要如何继续。

    此致、
    Matthew