版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。异常主要是从处理器被动接受的角度出发的一种描述,指意外操作引起的异常。而中断则带有向处理器主动申请的意味。但这两种情况具有一定的共性,都是请求处理器打断正常的程序执行流程,进入特定程序的一种机制。若无特别说明,对“异常”和“中断”都不作严格的区分。本文结合经过实际验证的代码对ARM9中断处理流程进行分析,并设计出基于S3C2410芯片的外部中断处理程序。 1.异常中断响应和返回 系统运行时,异常可能会随时发生。当一个异常出现以后,ARM微处理器会执行以下几步操作: 11) 将下一一条指令令的地址址存
2、入相相应连接接寄存器器LR,以便程程序在处处理异常常返回时时能从正正确的位位置重新新开始执执行。 22) 将CPPSR复复制到相相应的SSPSRR中。 33) 根据异异常类型型,强制制设置CCPSRR的运行行模式位位。 44) 强制制PC从从相关的的异常向向量地址址取下一一条指令令执行,从而跳跳转到相相应的异异常处理理程序处处。 这些些工作是是由ARRM 内内核完成成的,不不需要用用户程序序参与。异常处处理完毕毕之后,ARMM微处理理器会执执行以下下几步操操作从异异常返回回: 1) 将将连接寄寄存器LLR的值值减去相相应的偏偏移量后后送到PPC中。 2) 将SPPSR复复制回CCPSRR中。
3、3) 若在进进入异常常处理时时设置了了中断禁禁止位,要在此此清除。 这些工工作必须须由用户户在中断断处理函函数中实实现。为为保证在在ARMM处理器器发生异异常时不不至于处处于未知知状态,在应用用程序的的设计中中,首先先要进行行异常处处理。采采用的方方式是在在异常向向量表中中的特定定位置放放置一条条跳转指指令,跳跳转到异异常处理理程序。当ARRM处理理器发生生异常时时,程序序计数器器PC会会被强制制设置为为对应的的异常向向量,从从而跳转转到异常常处理程程序。当当异常处处理完成成以后,返回到到主程序序继续执执行。可可以认为为应用程程序总是是从复位位异常处处理程序序开始执执行的,因此复复位异常常处理
4、程程序不需需要返回回。 2.异异常处理理程序设设计 2.11 异常响响应流程程 由于向向量表的的限制,只能有有一条指指令B完完成322MB范范围内的的跳转,并不能能保证所所有的异异常处理理函数都都位于332MBB范围内内。为了了扩展跳跳转范围围,需要要二次跳跳转才能能把异常常处理函函数的地地址传送送给PCC。异常常处理调调用关系系如图11所示。 三三星公司司网站提提供了ttestt24110_rr11软软件包,其中224100iniit.ss有如下下代码: HanndleerXXXX ssub sp,sp,#4 ;减少ssp,保保存跳转转地址 sstmffd sp!,rr0 ;将工工作寄存存器
5、压入入堆栈 lldr rr0,=HanndleeXXXX ;将将HanndleeXXXX地址放放入r00 lldr r00,rr0 ;将中断断程序入入口地址址放入rr0 sstr rr0,sp,#4 ;将中断断程序入入口地址址压入堆堆栈 lldmffd spp!,r0,pc ;将工作作寄存器器和中断断程序入入口地址址弹出到到r0和和PC图1异常常处理调调用 并且且在RAAM中定定义了存存有中断断程序入入口地址址表_IISR_STAARTAADDRRESSS: ARREA RammDatta, DATTA, REAADWRRITEE _ISRR_STTARTTADDDRESSS Haandlle
6、Reesett # 4 HaandlleUnndeff # 4 HaandlleSWWI # 4 HaandllePaaborrt # 4 HaandlleDaaborrt # 4 HaandlleReeserrvedd # 4 HaandlleIRRQ # 4 HaandlleFIIQ # 4 通常常HanndleerXXXX位于于程序入入口地址址32MMB范围围内,HHanddleXXXX是是以_IISR_STAARTAADDRRESSS为基地地址的RRAM中中地址。该代码码主要实实现跳转转功能,把异常常处理程程序地址址HanndleeXXXX送到PPC中。例如产产生IRRQ中断断时,PP
7、C会被被强制设设置为00 x188,执行行指令:b HanndleerIRRQ 在HHanddlerrIRQQ程序段段内,处处理器做做一些必必要的处处理,就就会将_ISRR_STTARTTADDDRESSS表中中存放的的IRQQ入口地地址送入入PC,然后开开始执行行相关中中断程序序。由于于_ISSR_SSTARRTADDDREESS表表存放在在RAMM中,后后面的CC语言程程序可以以方便地地更改相相关中断断服务程程序的内内容。 2.2 异常常分支 系统可可能存在在多个 IRQQ/FIIQ的中中断处理理程序。为了从从向量表表入口处处的跳转转最终能能找到正正确的中中断处理理程序,需要设设计一套套处
8、理机机制和方方法来实实现。可可以在AARM的的异常向向量表之之外,增增加一张张关联中中断控制制器的向向量表,向量表表中的内内容对应应每个具具体的中中断源,可以协协助跳转转到不同同的中断断处理程程序。 当响应应外设的的一个中中断请求求时,首首先触发发ARMM核的中中断,进进人中断断程序,再通过过中断控控制器识识别中断断源,使使PC能能够自动动获得中中断处理理程序的的地址。有的芯芯片支持持特殊的的硬件分分支功能能,依据据中断源源自动跳跳转到向向量表的的相应地地址,多多数情况况下是用用软件来来处理异异常分支支。 在S33C24410体体系中,中断的的调用可可以看成成是经历历了2次次“中断断向量表表”
9、的查查询。224100iniit.ss中的以以下代码码完成功功能就是是查询中中断偏移移寄存器器INTTOFFFSETT,得到到当前中中断的中中断号,并根据据中断号号再调用用相关的的中断服服务程序序。 IssrIRRQ ssub sp,sp,#4 sstmffd spp!,r8-r9 lldr r99,=IINTOOFFSSET lldr r99,rr9 lldr r88,=HHanddleEEINTT0 aadd r8,r8,r9,lsll #22 lldr r88,rr8 sstr r88,ssp,#8 lldmffd spp!,r8-r9,pc 为了方方便C程程序使用用中断,将IssrIR
10、RQ设为为IRQQ的中断断服务程程序。 lldr r00,=HHanddleIIRQ lldr r11,=IIsrIIRQ sstr r11,rr0 其中HHanddleEEINTT0是用用户自己己开辟的的一块存存储空间间的起始始地址,后面按按次序存存放中断断异常处处理程序序的地址址,也可可以理解解为二级级中断向向量表。IsrrIRQQ从中断断控制器器处获取取中断源源信息,然后再再从二级级中断向向量表中中的对应应地址单单元得到到异常中中断处理理程序的的入口地地址,完完成异常常响应的的跳转。二级中中断向量量表一般般位于 HanndleeFIQQ的后面面,也就就是以_ISRR_STTARTTADD
11、DRESSS00 x200为起始始地址,这里定定义了SS3C224100处理器器所有中中断源的的相关中中断处理理处理程程序入口口。这种种方法的的好处是是用户程程序在运运行过程程中能够够动态改改变异常常向量。 2.33 中断函函数设计计 为了方方便高级级语言设设计中断断处理函函数,标标准的AARM指指令编译译器提供供了一个个用来声声明中断断处理函函数的关关键字-irqq,使用用此关键键字声明明的函数数可以被被编译器器识别为为中断处处理函数数。编译译后的代代码在处处理异常常事件前前保存现现场信息息,处理理异常事事件后对对现场信信息进行行恢复。中断函函数设计计如下:stattic voiid _ir
12、rq EEintt3Innt(vvoidd) CleearPPenddingg(BIIT_EEINTT3);Uartt_Prrinttf(EINNT3 intterrruptt iss occcurrredd.nn); numm_innt=33;设置置标志位位 定义中中断处理理程序入入口地址址:#ddefiine pISSR_EEINTT3 (*(unssignned *)(_ISSR_SSTARRTADDDREESS+0 x22c) 在初始始化程序序,引用用代码ppISRR_EIINT33=(UU32)Einnt3IInt,即可定定义地址址_ISSR_SSTARRTADDDREESS+0 x
13、22c内容容是Eiint33Intt的地址址,外部部中断33产生请请求时即即可调用用中断处处理函数数Einnt3IInt。 3.外外中断初初始化程程序设计计 S3CC24110X 的中断断控制寄寄存器能能接收来来自566个中断断源的请请求。内内部的外外围模块块和外部部管脚产产生的多多个中断断请求通通过中断断控制器器冲裁后后,向AARM9920TT核发出出FIQQ或者 IRQQ中断。ARMM内核只只有2个个外部中中断输入入信号nnIRQQ和nFFIQ,在具体体嵌入式式系统中中,需要要用中断断控制器器管理多多个外部部中断源源,选择择其中一一个中断断,通过过 nIIRQ或或nFIIQ向AARM内内核
14、发出出中断请请求,如如图2所所示。图2 FFIQIRQQ中断处处理过程程 ARMM9200T内核核可以识识别正常常中断请请求和快快速中断断请求两两种类型型的外部部中断,中断的的行为模模式由中中断控制制器来设设置。SS3C224100X的中中断控制制器包括括6类寄寄存器:中断源源状态寄寄存器、中断模模式寄存存器、中中断屏蔽蔽寄存器器、优先先级寄存存器、中中断状态态寄存器器,以及及中断偏偏移寄存存器。 在初始始化程序序中,需需要选择择相应管管脚的功功能,在在此定义义GPFF3为EEINTT3模式式,通过过外部中中断控制制寄存器器EXTTINTT0设定定EINNT3是是下降沿沿触发方方式,通通过设置
15、置中断源源悬挂寄寄存器SSRCPPND、中断悬悬挂寄存存器INNTPNND和中中断屏蔽蔽寄存器器INTTMSKK开启EEINTT3。中中断模式式寄存器器和中断断优先级级寄存器器采用系系统默认认方式。具体代代码实现现如下:voidd Eiint_Iniit(vvoidd)rGPFFCONN = (rGGPFCCON & 00 x3ff0c)|(1177);rEXTTINTT0 = (rrEXTTINTT0 & (0 x77112) | 0 x22112; pISRR_EIINT33=(UU32)Einnt3IInt; rSSRCPPND = BBIT_EINNT3; rrINTTPNDD = BITT_EIINT33; rrINTTMSKK
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论