第7章 ARM异常中断处理及编程
单片机的中断与异常处理方法
![单片机的中断与异常处理方法](https://img.taocdn.com/s3/m/4e20f07366ec102de2bd960590c69ec3d5bbdb92.png)
单片机的中断与异常处理方法在单片机的工作过程中,中断和异常处理是非常重要的概念和方法。
它们能够有效地提高单片机的响应能力和灵活性,使其能够应对各种不同的工作需求和问题。
本文将介绍单片机中断的概念、中断的种类以及针对不同中断的处理方法,同时也会探讨单片机异常处理的原理和方法。
一、中断的概念和种类中断是指在一个程序执行的过程中,由于某种特殊的事件发生,导致程序的正常执行被打断,转而去执行一个与当前任务无关的子程序,完成该事件的相应处理。
中断可以分为外部中断和内部中断两种。
1. 外部中断外部中断是指当单片机外部引脚的电平或信号发生变化时,引发中断事件,使单片机停止当前任务的执行,去处理由该外部事件引发的中断服务程序(ISR)。
外部中断常用于与外部设备的交互,如按键输入、传感器检测等。
在编程中,我们可以通过设置中断触发条件和编写相应的中断服务程序来实现对外部中断的处理。
2. 内部中断内部中断是指当单片机内部某个特定的事件发生时,由硬件或软件触发中断请求,并且将控制权交给中断服务程序进行相应的处理。
内部中断的发生可以是由于某个特定条件的满足,如定时器溢出中断、串口接收中断等;也可以是由软件的运行结果触发,如除法溢出中断、地址错误中断等。
不同的内部中断需要通过编程实现相应的中断服务程序。
二、中断的处理方法中断处理是指在中断发生时,单片机通过中断向量表找到相应的中断服务程序,并对中断事件进行处理的过程。
下面将介绍两种常用的中断处理方法。
1. 优先级中断处理优先级中断处理是指对多个中断源按照优先级进行划分和处理的方法。
在单片机的中断系统中,每个中断源都被赋予了一个优先级,高优先级的中断可以打断当前正在执行的低优先级中断,从而增加了中断的响应速度和灵活性。
优先级中断处理需要在编程时设置中断的优先级,并根据不同的中断事件编写相应的中断服务程序。
2. 嵌套中断处理嵌套中断处理是指当一个中断正在执行的过程中,又发生了另一个中断时,将当前中断挂起,转而处理新发生的中断,并在处理完毕后返回原中断继续执行的方法。
ARM异常与X86架构中断
![ARM异常与X86架构中断](https://img.taocdn.com/s3/m/efd2384aad02de80d4d840b6.png)
2.ARM中,当正常的程序执行流程发生暂时的停止时,称 之为异常。中断包括在异常模式之内。
相同点:
1.ARM异常和X86中断一样,在执行时都会保护现场,在异常或中断 处理完之后会恢复现场,并且多个异常或中断会按照一定的优先级顺 序执行; 2.异常和中断的过程类似(请求、响应、处理、返回); 3.异常和中断可类似得分为软件和硬件两方面; 4.两者都提高了CPU的工作效率,能实现实时处理和故障处理;
不同点:
1.ARM异常的原因是正在执行的程序的暂停,而X86中断是由异步的 外部事件引起的,前者范围比后者要宽泛; 2.中断可以被屏蔽,而异常需要得到及时响应和处理,通常不能被屏 蔽。
arm中断实验的实验报告
![arm中断实验的实验报告](https://img.taocdn.com/s3/m/0decb9ff970590c69ec3d5bbfd0a79563d1ed452.png)
arm中断实验的实验报告ARM中断实验的实验报告引言:ARM中断是一种常用的处理器功能,它可以在特定条件下中断当前的程序执行,转而执行指定的中断服务程序。
本次实验旨在通过ARM中断实验,深入了解中断的原理和应用。
一、实验背景ARM中断是ARM处理器中的一种重要功能,它可以在特定条件下中断当前的程序执行,转而执行指定的中断服务程序。
中断可以分为外部中断和内部中断两种类型。
外部中断是指来自外部设备的中断请求,例如外部设备的输入信号变化;内部中断是指来自处理器内部的中断请求,例如算术溢出、指令错误等。
二、实验目的1. 了解中断的概念和原理;2. 掌握ARM中断的实现方法;3. 学习如何编写中断服务程序。
三、实验步骤1. 准备实验环境:搭建ARM开发板,连接必要的外设;2. 配置中断控制器:根据实验需求,配置中断控制器的相关寄存器,使其能够正确响应中断请求;3. 编写中断服务程序:根据实验需求,编写中断服务程序,实现中断处理的相关功能;4. 运行实验程序:将编写好的程序下载到ARM开发板上,运行程序,观察中断的触发和响应情况;5. 实验结果分析:根据实验结果,分析中断的触发条件、中断服务程序的执行情况等。
四、实验结果与分析通过实验,我们成功实现了ARM中断的功能。
在实验过程中,我们配置了外部设备的中断引脚,当引脚状态发生变化时,中断控制器会产生中断请求,处理器则会立即中断当前的程序执行,转而执行中断服务程序。
在中断服务程序中,我们可以完成一些特定的操作,例如读取外设数据、更新系统状态等。
实验结果表明,中断服务程序能够正确地响应中断请求,并完成相应的操作。
五、实验总结本次实验通过ARM中断的实验,我们深入了解了中断的原理和应用。
中断是一种重要的处理器功能,它可以在特定条件下中断当前的程序执行,转而执行指定的中断服务程序。
掌握了中断的实现方法和编写中断服务程序的技巧,我们可以在实际应用中更好地利用中断功能,提高系统的响应速度和稳定性。
ARM的异常处理学习笔记转贴
![ARM的异常处理学习笔记转贴](https://img.taocdn.com/s3/m/71f44bdf112de2bd960590c69ec3d5bbfd0adaa5.png)
ARM 的异常处理学习笔记转贴ARM的异常处理这部分比较不好理解。
当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。
当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执行。
在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断处理程序退出时,要恢复被中断程序的执行现场。
1、引起异常的原因(1)、指令执行引起的异常软件中断、未定义指令(包括所要求的协处理器不存在是的协处理器指令)、预取址中止(存储器故障)、数据中止。
(2)、外部产生的中断复位、FIQ、IRQ。
2、ARM中异常中断的种类(1)、复位(RESET)a、当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,包括系统加电和系统复位。
b、通过设置PC跳转到复位中断向量处执行称为软复位。
(2)、未定义的指令当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。
(3)、软件中断这是一个由用户定义的中断指令(SWI)。
可用于用户模式下的程序调用特权操作指令。
在实时操作系统中可以通过该机制实现系统功能调用。
(4)、指令与取终止(Prefech Abort)如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。
(5)、数据访问终止(DATAABORT)如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。
(6)、外部中断请求(IRQ)当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。
系统中个外设通过该异常中断请求处7)、快速中断请求(FIQ) 理服务。
(当处理器的外部快速中断请求引脚有效,而且CPSR的F控制位被清除时,处理器产生外部中断请求异常中断。
学习笔记——ARMCortex-M0异常与中断
![学习笔记——ARMCortex-M0异常与中断](https://img.taocdn.com/s3/m/c596fa9c03d276a20029bd64783e0912a2167c93.png)
学习笔记——ARMCortex-M0异常与中断1.异常类型及编号2.Cortex-M0的每个异常源都有一个单独的编号:3.1~15内部系统异常:Reset(1), NMI(2), H/W Error(3), SVC(11), PndSV(14), SysTick(15)其他编号未用;4.16~47外部中断: IRQ#0~IRQ#31.5.异常优先级(Cortex-M0 支持7个)6.1). Cortex-M0 支持3个固定的最高优先级(Reset(-3), NMI(-2), H/W Error(-1))和4个可编程优先级;7.2). 可编程寄存器有8bit宽,但只有Bit7和Bit6可配置,其余Bits为0. (优先级由高到低:0x00,0x40,0x80,0xC0);8.3). 如果两个同时发生的异常的优先级相同,则先执行异常编号小的。
(IRQ#0,IRQ#1 则先执行IRQ#0)9.向量表(异常处理所需的起始地址信息)10.异常向量的地址为异常编号乘以4(Reset向量的地址为:1*4=0x00000004),其他向量地址如下图所示:11.12.EXC_RETURN(32Bits)13.该值用于异常返回机制,下图是其位域的含义:14.3个合法值:0xFFFFFFF1 返回处理模式(嵌套异常发生的情况)0xFFFFFFF9 返回线程模式并在返回中使用主栈(MSP);0xFFFFFFFD 返回线程模式并在返回中使用进程栈(PSP);15.异常的流程接受异常请求:1) 中断和SysTick中断使能;2) 未被NMI屏蔽掉;3) 异常优先级大于当前执行的异常优先级。
压栈及相关寄存器更新:1) 压栈并更新栈指针(8个registers被压栈:R0~R3, R12, R14/LR, R15/PC, xPSR);2) 取出异常向量写入PC中;3) 3个寄存器更新(LR<–EXC_RETURN, IPSR<–异常编号, NVIC<–对应的中断控制和状态)执行异常处理:1) 自动定位异常向量,并处理;2) 利用EXC_TURN的值来触发异常返回机制。
ARM体系结构与编程
![ARM体系结构与编程](https://img.taocdn.com/s3/m/69727029fab069dc502201ea.png)
和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小 ,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的 主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制 器。
嵌入式微控制器
嵌入式微控制器目前的品种和数量最多,比较有代表性的通用 系列包括8051、P51XA、MCS-251、MCS-96/196/296、 C166/167、MC68HC05/11/12/16、68300等。另外还有许多半通 用系列如:支持USB接口的MCU 8XC930/931、C540、C541; 支持I2C、CAN-Bus、LCD及众多专用MCU和兼容系列。目前
2021/2/5
ARM分类
基于指令集体系结构(构架ISA)的分类 ARM V1 体系是最初版本,只有26位的寻址空间,没有乘法指 令,最终没有商业化 ARM V2 体系与V1体系同为26位寻址空间,具有乘法和加法指 令,支持协处理器 ARM V3 体系的寻址范围扩展到32位,具有乘法和加法指令, 支持协处理器 ARM V4 体系增加了半字存储操作,对调试的支持以及支持嵌 入的ICE ARM V5 体系增加了DSP指令支持和对Java指令的支持 ARM V6 体系增加了媒体指令,ARMv6指令集合中加入了超过 60条SIMD单指令多数据指令 ARM V7 体系定义了三种独立的内核型--A(应用领域), R( 实时领域),M(控制领域)
嵌入式系统基础第7章中断和异常
![嵌入式系统基础第7章中断和异常](https://img.taocdn.com/s3/m/e4a3eeceb8f67c1cfad6b86a.png)
为减少延时,ARM在快中断中采取了 两个措施: (1)专门为快中断FIQ设置了一个FIQ模式, 并为这个模式配置了较多的私有寄存器, 从而可使中断服务程序有足够的寄存
器来使用,而不必与被中断服务程序使用 同一组寄存器,这样就免去了因寄存器冲 突而必需的保护及恢复现场工作。
(2)ARM把FIQ的中断向量放在了中断 (异常)向量表末尾0X0000001C处,因此 它后面没有其它中断向量,允许用户将中 断服务车工许程序直接放在这里。
除了外部设备可以发出可以发出中断 请求之后,处理器内部也会有一些事件可 以发出中断请求,例如读取指令出错或在 进行除法运算时除数为零等。为了与外部 事件引起的中断相区别,人们把这种由内 部事件引起的中断叫做异常。
7.1.2
中断请求信号的屏蔽
处理器中用来屏蔽中断的积存器和开 关如下:
1、可屏ห้องสมุดไป่ตู้中断
1、低端和高端向量表
ARM有低端和高端两种向量表,用户可 以根据需要选用其中一种,如下所示:
ARM中断(异常)的各个向量在向量表 中的分配如下:
中断(异常) 复位(RESET) 未定义指令(UNDEF) 向量在低端向量表的地址 0x00000000 0x00000004 向量在高端向量表的地址 0xFFFF0000 0xFFFF0004
一般情况下,这个优先排队机构可能 在处理器中有一套,在中断控制器中也有 一套,甚至在借口电路中也会有一套。
(2)软件实现方法
就是把所有中断源的中断请求信号分 成两路,其中一路经“或”逻辑送到处理 器的中断请求输入端,而另一路则送入中 断接口电路经数据总线送入处理器。
中断源的软件查询法电路的接线如下 图所示:
异常/中断 复位(RESET) 未定义指令(UNDEF) 软中断(SWI) 地址 LR LR 说明 指向未定义指令的下一条指令 指向SWI指令的下一条指令
ARM7内核的中断屏蔽方法
![ARM7内核的中断屏蔽方法](https://img.taocdn.com/s3/m/def3885a11a6f524ccbff121dd36a32d7375c70d.png)
ARM7内核的中断屏蔽方法ARM7内核的中断屏蔽方法是通过设置与中断相关的寄存器来实现的。
ARM7内核提供了多个中断屏蔽寄存器,可以分别对不同的中断进行屏蔽设置。
下面将对常见的中断屏蔽方法进行详细介绍,包括通过CPSR寄存器和INTCON寄存器进行中断屏蔽。
1.CPSR寄存器屏蔽中断ARM7内核的CPSR寄存器(Current Program Status Register)是一个32位寄存器,其中的第7位(I-bit)用于控制中断的屏蔽。
当I位为1时,中断被屏蔽,当I位为0时,中断不被屏蔽。
通过修改CPSR寄存器的I位,可以实现对中断的屏蔽和开启。
中断屏蔽可以通过以下方式进行设置:(1)通过修改CPSR寄存器的I位:在特权级别下,可以直接修改CPSR寄存器的I位,来控制中断的屏蔽。
(2)通过使用屏蔽和解屏函数:ARM提供了两个专门的汇编指令用于修改CPSR寄存器的I位,分别是CPSID和CPSIE。
CPSID指令用于屏蔽中断,CPSIE指令用于解除中断的屏蔽。
2.INTCON寄存器屏蔽中断ARM7内核还提供了INTCON寄存器(Interrupt Control Register)用于屏蔽和控制外部中断的响应。
INTCON寄存器是一个32位的寄存器,每个位对应一个外部中断的屏蔽位。
当一些屏蔽位为1时,对应的中断将被屏蔽,当屏蔽位为0时,对应的中断不被屏蔽。
通过修改INTCON寄存器的屏蔽位,可以实现对外部中断的屏蔽和开启。
中断屏蔽可以通过以下方式进行设置:(1)直接修改INTCON寄存器的屏蔽位:在特权级别下,可以通过直接写入INTCON寄存器来修改外部中断的屏蔽位。
(2)使用特殊函数来修改INTCON寄存器的屏蔽位:ARM提供了特殊的函数用于修改INTCON寄存器的屏蔽位。
需要注意的是,中断屏蔽方法只能屏蔽外部中断,对于内部中断(如软中断、异常中断)无法进行屏蔽。
同时,ARM7内核的中断屏蔽方法也存在优先级的问题,当多个中断同时发生时,只会响应优先级最高的中断请求。
ARM异常中断以及对ARM异常返回地址的分析
![ARM异常中断以及对ARM异常返回地址的分析](https://img.taocdn.com/s3/m/972a9666caaedd3383c4d3b5.png)
返回地址:SUBS PC,R14,#8 返回地址分析: 当进入异常时,R14_abt = address of the aborted instruction + 8
所以要返回到有问题的指令处重新执行,所以返回的地址为 R14-8 IRQ 中断异常:
产生原因: 当处理器的外部中断请求引脚有效,且 CPSR 寄存器的 I 控制位被清除 时,处理器产生外部中断 IRQ 异常。
是因为当前指令即引起软件异常中断的指令执行后所引起的,说明当前指令已近执行,当从
中断返回时,执行的指令应该是当前指令的下一条指令,即待执行指令的地址应该是 0x3004, 而 R14 中存放的即为 0x3004,所以返回时使用将 R14 的值直接赋给 PC 即可。
指令预期中止异常: 发生原因:若在指令预取阶段遇到无效指令时,系统存储器将该预取的指令标记为无
效指令,当处理器试图去执行这一条被标记为预取无效的指令时,将产生指令预取中止异常, 注意若处理器没有执行无效指令时将不会产生异常中断(在流水线中存在一条分支指令,导 致该非法指令没有执行,将不会产生该异常)。
处理器动作: R14_abt = address of the aborted instruction + 4 SPSR_abt = CPSR ….. …..
2、各异常分析
举个小例子,下面是一段 ARM 汇编代码: (后面的返回地址分析中将会用到此图)
ARM嵌入式体系结构与接口技术
![ARM嵌入式体系结构与接口技术](https://img.taocdn.com/s3/m/60b6455c69dc5022abea003d.png)
23
精品课件
ARM芯片厂商
2、PCB设计仿真阶段
需要在EDA仿真设计平台下,设计系统原理图及
PCB,并对PCB板上的信号完整性、EMI等进行
仿真,根据仿真结果来对PCB进行合理的布局布
线调整,完成PCB的设计
PCB图
ML67Q4051, ML67Q4060, ML67Q4061, ML696201, ML69Q6203
Samsung (ARM7/ARM9/Cortex-M3 Family)
S3C2410A, S3C2440A, S3C44B0X, S3C4510B,S5PC210
Sharp (ARM7/ARM9/Cortex-M3 Family)
LPC2294, LPC2364, LPC2366,, LPC2880, LPC2888, LPC3180
OKI (ARM7/ARM9/Cortex-M3 Family)
ML674000, ML674001, ML674002, ML674003, ML675001, ML675002, ML675003, ML67Q4050,
到终端用户手中
云计算的核心思想,是将大
量用网络连接的计算资源统
一管理和调度,构成一个计
算资源池向用户按需服务。
精品课件
12
1.2 嵌入式系统的组成
应用 软 件
嵌 入 式操 作 系 统
硬件 设 备
嵌入式处理器
外围 设 备
图1-1 嵌入式系统结构简图
精品课件
13
1.2 嵌入式系统的组成
ARM Cortex-A9多核嵌入式系统开发教程 第七章
![ARM Cortex-A9多核嵌入式系统开发教程 第七章](https://img.taocdn.com/s3/m/0fcb87cac850ad02de8041ef.png)
Highest priority interrupt
CPU Interface 1
enable_c1[ ] match_c1[ ]
nfiq_c1 nfriq_c1
AMBA slave interface
AMBA interface
enable_dn[ ] match_dn[ ] ppi_cn[15:0] legacy_nfiq_cn legacy_nirq_cn
第7章 Exynos 4412中断系统
2、中断类型 (1) 软件生成的中断(SGIs):是通过向软件生成中断寄存器 写入SGI中断号生成的。SGI一般被用作核间中断,用于核 间通信。 (2) 私有外设中断(PPI),由一个单独的处理器私有的外 设生成。 (2) 私有外设中断,由一个单独的处理器私有的外设生成。
第7章 Exynos 4412中断系统
7.1.1 中断相关术语 1、中断状态 每个中断可以被认为处于以下4个状态之一:
(1) 未激活(Inactive),中断尚未激活或未挂起; (2) 挂起(Pending),中断已经由硬件或者软件产生,正等 待目标CPU响应; (3) 激活(Active),CPU已经应答(Acknowledge)来自GIC的 中断,该中断正在被CPU处理但尚未完成; (4) 激活并挂起(Active&Pending),CPU正在处理该中断, 此时GIC又收到来自该中断源的更高优先级的中断。
Exynos 4412中断系统
Exynos 4412的中断系统概述 Exynos 4412中断机制分析 中断控制相关寄存器 中断处理程序实例
第7章 Exynos 4412中断系统
7.1 中断系统概述
Exynos 4412 采用了通用中断控制器(Generic Interrupt Controller,GIC PL390)对其中断系统进行控制和管理。 Exynos 4412共支持160个中断,其中包括16个软件生成的 中断、16个CPU核的私有外设中断、128个CPU核共享的外 设中断。其中,软件生成的中断通过写一个专用寄存器 (ICDSGIR)生成,通常被用于内部处理器之间的通信。
中断异常处理流程
![中断异常处理流程](https://img.taocdn.com/s3/m/35fe6c866037ee06eff9aef8941ea76e59fa4a60.png)
中断异常处理流程
中断异常处理涉及到硬件和软件两个层面。
在硬件层面,中断是由外
部设备或者操作系统内部生成的,比如键盘输入、计时器到期、网络数据
到达等;在软件层面,中断是由操作系统内核监控到的,并依照一定的优
先级进行处理。
1.中断请求发生:当外部设备发出中断信号时,中断控制器将这个信
号发送给系统处理器,或者系统内部的一些模块发生异常,也会发出中断
信号。
2.中断向量表:系统处理器在接收到中断信号后,首先会查询中断向
量表,确定这个中断的类型和优先级。
中断向量表是由操作系统预先构建的,其中记录了各个中断类型的处理程序入口地址。
3.中断处理程序:系统处理器根据中断向量表中的入口地址,跳转到
相应的中断处理程序中。
中断处理程序是由操作系统或其他软件所提供的,用于处理不同类型的中断。
简述arm处理器异常处理过程
![简述arm处理器异常处理过程](https://img.taocdn.com/s3/m/87232fab6aec0975f46527d3240c844769eaa0f1.png)
简述arm处理器异常处理过程ARM处理器是一种常用的嵌入式处理器架构,广泛应用于移动设备、嵌入式系统和物联网等领域。
在ARM处理器的运行过程中,会出现各种异常情况,如硬件故障、软件错误等。
为了保证系统的稳定性和可靠性,ARM处理器采用了异常处理机制来处理这些异常情况。
ARM处理器的异常处理过程可以分为两个阶段:异常发生阶段和异常处理阶段。
异常发生阶段是指异常事件发生时的处理过程,而异常处理阶段是指异常事件被捕获后的处理过程。
在异常发生阶段,ARM处理器会首先检测到异常事件的发生,并保存当前的处理状态。
然后,根据异常事件的类型,ARM处理器会进入相应的异常处理程序。
ARM处理器支持的异常类型包括中断、数据终止、指令终止、外部中断等。
每种异常类型都有对应的异常处理程序。
在异常处理阶段,ARM处理器会根据异常事件的类型执行相应的异常处理程序。
异常处理程序的执行过程包括以下几个步骤:首先,ARM处理器会保存当前的处理状态,包括程序计数器、寄存器等。
然后,ARM处理器会根据异常事件的类型执行相应的异常处理代码。
异常处理代码可以是硬件中断处理程序、软件异常处理程序或操作系统内核的异常处理程序等。
在执行异常处理代码时,ARM处理器会根据异常事件的优先级进行中断屏蔽,以保证异常处理的顺序和可靠性。
最后,ARM处理器会恢复保存的处理状态,并继续执行异常处理之前的程序。
在异常处理过程中,ARM处理器还提供了一些特殊的异常处理指令,用于处理特定的异常情况。
例如,ARM处理器提供了异常返回指令,用于从异常处理程序返回到之前的程序。
此外,ARM处理器还提供了一些特殊的异常处理寄存器,用于保存异常处理过程中的状态信息。
ARM处理器的异常处理过程是一个复杂而精细的机制,能够有效地处理各种异常情况。
通过异常处理机制,ARM处理器可以保证系统的稳定性和可靠性,提高系统的容错能力和可维护性。
同时,ARM 处理器的异常处理机制也为开发者提供了一种方便和灵活的异常处理方式,可以根据实际需求进行异常处理程序的编写和调试。
arm set_vbar指令
![arm set_vbar指令](https://img.taocdn.com/s3/m/f085eb520a4e767f5acfa1c7aa00b52acec79c5c.png)
arm set_vbar指令arm set_vbar指令是一种用于ARM体系架构处理器的特殊指令。
它用于设置异常向量表的基地址(Vector Base Address Register,简称VBAR)。
异常向量表是一种数据结构,用于存储处理器在发生异常事件(如中断或错误)时跳转到的特定处理函数的地址。
在本文中,我们将逐步介绍ARM 的异常处理机制、异常向量表的作用,以及如何使用arm set_vbar指令来设置异常向量表的基地址。
第一部分:ARM处理器的异常处理机制ARM处理器的异常处理机制是为了处理处理器在执行期间发生的各种异常情况而设计的。
这些异常情况可以是外部触发的中断,也可以是内部的错误。
异常处理机制使得处理器能够在异常发生时正确地响应并采取相应的措施,保证系统的稳定性和数据的完整性。
在ARM处理器中,异常分为三个级别:中断(IRQ)、快速中断(FIQ)和异常(abort)。
中断级别是最低的,可以被屏蔽或重定向到其他中断服务程序。
快速中断级别比中断级别更高,用于处理实时要求非常高的中断事件。
异常级别是最高的,用于处理严重错误,如内存错误或非法指令。
第二部分:异常向量表的作用和结构异常向量表是存储处理异常事件时跳转地址的数据结构。
当ARM处理器发生异常时,将从异常向量表中获取相应的异常处理函数的地址,并跳转到这个地址进行处理。
异常向量表的基地址(VBAR)是异常向量表的起始地址。
异常向量表的结构是一个连续的内存区域,每个异常事件对应一个固定的入口地址。
这些入口地址是异常处理函数的地址。
不同的ARM处理器可能有不同的异常向量表结构,但一般都包含以下异常事件:复位、未定义指令、软件中断、中断、快速中断、数据终止和预取终止等。
第三部分:设置异常向量表的基地址在ARM处理器中,可以使用arm set_vbar指令来设置异常向量表的基地址。
该指令的语法为:set_vbar Rn其中,Rn是一个通用寄存器,用于存储异常向量表的基地址。
ARM之Cortex-M内核中断异常系统详解
![ARM之Cortex-M内核中断异常系统详解](https://img.taocdn.com/s3/m/dd47a10015791711cc7931b765ce05087632753a.png)
ARM之Cortex-M内核中断异常系统详解问题最近在使用STM32F3芯片的时候,遇到这样一个问题:如果外部中断来的频率足够快,上一个中断没有处理完成,新来的中断如何处理?在调试时,发现有中断有挂起、激活、失能等状态,考虑这些状态都是干啥用的呢!他们是Cortex-M核所共有的,因此这里不针对与具体用的STM32 MCU,直接上升到 Cortex-M内核来了解一下!简介 中断(也称为“异常”)是微控制器一个很常见的特性。
中断一般是由硬件(例如外设、外部引脚)产生,当中断产生以后 CPU 就会中断当前的程序执行流程转而去处理中断服务中指定的操作。
所有的Cortex-M 内核都会系统一个用于中断处理的组件:NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)。
它处理处理中断,还处理其他需要服务的事件(例如 SVC 指令),通常称为“异常”。
按照 ARM 的说法,中断也是一种异常。
Cortex-M3和 Cotex-M4 的 NVIC 最多支持 240 个 IRQ(中断请求)、1 个不可屏蔽中断(NMI)、1个 Systick(滴答定时器)定时器中断和多个系统异常。
而 Cortex-M0 最多支持32个IRQ、1 个不可屏蔽中断(NMI)、1 个 Systick(滴答定时器)定时器中断和多个系统异常。
IRQ:多数由定时器、IO端口、通信接口等外设产生NMI:通常由看门狗定时器或者掉电检测器等外设产生其他:主要来自系统内核注意,本文所说的 Cortex-M 主要指定是 Cotex-M3和 Cotex-M4。
Cortex-M0、Cortex-M0+、Cortex-M1 基于 ARMv6-M。
与Cotex-M3和 Cotex-M4相比,他们的指令集较小。
而且,Cortex-M1 是专门为FPGA应用设计的,没有独立MCU。
异常类型 Cortex-M 处理器的异常中,编号 1~15 的为系统异常,16及以上的则为中断输入。
中断异常处理流程
![中断异常处理流程](https://img.taocdn.com/s3/m/9c674880b1717fd5360cba1aa8114431b90d8eea.png)
中断异常处理流程1.特殊中断响应与返回系统运行时,特殊可能会随时发生。
当一个特殊出现以后,ARM微处理器会执行下列几步操作:1) 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理特殊返回时能从正确的位置重新开始执行。
2) 将CPSR复制到相应的SPSR中。
3) 根据特殊类型,强制设置CPSR的运行模式位。
4) 强制PC从有关的特殊向量地址取下一条指令执行,从而跳转到相应的特殊处理程序处。
这些工作是由ARM 内核完成的,不需要用户程序参与。
特殊处理完毕之后,ARM 微处理器会执行下列几步操作从特殊返回:1) 将连接寄存器LR的值减去相应的偏移量后送到PC中。
2) 将SPSR复制回CPSR中。
3) 若在进入特殊处理时设置了中断禁止位,要在此清除。
这些工作务必由用户在中断处理函数中实现。
为保证在ARM处理器发生特殊时不至于处于未知状态,在应用程序的设计中,首先要进行特殊处理。
使用的方式是在特殊向量表中的特定位置放置一条跳转指令,跳转到特殊处理程序。
当ARM处理器发生特殊时,程序计数器PC会被强制设置为对应的特殊向量,从而跳转到特殊处理程序。
当特殊处理完成以后,返回到主程序继续执行。
能够认为应用程序总是从复位特殊处理程序开始执行的,因此复位特殊处理程序不需要返回。
2.特殊处理程序设计2.1 特殊响应流程由于向量表的限制,只能有一条指令B完成32MB范围内的跳转,并不能保证所有的特殊处理函数都位于32MB范围内。
为了扩展跳转范围,需要二次跳转才能把特殊处理函数的地址传送给PC。
特殊处理调用关系如图1所示。
三星公司网站提供了test2410_r11软件包,其中2410init.s有如下代码:HandlerXXXsub sp,sp,#4 ;减少sp,储存跳转地址stmfd sp!,{r0} ;将工作寄存器压入堆栈ldr r0,=HandleXXX ;将HandleXXX地址放入r0ldr r0,[r0] ;将中断程序入口地址放入r0str r0,[sp,#4] ;将中断程序入口地址压入堆栈ldmfd sp!,{r0,pc} ;将工作寄存器与中断程序入口地址弹出到r0与PC图1特殊处理调用同时在RAM中定义了存有中断程序入口地址表_ISR_STARTADDRESS:AREA RamData, DA TA, READWRITE^ _ISR_STARTADDRESSHandleReset # 4HandleUndef # 4HandleSWI # 4HandlePabort # 4HandleDabort # 4HandleReserved # 4HandleIRQ # 4HandleFIQ # 4通常HandlerXXX位于程序入口地址32MB范围内,HandleXXX是以_ISR_STARTADDRESS为基地址的RAM中地址。
ARM中断编程实验
![ARM中断编程实验](https://img.taocdn.com/s3/m/7b143cc880eb6294dd886c24.png)
数字信息技术实验学校学院专业实验题目 ARM 中断实验编程小组成员二Ο一七年三月一.实验目的通过本次实验了解中断是什么以及学会如何进行中断编程。
二.实验要求基础实验:利用Exynos4412 的K1、K2 这2 个I/O 引脚的中断模式,分别点亮LED1和LED2,扩展实验:配置K3为中断模式,点亮LED3.三.实验仪器1、计算机2、USB转9脚串口线(通过USB与计算机连接,母头与实验平台连接)3、Exynos4412处理器开发与应用实验平台4、BL-JTAG 仿真器(通过USB与计算机连接,JTAG口与实验平台连接)5、电源线(与实验平台相连接的交流电源线)四.实验原理1.电路原理K1、K2、K3 分别与GPX1_1、GPX1_2、GPX3_2相连,在没有按下按键时这些引脚上一直处于高电平,当按键按下时产生下降沿触发中断。
EXYNOS4412 中断实验电路图实验箱上按键位置2、编程流程去除GPX1_2、GPX1_2,GPX3_2 内部上下拉属性,配置为中断模式。
GPIO 控制器中关闭屏蔽、使能中断;在GIC 中断控制器中使能中断;设置中断优先级;使能GIC;选择中断发送给CPU0;等待中断产生,然后进入中断处理函数;清除中断源。
五.实验内容(1)连接好开发板与计算机之间的串口线和BL-JTAG 仿真器(2)连接好开发板的交流电源线(3)接下来利用计算机演示集成开发环境的使用,以及LED灯的控制实验软硬件仿真流程,打开Eclipse,导入工程Key_Int,进行相应代码编写,编译,配置相关debug信息,装载程序,按下KEY1,KEY2,KEY3在putty串口终上查看相应的信息输出以及可以看到LED1和LED2和LED3亮灭情况。
六.实验步骤根据实验一步骤,连接仿真器、串口线,打开Eclipse,导入工程Key_Int,进行相应代码编写,编译,配置相关debug信息,装载程序,按下KEY1,KEY2,在putty 串口终端上查看相应的信息输出以及可以看到LED1和LED1亮灭情况。
第7章 汇编程序
![第7章 汇编程序](https://img.taocdn.com/s3/m/ecf6b280ec3a87c24128c404.png)
字符串表达式及运算符
(1)LEN运算符 (2)CHR运算符 (3)STR运算符 (4)LEFT运算符 (5)RIGHT运算符 (6)CC运算符
其它常用运算符
(1)?运算符 ?运算符返回某代码行所生成的可执行代码的长 度,。 (2)DEF运算符 DEF运算符判断是否定义某个符号 (3)BASE运算符 BASE运算符返回基于寄存器的表达式中寄存器的 编号 (4)INDEX运算符 INDEX运算符返回基于寄存器的表达式中相对于其 基址寄存器的偏移量
汇编语言的程序结构
在Arm(Thumb)汇编语言程序中,以程序段为单 位组织代码。段是相对独立的指令或数据序列,具 有特定的名称。段可以分为代码段和数据段,代码 段的内容为执行代码,数据段存放代码运行时需要 用到的数据。一个汇编程序至少应该有一个代码段, 当程序较长时,可以分割为多个代码段和数据段, 多个段在程序编译链接时最终形成一个可执行的镜 像文件。
变量代换
程序中的变量可通过代换操作取得一个常量。代换操作符为“$”。如果 在数字变量前面有一个代换操作符“$”,编译器会将该数字变量的值转 换为十六进制的字符串,并将该十六进制的字符串代换“$”后的数字变 量。如果在逻辑变量前面有一个代换操作符“$”,编译器会将该逻辑变 量代换为它的取值(真或假)。 如果在字符串变量前面有一个代换操作符“$”,编译器会将该字符串变 量的值代换“$”后的字符串变量。 使用示例:
数字表达式和运算符
(1)“+”、“-”、“×”、“/” 及 “MOD”算术运算符 (2)“ROL”、“ROR”、“SHL”及“SHR” 移位运算符。 (3)“AND”、“OR”、“NOT”及“EOR” 按位逻辑运算符。
逻辑表达式及运算符
(1)“=”、“>”、“<”、“>=”、“<= ”、 “/=”、“ <>” 运算符 (2)“LAND”、“LOR”、“LNOT”及 “LEOR”运算符
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.快速中断FIQ
当处理器的快速中断请求引脚有效且CPSR寄存器的F 控制位被清除时,处理器产生快速中断请求FIQ异常。
20
7.3 ARM 异常响应和处理程序返回
7.3.1 中断的响应 中断响应的过程 中断响应的步骤:
1、保护断点,即保存下一将要执行的指令的地址,就是把 这个地址送入堆栈。 2、寻找中断入口,根据不同的中断源所产生的中断,查找 不同的入口地址。 3、执行中断处理程序。 4、中断返回:执行完中断指令后,就从中断处返回到主程 序,继续执行。
6
7.2 ARM体系异常种类
当异常(或者说中断)发生时,处理器会把PC 设置为一个特定的存储器地址。这一地址放在被称 为向量表(vector table)的特定地址范围内。 向量表的入口是一些跳转指令,跳转到专门处 理某个异常或中断的子程序。源自7ARM的7种异常
!这个中断向量的查找是由硬件实现的,硬件指定PC跳到 0xffff0000/0x00000000(具体看编译器)
5
4.专用寄存器的使用
在异常发生时,处理器模式要改变,异常处理程序至少 需要访问下列专用寄存器: ① 堆栈指针寄存器(SP_<mode>); ② 连接寄存器(LR_<mode>); ③ 程序状态保存寄存器(SPSR_<mode>); ④ 在FIQ异常处理中,5个其他的通用寄存器(r8_FIQ 到r12_FIQ); ⑤ 其他的寄存器必须和发生异常之前的模式共用。
25
(2)LDR PC,[PC+offset] 把目标地址先存储在某一个合适的地址空间,然后把这 个存储器单元的32位数据传送给PC来实现跳转。 这种方法对目标地址值没有要求。但是存储目标地址的 存储器单元必须在当前指令的±4KB空间范围内。 注意:在计算指令中引用offset数值的时候,要考虑处理器 流水线中指令预取对PC值的影响。
33
(4)Data Abort数据中止异常 数据访问中止异常是由数据访问指令产生的,但常常是 由上一条赋数据存储器地址的语句的问题引起,故返回时应 从此条语句重新执行。 ARM Thumb A pc-12 pc-6 B pc-8 pc-4 数据中止异常 C pc-4 pc-2 lr=此条指令指针 D pc pc 返回指令: SUBS PC , LR, #8
4
异常可以同时发生,此时处理器按上表中设置的优先 级顺序处理异常。例如,处理器上电时发生复位异常,复 位异常的优先级最高,所以当产生复位时,它将优先于其 他异常得到处理。同样,当一个数据异常发生时,它将优 先于除复位异常外的其他所有异常而得到处理。 优先级最低的两种异常是软件中断异常和未定义指令 异常。因为正在执行的指令不可能既是一条软中断指令, 又是一条未定义指令,所以软中断异常和未定义指令异常 享有相同的优先级。
数据访问中止异常是由存储器发出数据中止信号,它由 存储器访问指令Load/Store产生。当数据访问指令的目标 地址不存在或者该地址不允许当前指令访问时,处理器产 生数据访问中止异常。
19
6.外部中断IRQ
当处理器的外部中断请求引脚有效,而且CPSR寄存器 的I控制位被清除时,处理器产生外部中断IRQ异常。系统 中各外部设备通常通过该异常中断请求处理器服务。
29
3.异常的返回地址
以一个简单的指令执行流水状态图来说明ARM中的的地址 修正: F D E
0x8000 0x8004 0x8008 0x800C A B C D F D F E D F E D E
在ARM三级流水线架构中,PC值指向当前执行指令地址加8 。假设指令A是BL指令,则当执行时,会把PC值(0x8008)保 存到LR寄存器。但是,接下来处理器会对LR进行一次自动调整 ,使LR=LR-0x4。所以,最终保存在LR里的是如图所示的B指 令地址。所以当从BL返回时,LR里面正好是正确的返回地址。
处理器模式。 用户模式和系统模式必须通过改变CPSR进入。
10
异常发生的通用处理:
当异常发生时,分组寄存器r14和SPSR用于保存处理器状态,操作伪 指令如下。
R14_<exception_mode> = return link SPSR_<exception_mode> = CPSR CPSR[4∶0] = exception mode number CPSR[5] = 0 /*进入ARM状态*/ If <exception_mode> = = reset or FIQ then CPSR[6] = 1 /*屏蔽快速中断FIQ*/ CPSR[7] = 1 /*屏蔽外部中断IRQ*/ PC = exception vector address
22
2.向量表
如前面介绍向量表时提到的,每一个异常发生时总是从 异常向量表开始跳转。最简单的一种情况是向量表里面的 每一条指令直接跳向对应的异常处理函数。 其中快速中断处理函数FIQ_handler()可以直接从地 址0x1C处开始,省下一条跳转指令,如图所示。
23
异常处理向量表
使用跳转指令简单 方便,是否有缺点 呢?
8
异常处理向量表
快速中断请求FIQ
0x1C 0x18
外部中断请求IRQ 保留 数据异常 预取异常 软中断异常 未定义指令异常 复位异常
0x10 0x0C 0x08 0x04 0x00
9
异常对处理器模式的影响:
每一种异常都会导致内核进入一种特定的模式。 也可以通过编程改变CPSR,进入任何一种ARM
21
7.3.2 ARM异常响应流程
1.判断处理器状态
当异常发生时,处理器自动切换到ARM状态,所以在 异常处理函数中要判断在异常发生前处理器是ARM状态还 是Thumb状态,这可以通过检测SPSR的T位来判断。 以调用SWI软中断异常为例,在Thumb状态下,必须注 意以下两点: ① 发生异常的指令地址为(lr-2)而不是(lr-4)。 ② Thumb状态下的指令是16位的,在判断中断向量号 时使用半字加载指令LDRH。
Thumb 指令集不包括协处理器,因而不需要这种指 令仿真机制。
15
3.软中断SWI
软中断异常发生时,处理器进入特权(管理)模式,执 行一些特权模式下的操作系统功能。 软终端异常通常人为主动设计产生,优先级较低。
16
4.预取指令异常
预取指令异常使由系统存储器报告的。当处理器试图去 取一条被标记为预取无效的指令时,发生预取异常。 如果系统中不包含MMU时,指令预取异常中断处理程 序只是简单地报告错误并退出。若包含MMU,引起异常的 指令的物理地址被存储到内存中。
24
跳转指令B的跳转范围为±32MB,但很多情况下不能保 证所有的异常处理函数都定位在向量的32MB范围内,需要 更大范围的跳转,而且由于向量表空间的限制,只能由一条 指令完成。 具体实现方法有下面两种: (1)MOV PC,#imme_value 这种办法将目标地址直接赋值给PC。但这种方法受格 式限制不能处理任意立即数。这个立即数由一个8位数值循 环右移偶数位得到。
32
(2)IRQ或FIQ异常 产生中断时,B指令被打断未执行,但是PC值已经更新, 需要重新回到B指令执行。 ARM Thumb B pc-8 pc-4 异常在这条指令处发生 C pc-4 pc-2 lr=此条指令指针 D pc pc 返回指令: SUBS PC , LR, #4
(3)指令预取中止异常 当发生指令预取中止异常时,程序要返回到该有问题的 指令处,重新读取并执行该指令。返回同IRQ流程。
13
2.未定义指令异常
发生未定义指令异常的场景: (1) 当ARM处理器遇到一条无法执行的指令,此指令没 有定义; (2)当ARM处理器 执行一条协处理器的操作指令,在正 常情况下,协处理器应该应答, 若协处理器没有响应。
14
未定义指令异常可以用来通过软件仿真系统中的某些 部件的功能。
例:如果系统中不包含浮点运算部件,CPU遇到浮点运算 指令时,将发生未定义指令异常,在该未定义指令异常处理 程序中可以通过其它的指令序列仿真该浮点运算指令。
0x1C 0x18
B
FIQ_Handler() IRQ_Handler()
B 保留 B B B B B
0x10 0x0C 0x08 0x04 0x00
DataAbt_Handler() PreAbt_Handler() SWI_Handler() Undef_Handler() Reset_Handler()
ARM处理器开发详解
第7章 ARM异常及中断处理
主要内容:
ARM异常中断处理概述 异常种类和优先级 ARM
异常响应和处理程序返回 ARM应用系统中异常中断处理程序的安装 SWI异常中断处理程序设计 FIQ和IRQ异常中断程序设计
2
7.1 ARM异常中断处理概述
1、中断 中断是一个过程,是CPU在执行当前程序的过程中因 硬件或软件的原因插入了另一段程序运行的过程。因硬件 原因引起的中断过程的出现是不可预测的,即随机的,而 软中断是事先安排的。
30
同样的跳转机制在所有的LR自动保存操作中都存在。 中断返回处理也类似。 假设在指令B处(地址0x8004)发生了异常,进入异常 响应后,LR经过跳转保存的地址值应该是C的地址0x8008。
31
(1)软中断异常和未定义异常 此异常由当前执行的指令产生,返回的应该是C。 ARM Thumb B pc-8 pc-4 异常在这条指令处发生 C pc-4 pc-2 lr=此条指令指针 D pc pc 返回指令: MOVS PC ,LR
异常返回时,SPSR内容恢复到CPSR, 连接寄存器r14的内容恢复到程序计数器PC。
11
1.复位异常
当处理器的复位引脚有效时,系统产生复位异常中断, 程序跳转到复位异常中断处理程序处执行,因而复位异常 处理程序不需要返回。 复位异常中断通常用在下面两种情况下: