版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要:本文首先简要概述了ARM处理器的异常中断种类、响应和返回过程;然后重点讨论了中断解析程序的原理和实现,并分别给出了普通中断和向量中断的处理示例流程图和详细的参考代码。关键词:异常中断;中断解析程序;向量中断;ARM处理器引言 ARM编程特别是系统初始化代码的编写中通常需要实现中断的响应、解析跳转和返回等操作,以便支持上层应用程序的开发,而这往往是困扰初学者的一个难题。中断处理的编程实现需要深入了解ARM内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。需要说明的是,具体的上层高级语言编写的中断服务函数不在本文的讨论范围之内。ARM处理器异
2、常中断处理概述 当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。在进入异常中断处理程序时,要保存被中断的程序的执行现场。从异常中断处理程序退出时,要恢复被中断的程序的执行现场。 ARM体系中通常在存储地址的低端固化了一个32字节的硬件中断向量表,用来指定各异常中断及其处理程序的对应关系。当一个异常出现以后,ARM微处理器会执行以下几步操作:
3、; 1)保存处理器当前状态、中断屏蔽位以及各条件标志位;2)设置当前程序状态寄存器CPSR中相应的位;3)将寄存器lr_mode设置成返回地址;4)将程序计数器(PC)值设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。 在接收到中断请求以后, ARM处理器内核会自动执行以上四步,程序计数器PC总是跳转到相应的固定地址。 从异常中断处理程序中返回包括下面两个基本操作:1)恢复被屏蔽的程序的处理器
4、状态;2)返回到发生异常中断的指令的下一条指令处继续执行。当异常中断发生时,程序计数器PC所指的位置对于各种不同的异常中断是不同的,同样,返回地址对于各种不同的异常中断也是不同的。例外的是,复位异常中断处理程序不需要返回,因为整个应用系统是从复位异常中断处理程序开始执行的。支持中断跳转的解析程序解析程序的概念和作用 如前所述,ARM处理器响应中断的时候,总是从固定的地址开始的,而在高级语言环境下开发中断服务程序时,无法控制固定地址开始的跳转流程。为了使得上层应用程序与硬件中断跳转联系起来,需要编写一段中间的服务程序来进行连接。这样的服务程序常被称作中断解析程
5、序。 每个异常中断对应一个4字节的空间,正好放置一条跳转指令或者向PC寄存器赋值的数据访问指令。理论上可以通过这两种指令直接使得程序跳转到对应的中断处理程序中去。但实际上由于函数地址值为未知和其它一些问题,并不这么做。这里给出一种常用的中断跳转流程: 图1 中断跳转流程图 这个流程中的关键部分是中断向量表,为了让解析程序能找到向量表,应该将向量表的地址固定化(编程者自定义)。这样,整个跳转流程的所有程序地址都是固定的,当中断触发后,就可以自动运行。其中,只有向量表的内容是可变的,编程者只要在向量表中填
6、入正确的目标地址值就可以了。这使得上层中断处理程序和底层硬件跳转有机地联系起来。解析过程示例 以一次IRQ跳转为例,假定中断向量表定义在0x00400000开始的外部RAM空间: 图2 中断解析示例流程图2中实线表示的流程都用ARM汇编语言编写,一般作为boot代码的一部分放在系统的底层模块中。填写向量表的操作可以在上层应用程序中方便地实现,比如在C语言中:*( int *(0x00400018) = (int) ISR_IRQ; 这样就将IRQ中断的服务程序入口地址(0x00300260)填写到中断
7、向量表中的固定地址0x00400018开始的4字节空间了。 如此一来,就可避免在应用程序中计算中断的跳转地址,并且可以很方便的选择不同的函数作为指定中断的服务程序。当然,在程序开发时要合理开辟好向量表,避免对向量表地址空间不必要的写操作。解析程序的扩展 众所周知,在ARM处理器中会包含很多中断源,通常会在ARM内核外面扩展一个中断控制器来管理各种原因产生的中断。比如,三星公司的S3C4510B处理器中的IRQ/FIQ类型的中断源可以有21个,S3C44B0X有26个。这时候中断处理的原理还是一样的,无非是向量表更长,并且当
8、一个中断触发以后,需要在解析程序里查询中断控制器的状态来确定具体的中断源,再根据中断源来读取向量表中的对应地址内容。其处理流程可用图3表示。 图3 中断解析的扩展 相比图2,图3中多了一级的跳转,也就是在第一次解析跳转到IRQ/FIQ服务程序中后,再进行第二次的解析_中断源的识别。向量中断的处理 一些处理器在设计外扩的中断控制器时提供了一种叫做“向量中断”的中断跳转机制。这与前文叙述的扩展解析跳转流程有所不同,它不需要软件来识别具体的中断源,也就是不需要添加图3中的IRQ/FIQ服务程序,
9、而完全由硬件自动跳转到对应的中断地址。其它跳转流程的原理都是一样的。这相当于扩展了ARM内核的硬件中断向量表,减小了中断响应延时。以S3C44B0X处理器的外部中断0为例,需要在其对应的硬件固定跳转地址0x00000020处添加指令: ldr pc,=HandlerEINT,使得程序跳转到其服务程序HandlerEINT0处执行。 图4 向量中断解析流程示例结语 本文介绍的中断处理机制是嵌入式编程中常常采用的方法,其原理是通用的。当然,在实际开发中,需要根据系统处理器ARM内核的中断特征和处理器自身的中断控制器特点具体细化流程图中的各个
10、步骤和改写参考代码。ARM内核的中断技术摘要:以ARM7TDMI处理器为例,详细介绍ARM内核的三种中断:常规中断、快中断和软件中断;结合应用,给出优化的中断处理程序的ARM指令代码,对电子设计人员有效大的参考价值。关键词:ARM 中断 快速 精简指令系统1 ARM7TDMI简介ARM7TDMI是一款经典的通用32位微处理器,采用精简指令系统(RISC)和流水线结构。典型应用如GPS、PDA、双向寻呼机、移动电话、板卡间高速通信等。ARM7TDMI 定义有7种工作模式,本文涉及到的有:用户模式,程序正常运行时的模式;快中断模式,处理器响应快中断
11、而进入的模式;中断模式,处理响应常规中断而进入的模式;监督模式,操作系统的保护模式。处理器响应软件中断时即进入监督模式。下面重点介绍ARM7TDMI的中断特性。主要特性如表1所列。表1 中断特性表向量地址 中断类型 工作模式 优先级 返回地址 0x8 软件中断 SWI模式 6 pc-4 0x18 常规则中断 IRQ模式 4 pc-8 0x1C 快中断 FIQ模式 3 pc-8 ARM7T
12、DMI具有常规中断(IRQ)、快中断(FIQ)和软件中断(SoftWare Interrupt)三种中方式。常规中断和快中断都是硬件中断。快中断是为支持数据传输或快速数据通道而设计的,为快速处理快中断。快中断被设为最高中断优先级;在快中断模式增设了7个私有工作寄存器,从而避免了由于主工作寄存器数据的保存和恢复而带来了额外开销;快中断处理程序处于异常向量表的最后位置,因此可紧接异常向量表书写快中断处理程序,而不必进行程序跳转操作,避免了刷新指令流水线和高速缓存。软件中断是一种由用户设置的同步中断,由程序指令产生,不像硬件中断那样由外部事件触发。软件中断允许运行在用户模式的程序进入监督模
13、式,并运行监督态下的函数。在 ARM7TDMI的硬件调试系统中,应用程序可利用软件中断来申请半自主(semihosting)式操作,例如,打开主机中的一个文件、向调试通道发送一个字符等等(这些操作必须依赖主机中C程序库才能运行,因此被称为半自主式的)。利用软件中断机制,可以直观和高效地仿真调试应用程序。另外,软件中断也可用于一般性的程序控制。2 响应中断和中断返回(1)当中断产生时,ARM7TDMI将执行的操作把当前程序状态寄存器(CPSR)的内容拷贝到相应的备份程序状态寄存器(SPSR)。当前工作模式、中断屏蔽位和状态标志被保存下来。转入相应的模式,并关闭常规中断。如响应
14、快中断,则同时关闭快中断。把程序计数器(pc)的值减4后,存入相应的连接寄存器(1r)。将程序计数器指向相应的中断向量。(2)由中断返回时,ARM7TDMI将完成的操作将备份程序状态寄存器的内容拷贝到当前程序状态寄存器,恢复中断前的状态。清除相应禁止中断位(如果已设置的话)。把连接寄存器的值拷贝到程序计数器,继续运行原程序。(3)返回地址的计算ARM7TDMI采用流水线结构:当一条指令被执行时,下一条指令正被译码,而第三条指令被从内存中取出。当程序计数器未更新的,pc指向从内存中取出的指令,(pc-4)指向当前指令的一条指令。处理器响应软件中断时,由于软件中断由指令自身产生,程序计数器还没有更
15、新,(pc-4)正好指向当前指令的下一条指令。因此,只要在中断处理程序最后加入MOVS pc,lr把连接寄存器的值赋给程序计数器即可。ARM7TDMI总是在一条指令执行完毕后,才去检查是否有硬件中断信号和中断屏蔽状态。此时,程序计数器已经更新,(pc-4)指向当前指令的下两条指令。因此要先把连接寄存器的内容减去4(指向pc-8)后,再赋给程序计数器。要添加的代码是SUBS pc,lr #43 中断处理程序的编写(1)软件中断处理程序的编写软件中断指令的格式如图1所示。低24位立即数为软件中断号。在中断处理程序中,必须首先得到软件中断号,然后根据中断号执行
16、不同代码。以下的中断处理程序,在软件中断号为1时,将端口A的0号引脚置“1”。STMFD sp!,r0-r12,lr /保存各工作寄存器 LDR r0,lr,#-4 /得到该软件中断指令BIC r0,r0,#0xff000000 /从中取出中断号ADR r2,SWIJumpTable /r2指向代码入口表LDR pc,r2,r0,LSL #2 /把r0中的值乘4后加到r2。将/程序计数器指向中断号对应的代码入口地址SWIJumpTable /代码入口表DCD
17、0;SWInum0DCD SWInum1SWInum0 /中断号为0时的处理代码(略)SWInum1 /中断号为1时的处理代码MOV r0,#0x80000000 /r0指向端口ASTRB r0,#0x01 /A口0脚置“1”B EndofSWI /跳转EndofSWILDMFD sp! r0-r12,pc /恢复各寄存器,返回原程序(2)常规中断处理程序的编写为快速执行,常规中断处理程序一般用汇编指令编写。在编写可重入常规中断处理程序(运行时仍可响应常规中断)时,必须先把链
18、接寄存器和程序用到的工作寄存器入栈,然后才能开放中断;各寄存器出栈前,必须先关闭中断。这样可防止因寄存器崩溃而无法返回的情况发生。下文介绍了一个与中控制器相配置的可重入的常规中断处理程序。当若干中断源同时有效时,中断控制器(基址为IntBase)把16个中断源中优先级最高的一个存入中断寄存器(偏移地址为 IntLevel)中,并发出硬件中断信号。SUB lr,lr,#4 /得至并保存返回地址STMFD sp!,lrMRS r14,SPSR /把SPSR和sl2入栈STMFD sp!,r12,r14MOV r12,#IntBaseLDR r12,r12,#IntLevel /将最高优先级号存入r12MRS r14,CPSR. /开中断BIC r14,r14,#0x80MSR CPSR_c,r14LDR PC,PC,r12,LSL #2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年小学卫生室工作计划(二篇)
- 2024年小学安全工作常规检查制度(二篇)
- 2024年小学班主任安全工作计划例文(四篇)
- 2024年学校心理咨询室工作计划(二篇)
- 2024年学生会体育部年度工作计划例文(五篇)
- 2023年泌尿系统用药投资申请报告
- 汽车前沿概念:飞行汽车-引领未来低空发展的新引擎(先进制造2024前沿第8期)
- 2024年单位消防安全管理制度范文(二篇)
- 2024年土木工程实习总结常用版(二篇)
- 2024年婚前房产协议参考范本(二篇)
- 2025届高考英语写作素材积累之航空航天+词汇句型清单
- 2024年国家知识产权局专利局专利审查协作湖北中心招聘100人高频考题难、易错点模拟试题(共500题)附带答案详解
- 物业法律法规指导培训
- 2024年公卫执业医师考试及参考答案
- 广东省2024年初中学业水平考试语文模拟试卷附答案
- 素养立意下的小学数学命题设计新走向
- 2024年贵州省中考英语试题卷(其他市、州卷)及答案详解
- 2024年海南省预防接种技能竞赛理论考试题库(含答案)
- 2024年铸牢中华民族共同体意识网络知识竞赛题库(附答案)
- 叙事护理案例分享(精制手工图文)
- 合同作废重签声明范文
评论
0/150
提交评论