第四章ARM存储与异常中断处理精品文档
ARM中异常中断处理概述
异常中断处理概述1.ARM中异常中断处理概述1)在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加4个字节;每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节.整个过程是顺序执行.2)通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行;B指令用于执行跳转操作;BL指令在执行跳转操作的同时,保存子程序的返回地址;BX指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb状态;BLX指令执行3个操作:跳转到目标地址处执行,保存子程序的返回地址(R15保存在R14中),根据目标地址的最低位可以将程序状态切换到Thumb状态.3)当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行.在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行.4)在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场.本章讨论ARM体系中的异常中断机制.2.ARM体系中异常中断种类.ARM体系中的异常中断如下表所示:3.中断向量表中指定了各异常中断及其处理程序的对应关系.它通常存放在存储地址的低端.在ARM体系中,异常中断向量表的大小为32字节.其中,每个异常中断占据4个字节大小,保留了4个字节空间.每个异常中断对应的中断向量表的4.通过这两种指令,程序将跳转到相应的异常中断处理程序处执行.当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断.在ARM 中通过给各异常中断富裕一定的优先级来实现这种处理次序.当然有些异常中断是不坑能同时发生的,如指令预取中止异常中断和软件中断(SWI)异常中断是有同一条指令的执行触发的,他们是不可能同时发生的.处理器执行某个特定的异常中断的过程中,称为处理器处于特定的中断模式.各异常中断的中断向量地址以及中断的处理优先级如表2所示.4.异常中断使用的寄存器各异常中断对应着一定的处理器模式.应用程序通常运行在用户模式下.ARM中的处理器模式如表3所示.各种不同的处理器模式可能有对应于该处理器模式的物理寄存器组,如表4所示,其中,R13_svc表示特权模式下的R13寄存器,R13_abt表示中止模式下的R13寄存器,其余的各寄存器名称含义类推.表4 各处理器模式的物理寄存器组如果异常中断处理程序中使用它自己的物理寄存器之外的其它寄存器,异常中断处理程序必须保存和恢复这些寄存器.在表4中各物理寄存器的名称(如R13_svc等)在ARM汇编语言中并没有被预定义.用户使用这些寄存器时,必须使用伪操作RN来定义这些名称.如可以通过下面操作定义寄存器名称R13_svc:R13_svc RN R13一.进入和退出异常中断的过程1.ARM处理器对异常中断的相应过程ARM处理器对异常中断的响应过程如下:a.保存处理器当前状态,中断屏蔽位以及各条件标志位.只是通过将当前程序状态寄存器CPSR的内容保存到将要执行的异常总段对应的SPSR寄存器中实现的.各异常中断有自己的物理SPSR寄存器.b.设置当前程序CPSR中相应的位.包括设置CPSR中的位,使处理器进入相应的执行模式;设置CPSR中的位,禁止IRQ:当进入FIQ模式时,禁止FIQ中断.c.将寄存器LR_mode(R14)设置成返回地址,R14从R15中得到PC的备份.d.将程序计数器值PC设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行.上述的处理器对异常中断的相应过程可以用如下的伪代码描述.e.响应复位异常中断.当处理器的复位引脚有效时,处理器中止当前指令.当处理器的复位引脚变成无效时,处理器开始执行下面的操作.R14_svc = UNPREDICTABLE valueSPSR_svc = UNPREDICTABLE valueCPSR[4:0] = 0b10011 //进入特权模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0000ElsePC = 0x00000000f.响应未定义指令异常中断处理器相应未定义指令异常中断时的处理过程如下面的伪代码所示.R14_und = address of next instruction after the undefined instructionSPSR_und = CPSRCPSR[4:0] = 0b11011 //进入未定义指令异常中断模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0004ElsePC = 0x00000004g.响应SWI异常中断处理器相应SWI异常中断时的处理过程如下面的伪代码所示.R14_svc = address of next instruction after the SWI instructionSPSR_svc = CPSRCPSR[4:0] = 0b10011 //进入特权模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0008ElsePC = 0x00000008h.响应指令预取中止异常中断.处理器相应指令预取中止异常会总段时的处理过程如下面的伪代码所示.R14_abt = address of the aborted instruction + 4SPSR_abt = CPSRCPSR[4:0] = 0b10111 //进入指令预取中止模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff000cElsePC = 0x0000000ci.响应数据访问中止异常中断处理器相应数据访问中止异常中断时的处理过程如下面的伪代码所示.R14_abt = address of the aborted instruction + 8SPSR_abt = CPSRCPSR[4:0] = 0b10111 //进入数据访问中止模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 1 //禁止FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0010ElsePC = 0x00000010j.响应IRQ异常中断处理器相应IRQ异常总段时的处理过程如下面的伪代码所示.R14_irq = address of next instruction to be executed + 4SPSR_irq = CPSRCPSR[4:0] = 0b10010 //进入IRQ异常中断模式CPSR[5] = 0 //切换到ARM状态CPSR[6] = 0 //打开FIQ异常中断CPSR[7] = 1 //禁止IRQ中断If high vectors configured thenPC = 0xffff0018ElsePC = 0x00000018k.响应FIQ异常中断处理器相应FIQ异常中断时的处理过程如下面的伪代码所示.2.从异常中断处理程序种返回基本操作:1)恢复被中断的程序的处理器状态,即将SPSR_mode寄存器内容复制到当前程序状态寄存器CPSR中。
存储与异常中断处理
存储与异常中断处理1. 存储在计算机中,存储指的是计算机用来存储和读取数据的技术和设备。
存储设备可以分为主存储器(RAM)和辅助存储器(硬盘、光盘等)两种类型。
存储器的主要作用是用于存储计算机运行所需的指令和数据。
1.1 主存储器主存储器(Random Access Memory,RAM)是计算机中最重要的存储设备之一。
它用于存储正在运行的程序和数据,以及操作系统使用的一些重要数据。
主存储器的容量只有有限的大小,且数据在计算机关闭时会丢失。
主存储器可以被划分为若干个存储单元,每个存储单元都有一个地址,用于唯一标识该单元。
计算机可以通过地址来访问存储器中的数据。
存储器根据数据的访问方式可以分为随机存取存储器(Random Access Memory,RAM)和只读存储器(Read Only Memory,ROM)两种类型。
1.2 辅助存储器辅助存储器是指计算机中用于存储大量数据的设备,例如硬盘、光盘、磁带等。
辅助存储器的容量远大于主存储器,可以长期保存数据。
辅助存储器的访问速度比主存储器慢,但成本更低,因此常用于存储大规模的数据和长时间保存的文件。
辅助存储器与主存储器之间的数据传输通常需要通过输入输出设备进行,如硬盘控制器、光盘读写头等。
在操作系统中,有专门的文件系统来管理辅助存储器中的数据,包括文件的读写、存储空间的分配等。
2. 异常中断处理计算机执行程序时,可能会出现各种异常情况,如除零操作、内存访问越界、非法指令等。
这些异常情况会导致当前程序的执行被中断,系统需要进行相应的处理。
2.1 异常处理机制操作系统提供了异常处理机制,用于捕获和处理各种异常情况。
当异常发生时,计算机会触发相应的中断信号,操作系统会根据中断类型进行相应的处理。
异常处理包括对错误进行诊断、记录错误信息、执行相应的异常处理程序等。
2.2 中断处理程序中断处理程序是针对中断事件而执行的程序,用于响应中断事件并进行相应的处理。
ARM的异常中断处理
IRQ和FIQ的异常中断的返回
1、中断发生后,PC = PC + 12 LR = PC-4 2、中断返回的指令实现 SUBS PC, LR, #4 还要减4 3、如果使用了数据栈时候的指令实现: SUBS LR, LR, #4 保存 STMFD SP!, {reglist, lr} … LDMFD SP!, {reglist, pc}^ 恢复
SWI和未定义指令异常中断的返回
1、中断发生时,PC = PC + 8(处理器流水线机 制导致) LR = PC-4(CPU自动完成) 2、返回的指令实现 MOVS PC, LR 3、如果使用了数据栈时候的指令实现: STMFD SP!, {reglist, lr} 保存 … LDMFD SP!, {reglist, pc} ^ 恢复
2440中断处理框图
2440中断处理
1、SUBSRCPND 和 SRCPND寄存器表 明有哪些中断被触发了,正在等待处理。 2、INTSUBMSK 和 INTMSK寄存器用于 屏蔽相应的在SUBSRCPND 和 SRCPND 寄存器中提出请求的中断源。
2440中断处理
1、 Request sources(without sub -register)中的 中断源被触发之后, SRCPND寄存器中的相应 位被置1,如果此中断没有被INTMSK寄存器屏 蔽的话,它将被CPU相应。 2、对于Request sources(with sub -register)中 的中断源被触发后,在SUBSRCPND寄存器中 的相应位被置1,如果此中断没有被 INTSUBMSK寄存器屏蔽的话,它在SRCPND寄 存器中的相应位也置为1。如果此中断没有被 INTMSK寄存器屏蔽的话,它将被CPU相应。 以上处理过程假定中断方式为IRQ
interrupt arm中断与异常.ppt
➢ 上半部会立即被内核执行(now主要讲) 2020/4➢/17下半部的执行可以被延嵌迟入,式O可S 以在系统不太繁忙时执 6
❖ 允许不同类型中断的嵌套发生,这样能使更多的 I/O设备处于忙状态
❖ 尽管内核在处理一个中断时可以接受一个新的中 断,但在内核代码中还在存在一些临界区,在临 界区中,中断必须被禁止
其次,如果interrupt context A由于阻塞或是 其他原因睡眠,外界对系统的响应能力将变得不 可忍受
2020/4/17
嵌入式OS
13
4 ,那么interrupt context A和B的关系又如何呢?
由于可能在interrupt context的某个步骤打开了CPU的IF flag标
I and F 位是中断禁止位 M0, M1, M2, M3 and M4 位是模式位
开关中断
include/asm-arm/assembler.h
Interrupts are disabled when the I bit in the CPSR is set. If the I bit is clear, ARM checks for an IRQ at instruction boundaries.
中断和异常
李春杰
为什么会有中断
❖ 内核的一个主要功能就是处理硬件外设I/O ➢ 处理器速度一般比外设快很多 ➢ 内核必须处理其他任务,只有当外设真正完成了准备 好了时CPU才转过来处理外设IO ➢ IO方式: 轮询、中断、DMA等 ➢ 轮询方式效率不高
➢ 中断机制就是满足上述条件的一种解决办法
2020/4/17
2020/4/17
嵌入式OS
25
主要内容
ARM异常、中断及GIC
不同内核共享的中断,由软件设置具体由那个核处理,从ID32开始分配
特殊中断号ID1020-ID1023 ID1023:虚假中断,电平触发中断脉冲时间不够、软件试图改变pending状态
模式控制位:M[4:0]位处理器模式控制位,共8种数值,分别对应8种不同 的内核工作模式。
2020/3/2
6
ARM中断/异常类型(7种)
中断类型
具体含义
复位异常(Reset)
当处理器上电或者复位电平有效时,产生复位异 常,程序跳转到复位异常处理程序处执行,完成 初始化配置。
数据异常(Data Abort) 当数据访问指令访问的地址不存在或者不允许访
中断类型
优先级
复位异常(Reset) 最高 1
数据异常(Data
2
Abort)
快速中断异常(FIQ)
3
外部中断异常(IRQ)
4
预取异常(Prefetch
5
Abort)
软中断异常(SWI)
6
未定义指令异常
最低 7
(Undefined interrupt)
处理器模式
中断入口地址
执行低地址 执行高地址
特权模式
的值,而IRQ和其他内部异常公用r8-r12,保存寄存器的值必须由软件实现, 入栈和出栈均由中断服务程序完成,速度较慢 FIQ中断入口位于中断向量表的最末端,因此中断服务程序可以直接放在异 常向量表的末端执行,不需要跳转,响应速度更快
如何产生FIQ和IRQ?
FIQ和IRQ都是外部中断产生的,可单独配置各个外部中断的安全性, Secure中断可配置为产生FIQ或者IRQ,Non-secure中断只能产生IRQ
arm处理器异常中断响应过程
arm处理器异常中断响应过程ARM处理器是一种广泛应用于移动设备、嵌入式系统和服务器等领域的处理器架构。
在运行过程中,处理器可能会遇到各种异常情况,如访问非法内存、除零错误等。
当这些异常发生时,ARM处理器需要做出相应的中断响应,以保证系统的稳定性和安全性。
ARM处理器异常中断响应的过程可以分为异常触发、异常处理和恢复执行三个阶段。
首先是异常触发阶段。
当处理器在执行指令时,发生了某种异常情况,例如访问了非法的内存地址,处理器会立即检测到异常,并将当前指令的状态保存起来。
同时,处理器会根据异常类型,确定异常向量的地址,将控制转移到异常向量所指向的地址处。
接下来是异常处理阶段。
当处理器进入异常向量所指向的地址时,会执行相应的异常处理程序。
这个程序通常是由操作系统或应用程序提供的,用于处理不同类型的异常。
在异常处理程序中,可以进行一系列的操作,例如保存现场、记录异常信息、处理异常原因等。
处理程序还可以根据需要选择继续执行或终止当前指令。
最后是恢复执行阶段。
在异常处理程序执行完毕后,处理器会根据异常返回地址,将控制权返回到引发异常的指令处,继续执行后续指令。
在返回之前,处理器可能会进行一些必要的恢复操作,如恢复现场、清除异常状态等。
这样,系统就可以继续正常运行,不受异常的影响。
需要注意的是,ARM处理器还提供了一些特殊的异常处理方式,如中断(Interrupt)和陷阱(Trap)。
中断是外部设备触发的异常,用于异步事件的处理,例如外部设备的输入输出请求。
陷阱是由程序主动触发的异常,用于实现系统调用和调试功能。
这些异常的触发和处理方式与一般异常略有不同,但整体的处理过程仍然符合前述的异常中断响应流程。
在ARM处理器中,异常中断响应是保证系统正常运行和异常处理的关键环节。
通过合理的异常处理程序和恢复机制,可以有效地应对各种异常情况,提高系统的可靠性和稳定性。
同时,开发人员也需要根据具体应用场景和需求,灵活地配置和调整异常处理方式,以满足不同的需求。
11.a-ARM异常和中断处理
进行相应中断处理,一般是读写数据
北京亚嵌教育研究中心(AKAE) - 中国嵌入式技术的黄埔军校 27
参考资料
《ARM SoC体系结构》,Steve Furber著, 田泽等译,北京航空航天大学出版社,2002 年10月第一版 《ARM体系结构与编程》,杜春雷著,清 华大学出版社
北京亚嵌教育研究中心(AKAE) - 中国嵌入式技术的黄埔军校 17
IRQ中断返回 中断返回
IRQ异常属于正常的中断请求,可通过对处理器 的nIRQ引脚输入低电平产生。 若将CPSR的I位置为1,则会禁止IRQ中断(注意 只有在特权模式下才能改变I位的状态)。 若将CPSR的I位清零,处理器会在指令执行完之 后检查IRQ的输入。因此,IRQ中断产生时程序 计数器PC的值已经更新,指向当前指令后面第3 条指令。
北京亚嵌教育研究中心(AKAE) - 中国嵌入式技术的黄埔军校 20
指令预取中止异常返回
发生指令预取中止异常时,程序要返回到该标记为有问题 的指令处重新读取并执行,而不是返回到异常发生时的下 一条指令。 指令预取中止异常是由当前执行的指令自身产生的,程序 计数器PC 的值还未更新,指向当前指令后面第2条指令。 指令预取中止异常返回操作可由如下指令实现
北京亚嵌教育研究中心(AKAE) - 中国嵌入式技术的黄埔军校
15
未定义指令异常返回
未定义指令异常是由当前执行的指令自身产生的, 程序计数器PC的值还未更新,指向当前指令后面 第2条指令。 处理器将PC-4保存到寄存器LR_und中。 返回操作可通过如下指令实现
MOVS PC, STMFD SP!, ;… LDMFD SP!, LR {R0-R12,LR} {R0-R12,PC}^
ARM异常中断机制.
ARM异常中断机制.ARM9(以S3C2410为例)中断机制一、ARM异常机制介绍ARM9处理器有7种工作模式。
分别是(除了用户模式其他都是异常模式用户模式(usr:ARM处理器正常的程序执行状态。
快速中断模式(fiq:用于高速数据传输或通道处理。
外部中断模式(irq:用于通用的中断处理。
管理模式(svc:操作系统使用的保护模式。
数据访问终止模式(abt:当数据或指令预取终止时进入该模式。
系统模式(sys:运行具有特权的操作系统任务。
未定义指令中止模式(und:当未定义的指令执行时进入该模式。
每种模式通过5位二进制编码进行标示:用户模式10000快速中断模式10001外部中断模式10010管理模式10011数据访问终止模式10111未定义指令中止模式11011系统模式11111模式编码存放在CPSR(程序当前状态寄存器,记录当前工作模式的编码的值)中的[4:0]。
快速中断模式、外部中断模式、数据访问终止模式、未定义指令中止模式、管理模式称为异常模式。
异常类型具体含义复位当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。
未定义指令遇到不能处理的指令时,产生未定义指令异常。
软件中断该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。
可使用该异常机制实现系统功能调用。
指令预取中止若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
数据中止若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。
IRQ(外部中断请求)当处理器的外部中断请求引脚有效,且CPSR中的I 位为0时,产生IRQ异常。
系统的外设可通过该异常请求中断服务。
FIQ(快速中断请求)当处理器的快速中断请求引脚有效,且CPSR中的F 位为0时,产生FIQ异常。
当多个异常发生时,处理器根据优先级进行处理。
arm中断处理流程
ARM编程特别是系统初始化代码的编写中通常需要实现中断的响应、解析跳转和返回等操作,以便支持上层应用程序的开发,而这往往是困扰初学者的一个难题。
中断处理的编程实现需要深入了解ARM内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。
需要说明的是,具体的上层高级语言编写的中断服务函数不在本文的讨论范围之内。
ARM处理器异常中断处理概述当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。
当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。
在进入异常中断处理程序时,要保存被中断的程序的执行现场。
从异常中断处理程序退出时,要恢复被中断的程序的执行现场。
ARM体系中通常在存储地址的低端固化了一个32字节的硬件中断向量表,用来指定各异常中断及其处理程序的对应关系。
当一个异常出现以后,ARM微处理器会执行以下几步操作:1)保存处理器当前状态、中断屏蔽位以及各条件标志位;2)设置当前程序状态寄存器CPSR中相应的位;3)将寄存器lr_mode设置成返回地址;4)将程序计数器(PC)值设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。
在接收到中断请求以后, ARM处理器内核会自动执行以上四步,程序计数器PC总是跳转到相应的固定地址。
从异常中断处理程序中返回包括下面两个基本操作:1)恢复被屏蔽的程序的处理器状态;2)返回到发生异常中断的指令的下一条指令处继续执行。
当异常中断发生时,程序计数器PC所指的位置对于各种不同的异常中断是不同的,同样,返回地址对于各种不同的异常中断也是不同的。
例外的是,复位异常中断处理程序不需要返回,因为整个应用系统是从复位异常中断处理程序开始执行的。
支持中断跳转的解析程序解析程序的概念和作用如前所述,ARM处理器响应中断的时候,总是从固定的地址开始的,而在高级语言环境下开发中断服务程序时,无法控制固定地址开始的跳转流程。
ARM异常及中断处理实验报告
实验报告实验题目ARM异常及中断处理实验姓名:学号:课程名称:所在学院:专业班级:任课教师:实验项目名称ARM异常及中断处理实验一、实验目的与要求:利用 Exynos4412 的 K2、K3这2个I/O引脚的中断模式,当被按下时进入相应的中断处理函数处理相应的事件。
二、实验设备:华清远见试验箱,PC机三、实验方法(原理,流程图)1、电路原理电路原理如图所示,K2、K3 分别与 GPX1_1、GPX1_2 相连,在没有按下按键时 GPX1_1、GPX1_2 引脚上一直处于高电平,当把这两个引脚设为中断模式并为下降沿中断,则按键被按下俩引脚就会有高电平变为低电平,因此,产生 GPIO 中断进入相应的中断函数,处理中段事件,从终端上打印出相应的按键信息。
其中K2 对应的是XEINT9 中断源,K3 对应的是 XEINT10 中断源。
2、编程流程(1)设置 GPX1_2、GPX1_2 两个管脚没有内部上下拉属性,然后配置为中断模式;(2)设置中断触发方式;(3)GPIO 控制器中关闭屏蔽、使能中断;(4)在 GIC 中断控制器中使能中断;(5)设置中断优先级;(6)使能 GIC;(7)选择中断发送给 CPU0;(8)等待中断产生,然后进入中断处理器函数;(9)清楚中断源的挂起状态。
四、实验过程、步骤及内容1、寄存器设置为了实现进入中断目的,需要通过配置 GPX1CON 寄存器将 GPX1_1、GPX1_2 设置为中断模式。
设置中断方式、中断处理函数、使能中断。
2、编写相关代码如下:(1)设置异常向量表:.text.global _start_start:b resetldr pc,_undefined_instructionldr pc,_software_interruptldr pc,_prefetch_abortldr pc,_data_abortldr pc,_not_usedldr pc,_irqldr pc,_fiq_undefined_instruction: .word _undefined_instruction_software_interrupt:.word _software_interrupt_prefetch_abort:.word _prefetch_abort_data_abort:.word _data_abort_not_used:.word _not_used_irq:.word irq_handler_fiq:.word _fiqreset:ldr r0,=0x40008000mcr p15,0,r0,c12,c0,0 @ Vector Base Address Registermrs r0,cpsrbic r0,r0,#0x1forr r0,r0,#0xd3msr cpsr,r0 @ Enable svc mode of cpu.text.global _start_start:b resetldr pc,_undefined_instructionldr pc,_software_interruptldr pc,_prefetch_abortldr pc,_data_abortldr pc,_not_usedldr pc,_irqldr pc,_fiq_undefined_instruction: .word _undefined_instruction_software_interrupt:.word _software_interrupt_prefetch_abort:.word _prefetch_abort_data_abort:.word _data_abort_not_used:.word _not_used_irq:.word irq_handler_fiq:.word _fiqreset:ldr r0,=0x40008000mcr p15,0,r0,c12,c0,0 @ Vector Base Address Registermrs r0,cpsrbic r0,r0,#0x1forr r0,r0,#0xd3msr cpsr,r0 @ Enable svc mode of cpuinit_stack:ldr r0,stacktop /*get stack top pointer*//********svc mode stack********/mov sp,r0sub r0,#128*4 /*512 byte for irq mode of stack*/ /****irq mode stack**/msr cpsr,#0xd2mov sp,r0sub r0,#128*4 /*512 byte for irq mode of stack*/ /***fiq mode stack***/msr cpsr,#0xd1mov sp,r0sub r0,#0/***abort mode stack***/msr cpsr,#0xd7mov sp,r0sub r0,#0/***undefine mode stack***/msr cpsr,#0xdbmov sp,r0sub r0,#0/*** sys mode and usr mode stack ***/msr cpsr,#0x10mov sp,r0 /*1024 byte for user mode of stack*/b main.align 4/**** swi_interrupt handler ****//**** irq_handler ****/irq_handler:sub lr,lr,#4stmfd sp!,{r0-r12,lr}bl do_irq //跳转到do_irq 处理器函数ldmfd sp!,{r0-r12,pc}^stacktop: .word stack+4*512.datastack: .space 4*512(2)编写中断处理函数,汇编中的处理/**** irq_handler ****/irq_handler:sub lr,lr,#4stmfd sp!,{r0-r12,lr}bl do_irq //跳转到do_irq 处理器函数ldmfd sp!,{r0-r12,pc}^(3)主程序的初始化:int main(void){//LED2 GPX2_7GPX2.GPX2CON |= 0x1 << 28;//LED3 GPX1_0GPX1.GPX1CON |= 0x1;//Led4 GPF3_4GPF3.GPF3CON |= 0x1 << 16;//Key_2 Interrupt GPX1_1GPX1.GPX1PUD = GPX1.GPX1PUD & ~(0x3 << 2); // Disables Pull-up/Pull-downGPX1.GPX1CON = (GPX1.GPX1CON & ~(0xF << 4)) | (0xF << 4); //GPX1_1:WAKEUP_INT1[1](EXT_INT41[1])EXT_INT41_CON = (EXT_INT41_CON & ~(0x7 << 4)) | 0x2 << 4;EXT_INT41_MASK = (EXT_INT41_MASK & ~(0x1 << 1)); // Bit: 1 = Enables interrupt//Key_3 Interrupt GPX1_2GPX1.GPX1PUD = GPX1.GPX1PUD & ~(0x3 << 4); // Disables Pull-up/Pull-downGPX1.GPX1CON = (GPX1.GPX1CON & ~(0xF << 8)) | (0xF << 8); //GPX1_2:WAKEUP_INT1[2] (EXT_INT41[2])EXT_INT41_CON = (EXT_INT41_CON & ~(0x7 << 8)) | 0x2 << 8;EXT_INT41_MASK = (EXT_INT41_MASK & ~(0x1 << 2)); // Bit: 1 = Enables interrupt/** GIC interrupt controller:* */// Enables the corresponding interrupt SPI25, SPI26 -- Key_2, Key_3ICDISER.ICDISER1 |= (0x1 << 25) | (0x1 << 26);CPU0.ICCICR |= 0x1; //Global enable for signaling of interruptsCPU0.ICCPMR = 0xFF; //The priority mask level.Priority filter. thresholdICDDCR = 1; //Bit1: GIC monitors the peripheral interrupt signals and// forwards pending interrupts to the CPU interfaces2ICDIPTR.ICDIPTR14 = 0x01010101; //SPI25 SPI26 interrupts are sent to processor 0printf("\n ********* GIC test ********\n");while (1){GPF3.GPF3DAT |= 0x1 << 4;mydelay_ms(500);GPF3.GPF3DAT &= ~(0x1 << 4);mydelay_ms(500);}return 0;}(4)中断处理函数:void do_irq(void ){int irq_num;irq_num = (CPU0.ICCIAR & 0x3FF);switch (irq_num) {case 58: //turn on LED2; turn off LED3GPX2.GPX2DAT = 0x1 << 7;GPX1.GPX1DAT &= ~0x1;printf("IRQ interrupt !! turn on LED2; turn off LED3\n");//Clear PendEXT_INT41_PEND |= 0x1 << 2;ICDICPR.ICDICPR1 |= 0x1 << 26;break;case 57: //Turn on Led3; Turn off Led2GPX2.GPX2DAT &= ~(0x1 << 7);GPX1.GPX1DAT |= 0x1;printf("IRQ interrupt !! Turn on LED3; Turn off LED2\n");//Clear PendEXT_INT41_PEND |= 0x1 << 1;ICDICPR.ICDICPR1 |= 0x1 << 26;break;}// End of interruptCPU0.ICCEOIR = (CPU0.ICCEOIR & ~(0x1FF)) | irq_num;}(5)时延函数:void mydelay_ms(int ms){int i, j;while(ms--){for (i = 0; i < 5; i++)for (j = 0; j < 514; j++);}3、实验步骤:(1)导入工程源码。
关于ARM核异常与中断处理机制
中断延时是指:从外部请求信号发出到取出对应的中断服务程序 (ISR)的第一条指令,这期间的间隔时间。 五.中断源及其识别方法 S3C2440A 有 60 个中断源,IRQ 有两种中断识别方法:向量中断和 非向量中断。FIQ 只有非向量中断。在 IRQ 各个中断源中的某一个中断源的 中断请求被响应时,CPU 转至 0x18 处自动加载一条转移指令转至相应中断 源的固定中断向量处。IRQ 各个中断源的向量地址是固定的,每个占用一个 字单元。IRQ 各个中断源若采用非向量中断,任意一个中断源发出中断请 求,都认为发生了 IRQ 中断请求,并自动转入 IRQ 中断服务程序执行。IRQ 中断服务程序主要功能是将软件设定的中断向量表中相应的中断源服务程序 入口地址送给 PC,并转其执行。在非向量中断模式下,一般在 IRQ 处放置 一条转移指令:B IsrIRQ 。其中,IsrIRQ 为所有 IRQ 中断服务程序的总入口
关于 ARM 核异常与中断处理机制
一.ARM 处理器异常及其对应的模式 当一个异常发生时,ARM 处理器总是切换到 ARM 状态(即非 Thumb 状态)。Thumb 指令集没有包含进行异常处理时需要的一些指令,因此在异常 中断时,还是要使用 ARM 指令。 每种异常都导致内核进入一种特定的模式。此外,可以通过修改 cpsr,进入任何 ARM 处理器模式。用户和系统模式是仅有的可不通过相应异 常进入的 2 中模式。
地址,也是非向量中断模式的中断源判别及散转程序。
当一个异常导致模式的改变时,内核自动的: 把 cpsr 保存到相应异常模式下的 spsr 把 pc 保存到相应模式下的 lr 设置 cpsr 为相应异常模式 设置 pc 为相应异常处理程序的入口地址 二.向量表 异常发生时,ARM 跳转地址组成的表。
ARM单片机异常中断的集中情况总结
ARM单片机异常中断的集中情况总结ARM单片机是大多数新手选择的入门切入点,但由于学问的不足,在设计过程中新手们常常会遇到这样或那样的问题,ARM特别中断返回就是这样一种令人头疼的问题。
在ARM的使用问题中特别中断返回是新手们较为苦恼的问题,本文就将对ARM特别中断的集中状况进行总结,并给出了一些解决方法。
在正式介绍之前,要为大家补充一些较为重要的基础学问。
首先R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。
一般来说,人们习惯性商定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。
当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;而ADS中的pc,是为了调试看着便利而修改过的,它指向的是正在执行的指令,即“真正pc-8”!SWI和未定义指令特别中断的返回指令地址:A PC-8当前指令为SWI或未定义指令,此时发生中断.PC的值还没有更新。
A+4 PC-4中断时处理器将PC-4保存到LR。
;r!A+8 PC返回时,从发生中断的指令A(PC-8)的下一条指令A+4(PC-4)处开头执行,所以直接把LR的值赋给PC就行了,详细指令为MOV PC,LR(PC=A+4=LR)。
白话解释:对于SWI和未定义指令发生特别时pc没有更新,依据ARM的三级流水线原理,pc没有更新,仍旧等于(A+8);lr = pc – 4(这时处理器打算的,无法更改!)即A+4。
由于这类特别返回后应执行下一条指令(A+4),所以返回时,pc=lr即可。
IRQ 和FIQ特别中断处理的返回指令地址对应于PC A,PC-8执行此指令完成后(!)查询IRQ及FIQ,假如有中断恳求则产生中断。
A+4 PC-4A+8 PC ;lr!(此时PC的值已经更新,指向A+12.将当前PC-4,即A+8)。
保存到LR.返回时,要接着执行A+4(LR-4)处的指令,所以返回指令为:SUBS PC,LR,#4(PC=A+4=LR-4)白话解释:对于普中断和快中断特别,中断必需在一条指令执行完以后被检测到,如正在执行指令甲时发生了中断,不等指令甲执行完是不会处理该中断的,发生特别时pc已经更新(A+12); lr=pc– 4(这时处理器打算的,无法更改!)即A+8返回后,应执行被中断而没有执行的指令(上面的A+4),所以返回时,pc= lr-4。
ARM存储中断处理
区域 指令区域和数据区 数目 域是否分离
8 16 否 是
指令和数据区域配 置是否分离
否 是
ARM946E-S
寄存器 片内Cache,写缓存,TCM,片内SRAM 板卡级SRAM,DRAM和SDRAM NOR型和NAND型闪速存储器 硬盘驱动器、光盘驱动器 速 度 加 快 容 量 增 大
2008年6月21日
4
4.6.3 片上存储器的用法
• 多数ARM处理器芯片内部集成了存储器 – 它们统称为片上存储器 – 用途有:片上Cache、片上SRAM、紧耦合存 储器(TCM) 、写缓存 • 片上存储器的存储空间可以通过指令进行配置, 定义成片上Cache,或者片上SRAM,或者一部 分片上Cache加一部分片上SRAM。 • 紧耦合存储器和写缓存均需要编程使能或者硬件 接线使能 • 按照具体应用情况决定片上存储器配置方法
2008年6月21日
18
ARM920T的片内存储器
• 注意:ARM920T核的内部没有TCM
2008年6月21日
19
ARM720T的片内存储器
• 8 KByte unified cache • Memory Management Unit (MMU) • write buffer • Unified 32-bit AHB bus interface carries both instructions and data • Embedded Trace Macrocell (ETM) interface
ARM966E-S的TCM特点接口( 续2)
The ARM966E-S processor contains a TCM controller that: ◇ schedules requests to the TCM interface ◇ handshakes with the ARM966E-S memory system controller to acknowledge when requests have been serviced ◇ returns TCM read data back to the ARM9E-S core. The TCMs are located in the TCM address space.
ARMlinux的中断处理过程(转)
ARMlinux的中断处理过程(转)⼀、前⾔本⽂主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件⾏为和软件动作。
具体整个处理过程分成三个步骤来描述:1、第⼆章描述了中断处理的准备过程2、第三章描述了当发⽣中的时候,ARM硬件的⾏为3、第四章描述了ARM的中断进⼊过程4、第五章描述了ARM的中断退出过程本⽂涉及的代码来⾃3.14内核。
另外,本⽂注意描述ARM指令集的内容,有些source code为了简短⼀些,删除了THUMB相关的代码,除此之外,有些debug相关的内容也会删除。
⼆、中断处理的准备过程1、中断模式的stack准备ARM处理器有多种process mode,例如user mode(⽤户空间的AP所处于的模式)、supervisor mode(即SVC mode,⼤部分的内核态代码都处于这种mode)、IRQ mode(发⽣中断后,处理器会切⼊到该mode)等。
对于 kernel,其中断处理处理过程中,ARM 处理器⼤部分都是处于SVC mode。
但是,实际上产⽣中断的时候,ARM处理器实际上是进⼊IRQ mode,因此在进⼊真正的IRQ异常处理之前会有⼀⼩段IRQ mode的操作,之后会进⼊SVC mode进⾏真正的IRQ异常处理。
由于IRQ mode只是⼀个过度,因此IRQ mode的栈很⼩,只有12个字节,具体如下:struct stack {u32 irq[3];u32 abt[3];u32 und[3];} ____cacheline_aligned;static struct stack stacks[NR_CPUS];除了irq mode,linux kernel在处理abt mode(当发⽣data abort exception或者prefetch abort exception的时候进⼊的模式)和und mode(处理器遇到⼀个未定义的指令的时候进⼊的异常模式)的时候也是采⽤了相同的策略。
汇编论文关于ARM的异常和中断
汇编语| 言|论ARM的异常和中断异常和中断的过程:当CPU内部或外部出现某种事件(中断源)需要处理的时候,暂停正在执行的的程序(断点),转去执行请求中断的那个事件的处理程序(中断服务程序),执行完后,再返回被暂停执行的程序(中断返回),从断点处继续执行,效果如下图。
异常和中断的处理过程基本一致,但并不是完全的等同。
ARM处理器有7种能够让正确指令顺序中止执行的异常情况:复位,未定义指令,软件中断,指令预取中止,数据中止,中断请求(IRQ),快速中断请求(FIQ)。
其中前五种异常发生后是不可屏蔽的,即一旦发生系统必须响应,后两种(IRQ和FIQ)异常是ARM处理器为外围模块提供的可屏蔽的中断源,外部模块通过控制逻辑可以把这两个中断源进行扩展,因而许多输入输出设备通过这两种方式heCPU进行交互的,ARM中把中断定义为一类特殊的异常,习惯上,称IRQ和FIQ这两种异常为中断。
微机的中断系统因具有以下功能:1.中断响应:当中断源发送请求时,CPU自己决定是否响应。
2.断点保护和中断处理:在中断后,CPU会自动保护断点,并且去执行相关的中断的服务程序。
3.中断优先判断:当有两个或者两个以上的的中断申请的时候,就会对于申请的中断请求进行优先级的评断,然后按照优先级的先后进行中断的处理。
4.中断嵌套:指的是在进行中断处理的过程中又发生新的中断申请,这时候就会进行中断的优先级进行评断,当执行完中断后就返回执行刚才停止的中断。
5.中断返回:自动返回到断点地址,继续执行被中断的程序。
ARM的异常中断ARM处理器支持7种异常情况:复位,未定义指令,软件中断,指令预取中止,数据中止,中断请求(IRQ),快速中断请求(FIQ)。
1.复位ARM处理器中都有一个输入引脚nRESET,这是引起处理器复位异常的唯一原因。
对于ARM处理器复位是由外部复位逻辑引起的,有些复位可以通过软件进行控制,妇委会对系统造成很大的影响,复位后,内部寄存器重新恢复原值,对于ARM内部的数据有可能丢失,但是对于寄存器的值是不确定。
ARM中断异常及其处理器模式
ARM中断异常及其处理器模式
ARM 处理器核有七种异常中断:1.复位(包括上电)
2.FIQ(快速中断)
3.IRQ(一般中断)
4.SWI(软件中断)
5.预取址中止
6.数据中止
7.未定义指令异常
ARM 核发生以上异常时,便会进入相应的处理器模式进行相应的异常处理。
其中ARM 的处理器模式有以下7 种:
1.管理模式(SVC):Supervisor 也是处理器上电默认的运行模式,可由复位(包括上电)和SWI(软件中断)触发进入
2.快速中断模式(FIQ):由快速中断异常异常触发进入进行相应的中断处理子程序
3.一般中断模式(IRQ):由一般中断异常触发进入进行相应的中断处理
4.中止模式(abort):由预取址中止异常和数据中止异常触发进入的
5.未定义模式:由未定义指令异常触发进入
6.用户模式(user):用户软件修改CPSR 进入
7.系统模式(system):用户软件修改CPSR 进入
由此可见,处理器模式是相应的处理器异常的处理模式,但是用户模式和系统模式并不能由异常触发进入,而必须是由软件修改CPSR 的值进入的。
此外系统模式和用户模式共用15 个寄存器和CPSR。
总结处理器异常和处理器模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
system controller to acknowledge
when requests have been serviced ◇ returns TCM read data back to the ARM9E-S
2008年6月21日
17
S3C44B0X和S3C4510B的三 种片上存储器的配置用法
• S3C44B0X和S3C4510B都有8KB的片上存储器 – 它们有三种配置用法 • 8KB的SRAM • 8KB的Cache • 4KB的SRAM加上4KB的Cache
• 较多采用片内RAM配置而非片内Cache配置。
• 要实现一个受PU控制主存的嵌入式系统,需要对 主存中的不同块定义若干区域。
8
Cortex-R4F方框图—含TCM接 口
• 注意图的右 侧含有一个 TCM仲裁和 接口模块
2008年6月21日
9
ARM1136的TCM支持DMA传 输
• 参看ARM1136的方框图
Interrupt Vector Port Prefetch Unit
I-Cache I-TCM
VFP
ARM11 Core
◇ variable TCM wait state control for ITCM and
DTCM
◇ ability to indicate sequential and nonsequential
accesses.
2008年6月21日
14
ARM966E-S的TCM特点接口( 续2)
The ARM966E-S processor contains a TCM controller that:
Coprocessor Interface
LSU w/3-entry buffer
D-TCM D-Cache
DMA For TCMs
I-Read DMA
D-Read D-Write Peripheral
2008年6月21日 Quad 64-bit-wide AHB-lite ports
32-bit AHB bus
• 异常信号被传到处理器核,处理器核判断是出异 常是预取指令中止还是数据中止,然后跳转到对 应的异常处理例程。
2008年6月21日
27
区域属性
• 有关区域的属性如下:
– 区域可以相互重叠 – 每一个区域有一个优先级,该优先级与分配给区域的
权限无关 – 当区域重叠时,具有最高优先权的区域的属性可以覆
第4章ARM体系结构
• 本章主要介绍以下内容:
– ARM存储器组织 – ARM的异常中断
1
4.6 ARM存储器组织
• 介绍以下内容:
– 数据类型和存储格式 – ARM的存储体系 – 片上存储器的用法 – 协处理器CP15 – 存储器管理单元MMU – 保护单元 – 快速上下文切换扩展 – 写缓存器(Write Buffer) – ARM的异常中断向量表和异常中断处理与返回
– 保护单元提供了一个相当简单的替代MMU的方法来 管理存储器。
– 对于不需要PU的嵌入式系统而言,PU简化了硬件和 软件,主要表现在不使用转换表,这样免去了硬件遍 历转换表和软件建立与维护转换表。
ቤተ መጻሕፍቲ ባይዱ
2008年6月21日
24
保护单元的工作原理和作用
• ARM核的PU使用区域(region)来管理系统保护 。区域是一个存储空间相关联的一组属性,处理 器核将这些属性保存在协处理器CP15的一些寄存 器里,并用0-7的号码标识每一个区域(它也是一 个具有特定属性的逻辑存储空间)。
,对TCM接口上连接的存储器类型没有其他限制
。TCM使用物理地址,对TCM的写访问受到
MMU内部保护信息的控制。
2008年6月21日
6
TCM在ARMv6处理器核的位 置
• ARMv6处理器包括:ARM1136J-S、
ARM1156T2
虚拟 地址
地址变换
物理地址
ARM 核 R15
CP15 配置 控制
◇完成虚拟存储空间到物理存储空间的映射。 ◇管理方式:页式虚拟存储器。 ◇页的大小有两种:粗粒度和细粒度。 ◇存储器访问权限的控制。 ◇设置虚拟存储空间的缓冲特性。
2008年6月21日
23
4.6.6 保护单元
• 保护单元
– PU,Protection Unit • 也称为:MPU,Memory Protection Unit • 为了消除术语的二义性,我们统一使用术语PU
。
2008年6月21日
29
带PU的ARM核概要
• 以下给出了四种带PU的ARM核概要属性
ARM核
ARM740T
区域 指令区域和数据区 数目 域是否分离
8
否
指令和数据区域配 置是否分离
否
ARM940T
16
是
是
ARM946E-S 8
否
是
ARM1026EJ-S 8
否
是
2008年6月21日
30
在带PU的ARM系统中创建区 域
• 片上存储器的存储空间可以通过指令进行配置, 定义成片上Cache,或者片上SRAM,或者一部 分片上Cache加一部分片上SRAM。
• 紧耦合存储器和写缓存均需要编程使能或者硬件 接线使能
• 按照具体应用情况决定片上存储器配置方法
2008年6月21日
5
片上存储器用作紧耦合存储器
• 紧耦合存储器的英文原文如下:
• 另一方面,160K字节的片上SRAM可划分成多个 16K字节的区块,作为“指令TCM”、“数据 TCM”或片上外设的缓冲,从而让编程人员灵活地 优化系统的性能和功耗。
2008年6月21日
16
TCM的使能操作
• 通过二种方式进行TCM的使能操作 – 使用处理器芯片的INITRAM引脚 – 使用 CP15的c1控制寄存器
10
ARM966E-S核的TCM地址映 射
2008年6月21日
11
ARM966E-S的TCM别名地址 空间
• 物理存储块可以 通过TCM接口映 射在片内的TCM 存储区
2008年6月21日
12
ARM966E-S的TCM特点
• The ARM966E-S processor supports both instruction and data TCMs. You can use the DTCM and ITCM to store real-time and performance-critical code. The TCMs are instantiated externally to the ARM966E-S macrocell providing for flexibility in the design of the memory subsystem. The system designer can select memory type and optimize the memory subsystem for power or speed.
• 区域的存储边界通过两个属性进行配置:起始地 址和大小。
• 区域的大小可以是4KB~4MB的任何2的乘幂。
2008年6月21日
25
受保护区域的属性
• 操作系统可以为受保护区域分配更多的属 性,包括:
– 访问权限、Cache和写缓存器策略 • 访问权限可以是:读/写、只读和不可访问
– 基于处理器模式的权限 • 管理模式、用户模式等
2
4.6.1 数据类型和存储格式
• ARM存储器中的数据类型有6种
– 有符号数
• 8位(字节)、16位(半字)、32位(字)
– 无符号数
• 8位(字节)、16位(半字)、32位(字)
– 缺省端序设置为小端序
3
4.6.2 ARM的存储体系
• 参看下图,抽象成一个呈金字塔型的存储结构 • 注重研究第2层
2008年6月21日
18
ARM920T的片内存储器
• 注意:ARM920T核的内部没有TCM
2008年6月21日
19
ARM720T的片内存储器
• 8 KByte unified cache
• Memory Management Unit (MMU)
• write buffer
• Unified 32-bit AHB bus interface carries both instructions and data
2008年6月21日
13
ARM966E-S的TCM接口特点(
续1) The features of the TCM interface include:
◇ independent ITCM and DTCM sizes of 0KB or 1KB-64MB in power-of-two increments
L1 Cache
L2 Cache
DRAM SRAM
指令预取 Load
紧耦 合存 储器
R1
Store
R0
TCM
Flash ROM
附加处理器
2008年6月21日
7
片内TCM存储器举例
• ARM926EJ-S核心内置32KB指令缓存、16KB数 字缓存和8KB数据-TCM和8KB指令-TCM;
2008年6月21日
– Cache写策略 • 写直达Cache操作、无Cache操作、无写缓存器操 作。
2008年6月21日
26
含PU的ARM处理器主存访问过 程