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.

[FAQ] [参考译文] 【常见问题解答】TDA4VE-Q1:R5F 异常恢复

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1568316/faq-tda4ve-q1-r5f-exception-recovery

器件型号:TDA4VE-Q1


工具/软件:

您好、

您能解释一下在 R5F 中从异常恢复的步骤吗?

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

    您好、

    R5F 异常恢复是错误注入期间使用的主要恢复机制、异常恢复使系统能够正常处理故障。

    恢复期间遵循的一般步骤如下:

    寄存器的当前状态推送到 R12。

    根据定义的故障类型和 ARM 状态、减去连接寄存器值。 之所以减去连接寄存器、是因为执行异常后控件应返回的位置取决于连接寄存器、如果未减去链接寄存器中的值、则它将一次又一次地执行相同的指令。 因此、为了退出异常并执行下一组指令、它需要在链接寄存器中有一个正确的值。

    下面提供的是需要根据不同的例外情况减去的不同链路寄存器数据。

    异常类型 异常时存储在 LR 中的值 从 LR 减去的值、用于在处理异常后执行下一组指令
    数据中止异常 Arm 模式:IA+8、Thumb 模式= IA+8 Arm 模式:LR-4、Thumb 模式:LR-2
    预取中止异常 Arm 模式:IA+4、Thum 模式= IA+4 Arm 模式:LR - 0、Thumb 模式:LR-0
    3.未定义指令异常 Arm 模式:IA+4、Thumb 模式= IA+2 Arm 模式:LR - 0、Thumb 模式:LR-0
    4.FIQ 处理程序 Arm 模式:IA+4、Thum 模式= IA+4 Arm 模式:LR - 4、Thumb 模式:LR-4
    5. IRQ 处理程序 Arm 模式:IA+4、Thum 模式= IA+4 Arm 模式:LR - 4、Thumb 模式:LR-4

    注意: 每当 发生 IRQ、FIQ 异常时、 在 ARM 和 Thumb 模式下、链接寄存器 (LR) 都会加载 (IA)+4。 此处 IA 是 由于 IRQ/FIQ 优先级而未执行的指令的地址。  因此、要执行由于中断而未执行的指令、从 LR 中减去 4。

    3.按下返回地址 (LR)。

    4.按下 SPSR。

    5.运行处理程序。

    注意:如果您的目标是从处理程序返回、请确保控件不会卡在处理程序中导致无限循环。

    恢复 SPSR 寄存器。

    恢复 LR 寄存器。

    8.pop R0-R4。

    9.将 LR 值转移到程序计数器。

    下面提供了从数据中止异常中恢复的示例。

    SDL_dataAbortExptnHandler:
    
        ; SPSR has the snapshot of CPSR before data abort. Compare thumb state bit in SPSR
    
        ; Push current state of registers.
        PUSH    {r0-r4, r12}
        MRS r0, SPSR
        AND r1, r0, #0x20
        CMP R1, #0
    
        ; branches to label ARM_STATE if the thumb state bit is not set
        BEQ ARM_STATE
        SUB lr, lr, #2
    ARM_STATE:
        SUB lr, lr, #4
    
    
        ; Push the return address and SPSR.
        PUSH    {lr}
        MRS    lr, SPSR
        PUSH    {lr}
    
        ; Call the data abort handler.
        LDR r1, SDL_dataAbortExptnHandler_c_addr
        BLX r1
    
        ; Restore used registers, LR and SPSR before returning.
        POP {LR}
        MSR SPSR_cxsf, LR
        POP {LR}
        POP {r0-r4, r12}
        MOVS    PC, LR
    

    此致、

    Manojna