从u-boot理解armv7异常处理

    说到异常,就会想起不正常情况。异常确实是CPU处理非正常流程的一种手段。这里要说的是中断也是一种异常,而且ARMV7KH 定义了两种中断异常,irq与fiq。中断是我们熟知的,中断向量表跟异常向量表是什么关系呢。当外设发生中断时,通知中断控制器,中断控制器只是向CPU CORE发送了IRQ,也就是说在CORE看来所有中断只能称为IRQ异常。下面理一下armv7在异常处理上的设置。

1、armv7异常向量


从上面我们可以知道armv7支持7种异常。上面表要注意data abort与irq之间隔了一个向量,是一个没有使用的异常向量。

  (1)、复位(RESET)
    a、当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,包括系统加电和系统复位。
    b、通过设置PC跳转到复位中断向量处执行称为软复位。
    (2)、未定义的指令
    当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。
    (3)、软件中断
    这是一个由用户定义的中断指令(SWI)。该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。在实时操作系统中可以通过该机制实现系统功能调用。
    (4)、指令与取终止(Prefech Abort)
    如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。
    (5)、数据访问终止(DATAABORT)
    如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。
    (6)、外部中断请求(IRQ)
    当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。系统中个外设通过该异常中断请求处理服务。
    (7)、快速中断请求(FIQ)
    当处理器的外部快速中断请求引脚有效,而且CPSR的F控制位被清除时,处理器产生外部中断请求异常中断。

2、异常向量表与异常响应

当相应的异常发生时,CPU跳到一个固定的地址去执行指定程序。这个通常由称为异常向量表来实现。异常向量来实现。向量表的定义如下图所示:


armv7实现向量表时用的是一个word,4个字节的空间,这里放指令的话也只能放下一条arm指令。所以这里要想实现更多处理只能放一条跳转指令。但是图中是一条ldr指令,给CPU直接赋值。那么如果这条跳转执行的话,我们如果在异常处理完成之后返回呢。这里要明白,在异常发生时,硬件做的事及软件要做的事。

硬件在异常发生时可能会伴随着模式的切换,关于ARMV7的几中模式看下面图。


在这里只要看到不同模式,采用了寄存组分组技术,也就说不同模式使用了不同的寄存器。那么要CPU要完成异常处理完成后再次回到异常发生的地方需要做那些事情呢。

1)硬件首先把发生异常模式的当前PC+4,也就是在发生模式切换时,把当前模式的下一条指令地址保存到该模式的lr寄存器。从上图可以看出,在各模式PC指令是一样的,但是lr寄存器使用不同寄存器。

2)将cpsr的值复制到异常模式的spsr.

3)将cpsr设置成对应的异常工作模式。

4)设置PC指针为为异常向量表相应地址去执行。

而软件要做的事是:

1)切换SP指针到对应的模式栈,也就是不同模式采用不同的栈。

2)在当前模式栈中保存共用寄存器。

看一下uboot代码中irq的处理:


3、中断与异常处理

中断是异常处理的子集。当我们给外设绑定一个中断号的处理程序时,其实是引发的IRQ异常,然后由do_irq中实现了二级向量表,实现各中断处理的。


4、异常栈的建立

关于各异常的建立是在运行时建立的,这个解释起来要使用gd这个全局结构与uboot内存布局。有兴趣可以参考一下board_init_f

这个函数,异常模式的栈就是在这里建立的。

5、异常向表的地址设置问题,这个表是可以放在高地址,也可以入在低地址空间的。放在高地址还是放在低地址是由CP15的SCTRL控制,如图所示:


v=0:低地址。

v=1:高地址。

那么具体放在高地什么位置是由c12的vbar寄存器指出。


这部分uboot代码如下所示:


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《ARM架构参考手册armv7-a和armv7-r版.pdf》是一本关于ARM架构的参考手册。ARM架构是一种广泛应用于嵌入式系统和移动设备的处理器架构。该手册分为armv7-a版和armv7-r版两个版本。 armv7-a版是面向应用处理器的版本,主要用于移动设备、平板电脑、智能电视等设备。它提供了丰富的功能和指令集,支持多核处理和高性能计算,能够满足复杂应用的需求。该手册详细介绍了armv7-a架构的特点、寄存器、指令集以及内存管理等内容,为开发者提供了系统级的技术支持。 armv7-r版则是专门为实时应用处理器设计的版本,主要用于汽车电子、工业自动化、医疗设备等领域。相比于armv7-a版,它更注重实时性和可靠性,提供了面向实时应用的特殊指令集和硬件特性。该手册详细介绍了armv7-r架构的特点、寄存器、指令集以及实时性相关的特性,为开发者提供了针对实时应用的技术指导。 总之,该手册是ARM架构的权威参考资料,旨在帮助开发者理解和应用armv7-a和armv7-r架构,以提升系统性能和实时性。无论是开发应用还是实时系统,对ARM架构感兴趣的开发者都可以从该手册中获得详细的技术指导。 ### 回答2: 《ARM架构参考手册ARMv7-A和ARMv7-R Edition.pdf》是一本关于ARM架构的参考手册。ARM架构是一种广泛应用于嵌入式系统和移动设备的处理器架构。 这本手册旨在提供有关ARMv7-A和ARMv7-R两个版本的详细信息。ARMv7-A是应用程序处理器的主要版本,而ARMv7-R是实时处理器版本。手册介绍了这两个版本的架构特性、指令集、寄存器和系统级特性。 手册的内容包括了ARMv7-A和ARMv7-R的各个模块的详细说明,如处理器核心、系统控制和调试接口等。此外,手册还讨论了架构的安全特性,包括访问权限和异常处理ARM架构的特点之一是其指令集的精简性和高效性,手册深入介绍了各种指令的功能和使用方法,以及指令的执行过程和相关的寄存器操作。 另外,手册还提供了有关如何开发软件和编写代码以实现ARMv7-A和ARMv7-R架构的最佳实践指南。这些指南涵盖了编程规范、编译器优化和调试技术等方面的建议,帮助开发人员更好地利用ARM架构的性能和功能。 总之,《ARM架构参考手册ARMv7-A和ARMv7-R Edition.pdf》是一本权威的参考资料,提供了关于ARMv7-A和ARMv7-R架构的详细信息,对于开发者和研究人员来说是一本宝贵的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值