第7讲_ARM中断机制
arm中断嵌套的原理
arm中断嵌套的原理摘要:1.引言2.arm 中断嵌套的原理2.1 arm 的中断向量表2.2 中断嵌套的实现2.3 中断嵌套的优点和应用3.arm 中断嵌套的实现3.1 硬件方面的支持3.2 软件方面的支持4.arm 中断嵌套的注意事项4.1 中断处理时间的考虑4.2 中断优先级的处理5.总结正文:在嵌入式系统中,中断处理是一个常见的功能。
ARM 处理器提供了丰富的中断处理功能,使得开发者可以灵活地处理各种中断事件。
中断嵌套是ARM 中断处理的一个重要特性,可以提高系统的响应速度和处理效率。
本文将详细介绍ARM 中断嵌套的原理、实现以及注意事项。
首先,我们需要了解ARM 中断嵌套的原理。
ARM 的中断向量表是一个关键概念。
中断向量表是一个存储中断向量地址的数组,用于快速定位和处理各种中断事件。
当有中断请求时,处理器会根据中断类型号在中断向量表中查找对应的中断向量地址,然后跳转到该地址执行中断处理程序。
中断嵌套的实现主要依赖于中断向量表的布局和中断处理程序的设计。
在一个系统中,可能会有多个中断源,它们的中断向量地址可能会相互重叠。
为了实现中断嵌套,我们需要保证中断向量表中的下一个中断向量地址在当前中断处理程序执行完毕之前可以被访问到。
这样,当一个中断请求到来时,处理器可以在当前中断处理程序执行完毕后,快速跳转到下一个中断向量地址,执行下一个中断处理程序。
中断嵌套的优点主要体现在可以提高系统的响应速度和处理效率。
例如,当一个外部中断请求到来时,处理器可以在执行当前中断处理程序的同时,响应外部中断请求,这样可以减少中断处理的时间。
此外,中断嵌套还可以实现中断优先级的功能,使得高优先级的中断请求能够更快地被处理。
要实现ARM 中断嵌套,需要硬件和软件两方面的支持。
在硬件方面,处理器需要支持中断嵌套,这通常需要处理器具有中断控制器,可以实现中断请求的排队和嵌套处理。
在软件方面,需要编写适当的中断处理程序,确保在当前中断处理程序执行完毕之前可以跳转到下一个中断向量地址。
单片机中断系统
单片机中断系统一、单片机中断系统的概念单片机中断系统是指在程序运行过程中,由于出现特殊情况(如外部设备的输入信号、定时器溢出等),使得单片机暂时停止当前任务的执行,转而执行相应的中断服务程序(ISR),以处理中断事件。
中断处理完毕后,再返回到中断点继续执行原来的任务。
这种特殊的中断机制,使得单片机能够同时处理多个任务,实现了实时性较高的应用程序设计。
二、单片机中断系统的结构单片机中断系统主要由以下几个部分组成:1、中断源:产生中断的外部设备或内部定时器。
2、中断请求寄存器:用于存储各个中断源的中断请求状态。
3、中断优先级寄存器:用于确定多个中断源的优先级。
4、中断服务程序(ISR):用于处理中断事件,执行相应的操作。
5、中断返回:中断处理完毕后,返回原程序继续执行。
三、单片机中断系统的处理过程当单片机检测到某个中断源发出中断请求时,会暂停当前任务的执行,按照优先级顺序执行相应的中断服务程序(ISR)。
在ISR中,程序会读取中断源的中断请求状态,并对相应的中断源进行处理。
处理完毕后,程序会返回原程序继续执行。
如果此时还有其他的中断源发出中断请求,则根据优先级顺序再次执行相应的ISR。
四、单片机中断系统的应用单片机中断系统在实时控制、数据采集、通信等领域有着广泛的应用。
例如,在工业控制中,当某个传感器发出中断请求时,单片机可以暂停当前任务的执行,转而执行相应的中断服务程序(ISR),对传感器数据进行采集和处理。
处理完毕后,再返回原程序继续执行。
这样,单片机可以在不丢失任何数据的情况下,实时地响应外部设备的请求。
五、总结单片机中断系统是实现实时控制和数据处理的重要手段之一。
通过合理的配置和使用中断系统,可以提高单片机的实时性能和数据处理能力。
在实际应用中,需要根据具体的需求和硬件条件选择合适的单片机型号和中断系统配置方案,以满足系统的实时性和稳定性要求。
单片机的中断系统在嵌入式系统设计中,单片机因其体积小、性价比高、可靠性强等特性被广泛应用。
ARM体系中异常中断种类及处理办法
ARM 体系中异常中断种类及处理办法在ARM 体系中,通常有以下3 种方式控制程序的执行流程:
•在正常程序执行过程中,每执行一条ARM 指令,程序计数器寄存器(PC)的值加4 个字节;每执行一条Thumb 指令,程序计数器寄存器(PC)的值加2 个字节。
整个过程是顺序执行。
•通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行。
其中,B 指令用于执行跳转操作;BL 指令在执行跳转操作的同时,保存子程序的返回地址;BX 指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb 状态;BLX 指令执行3 个操作:跳转到目标地址处执行,保存了子程序的返回地址,根据目标地址的最低位可以将程序状态切换到Thumb 状态。
•当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。
在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。
在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场。
ARM的异常处理学习笔记转贴
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控制位被清除时,处理器产生外部中断请求异常中断。
ARM
关键词
A M 中断 快 速 精 简指 令 系统 R 自 主 【e h sig 式 操 作 , 例 如 打开 主 机 中的 smio t n j
于 一般 性 的程 序控 制 。
的有 :用 户模式 ,程序正常 运行时的模 式 ;快 中断 模 式 - 处 理 器 响 应 快 中 断 而 进 入 的 模 式 ;中 断 模
式 - 处 理 器 响 应 常 规 中 断 而 进 入 的 模 式 ;监 督 模 式 操 作 系 统 的 保 护 模 式 处 理 器 响 应 软 件 中断 时 即 进 入 监 督 模 式 下 面重 点介 绍 ARM 7 DM I 中 T 的 断 特 性 。主 要 特 性 如 表 1所 列
( 3) 返 回地 址 的 计 算 A M 7 DMI 用流 水线 结 构 :当一 条指 令 被 执 R T 采 行 时 ,下 一 条指 令 正 被 译 码 . 而 第 三 条 指 令 被 从 内 存 中取 出 当程 序计 数 器 未 更 新 时 , P c指 向从 内 存
中取 出的指令 , 【 c 4)指 向当前指 令的下一 条指 P.
维普资讯
技 术 纵 横
AH R 内核的中断技术
一 空军工程 大学
摘 要
t
来 卫 国
以 A M D T MI处理 嚣 为倒 . 详 细 介 绍 A M 内棱 的三 种 中断 : 常规 中断 、 快 中 断和 软 件 中断 ; R 7 R
ARM 7 DM I 有 常 规 中 断 ( R ) 快 中 断 T 具 jQ cI F Q)和 软 件 中断 【 ot r nerp )三 种 中断 Sf WaeItr t u 方 式 。常 规 中 断 和 侠 中 断 都 是 硬 件 中 断 快 中断 是 为 支 持 数 据 传 输 或 快 速 数 据 通 道 而 设 计 的 , 为 快 速 处 理 侠 中 断 。① 快 中断 被 设 为最 高 中断 优 先级 在 快 中断 模 式 中增 设 了 7个 私 有 工 作 寄 存 器 , 从 而 避 免 了 由 于 主 工作 寄 存 器 数 据 的 保 存 和 恢 复 而 带 来 的 额 外 开 销 ;③ 快 中 断 处 理 程 序 处 于 异 常 向量 表 的 最 后 位 置 . 因 此 可 紧 接 异 常 向量 表 书 写 快 中断 处 理 程 序 , 而 不 必 进 行 程 序 跳 转 操 怍 , 避免 了刷新 指 令 流水线 和 高速缓 存 。 软 件 中断 是 一 种 由用 户 设 置 的 同 步 中 断 , 由 程
ARM7内核的中断屏蔽方法
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自举程序的中断管理机制
自举 程序是 操作 系统 内核或 用户 应用程 序运 行
之前, 首先 必须 运行 的汇 编语 言 编 写 的 一段 程 序 代
码 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开发板启动代码 中的中断管理机制 ,给 出了构造硬件 固有 中断
学习小结--ARM7中断原理
2
3 向量地址寄存器 0-15(VICVectAddr0-15 - 0xFFFFF100-13C,读/写)
一般(以 Slot0 为例):VICVectAddr0 = (uint32)IRQ_TIME0 ;
4 向量地址寄存器(VICVectAddr - 0xFFFFF030,读/写) VICVectAddr = 0x00; // 通知 VIC 中断处理结束
二 ,VIC 寄存器 1,中断选择寄存器(VICIntSelect - 0xFFFFF00C,读/写)
该寄存器将 32 个中断请求分别分配为 FIQ 或 IRQ。
一般选 IRQ 时:VICIntSelect = 0x00;
1
2,向量控制寄存器 0-15(VICVectCnt l0-15 - 0xFFFFF200-23C,读/写)
PINSEL0 = 0x00000000; // 设置管脚连接 GPIO IO1DIR = LED1|LED2; // 设置 I/O 为输出 IO1SET = LED1|LED2; Time1Init(); // 初始化定时器及使能中断 Time0Init(); VICIntSelect = 0x00; // 所有中断通道设置为 IRQ 中断 VICDefVectAddr = (uint32)nIRQ_TIME; VICIntEnable = time0|time1; while(1); // 等待定时器中断或定时器匹配输出 return(0); }
}
} /**************************************************************************** * 名 称:Time0Init() * 功 能:初始化定时器,定时时间为 S,并使能中断。 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void Time1Init(void) {
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异常中断以及对ARM异常返回地址的分析
返回地址: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 汇编代码: (后面的返回地址分析中将会用到此图)
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 Cortex-A9多核嵌入式系统开发教程 第七章
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)生成,通常被用于内部处理器之间的通信。
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向量中断机制在uClinux下的设计与实现
在某些领域 , 如工控、 汽车 电子等 , 存在着 大量 3 位 的低端应 2 用, 这些处理器没有 MMU 的支持 在这些领域 , 使用u l u Ci x n 能充分 享有 Ln x的几乎所有 的优点 , 时能降代 系统 的成 iu 同
( U) 处理 器 而 设 计 的 。由于 没 有 MMu 的 保 护 等 。 是 MM 的 但
Ln x完 全 一 样 的 功 能 。 u l u iu 而 C i x是 针 对 没 有 内存 管 理 单 元 n
式下 , 最低端的 1 内存存入的就是 中断 向量表 , K 它是 由B O IS
微 型电脑应 用
20 0 6年第 2 卷第 3期 2
AR 向量 中断机 制在 u l u M C i x下 的设 计 与 实现 n
昊 炜 荣 , 梁 阿磊 , 王 刚
摘 要 : A 在 RM 体 系结 构 中 , 件 产 生 的 外部 中 断 ( 硬 I RQ) 有 单 一 的程 序 入 口 。 了识 别 中籽 源 , 而运 行 对 应 的 中 断服 务 具 为 进
本。
表 (nerp ecit nTal—I , Itru tD sr i be DT)I po DT的首地址存储 在 I TR硬件寄存器 中_ 两种模式都 采用 向量 中断机制 。 D 4 ] 在ARM 中实现向量 中断 , 第一种方 式是 设置一个 专用的 可编 程的硬件 寄存器 , 由系统 软件负责填充 中断 向量表 , 并把
该硬 件寄存器 的内容设置成 中断 向量 表的首地址 。第 二种方
式无 需理器 根据 中断 外
源 产 生 一 个 固 定 的 偏 移 , 特 定 的 地 址 写 入 特 定 的处 理 代 码 , 在
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为例,介绍子外部中断处理过程。
ARM体系架构解析
ARM体系架构解析
ARM体系架构是由英国ARM公司推出的常见的32位RISC处理器架构,其在移动设备、嵌入式系统和服务器市场上有广泛应用。
其发展历史源远
流长,经过数十年的发展,其功能也在不断扩展,ARM体系架构已经成为
一种标准处理器架构。
ARM体系架构主要由四大部分组成,分别是内核、外设、中断和指令集。
其中,内核是ARM体系架构的核心,负责处理计算机的所有功能,包
括控制、数据存储和算法处理等。
外设又称外围设备,是处理器与外部世
界的桥梁,可以操控外部设备,比如键盘、显示器、磁盘和网络等。
中断
则是处理器如何处理外部设备发出的信号,其中有多重中断,监听外部设
备的信号,基于不同的中断模式,让处理器运行起来。
指令集是ARM体系
架构的核心,指令集是一组程序指令,它们描述了处理器如何处理和操作
数据,ARM有自己的专有指令集,被广泛应用到移动设备和嵌入式系统中。
ARM体系架构的另一个重要组成部分就是嵌入式软件,由于ARM的低
功耗、低成本和安全性,使得ARM广泛应用于很多嵌入式系统,而这些嵌
入式系统也需要嵌入式软件的支持,嵌入式软件具有低功耗、低功耗和嵌
入式系统的高稳定性等优点,此外。
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)的值。
六、中断返回在恢复上下文后,处理器核会执行一条返回指令,将控制权从异常处理程序返回给原来的执行环境。
ARM之Cortex-M内核中断异常系统详解
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及以上的则为中断输入。
设备驱动程序和中断服务机制
4.2.1 端口或设备中断及ISR示例
端口A中断时执行 ISR_PortA_Charater 的步骤f 和 Out_B 例程中的步骤 g~k 的过程。
9
4.2.2 软件中断和ISR示例
嵌入式软件系统必须为应用程序提供的设备代码包括:(1) 配置初始化,(2)激活,(3)用于读操作的驱动函数,(4) 用于写操作的驱动函数,(5)复位代码。每个设备任务首先 使用一个ISR完成——设备驱动程序函数通过一个软件中断指 令(SWI)调用ISR。
14
4.2.4 设备驱动程序
系统中的每个设备都需要设备驱动程序例程。ISR与设备驱动 程序函数有关。设备驱动程序是高级语言程序员使用的函数, 它实现了与设备硬件交互、与设备进行数据通信、向设备发 送控制命令,并运行读取设备数据的代码。程序员使用设备 驱动程序的通用命令操作设备。这些通用命令由OS提供。 用于设备操作的这些命令使用了一些通用函数。在不同的操 作系统中设备驱动程序代码不同。系统使用不同的OS时,同 一设备可能具有不同的驱动程序代码。
6
4.2.1 端口或设备中断及ISR示例
假设一个字符输入到调制解调器会产生一个端口A中断,并 将状态寄存器中的状态位置位。发生中断后,服务例程 ISR_PortA_Charater 开始运行,以保证调制解调器端口A 不会错过读取该字符。 ISR_PortA_Charater 执行步骤f, 代替前面例子中 In_A_Out_B 例程的步骤a函数i和步骤b函 数ii。它将读取的字符放入存储器缓冲区。步骤c、d和e是 独立的,它们现在作为函数调用 Out_B 中的一部分。
11
4.2.2 软件中断和ISR示例
(a)软件中使用软件中断指令(SWI)调用中断服务例程(ISR)抛出和捕 获运算期间遇到的异常运行条件;(b)使用SWI信号触发另一个例程,程 12
单片机中断系统详细教程
单片机中断系统详细教程单片机中断系统是一种用来处理外部事件的机制,它可以在程序执行过程中,根据外部事件的发生而立即打断程序的执行,转去执行相应的中断服务程序,处理完毕后再回到原来的程序代码继续执行。
在微控制器中,中断系统广泛应用于各种外部事件的处理,包括定时器中断、外部中断、串口中断等。
本文将详细介绍单片机中断系统的原理和使用方法。
一、中断系统的基本原理在单片机中,中断系统由中断源、中断向量和中断服务程序三部分组成。
中断源是指引发中断的外部事件,例如定时器计数溢出、外部输入电平变化等。
中断向量是一个特殊的地址,用于存储中断服务程序的入口地址。
中断服务程序是一段用于处理中断事件的程序代码,它会在中断发生时被自动调用执行。
当单片机在运行程序的过程中发生中断事件时,会首先保存当前的程序状态,包括程序计数器、寄存器等,然后跳转至中断向量中存储的中断服务程序的入口地址开始执行。
中断服务程序执行完毕后,会恢复之前保存的程序状态,返回到原来的程序代码继续执行。
这样的机制可以有效地处理外部事件,提高系统的响应速度和处理效率。
二、中断系统的使用方法使用中断系统需要具备以下步骤:1.初始化中断系统:根据需要选择中断源,并设置中断控制寄存器的相应位,使能或禁止中断。
2.编写中断服务程序:根据中断源的不同,编写相应的中断服务程序。
例如,对于定时器中断,可以在中断服务程序中进行定时事件的处理。
3.设置中断向量表:中断向量是一个特殊的表格,存储着中断服务程序的入口地址。
需要将中断服务程序的入口地址写入中断向量表的相应位置。
4.在主程序中启用中断:在主程序中,需要将中断使能位设置为1,从而使得中断能够被触发并执行中断服务程序。
5.在主程序中处理中断事件:根据需要,在主程序中处理中断事件。
可以通过判断特定的中断标志位来确定中断源,然后执行相应的处理逻辑。
三、中断系统注意事项在使用中断系统时,需要注意以下几点:1.中断服务程序需要尽量简短,避免过多的延时或占用过多的系统资源,否则会影响主程序的执行效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
异常入口/出口
注意:中断返回指令的寄存器列表(其中必须包括 如果异常处理程序已经把返回地址拷贝到堆栈, PC )后的“ ^” 符号表示这是一条特殊形式的指令。 那么可以使用一条多寄存器传送指令来恢复用户寄 这条指令在从存储器中装载 PC 的同时( PC 是最后 存器并实现返回。 恢复的), CPSR也得到恢复。这里使用的堆栈指针 SP ( R13 )是属于异常模式的寄存器,每个异常模 式有自己的堆栈指针。这个堆栈指针应必须在系统 中断处理代码的开始部分和退出部分 启动时初始化。
19
优 先 级 降 低
S3C2410中断概述
S3C2410X中断控制器有56个中断源,对外提 供24个外中断输入引脚,内部所有设备都有中断 请求信号,例如DMA控制器、UART、IIC等等。 S3C2410X的ARM920T内核有两个中断,IRQ 中断和快速中断FIQ。 中断仲裁:当中断控制器接收到多个中断请求 时,其内的优先级仲裁器裁决后向CPU发出优先 级最高的中断请求信号或快速中断请求信号。
IRQ服务程序
在异常处理结束后,异常 处理程序完成以下动作: 将SPSR寄存器的值复制回 CPSR寄存器;
程 序
程序A
将LR寄存的值减去一个常 量后复制到PC寄存器,跳 转到被中断的用户程序。 寄
存 器 组
return
BackAddr-4 JumpAddr N Z C V . . . I F T MOD CPSR ? ? ? ? . . . 0 1 ? 1 0 IRQ SYS
中断系 统有6个分 仲裁器和1 个总仲裁器, 每一个仲裁 器可以处理
6路中断。
22
S3C2410中断控制器
8个专用寄存器
Register
SRCPND INTMOD INTMSK INTPND
Address
R/W
Description
中断标志寄存器 中断模式寄存器 中断屏蔽寄存器 中断优先级寄存器 中断服务寄存器 中断偏移寄存器 子源挂起寄存器
计算机专业核心课程之一
第七讲 ARM中断机制
异常
只要正常的程序流被暂时中止,处理器就进入异常模式。 例如响应一个来自外设的中断。在处理异常之前,ARM内
核保存当前的处理器状态( CPSR->SPSR ),这样当处理 程序结束时可以恢复执行原来的程序(SPSR->CPSR)。
如果同时发生两个或更多异常,那么将按照一定的顺序来 处理异常,也即“异常优先级”的处理。
20
S3C2410中断结构
主要由中断源和控制寄存器两大部分构成,其寄存器主要有4种:
模式、屏蔽、优先级、挂起(标志)寄存器等。
中断源 (有子寄存器) 子中断源 挂起寄存器 子中断源 屏蔽寄存器 中断模式 FIQ 中 断 挂 起 中断屏蔽 优先级仲裁 中断源挂起
21
中断源 (无子寄存器)
IRQ
S3C2410中断结构
7
进入异常
2. 用户程序运行时发生 IRQ 中断,硬件完成以下 1. 程序在系统模式下运行 动作: 用户程序,假定当前处理 器状态为 Thumb状态、允 将CPSR寄存器内容存入 程 许IRQ 中断; IRQ 模式的 SPSR寄存器 序 置位I位(禁止IRQ中断) 清零T位(进入ARM状态) 设置MOD位,切换处理器 模式至IRQ模式 将下一条指令的地址存入 IRQ模式的LR寄存器 将跳转地址存入PC,实 现跳转
SUBS PC,R14_abt,#8
15
软件中断
使用软件中断 (SWI) 指令可以进入管理模式, 通常用于请求一个特定的管理函数。 SWI 处理程序 通过执行下面的指令返回: MOVS PC,R14_svc
这个动作恢复了 PC 并返回到 SWI 之后的指令。 SWI处理程序读取操作码以提取SWI函数编号。
Reset Value
0x00000000 0x00000000 0xFFFFFFFF 0x7F 0x00000000 0x00000000 0x00000000 0x7FF
23
0x4A000000 R/W 0x4A000004 R/W 0x4A000008 R/W 0x4A000010 R/W R
中断源
nBATT_FLT 保留 EINT8_23 EINT4_7 EINT3 EINT2 EINT1 EINT0
23 INT_UART1 15 INT_UART2 7 6 5 4 3 2 1 0
28 INT_UART0 20 INT_DMA3 19 INT_DMA2 18 INT_DMA1 17 INT_DMA0 16
此处PC为产生数 据中止的装载或保 存指令的地址。
复位时保存在 R14_svc中的值不 可预知。
3
复位
无
—
—
注意:“MOVS PC,R14_svc”是指在管理模式执行MOVS PC,R14指令。 “MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等指令也是类似的。
异常入口/出口
14
中止
数据中止
当发生数据中止后,根据产生数据中止的指令 类型作出不同的处理: 数据转移指令(LDR、STR)回写到被修改的基址 寄存器。中止处理程序必须注意这一点; 交换指令( SWP )中止好像没有被执行过一样 (中止必须发生在SWP指令进行读访问时) ; 在修复产生中止的原因后,不管处于哪种处理 器操作状态,处理程序都必须执行下面的返回指令, 重试被中止的指令 :
LR PC
LR_sys BackAddr LR_irq
系统模式
程序A
IRQ模式
IRQ服务程序
寄 存 器 组
JumpAddr N Z C V . . . I F T MOD CPSR ? ? ? ? . . . 1 0 ? 0 1 IRQ SYS
SPSR
???? ... 0? 1SYS SPSR_irq 8 “?”表示对该位不关心
2
异常入口/出口
之前的状态
异常类型 BL
软件中断 SWI 未定义的指令 预取指中止 快中断 中断 数据中止
返回指令 MOV PC,R14
MOVS PC,R14_svc MOVS PC,R14_und SUBS PC,R14_abt,#4 SUBS PC,R14_fiq,#4 SUBS PC,R14_irq,#4 SUBS PC,R14_abt,#8
当发生预取中止时,ARM9内核将预取的指令 标记为无效,但在指令到达流水线的执行阶段时才 进入异常。如果指令在流水线中因为发生分支而没 有被执行,中止将不会发生。 在处理中止的原因之后,不管处于哪种处理器 操作状态,处理程序都会执行下面的指令恢复PC和 CPSR并重试被中止的指令:
SUBS PC,R14_abt,#4
如果异常处理程序已经把返回地址拷贝到堆栈, 那么可以使用一条多寄存器传送指令来恢复用户寄 存器并实现返回。 中断处理代码的开始部分和退出部分
SUB STMFD . . . LDMFD SP!,{R0-R3,PC}^ ;中断返回
4
LR,LR,#4 SP!,{R0-R3,LR}
;计算返回地址 ;保存使用到的寄存器
SUB STMFD . . . LDMFD SP!,{R0-R3,PC}^ ;中断返回
5
LR,LR,#4 SP!,{R0-R3,LR}
;计算返回地址 ;保存使用到的寄存器
进入异常
在异常发生后,ARM9内核会作以下工作: 1 、在适当的 LR 中保存下一条指令的地址,当异常 入口来自: ARM状态,那么ARM内核将当前指令地址加4 或加8复制(取决于异常的类型)到LR中; 为 Thumb 状态,那么 ARM 内核将当前指令地 址加 2 、 4 或加 8 (取决于异常的类型)复制到 LR中;异常处理器程序不必确定状态。
0x0000 0014 0x0000 0018 0x0000 001C
数据中止
保留 IRQ FIQ
中止
保留 中断 快— F 禁止
【注】表中的I和F表示不对该位有影响,保留原来的指。
18
异常优先级
当多个异常同时发生时,一个固定的优先级系 统决定它们被处理的顺序:
异常类型 复位 数据中止 FIQ IRQ 预取中止 未定义指令 SWI 优先级 1(最高优先级) 2 3 4 5 6 7(最低优先级)
16
未定义
当ARM处理器遇到一条自己和系统内任何协处理 器都无法处理的指令时,ARM内核执行未定义指令陷 阱。软件可使用这一机制通过模拟未定义的协处理器 指令来扩展ARM指令集。
在模拟处理了失败的指令后,陷阱程序执行下面 的指令:
MOVS PC,R14_svc
这个动作恢复了 PC 并返回到未定义指令之后的 指令。
SUBS PC,R14_fiq,#4
在一个特权模式中,可以通过置位CPSR中的F位来 禁止FIQ异常。
11
中断请求
中断请求(IRQ)异常是一个由nIRQ输入端的低 电平所产生的正常中断(在具体的芯片中,nIRQ由片 内外设拉低, nIRQ 是内核的一个信号,对用户不可 见)。IRQ的优先级低于FIQ。对于FIQ序列它是被屏 蔽的。任何时候在一个特权模式下,都可通过置位 CPSR中的I 位来禁止IRQ。
中断源
INT_ADC INT_RTC INT_SPI1 INT_IIC INT_USBH INT_USBD 保留
位号
22 21
中断源
INT_SPI0 INT_SDI
位号 中断源 位号
14 13 12 11 10 9 8
INT_TIM4 INT_TIM3 INT_TIM2 INT_TIM1 INT_TIM0 INT_WDT INT_TICK
PRIORITY 0x4A00000C R/W INTOFFSET 0x4A000014
SUBSRCPND 0x4A000018 R/W