ARM中断的基本过程
arm中断处理过程
Arm的中断处理流程1:芯片输入管脚,按照中断的配置发生变化,(比如产生上升沿),arm芯片内部就会检测到中断。
2:ARM要求中断向量表必须放置在从0开始、连续8×4字节的空间内。
所以地址空间“0x00000000-0x00000032”就是所谓的中断向量表。
3:arm检测到中断后,会根据中断的类型强行设置PC寄存器的值。
把当前cpsr的内容保存到spsr_mode . 然后改变cpsr得内容。
(并且把相应的irq或者fiq设置为1,以禁止中断)中断的类型如下表:比如,这个时候来的是复位中断,则IP寄存器的值为0x00000000, 如果来的是IRQ中断则设置IP寄存器的值为 0x00000018。
注意上述中断信号的产生, cpsr 内容的保存,cpsr自动更改,PC寄存器值的设置,都是arm硬件自动完成。
4: arm CPU接下来就会从“IP寄存器所指的地址”内取指令,比如IP内的值是0x00000018,则会从地址 0x00000018 内取指令。
5:中断向量表的内容是我们先前设置好的。
假设是一个IRQ , 0x00000018处的指令为:B INT_IRQ;则代码跳到 INT_IRQ 处的程序执行。
6:INT_IRQ;; /* This Code is to fix a bug in the ARM Core */;STMDB sp!, {r1}MRS r1, SPSRTST r1, #I_BITLDMIA sp!, {r1}SUBNES pc,lr,#4; //保存环境; /* End ARM Core Fix */STMDB sp!, {a1 - v7, fp, ip, lr} ; Save context…… //里面会进行某些状态位判断,以确定具体是哪个中断,然后调用相应处理程序//恢复环境INT_IRQ_EXITLDMIA sp!, {a1 - v7, fp, ip, lr} ; Restore contextSUBS pc, lr, #4 ; Return to interrupted codeEND ; end file7:What happens if an interrupt occurs as it is being disabled?Applies to:If an interrupt is received by the core during execution of an instruction that disables interrupts, the ARM7 family will still take the interrupt. This occurs for both IRQ and FIQ interrupts.For example, consider the follow instruction sequence:MRS r0, cpsrORR r0, r0, #I_Bit:OR:F_Bit ;disable IRQ and FIQ interruptsMSR cpsr_c, r0If an IRQ interrupt is received during execution of the MSR instruction, then the behavior will be as follows:The IRQ interrupt is latchedThe MSR cpsr, r0 executes to completion setting both the I bit and the F bit in the CPSRThe IRQ interrupt is taken because the core was committed to taking the interrupt exception before the I bit was set in the CPSR. The CPSR (with the I bit and F bit set) is moved to the SPSR_irq上面是arm的一个bug。
嵌入式中断处理
福建电脑2012年第12期浅谈嵌入式中断处理郑德利(石家庄市职业技术教育中心计算机专业部河北石家庄050090)【摘要】:中断处理的效率高低直接影响着整个嵌入式系统的工作效率。
从源代码的角度,详细叙述了基于XScale PXA255处理器的嵌入式Linux操作系统的中断处理的整个流程。
【关键词】:中断处理;嵌入式;XScale PXA2551、引言一个完美的嵌入式系统与其中断处理机制是分不开的,没有中断处理的嵌入式系统不是真正意义上的嵌入式系统。
近年来,Intel公司生产的基于ARM体系结构的XScale系列处理器应用越来越广,本文以XScale PXA255处理器为例,从内核源代码的角度详细分析该系统的中断处理机制。
2、ARM系列处理器中断处理的定义当正常的程序执行流程发生暂时的停止时,称之为异常。
对于ARM体系结构的处理器来说,所支持的异常类型有七种,按处理的优先级从高到低分别为复位、数据中止、FIQ、IRQ、预取指令中止、SWI(也称软中断)和未定义指令。
其中,FIQ (Fast Interrupt Request)异常是为了支持快速数据传输或者通道处理而设计的,可由外部通过对处理器的nFIQ引脚输入低电平并且在当前程序状态寄存器CPSR(Current Program Staus Register)中的F位为0的时候来产生。
IRQ(Interrupt Re-quest)异常属于正常的中断请求,是我们常指的通常意义上的外部中断,可通过对处理器的nIRQ 引脚输入低电平并且在CPSR中的I位为0时来产生,系统的外部设备都是通过该异常请求中断服务。
这两个异常处理基本构成了整个系统的中断处理,是本文所讨论研究的重点。
3、中断的初始化在嵌入式Linux中,对中断的初始化必不可少的,下面就对系统中的常用的外部中断IRQ的初始化过程进行讨论。
系统经过BootLoader启动后,先运行init目录里面的main.c,该文件中的函数asmlinkage void __init start_kernel(void)调用了init_IRQ(),其中init_IRQ()函数的执行流程如图1。
ARM体系中异常中断种类及处理办法
ARM 体系中异常中断种类及处理办法在ARM 体系中,通常有以下3 种方式控制程序的执行流程:
•在正常程序执行过程中,每执行一条ARM 指令,程序计数器寄存器(PC)的值加4 个字节;每执行一条Thumb 指令,程序计数器寄存器(PC)的值加2 个字节。
整个过程是顺序执行。
•通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行。
其中,B 指令用于执行跳转操作;BL 指令在执行跳转操作的同时,保存子程序的返回地址;BX 指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb 状态;BLX 指令执行3 个操作:跳转到目标地址处执行,保存了子程序的返回地址,根据目标地址的最低位可以将程序状态切换到Thumb 状态。
•当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。
在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。
在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场。
不同CPU中断技术对比
不同CPU中断技术对比摘要:本文大体论述了80x86,80c51,和ARM在中断源,中断申请方式、中断优先级管理方式、中断的处理过程、中断向量等方面比较。
关键词:CPU,80x86,80c51,,ARM,中断申请方式,中断优先级管理方式,中断的处理过程,中断向量。
正文:一、X86 CPU,80C51,ARM中断源:X86 CPU支持256个中断向量,中断号00H--0FFH 。
0~19是系统预定义的异常和NMI,20~31被Intel保留,如表1。
所以,外部中断从32开始。
CPU处理的流程都一样,在执行完当前指令后,根据中断源提供的中断向量,在IDT中找到并调用相应的服务例程。
X86 CPU中断分为内部中断和外部中断。
内部中断分为:软中断,内部中断和异常,异常分为3种:Fault:可以被更正的错误,异常处理程序的返回地址是产生fault的指令。
Trap:执行trap指令(例如INT 3)后被报告的异常,异常处理程序的返回地址是产生trap指令的后一条指令。
Abort:严重错误,无法继续执行。
外部中断分为:不可屏蔽硬件中断和可屏蔽硬件中断。
不可屏蔽硬件中断(02H):由NMI端引入的中断请求,中断请求不可被屏蔽;可屏蔽硬件中断请求:由INTR端引入,中断请求可由IF=0进行屏蔽,使中断请求不进入。
表180C51的中断系统包括中断源、中断允许寄存器IE、中断优先级寄存器IP、中断矢量等。
在80C51中,只有两级中断优先级。
图1是80C51的中断系统结构示意图。
80C51有5个中断源分别为:两个外部中断源INT0、INT1和三个内部中断源T0、T1定时/计数谥出中断源和串行口发送或接收中断源。
外部中断是由外部信号引起的,它们的中断请求信号分别从引脚INT0和INT1上引入图1ARM 7TDMI具有常规中断(IRQ)、快中断(FIQ)和软件中断(SoftWare Interrupt)三种中方式。
常规中断和快中断都是硬件中断。
嵌入式课后题答案
嵌入式课后答案第一章1. 什么是嵌入式系统?请列举几个常见的嵌入式系统。
答:根据国际电气和电子工程师协会(IEEE)的定义,嵌入式系统是控制、监视或者辅助设备、机器和生产线运行的装置(Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
这主要是从产品的应用角度加以定义的,由此可以看出嵌入式系统是软件和硬件的综合体,可以涵盖机械等附属装置。
目前被我国科学家普遍认同的定义是:嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统。
常见的嵌入式系统:手机,DVD,路由器,核磁共振仪,全自动洗衣机。
2.嵌入式系统与通用计算机有哪些区别?答:(1) 以应用为中心;(2) 以计算机技术为基础(3) 软件和硬件可裁减(4) 对系统性能要求严格(5)软件的固件化(6)需要专用的开发工具3.嵌入式系统的发展分为哪几个阶段?答:第一阶段:无操作系统的嵌入算法阶段。
第二阶段:以嵌入式CPU为基础,以简单操作系统为核心的嵌入式系统。
第三阶段:以嵌入式操作系统为标志的嵌入式系统。
第四阶段:以基于Internet为标志的嵌入式系统。
4.请列举嵌入式系统的主要应用领域。
答:(1)工业控制领域(2)交通运输领域(3)消费电子产品(4)家电领域(5)通信领域(6)商业和金融领域(7)环境监测领域(8)医疗领域(9)建筑领域(10)军事国防领域(11)航天航空领域第二章1. 简述简单嵌入式系统与复杂嵌入式系统的主要区别。
答:简单嵌入式系统很早就已经存在,这类嵌入式系统因为软硬件复杂度都很低,一般不使用操作系统,例如常用的单片机系统。
对于复杂的嵌入式系统,它的开发模式发生了极大的改变。
一个复杂的嵌入式系统不仅硬件系统的开发比单片机复杂了许多,更重要的是在该系统中采用了嵌入式操作系统,其应用软件的开发转变为使用操作系统标准接口的计算机工程领域的应用软件开发。
《嵌入式》课后习题答案
第一章1. 简述嵌入式的定义以应用为中心、以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
2. 举例说明嵌入式系统的“嵌入性” 、“专用性” 、“计算机系统”的基本特征。
按照嵌入式系统的定义,嵌入式系统有3个基本特点,即“ 嵌入性”、“ 专用性”与“ 计算机”。
“嵌入性”由早期微型机时代的嵌入式计算机应用而来,专指计算机嵌入到对象体系中,实现对象体系的智能控制。
当嵌入式系统变成一个独立应用产品时,可将嵌入性理解为内部嵌有微处理器或计算机。
“计算机”是对象系统智能化控制的根本保证。
随着单片机向MCU SoC发展,片内计算机外围电路、接口电路、控制单元日益增多,“专用计算机系统”演变成为“内含微处理器”的现代电子系统。
与传统的电子系统相比较,现代电子系统由于内含微处理器,能实现对象系统的计算机智能化控制能力。
“专用性”是指在满足对象控制要求及环境要求下的软硬件裁剪性。
嵌入式系统的软、硬件配置必须依据嵌入对象的要求,设计成专用的嵌入式应用系统。
3. 简述嵌入式系统发展各阶段的特点。
(1)无操作系统阶段:使用简便、价格低廉;(2)简单操作系统阶段:初步具有了一定的兼容性和扩展性,内核精巧且效率高,大大缩短了开发周期,提高了开发效率。
(3)实时操作系统阶段:系统能够运行在各种不同类型的微处理器上,具备了文件和目录管理、设备管理、多任务、网络、图形用户界面Graphic User Interface ,GUI )等功能,并提供了大量的应用程序接口Application Programming Interface ,API ),从而使应用软件的开发变得更加简单。
(4)面向Internet 阶段:进入21 世纪,Internet 技术与信息家电、工业控制技术等的结合日益紧密,嵌入式技术与Internet 技术的结合正在推动着嵌入式系统的飞速发展4. 简述嵌入式系统的发展趋势。
ARM复习资料
复习资料一、填空1.“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素。
2.IP核分为软核、硬核、固核。
3.嵌入式系统通常由包含有嵌入式处理器、嵌入式操作系统、应用软件和外围设备接口的嵌入式计算机系统和执行装置(被控对象)组成。
4.嵌入式计算机系统是整个嵌入式系统的核心,可以分为硬件层、中间层、系统软件层和应用软件层。
5.硬件层中包含嵌入式微处理器、存储器、通用设备接口和I/O接口。
嵌入式微处理器是嵌入式系统硬件层的核心。
6.系统初始化过程按照自底向上、从硬件到软件的次序依次可以分为片级初始化、板级初始化和系统级初始化3个主要环节。
7.系统软件层通常包含有实时多任务操作系统(Real-time OperationSystem,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。
RTOS是嵌入式应用软件的基础和开发平台。
8.ARM处理器共有37个寄存器,31个通用寄存器,6个状态寄存器。
寄存器R13通常用作堆栈指针,称作SP。
寄存器R14用作子程序链接寄存器,也称为链接寄存器LK (Link Register)。
9.FIQ模式有7个分组的寄存器R8~R14,映射为R8_fiq~R14_fiq。
在ARM状态下,许多FIQ处理没必要保存任何寄存器。
User、IRQ、Supervisor、Abort和Undefined模式每一种都包含两个分组的寄存器R13和R14的映射,允许每种模式都有自己的堆栈和链接寄存器。
10.寄存器R15用作程序计数器(PC)。
在ARM状态,位[1:0]为0,位[31:2]保存PC。
11.程序状态寄存器CPSR的N、Z、C、V分别指-------,I=1指------、F=1指------,M[4:0]用做-------。
12.A RM指令集大致分为6类:分支/跳转指令、存储器访问指令、数据处理指令、程序状态寄存器指令、异常中断指令、协处理器指令。
ARM自举程序的中断管理机制
自举 程序是 操作 系统 内核或 用户 应用程 序运 行
之前, 首先 必须 运行 的汇 编语 言 编 写 的 一段 程 序 代
码 I , 2பைடு நூலகம்主要 包 括 C U 内部 各 个关 键 的寄 存 器 、 P 配 置外 围硬件 电路 相关 寄存器 、 系统 存储 器 、 栈 和 中 堆 断 向量表 等初始 化 , 准备 好 高 级语 言编 写 的 软 件 并 的运 行环境 , 然后 跳 转 到一 般 由高 级语 言 编 写 的 主 函数 的应用 程序代 码 去 执行 , 成 系统 设 计 所要 求 完
广泛。
的 7种异 常 向量地 址 OO 0 l 。S C 4 O x0~ xC 3 4 B X还 规 定 了 EN O到 IT AD IT N _ C等 2 6个 中断源 的中断 向量
地址 0 2 0 c , 且 这 2 x0~ x0 而 6个 中断 向量 仅 在 I Q R 向量模式 下 有 效 。 向量 表 中 的 向量 地 址 是 不 连 续 的, 未列 出 的向量地 址保 留待后 用 。 在 中断 或 异 常 发 生 时 ,3 4 B X 硬 件 逻 辑 将 S C4 O
0 引 言
采 用 中断方式克 服 了 C U查 询 等待 的缺 点 , P 提
() 1 硬件 固有 的 中断 向量 表 A MTM R 7 D I内核 规 定 了 复位 、 定 义 指 令 、 未 软 件 中断 、 预取 中止 、 数据 中止 、R I Q中 断 和 FQ 中断 I
高 了 C U 的 效 率 , 此 在 嵌 人 式 系 统 中 应 用 很 P 因
摘
要:给 出了 于 SC 4 O 基 3 4 B X开发板启动代码 中的中断管理机制 ,给 出了构造硬件 固有 中断
arm中断嵌套的原理
arm中断嵌套的原理【实用版】目录1.ARM 中断嵌套的原理概述2.中断嵌套的实现机制3.中断嵌套的优缺点分析4.总结正文【1.ARM 中断嵌套的原理概述】ARM(Advanced RISC Machine)是一种高级精简指令集计算机(RISC)架构,广泛应用于嵌入式系统和移动设备等领域。
在 ARM 系统中,中断嵌套是一种重要的技术,用于实现多个中断之间的协同处理。
当一个中断处理程序(Interrupt Handler,IH)在执行过程中,可能会触发另一个中断处理程序,这就形成了中断嵌套。
【2.中断嵌套的实现机制】中断嵌套的实现主要依赖于 ARM 处理器的中断处理机制。
具体来说,当一个中断发生时,处理器会立即保存当前程序的状态,包括程序计数器、寄存器等,然后跳转到对应的中断处理程序入口。
在这个过程中,处理器会启用中断优先级控制,根据中断优先级确定处理程序的执行顺序。
在执行中断处理程序时,如果遇到另一个更高优先级的中断,处理器会再次保存当前程序的状态,并跳转到新的中断处理程序入口。
这样就形成了嵌套的层次结构。
在嵌套的过程中,处理器会按照优先级顺序逐个处理中断,直到所有中断处理完毕,恢复执行最初被中断的程序。
【3.中断嵌套的优缺点分析】中断嵌套技术具有以下优点:1.提高系统响应速度:当外部事件发生时,系统可以快速响应并进行处理,提高系统的实时性能。
2.资源利用率高:中断嵌套允许多个中断处理程序并发执行,充分利用系统资源。
然而,中断嵌套也存在以下缺点:1.代码复杂度增加:由于中断嵌套导致程序流程分支较多,可能会增加代码的复杂度,影响程序的可维护性。
2.系统稳定性降低:中断嵌套可能导致系统在处理多个中断时出现死锁、竞态等问题,影响系统的稳定性。
【4.总结】总之,ARM 中断嵌套技术在提高系统响应速度和资源利用率方面具有显著优势,但同时也带来了代码复杂度和系统稳定性方面的挑战。
ARM的异常和中断
指令预取中止 0x0000000c 数据访问中止 0x00000010 外部中断 快速中断 0x00000018 0x0000001c
ARM技术及应用
第二章 ARM技术概述
2.7.3 ARM的异常中断向量表 异常中断向量表的大小为32字节; 每个异常中断向量占4个字节,存放一个跳转指令 或向PC寄存器中赋值的数据访问指令; 异常中断响应时,程序计数器PC会指向相应的异常 中断向量,执行跳转指令跳转至相应的异常中断服务 程序中继续执行。
Uboot:免费开源的BootLoader,支持多种处理器 本例Uboot版本: 1.3.2 本例代码:/uboot-1.3.2/cpu/arm920t目录下的start.S ,是系统在Uboot引导下执行的第一段代 Uboot 码。
ARM技术及应用
第二章 ARM技术概述
代码片段分析:
.globl _start _start: b start_code ldr pc, _undefined_instruction ……………….. ldr pc, _irq ldr pc, _fiq _undefined_instruction: .word undefined_instruction ……………………….. __irq: .word irq _fiq: .word fiq
ARM技术及应用
第二章 ARM技术概述
2.7.4 ARM的异常中断响应过程
图2.7.3 异常中断响应过程
ARM技术及应用
第二章 ARM技术概述
2.7.5 ARM的异常中断的返回 复位异常处理程序执行完毕后,不用返回。
图2.7.4 异常中断的返回
ARM技术及应用
arm cortex-m中断处理流程
ARM Cortex—M处理器家族是一组为嵌入式系统制造的32位处理器。
这些处理器被用在很多诸如IOT设备,设备,汽车等等的东西中。
Cortex—M处理器的一个酷点是它们能处理中断,这意味着它们能对事件迅速作出反应。
在文章中,我们将讨论Cortex—M处理器如何
处理中断,我们将专注于所涉及的步骤和概念。
当一个Cortex—M处理器中断时,就像在电子游戏上按下暂停按钮。
处理器很快地将它所做的一切保存在堆栈上,类似于在游戏中保存你
的进度。
它记得它在哪里,它在做什么,和所有重要的环境。
是时候找出真正造成中断的原因了。
处理器检查其特殊的内存图称为
中断矢量表,这就像一个导致不同中断服务常规(ISR)的藏宝图。
这就像在游戏中寻找正确的路径来解决特定的挑战。
一旦处理器知道哪一个ISR去,就像跳进游戏的新关卡。
它开始执行
中断处理器代码,这就像用一套新的指令处理一个新的任务。
就像在
游戏中,处理器可以永远回到它留下的地方,继续冒险!
在ARM Cortex—M的微妙舞蹈中,中断处理是一种优雅的芭蕾舞,
它拯救了现在的时刻,从迷人的矢量台上寻找ISR的悄悄位置区域,
并跳入ISR的等待怀里,执行中断处理者的卡住密码。
这种受试过程
使处理器能够以优雅和高效的空气来响应外部事件的呼唤,将Cortex—M处理器铸成实时嵌入系统的发光星。
B53-2.4.2.ARM7中断与异常
LDR
PC, =ResetInit
LDR
PC, =Undef_Handler
LDR
PC, =SWI_Handler
LDR
PC, =Prefetch_Handler
LDR
PC, =DataAbort_Handler
DCD
0xb9205f80
LDR
PC, =IRQ_Handler
LDR
PC, =FIRQ_Handler
管理
未定义
管理 中止 中止 保留 中断 快中断
禁止
I 禁止 I I — 禁止 禁止
禁止
F
F F F — F 禁止
注:表中的I和F, 表示该位不受影响,保留原来的状态
(4) 其他异常源返见回地址计算汇总表
异常或入口 (中断源)
返回指令
BL
MOV PC,R14
SWI
MOVS PC,R14_svc
未定义的指令 MOVS PC,R14_und
▪将下一条指令的地址存入 IRQ模式的LR寄存器
▪将跳转地址存入PC,实现 跳转
LR LR_sys
BLacRk_Airdqdr
寄 存
PC
JumpAddr
N Z C V . . . I F T MOD
器 CPSR ? ? ? ? . . . 01 ? 10 ISRYQS
组
SPSR
? ?S?P?.S. R.0?_1iSrqYS
SUBS PC,R14_irq,#4
(3)异常进入退出CPSR状态
地址
异常类型
进入时的模式 进入时I的状态 进入时F的状态
0x0000 0000 复位
0x0000 0004 未定义指令
arm处理器异常中断响应过程
arm处理器异常中断响应过程ARM处理器是一种广泛应用于移动设备、嵌入式系统和服务器等领域的处理器架构。
在运行过程中,处理器可能会遇到各种异常情况,如访问非法内存、除零错误等。
当这些异常发生时,ARM处理器需要做出相应的中断响应,以保证系统的稳定性和安全性。
ARM处理器异常中断响应的过程可以分为异常触发、异常处理和恢复执行三个阶段。
首先是异常触发阶段。
当处理器在执行指令时,发生了某种异常情况,例如访问了非法的内存地址,处理器会立即检测到异常,并将当前指令的状态保存起来。
同时,处理器会根据异常类型,确定异常向量的地址,将控制转移到异常向量所指向的地址处。
接下来是异常处理阶段。
当处理器进入异常向量所指向的地址时,会执行相应的异常处理程序。
这个程序通常是由操作系统或应用程序提供的,用于处理不同类型的异常。
在异常处理程序中,可以进行一系列的操作,例如保存现场、记录异常信息、处理异常原因等。
处理程序还可以根据需要选择继续执行或终止当前指令。
最后是恢复执行阶段。
在异常处理程序执行完毕后,处理器会根据异常返回地址,将控制权返回到引发异常的指令处,继续执行后续指令。
在返回之前,处理器可能会进行一些必要的恢复操作,如恢复现场、清除异常状态等。
这样,系统就可以继续正常运行,不受异常的影响。
需要注意的是,ARM处理器还提供了一些特殊的异常处理方式,如中断(Interrupt)和陷阱(Trap)。
中断是外部设备触发的异常,用于异步事件的处理,例如外部设备的输入输出请求。
陷阱是由程序主动触发的异常,用于实现系统调用和调试功能。
这些异常的触发和处理方式与一般异常略有不同,但整体的处理过程仍然符合前述的异常中断响应流程。
在ARM处理器中,异常中断响应是保证系统正常运行和异常处理的关键环节。
通过合理的异常处理程序和恢复机制,可以有效地应对各种异常情况,提高系统的可靠性和稳定性。
同时,开发人员也需要根据具体应用场景和需求,灵活地配置和调整异常处理方式,以满足不同的需求。
ARM9异常处理过程+软中断
/...art_pagedir=Next&_c11_BlogPart_handle=cns!E1CB6F8A752E6B22!125&_c11_BlogPart_BlogPart=blogview&_c=BlogPart[2009-10-3 10:18:06]
2.6 异常(Exceptions )
当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当 异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。 ARM体系结构中的异常,与8 位/16 位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。
2.6.4 各类异常的具体描述
FIQ (Fast Interrupt Request) FIQ 异常是为了支持数据传输或者通道处理而设计的。在ARM状态下,系统有足够的私有寄存器,从而可以避免对寄存器保存的需求,并减小了 系统上下文切换的开销。 若将CPSR的F 位置为1 ,则会禁止FIQ 中断,若将CPSR的F 位清零,处理器会在指令执行时检查FIQ 的输入。注意只有在特权模式下才能改 变F 位的状态。 可由外部通过对处理器上的nFIQ 引脚输入低电平产生FIQ 。不管是在ARM状态还是在Thumb 状态下进入FIQ 模式,FIQ 处理程序均会执行以下 指令从FIQ 模式返回: SUBS PC,R14_fiq ,#4
2009 年 10 月 2009 年 9 月 2009 年 8 月 2009 年 7 月
2.6.1 ARM 体系结构所支持的异常类型
ARM体系结构所支持的异常及具体含义如表2-3 所示。 表2-3 ARM体系结构所支持的异常
ARM Linux对中断的处理
void (*bus_lock)(unsigned int irq);
void (*bus_sync_unlock)(unsigned int irq);
/* Currently used only by UML, might disappear one day.*/
kstat_irqs: irq stats per cpu
irq_2_iommu: iommu with this irq
handle_irq:高层的irq时间处理程序(如果为NULL,则默认调用__do_IRQ())
chip:底层的中断硬件访问,指向PIC对象(irq_chip结构),它服务于IRQ线,Linux中断管理系统使用该成员来进行中断控制器的访问。
struct proc_dir_entry *dir;
#endif
const char *name;
}____cacheline_internodealigned_in_smp;
irq_desc结构体(中断描述符)中各个字段说明:
irq:中断描述符的中断号
timer_rand_state: pointer to timer rand state struct
#endif
irq_flow_handler_t handle_irq;
struct irq_chip *chip;
struct msi_desc *msi_desc;
void *handler_data;
void *chip_data;
struct irqaction *action; /* IRQ action list */
简述arm处理器异常处理过程
简述arm处理器异常处理过程ARM处理器是一种常用的嵌入式处理器架构,广泛应用于移动设备、嵌入式系统和物联网等领域。
在ARM处理器的运行过程中,会出现各种异常情况,如硬件故障、软件错误等。
为了保证系统的稳定性和可靠性,ARM处理器采用了异常处理机制来处理这些异常情况。
ARM处理器的异常处理过程可以分为两个阶段:异常发生阶段和异常处理阶段。
异常发生阶段是指异常事件发生时的处理过程,而异常处理阶段是指异常事件被捕获后的处理过程。
在异常发生阶段,ARM处理器会首先检测到异常事件的发生,并保存当前的处理状态。
然后,根据异常事件的类型,ARM处理器会进入相应的异常处理程序。
ARM处理器支持的异常类型包括中断、数据终止、指令终止、外部中断等。
每种异常类型都有对应的异常处理程序。
在异常处理阶段,ARM处理器会根据异常事件的类型执行相应的异常处理程序。
异常处理程序的执行过程包括以下几个步骤:首先,ARM处理器会保存当前的处理状态,包括程序计数器、寄存器等。
然后,ARM处理器会根据异常事件的类型执行相应的异常处理代码。
异常处理代码可以是硬件中断处理程序、软件异常处理程序或操作系统内核的异常处理程序等。
在执行异常处理代码时,ARM处理器会根据异常事件的优先级进行中断屏蔽,以保证异常处理的顺序和可靠性。
最后,ARM处理器会恢复保存的处理状态,并继续执行异常处理之前的程序。
在异常处理过程中,ARM处理器还提供了一些特殊的异常处理指令,用于处理特定的异常情况。
例如,ARM处理器提供了异常返回指令,用于从异常处理程序返回到之前的程序。
此外,ARM处理器还提供了一些特殊的异常处理寄存器,用于保存异常处理过程中的状态信息。
ARM处理器的异常处理过程是一个复杂而精细的机制,能够有效地处理各种异常情况。
通过异常处理机制,ARM处理器可以保证系统的稳定性和可靠性,提高系统的容错能力和可维护性。
同时,ARM 处理器的异常处理机制也为开发者提供了一种方便和灵活的异常处理方式,可以根据实际需求进行异常处理程序的编写和调试。
ARM中断程序的原理和实现
ARM中断程序的原理和实现中断是计算机系统中的一种强制性事件,它能够暂停正在执行的程序,并立即转移到一个特殊的处理程序上去执行。
ARM架构的处理器也支持中断机制,为了正确处理中断,ARM定义了一套中断处理的规范和流程。
本文将介绍ARM中断的原理和实现。
一、ARM中断的原理1. 中断请求(Interrupt Request, IRQ):外部设备或其它条件触发的一种中断请求信号,用于向处理器报告需要进行中断处理的事件。
2. 中断服务例程(Interrupt Service Routine,ISR):是一段特殊的程序代码,用于处理中断事件。
当中断被触发后,处理器会跳转到对应的中断服务例程中执行,完成相应的中断处理逻辑。
3. 中断控制器(Interrupt Controller):负责接收处理器的中断请求,并将其派发给对应的中断服务例程。
1.外设或其它条件触发中断请求,发送中断信号给中断控制器。
2.中断控制器接收到中断请求后,对中断请求进行优先级判断,确定哪个中断请求最先被处理。
3.中断控制器将中断请求发送给处理器,并将处理器的执行流转移到中断服务例程上。
4.处理器执行中断服务例程,处理相应的中断事件。
5.中断服务例程执行完毕后,处理器返回到中断发生前的状态,继续执行原程序。
二、ARM中断的实现1.配置中断控制器ARM架构提供了多种中断控制器,如VIC(Vectored Interrupt Controller)和GIC(Generic Interrupt Controller)等。
具体的中断控制器的选择和配置方式根据具体的处理器和系统架构而定。
配置中断控制器的基本步骤如下:(1)开启中断:通过设置相关的寄存器,使能中断功能。
(2)配置中断优先级:对不同中断请求进行优先级的设置,确保高优先级的中断能够被及时处理。
(3)分配中断服务例程:将不同的中断请求与相应的中断服务例程关联起来,当中断请求触发时,中断服务例程能够被正确执行。
ARM系统中断产生流程
ARM系统中断产生流程中断源按照硬件位置分为外部中断源和内部中断源,外部中断源和内部中断源又包含子外部中断源和子内部中断源,如上图所示(画了一整天)。
1. 子内部中断源的产生以UAR T0接收数据产生INT_RXD0中断为例,INT_RXD0产生后进入SUBSRCPND子中断源暂存寄存器,设置INT_RXD0对应的中断位,中断信号经过INTSUBMSK子中断屏蔽寄存器,如果INT_RXD0信号对应位没有被置位(屏蔽掉),中断信号继续向前传递,经过子内部中断源聚合器,将INT_RXD0聚合成对应的中断源信号INT_UAR T0,设置SRCPND中断源暂存寄存器里INT_UAR T0位,经过INTMSK中断屏蔽寄存器,如果INT_UAR T0信号没有被屏蔽掉,中断信号进入INTMOD中断模式寄存器判断是否为快速中断,如果被编程为快速中断,直接打断ARM内核,进入中断处理,如果中断信号为一般中断,进入中断优先级仲裁器进入优先级仲裁,如果INT_UAR T0信号为最高优先级或只有INT_UAR T0中断信号产生,则该中断信号被记录到INTPND最高优先级中断暂存寄存器,同时设置INTOFFSET的值为中断号28,最终将中断信号打断ARM内核进行中断处理。
如果同时产生多个中断且INT_UAR T0不是最高优先级,则该中断信号不会被处理,等最高优先级信号处理完后,再次进行优先级仲裁,也就是说中断信号不消失,一直保存在SRCPND里,只到被处理为止。
2. 内部中断源的产生该过程在子内部中断处理过程中已经包含,中断信号产生后直接进入SRCPND里,然后经历上述子内部中断后期处理过程。
3. 子外部中断的产生外部中断源共有24个,其中EINT0~EINT3为外部中断源,EINT4_7,EINT8_23为复合中断源,他们包含有子外部中断源。
由于外部硬件直接挂接到I/O Ports(详见S3C2440A硬件手册第9章)上的,我们要想让外设硬件中断得到处理,要先从EINT0~EINT23里选择中断信号,我们以EINT11为例,介绍子外部中断处理过程。
armv8中断处理流程
ARMv8 中断处理流程一、中断请求中断请求是由硬件或软件发起的异常信号,用于打断正在执行的指令序列,将控制权转移到中断处理程序。
在ARMv8 架构中,中断请求由中断控制器(如GIC)产生,并通过中断信号线传递给处理器核。
二、中断响应当处理器核接收到中断请求时,它会根据优先级和其他因素决定是否响应中断。
如果处理器核决定响应中断,它将执行一系列指令来保存当前执行环境的状态,并跳转到中断处理程序的入口点。
在ARMv8 架构中,中断处理程序的入口点由中断向量表(IVT)或异常向量表(EVT)指定。
三、保存上下文在中断响应过程中,处理器核需要保存当前执行环境的状态,以便在中断处理程序执行完毕后能够恢复原来的执行环境。
在ARMv8 架构中,上下文保存的操作包括:1. 保存寄存器状态寄存器(xPSR)的值;2. 保存当前指令指针(PC)的值;3. 保存堆栈指针(SP)和链接寄存器(LR)的值;4. 如果当前执行环境是异常或中断处理程序,则保存相应的程序计数器(PC)和链接寄存器(LR)的值。
四、执行异常处理程序中断处理程序的入口点通常是指向异常向量表(EVT)或中断向量表(IVT)的一个跳转指令。
当处理器核跳转到这个地址时,它会执行该地址处的指令,即异常处理程序的入口点。
在执行异常处理程序时,处理器核会根据具体的异常类型和上下文信息执行相应的操作,如执行设备驱动程序或系统调用等。
五、恢复上下文在异常处理程序执行完毕后,处理器核需要恢复原来的执行环境。
在ARMv8 架构中,上下文恢复的操作包括:1. 恢复寄存器状态寄存器(xPSR)的值;2. 恢复当前指令指针(PC)的值;3. 恢复堆栈指针(SP)和链接寄存器(LR)的值;4. 如果当前执行环境是异常或中断处理程序,则恢复相应的程序计数器(PC)和链接寄存器(LR)的值。
六、中断返回在恢复上下文后,处理器核会执行一条返回指令,将控制权从异常处理程序返回给原来的执行环境。
中断异常处理流程
中断异常处理流程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中地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM中断的基本过程
ARM 中断的基本过程:在IRQ0 脚给个上升沿后,过程是这样的(比较通
用的过程)。
1)如果你没有打开该中断的使能寄存器,没有任何反应。
2)如果你打开了使能寄存器,但在对应的屏蔽寄存器中屏蔽了该中断,也没有任何反应。
3)上述两个寄存器都设置正确了,中断产生了,CPU 保存当前程序运
行环境,跳到中断入口,ARM 芯片一般是0x?地址处。
4)如果你没有设置中
断向量,即0x?处不是你的代码,程序就会飞掉,当然也可能正常运行,这种情况一般发生在正好飞到正常代码处。
5)设置好中断向量了,中断向量一般是个跳转语句,跳到你的正式的中断处理过程,在这里你可以关闭所有中断,清中断,处理等等,然后退出。
记住某些处理器一定要清中断,否则下次再给个上升沿就没有反应了。
中断路径
如果是irq 中断
产生irq 异常中断转到0x18 1 跳中断跳
如果启用向量中断模式
自动转向对应向量地址每地址对应一条跳转指令2 跳
跳转到中断处理程序
如果使用汇编编写中断处理程序
在该处即可编写处理程序
如果使用c 语言编写中断处理程序
需要添加与c 语言接口程序3 跳
方法:1 汇编编写
在内存空间定义一向量表,用来存放各中断c 语言中断处理程序入口地址。