Xtensa——中断及异常

Xtensa——中断及异常

小狼@http://blog.csdn.net/xiaolangyangyang


1、Xtensa异常向量

BEGIN iram0
0x2fb80000: instRam : iram0 : 0x40000 : executable, writable ;
 iram0_0 : F : 0x2fb80000 - 0x2fb802df : .ResetVector.text .ResetHandler.literal .ResetHandler.text;
 iram0_1 : C : 0x2fb802e0 - 0x2fb803ff : ;
 iram0_2 : F : 0x2fb80400 - 0x2fb80577 : .WindowVectors.text;
 iram0_3 : C : 0x2fb80578 - 0x2fb8057b : .Level2InterruptVector.literal;
 iram0_4 : F : 0x2fb8057c - 0x2fb80597 : .Level2InterruptVector.text;
 iram0_5 : C : 0x2fb80598 - 0x2fb8059b : .DebugExceptionVector.literal;
 iram0_6 : F : 0x2fb8059c - 0x2fb805b7 : .DebugExceptionVector.text;
 iram0_7 : C : 0x2fb805b8 - 0x2fb805bb : .NMIExceptionVector.literal;
 iram0_8 : F : 0x2fb805bc - 0x2fb805d7 : .NMIExceptionVector.text;
 iram0_9 : C : 0x2fb805d8 - 0x2fb805db : .KernelExceptionVector.literal;
 iram0_10 : F : 0x2fb805dc - 0x2fb805f7 : .KernelExceptionVector.text;
 iram0_11 : C : 0x2fb805f8 - 0x2fb805fb : .UserExceptionVector.literal;
 iram0_12 : F : 0x2fb805fc - 0x2fb80617 : .UserExceptionVector.text;
 iram0_13 : C : 0x2fb80618 - 0x2fb8061b : .DoubleExceptionVector.literal;
 iram0_14 : F : 0x2fb8061c - 0x2fb80637 : .DoubleExceptionVector.text;
 iram0_15 : C : 0x2fb80638 - 0x2fbbffff : .iram0.literal .literal .rtos.literal .clib.literal .iram0.text .text .clib.text .rtos.text .note.gnu.build-id;
END iram0

2、Xtensa中断优先级

        中断入口:
        1、KernelExceptionVector(PS.UM=0):异常及level1中断
        2、UserExceptionVector(PS.UM=1):异常及level1中断
        3、Level2InterruptVector~Level5InterruptVector:level2~level5中断
        UserException可以在处理之前切换堆栈,而KernelException直接使用内核栈

        中断优先级:
        NMI最高,DEBUG次之,随着level越小,优先级越低

3、与中断有关的寄存器

        PS.UM:KernelExceptionVector/UserExceptionVector选择
        PS.EXCM:进入异常时为1
        PS.INTLEVEL:中断屏蔽等级
        INTCLEAR:Clear requests in INTERRUPT
        INTENABLE:Interrupt enable bits
        INTERRUPT:Interrupt request bits
        INTSET:Set Requests in INTERRUPT

4、中断返回指令

5、异常处理函数

    .section .UserExceptionVector.text, "ax"
    .begin literal_prefix .UserExceptionVector
    .align 4

_UserExceptionVector:
    wsr a3, EXCSAVE_1
    movi a3, _UserExceptionHandler
    jx a3

    .end literal_prefix

1、Xtensa有两个SP指针吗?
        Xtensa只有一个SP指针,中断和OS使用独立堆栈是采用XT_RTOS_INT_ENTER和XT_RTOS_INT_EXIT修改SP值实现的
        进入中断后,调用XT_RTOS_INT_ENTER将SP设置为系统栈,退出中断后,调用XT_RTOS_INT_EXIT将SP设置为任务栈。

2、Xtensa进异常会自动压栈吗?
        Xtensa的异常和中断不会进行硬件自动压栈,进入中断后软件保存SP、PS、PC、A0(LR)等。


ESP32 Xtensa(HIFI4/HIFI5) 处理器架构总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值