s3c2410中断处理程序_第1页
s3c2410中断处理程序_第2页
s3c2410中断处理程序_第3页
s3c2410中断处理程序_第4页
s3c2410中断处理程序_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页s3c2410中断处理程序s3c2410中断程序

在此要注意的是区别中断向量表和异常向量表。中断发生后总是从IRQ或者FIQ异常入口处进入,然后跳转到相应的异常处理程序处执行,这个异常处理程序一般都是进行查找中断向量表的操作,然后调用中断处理程序。

以下是在应用中中断处理实现的过程:从中不难体会到中断的处理过程。

定义中断向量表的物理地址:

代码

.equpISR_DABORT,(_ISR_STARTADDRESS+0x10)

.equpISR_RESERVED,(_ISR_STARTADDRESS+0x14)

.equpISR_IRQ,(_ISR_STARTADDRESS+0x18)

.equpISR_FIQ,(_ISR_STARTADDRESS+0x1c)//异常向量表

……………………

.equpISR_EINT0,(_ISR_STARTADDRESS+0x20)//中断向量表

.equpISR_EINT1,(_ISR_STARTADDRESS+0x24)

.equpISR_EINT2,(_ISR_STARTADDRESS+0x28)

.equpISR_EINT3,(_ISR_STARTADDRESS+0x2c)

将中断处理程序入口地址放入中断向量表:

代码

pISR_EINT0=(unsignedint)isrEINT0;//isrEINT0中断处理程序

pISR_EINT1=(unsignedint)isrEINT1;

定义中断处理程序:

代码

.externInterrupt_Rbutton

.globalisrEINT0

isrEINT0:

IRQHandleInterrupt_Rbutton

定义异常向量表:

代码

bHandlerUndef/*handlerforUndefinedmode*/

bHandlerSWI/*handlerforSWIinterrupt*/

bHandlerPabort/*handlerforPAbort*/

bHandlerDabort/*handlerforDAbort*/

.longFileIDTable/*id*/

bHandlerIRQ/*handlerforIRQinterrupt*/

bHandlerFIQ

定义异常处理函数:

代码

HandlerFIQ:HANDLERHandleFIQ

HandlerIRQ:HANDLERHandleIRQ

HandlerUndef:HANDLERHandleUndef

HandlerSWI:HANDLERHandleSWI

HandlerDabort:HANDLERHandleDabort

HandlerPabort:HANDLERHandlePabort

异常处理宏HANDLER的定义:

代码

.macroHANDLERHandleLabel

subsp,sp,#4/*decrementsp(tostorejumpaddress)*/

stmfdsp!,{r0}/*PUSHtheworkregistertostack(lrdoes'tpushbec

auseitreturntooriginaladdress)*/

ldrr0,=HandleLabel/*loadtheaddressofHandleXXXtor0*/

ldrr0,[r0]/*loadthecontents(serviceroutinestartaddress)of

HandleXXX*/

strr0,[sp,#4]/*storethecontents(ISR)ofHandleXXXtostack*/

ldmfdsp!,{r0,pc}/*POPtheworkregisterandpc(jumptoISR)*/

.endm

定义IRQ中断处理宏IRQHandle:

代码

.macroIRQHandleisrHandle:

stmdbsp!,{r0-r11,ip,lr}/*saver0-r11,ip,lr*/

ldrr0,=isrHandle

movlr,pc

bxr0/*jumptouser_handle(void)*/

ldmiasp!,{r0-r11,ip,lr}/*restorer0,ip,lr*/

subspc,r14,#4/*returnfrominterrupt*/

.endm

申明IRQ异常的服务程序为:IsrIRQ,即,发生IRQ异常时,执行“bHandlerIRQ”即是

运行IsrIRQ代码:

代码

ldrr0,=HandleIRQ@Thisroutineisneeded

ldrr1,=IsrIRQ@ifthereisn't'subspc,lr,#4'at0x18,0x1c

strr1,[r0]

IRQ异常处理程序:

代码

IsrIRQ:

subsp,sp,#4@reservedforPC

stmfdsp!,{r8-r9}

ldrr9,=INTOFFSET

ldrr9,[r9]

ldrr8,=HandleEINT0

addr8,r8,r9,lsl#2

ldrr8,[r8]

strr8,[sp,#8]

ldmfdsp!,{r8-r9,pc}

在嵌入式系统中异常向量表和中断向量表都是存于FLASH起始的一段空间中。而异常处理和中断处理程序都是运行在RAM中的。

由上可以知道,当一个IRQ中断发生时,CPU将从0X18(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论