ARM异常中断处理概述 当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。 ARM体系结构所支持的异常类型 异常类型 具体含义 异常向量表(Exception Vectors) 地址 异常 进入模式 0x0000,0000 复位 管理模式 ox0000,0004 未定义指令 未定义模式 0x0000,0008 软件中断 管理模式 0x0000,000c 中止(预存指令) 中止模式 0x0000,0010 中止(数据) 中止模式 0x0000,0014 保留 保留 0x0000,0018 IRQ IRQ 0x0000,001c FIQ FIQ 异常优先级(Exceprion Priorities) 优先级 异常 1(最高) 复位 2 数据中止 3 FIQ 4 IRQ 5 预取指令 6(最低) 未定义指令、SWI 对异常的响应 当一个异常出现以后,ARM微处理器会执行以下几步操作 1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。 异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回: 1、将连接寄存器LR的值减去相应的偏移量后送到PC中。 可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返 中断处理程序的安装 一般在系统的启动代码中安装异常处理程序。大致可以分为两种情况: 1、地址处存储器为ROM/FLASH 在ROM/FLASH中安装中断处理程序 在ROM/FLASH的异常中断向量表中,可以使用LDR指令直接向程序计数器PC中赋值,也可以直接使用跳转指令转到异常中断处理程序。 当0地址处为ROM时,将跳转指令安装在0地址处: ;为中断向量分配地址空间,此空间处为RAM的地址 RAM中安装中断处理程序 当0地址处为RAM时,中断向量表必须使用数据读取指令直接指向PC中赋值的形式。而且必须把中断向量从ROM中复制到RAM地址的0地址处。 MOV r8, #0 ; ARM处理器共有7种不同的处理器模式: 1、用户模式(User)2、快速中断模式(FIQ)3、外部中断模式(IRQ)4、特权模式(SVC)5、数据访问中止模式(ABT)6、未定义指令中止模式(UND)7、系统模式(SYS)
除了用户模式以外的其他6种处理器模式称为特权模式。在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器的模式切换。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。 其中,除了用户模式、系统模式以外,其他5种特权模式又称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。 用户和系统模式这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。 系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。 |
|