欢迎来到天天文库
浏览记录
ID:36185129
大小:156.50 KB
页数:30页
时间:2019-05-06
《06 异常中断处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、嵌入式ARM系统原理与实例开发北京大学出版社 出版杨宗德 编著2007年7月12ARM中断类型及处理方式ARM处理器中断处理程序设计第6章ARM异常中断处理及程序设计3SWI中断处理原理及应用程序开发异常的概念异常将导致处理器停止当前事务处理,转而处理一个突发事件(这个突发事件包括外部或者内部引起的)。例如一个外部中断或者试图执行一个未定义的指令。在处理异常之前,为了在异常处理完成后能够很好的返回到中断处理之前的状态,在编写程序的时候有必要将处理器当前的状态保护起来,另外,在同一时刻有可能出现多个异常中断请
2、求。9/19/20213北京大学出版社出版 杨宗德编著ARM异常类型9/19/20214北京大学出版社出版 杨宗德编著异常处理当一个异常发生后,该异常模式下的R14和SPSR使用以下顺序来保存当前CPU的状态:R14_=returnlink//返回地址保存在该模式下R14SPSR_=CPSR//CPSR保存在该模式下的SPSR中CPSR[4:0]=exceptionmodenumber//切换处理器模式CPSR[5]=0//CPU处于ARM状态
3、if==ResetorFIQthen//如果是复位或者FIQCPSR[6]=1//禁止FIQ请求CPSR[7]=1//禁止IRQ请求PC=exceptionvectoraddress//指向中断处理程序向量地址从异常处理程序中返回时,需要将CPSR中的CPU状态恢复,同时将R14数据传输给PC,可以采用以下两种方式自动完成:在使用数据处理指令时带上S位,且PC寄存器做为目标寄存器。使用多寄存器加载指令加载CPSR,如LDM。9/19/20215北京大学出版社出版 杨宗德编著R
4、eset异常及处理当系统复位信号产生后,ARM处理器当立即中断当前正在执行的指令。进入复位处理时,处理器将进行以下操作:R14_svc=UNPREDICTABLEvalue//R14_svc不可知SPSR_svc=UNPREDICTABLEvalue//SPSR_svc不可知CPSR[4:0]=0b10011//处理器进入svc模式CPSR[5]=0//执行ARM状态CPSR[6]=1//禁止FIQCPSR[7]=1//禁止IRQifhighvectorsconfiguredthen//指向复位向量地址PC
5、=0xFFFF0000elsePC=0x00000000当复位后,ARM处理器PC指针将立刻指向0x00000000或0xFFFF0000地址,禁止所有外部中断,运行于SVC模式。9/19/20216北京大学出版社出版 杨宗德编著未定义指令异常及处理当试图执行一个ARM处理器及其协处理器都无法识别的指令时将产生一个未定义指令异常。在没有实际硬件支持时,未定义指令异常可以被用来进行一个协处理器的软件仿真,或者其它软件仿真功能。9/19/20217北京大学出版社出版 杨宗德编著未定义指令异常处理步骤R14_un
6、d=addressofnextinstructionaftertheundefinedinstruction//R14_und为下一指令地址SPSR_und=CPSR//存储CPSR状态CPSR[4:0]=0b11011//进入未定义模式CPSR[5]=0//执行ARM执行//CPSR[6]isunchanged,允许FIQCPSR[7]=1//禁止IRQifhighvectorsconfiguredthen//指向未定义中断向量PC=0xFFFF0004elsePC=0x000000049/19/2021
7、8北京大学出版社出版 杨宗德编著软中断异常及处理软中断异常是由SWI指令产生的,其将进入使CPU进入SVC模式,执行以下操作:R14_svc=addressofnextinstructionaftertheSWIinstruction//R14_svc指向SWI下一条要执行指令SPSR_svc=CPSR//备份CPSRCPSR[4:0]=0b10011//进入SVC模式CPSR[5]=0//执行ARM状态指令/*CPSR[6]isunchanged*/CPSR[7]=1//禁止IRQifhighvector
8、sconfiguredthen//进入异常处理PC=0xFFFF0008elsePC=0x000000089/19/20219北京大学出版社出版 杨宗德编著预取指异常及处理存储异常是由存储系统产生的,当试图读取一个不可用指令时,将产生一个存储器异常信号来标识所取指指令不可用。当试图执行该指令时将产生一个预取异常,如果该指令并没有被执行(例如在管理操作时执行分支指令)则不会产生一个预取异常。在ARMv5及以上版本,
此文档下载收益归作者所有