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.

[参考译文] TMS320F280039C:在 HWBIST 测试完成后、系统如何跳转到地址0以恢复上下文?

Guru**** 2468460 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1462601/tms320f280039c-how-does-the-system-jump-to-address-0-to-restore-the-context-after-the-hwbist-test-is-completed

器件型号:TMS320F280039C

工具与软件:

您好、我最近检查了 HWBIST 示例代码、并注意到当 HWBIST 测试完成时、CPU 会重置并跳转到地址0x0 (如图1所示)。 但是、根据 CPU 复位行为、当 CPU 收到 HWBIST 复位时、它会检查 EntryAddr。 如果 EntryAddr 为0x0、则它不会跳转至地址0x0 (如图2中所示)。 因此、我想问问 CPU 在完成 HWBIST 测试后如何跳转到地址0x0。

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

    有人能帮我解决这个问题吗?

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

    有人能帮我解决这个问题吗?

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

    有人能帮我解决这个问题吗?

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

    有人能帮我解决这个问题吗?

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

    有人能帮我解决这个问题吗?

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

    对没有答复表示歉意。

    带下划线的代码行与返回地址中的 hwbist 更改无关、相反、如果需要使用 TI OTP 跳转代码段来修改引导 ROM、我们放置的一些内部代码。  我们将这些文件放在整个业务管理中、以防止我们在发布后发现问题、从而使我们可以在软件中解决它们、而不是针对完整的 ROM 更改发布新器件。

    执行您正在讨论的操作的代码位于地址第156行的正下方

    ; if ((HwbistRegs.CSTCRET.all != 0 )),然后跳转到地址。  

    请告诉我这是否清除了一切。

    cpu1brom_hwbist_reset_check:
    ;
    ; if((CpuSysRegs.RESC.bit.HWBIST & 0x1) == 1) then check CSTCRET
    ;
        MOVW    DP, #0x174e                          ;Set DP to CpuSysRegs.RESC
        AND     AL, @0x0, #0x20                      ;Load ACC with (CpuSysRegs.RESC & 0x20) which is HWBIST RESC bit
        LSR     AL, 5                                ;Right shift ACC (HWBIST RESC bit) value by 5
        TBIT    @AL, #0x0                            ;Check bit 0 of ACC value (HWBIST RESC)
        SBF     cpu1brom_hwbist_reset_done, NTC      ;Branch if reset bit not set
    
    ;
    ; CPU1 Patch/Escape Point 1
    ;    
    	MOVL         XAR4, #0x703ECU                 ;Load CPU1BROM_TI_OTP_ESCAPE_POINT_1 OTP address
    	MOVL         XAR5, *+XAR4[0]
    ;
    ;   if((EntryAddr != 0xFFFFFFFF) && (EntryAddr != 0x00000000))
    ;
    	MOVB         ACC, #0
    	SUBB         ACC, #1
    	CMPL         ACC, XAR5
    	SBF          cpu1brom_hwbist_reset_no_escape, EQ
    	MOVL         ACC, XAR5
    	SBF          cpu1brom_hwbist_reset_no_escape, EQ
    	LCR          *XAR5                           ; ((void (*)(void))EntryAddr)();
    
    ;
    ; if((HwbistRegs.CSTCRET.all != 0)) then branch to address
    ;
    cpu1brom_hwbist_reset_no_escape:
        EALLOW
        MOVW    DP, #0x1780                          ;Set DP to HwbistRegs
        MOVL    ACC, @0x34                           ;Load HwbistRegs.CSTCRET.all
        EDIS
        SBF     cpu1brom_hwbist_reset_done, EQ       ;Branch if CSTCRET is ZERO
        MOVW    DP, #0                               ;CPU1BROM_bootStatus DP
        MOVW    @0x2, #0x8001                        ;Update lower boot status (set boot start, boot complete)
        MOVW    @0x3, #0x8000                        ;Update upper boot status (HWBIST handled)
        MOVL    XAR5, ACC                            ;Set CSTCRET value as return address
        SPM     #0
        LCR     *XAR5                                ;Branch to address
    
    ;
    ; Reset cause isn't from HWBIST or CSTCRET is zero
    ;

    此致!
    Matthew