




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式ARM系统原理与实例(shílì)开发北京大学出版社出版11/13/20221第一页,共三十三页。12ARM中断(zhōngduàn)类型及中断(zhōngduàn)向量安装ARM中断处理程序
第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发
11/13/20222第二页,共三十三页。异常(yìcháng)的概念异常将导致处理器停止当前事务处理,转而处理一个突发事件〔这个突发事件包括外部或者内部引起的〕。例如一个外部中断或者试图执行一个未定义的指令。在处理异常之前,为了在异常处理完成后能够很好的返回到中断处理之前的状态,在编写程序的时候有必要将处理器当前的状态保护起来,另外,在同一时刻有可能出现多个异常中断请求。11/13/20223第三页,共三十三页。ARM异常(yìcháng)类型如果发生中断及异常,以下信息需要进行保护:(1)当前程序的状态,即CPU信息,存储在CPSR存放器中;(2)当前程序的位置,以便于从异常及中断中返回,即当前PC存放器信息;(3)临时数据信息,即当前R0~R12数据。ARM处理器在执行中断效劳程序之前,都将这些信息进行了有效的保护:(1)
LR(R14)存放器用来保存当前CPU存放器的值,即程序的返回地址;(2)
SPSR存放器用来保护当前程序的状态,即CPU信息;(3)临时数据使用栈来保存,当中断发生后,系统将开辟一段内存空间,将R0~R12的数据依次压入栈中,用R13来存储该栈空间的入口地址。经过以上机制,ARM处理器能够很好的支持中断和中断嵌套。11/13/20224第四页,共三十三页。ARM异常(yìcháng)类型11/13/20225第五页,共三十三页。ARM中断响应(xiǎngyìng)过程11/13/20226第六页,共三十三页。Reset异常(yìcháng)及处理当系统复位信号产生后,ARM处理器当立即中断当前正在执行的指令。进入复位处理时,处理器将进行以下操作: R14_svc=UNPREDICTABLEvalue //R14_svc不可知 SPSR_svc=UNPREDICTABLEvalue //SPSR_svc不可知 CPSR[4:0]=0b10011 //处理器进入svc模式 CPSR[5]=0 //执行ARM状态 CPSR[6]=1 //禁止FIQ CPSR[7]=1 //禁止IRQ ifhighvectorsconfiguredthen //指向复位向量地址 PC=0xFFFF0000 else PC=0x00000000当复位后,ARM处理器PC指针将立刻指向0x00000000或0xFFFF0000地址,禁止所有外部中断,运行于SVC模式。11/13/20227第七页,共三十三页。未定义指令异常(yìcháng)及处理当试图执行一个ARM处理器及其协处理器都无法识别的指令时将产生一个未定义指令异常。在没有实际硬件支持时,未定义指令异常可以被用来进行一个协处理器的软件仿真,或者其它软件仿真功能。11/13/20228第八页,共三十三页。未定义指令异常处理(chǔlǐ)步骤R14_und=addressofnextinstructionaftertheundefinedinstruction //R14_und为下一指令地址SPSR_und=CPSR //存储CPSR状态CPSR[4:0]=0b11011 //进入未定义模式CPSR[5]=0 //执行ARM执行 //CPSR[6]isunchanged,允许FIQCPSR[7]=1 //禁止IRQifhighvectorsconfiguredthen //指向未定义中断向量 PC=0xFFFF0004else PC=0x0000000411/13/20229第九页,共三十三页。软中断异常(yìcháng)及处理软中断异常是由SWI指令产生的,其将进入使CPU进入SVC模式,执行以下操作: R14_svc=addressofnextinstructionaftertheSWIinstruction //R14_svc指向SWI下一条要执行指令 SPSR_svc=CPSR //备份CPSR CPSR[4:0]=0b10011 //进入SVC模式 CPSR[5]=0 //执行ARM状态指令 /*CPSR[6]isunchanged*/ CPSR[7]=1 //禁止IRQ ifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF0008 else PC=0x0000000811/13/202210第十页,共三十三页。预取指异常(yìcháng)及处理存储异常是由存储系统产生的,当试图读取一个不可用指令时,将产生一个存储器异常信号来标识所取指指令不可用。当试图执行该指令时将产生一个预取异常,如果该指令并没有被执行〔例如在管理操作时执行分支指令〕那么不会产生一个预取异常。在ARMv5及以上版本,执行BKPT指令也会产生一个预取异常。11/13/202211第十一页,共三十三页。预取指异常(yìcháng)及处理预取指异常处理指令如下: R14_abt=addressoftheabortedinstruction+4 //R14_abt存储abt指令+4位置 SPSR_abt=CPSR //保存CPSR CPSR[4:0]=0b10111 //进入SVC模式 CPSR[5]=0 //执行ARM状态指令 /*CPSR[6]isunchanged*/ CPSR[7]=1 //禁止IRQ ifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF000C else PC=0x0000000C11/13/202212第十二页,共三十三页。IRQ异常(yìcháng)及处理当外部普通中断异常请求管脚发送中断信号时,将产生一个普通IRQ,因其优先级低于FIQ,因此,当产生一个FIQ时将屏蔽掉IRQ请求。另外,当置位了CPSR的I位后〔只有在特殊模式下才能修改I位〕,IRQ将被屏蔽。IRQ中断请求响应后将指令以下操作:R14_irq=addressofnextinstructiontobeexecuted+4 //R14_irq存储当前指令+4位置SPSR_irq=CPSR //保存CPSRCPSR[4:0]=0b10010 //进入IRQ模式CPSR[5]=0 //执行ARM状态指令/*CPSR[6]isunchanged*/CPSR[7]=1 //禁止IRQifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF0018else PC=0x0000001811/13/202213第十三页,共三十三页。FIQ异常(yìcháng)及处理当外部快速中断异常请求管脚发送中断信号时,将产生一个FIQ,FIQ被设置来实现高速数据传输和通道处理,其有充足的私有存放从而减少上下文切换时保存存放器数据的时间。当CPSR的F位被置位时将禁止FIQ请求〔只有在特殊模式下才能修改F位〕。11/13/202214第十四页,共三十三页。FIQ中断(zhōngduàn)处理当FIQ中断处理之前将进行以下操作:R14_fiq=addressofnextinstructiontobeexecuted+4 //R14_irq存储当前指令+4位置SPSR_fiq=CPSR //保存CPSRCPSR[4:0]=0b10001 //进入FIQ模式CPSR[5]=0 //执行ARM状态指令CPSR[6]=1 //禁止FIQCPSR[7]=1 //禁止IRQifhighvectorsconfiguredthen //进入异常处理 PC=0xFFFF001Celse PC=0x0000001C11/13/202215第十五页,共三十三页。12ARM中断(zhōngduàn)类型及中断(zhōngduàn)向量安装ARM中断处理程序
第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发
11/13/202216第十六页,共三十三页。两种方式(fāngshì)来装载中断处理程序使用跳转指令。这是最简单的跳转到中断异常处理程序(每一个中断向量入口表中包括一个跳转指令到相应的中断效劳程序),但这种方式会受到跳转指令的限制,即ARM跳转指令只能有+/-32MB的相对寻址能力。加载PC存放器。采用这种方式,PC存放器将被强制指向中断处理程序地址。存储中断处理程序的地址与当前PC值为一个相对地址(4
KB范围内)。11/13/202217第十七页,共三十三页。在复位时使用(shǐyòng)汇编语言装载中断处理程序11/13/202218第十八页,共三十三页。使用C语言程序安装中断(zhōngduàn)处理程序地址
B/BL指令编码格式11/13/202219第十九页,共三十三页。利用(lìyòng)跳转指令利用跳转指令的二进制编译方式,使用C语言程序装载中断处理程序可以使用以下执行步骤如下:(1)获取中断异常处理函数地址;(2)在该地址值上减去相应中断向量表地址值,因为跳转指令是相对寻址;(3)减去0x8以允许预取地址值,因为在执行异常向量表处的指令时,由于流水线的原因,PC的值实际指向中断向量地址+8处;(4)将结果值右移两位以实现字对齐,根据前面跳转指令的编码规那么。(5)检测最高8位是否为0,以确保结果只有24位(因为跳转指令受24位寻址限制);(6)与0xEA000000(无条件指令跳转指令的操作码,条件域为1110,指令为1010)进行逻辑或(OR)操作以获得保存在中断向量表中的值。11/13/202220第二十页,共三十三页。利用跳转指令安装(ānzhuāng)中断的c代码11/13/202221第二十一页,共三十三页。12ARM中断(zhōngduàn)类型及中断(zhōngduàn)向量安装ARM中断处理程序
第6章ARM异常中断处理及程序设计3IRQ中断处理过程及处理3SWI中断处理原理及应用程序开发
11/13/202222第二十二页,共三十三页。S3C2410处理器中断管理(guǎnlǐ)方法S3C2410处理器中断管理硬件结构图11/13/202223第二十三页,共三十三页。S3C2410中断(zhōngduàn)处理方法〔1〕是否屏蔽该中断。根据是否属于二级中断源,即设置存放器INTMSK和INTSUBMSK存放器对应位;〔2〕设置某类中断为普通中断还是快速中断,即设置中断类型存放器INTMOD对应位;〔3〕如果是IRQ中断,设置该中断的优先级。即设置存放器PRIORITY以决定其优先级。〔4〕更重要的是,针对该中断,CPU接收到该硬件请求后,执行怎么样的操作,即执行什么代码11/13/202224第二十四页,共三十三页。ISR中断(zhōngduàn)处理过程〔1〕中断发生,IRQ管脚向CPU产生中中断请求信号;〔2〕系统进行必要的数据保护后〔将程序位置存储在LR存放器,存储CPSR存放器值在SPSR后,设置CPSR存放器中断屏蔽位,切换到IRQ模式〕,PC指针跳转到IRQ的中断向量0x0000,0018地址;〔3〕CPU根据内存0x0000,0018位置的代码执行IRQ_Handler位置的代码,在IRQ_Handler中进行现场保护,将LR存放器,SPSR存放器,R0-R12通用存放器的数据存入到IRQ栈中,然后执行ISR_IrqHandler()函数〔在IRQ_Handler代码中有跳转指令,见上面说明〕。〔4〕ISR_IrqHandler()函数完成中断源判断〔具体是什么中断〕,执行中断处理函数〔在安装中断时已经指定〕。〔5〕中断返回。11/13/202225第二十五页,共三十三页。中断(zhōngduàn)处理代码11/13/202226第二十六页,共三十三页。12ARM中断(zhōngduàn)类型及中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海洋油气操作工高级模拟试题(含参考答案)
- 安全知识的班会
- 脑室外引流护理
- 公司裁员解聘合同范例
- 仓房搭建合同范例
- 农村永久征地合同范例
- 临时用工合同范例
- 洗浴吧员岗位职责
- 公厕管理劳务合同范例
- tod开发模式合同范例
- 爱德华阀门检修工艺(2)2
- GB/T 13701-1992单标准气体质谱法铀同位素分析
- AMOLED技术宝典(十年OLED技术经验总结)
- 7S稽核查检表-仓库
- 小学科学《噪音的危害与防治》优质课件
- 病理学-第3章 局部血液循环障碍
- 湖北省黄石市基层诊所医疗机构卫生院社区卫生服务中心村卫生室信息
- 打印版医师执业注册健康体检表(新版)
- 时代与变革-为人生而艺术
- 人教八年级下册英语U5Do-you-remember-what-you-were-doing?课件
- 2009-2022历年上海市公安机关勤务辅警招聘考试《职业能力倾向测验》真题含答案2022-2023上岸必备汇编3
评论
0/150
提交评论