快速链接:
.
个人博客笔记导读目录(全部)
- 付费专栏-付费课程 【购买须知】:
- 【精选】ARMv8/ARMv9架构入门到精通-[目录]
我们先回忆一下在单片机上的中断的使用。
如下图所示,左边是51单片机的管脚图,P3.0-P3.5是单片机对应的中断管教,当该管教电平发生变化时,触发cpu异常。
当cpu来了一个异常时(中断),cpu跳转到异常向量地址处,执行handler函数,执行完毕后再回来
那么cpu异常时,跳转的是哪个地址呢,其实这都是cpu出厂时设计好的。如下图所示,左边是cpu设计好的异常向量表基地址。右边是软件对异常的处理。
当来了一个uart中断时,cpu触发异常跳转到0023地址处,而该地址处执行LJMP UART0_ISR指令,跳转UART0_IAR函数去处理中断…
解释一下什么是同步异常什么是异步异常?
当异常发生了,ARM CORE就要跳转到异常向量表地址处了。其实是跳转到:异常基地址 + 异常向量表偏移处
(1)、ARMV7的异常向量表基地址
主要为VBAR、HVBAR、MVBAR三个寄存器,其中VBAR是banked.
(2)、ARMV8的异常向量表基地址
主要为VBAR_EL1、VBAR_EL2、VBAR_EL3三个寄存器
(1)、armv7的异常向量表的定义
其实在armv7上有多张异常向量表,下图分别列举出在secure、non-secure侧的两张异常向量表
(2)、在armv8上异常向量表
实际上有四组表,每组表有四个异常入口,分别对应同步异常,IRQ,FIQ和出错异常。
另外我们还可以看到的一点是,每一个异常入口不再仅仅占用4bytes的空间,而是占用0x80 bytes空间,也就是说,每一个异常入口可以放置多条指令,而不仅仅是一条跳转指令