AT91SAM9261中断处理过程解析

上传人:cl****1 文档编号:497102938 上传时间:2022-11-21 格式:DOCX 页数:7 大小:99.18KB
返回 下载 相关 举报
AT91SAM9261中断处理过程解析_第1页
第1页 / 共7页
AT91SAM9261中断处理过程解析_第2页
第2页 / 共7页
AT91SAM9261中断处理过程解析_第3页
第3页 / 共7页
AT91SAM9261中断处理过程解析_第4页
第4页 / 共7页
AT91SAM9261中断处理过程解析_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《AT91SAM9261中断处理过程解析》由会员分享,可在线阅读,更多相关《AT91SAM9261中断处理过程解析(7页珍藏版)》请在金锄头文库上搜索。

1、AT91SAM9261中断处理过程解析一.AT91SAM9261先进中断控制器(AIC)介绍ARM核结构采用了一个简单的双中断机制,处理器内核有两个中断接口 IRQ (标准中 断接口)和FIQ (快速中断接口),而AT91SAM9261片内的先进中断控制器(AIC)利用这 两个接口将外设的中断请求有序的传递到内核。如下图所示:AT91SAM9261的先进中断控制器(AIC)是一个8优先级,可独立屏蔽中断的向量中 断控制器,可处理32个中断源。它的设计思想是从本质上减少在处理内部和外部中断时的 软件和实时系统开销。AIC驱动ARM内核的nIRQ和nFIQ,它的输入来自内部外设中断或 产品引脚的外

2、部中断。AIC的8优先级控制器允许用户对每个中断源定义优先级。即使一个低优先级中断正在 被处理,也允许高优先级的中断被服务。内部中断源可被编程为电平有效或者边沿触发,外部中断源可被编程为上升沿或下降沿 触发或者高电平或低电平有效。快速强制特性可重定向任何内部或外部中断源为一个快速中断而不是一个普通中断。AIC 的详细方块图如下所示:AIC 采用“向量中断”的中断跳转机制,这种机制与三星的 S3C2410 芯片的中断控 制器有很大不同。2410在有中断触发之后,首先会进入异常向量表,然后跳转到IRQ或 FIQ 服务程序,这段代码负责解析具体是哪一个中断源产生了中断,然后才跳转到具体的处 理函数去

3、执行。而向量中断的中断跳转机制则不需要软件来识别中断源,也就是不需要IRQ 或 FIQ 服务程序,而完全由硬件自动跳转到对应的中断地址,相当于硬件帮助我们完成了 一些必要的处理,减小了中断响应延时。也就是说, AIC 对于各个中断源的管理是采用硬件和软件两个方面的分发处理来完成 的。首先AIC为每一个中断源向量寄存器(AIC_SVR0AIC_SVR31),在配置使能相应外 设时用户将设备的中断处理函数地址写入对应的中断源向量寄存器,而当中断请求发生时 AIC将对应的源向量寄存器中的地址复制到中断向量寄存器(AIC_IVR)并向内核发出IRQ 请求,以上都是硬件实现的中断分发过程;在软件层面也必

4、须做相应的处理才能完成 IRQ 的分发处理,对于ARM内核来讲,IRQ只是一个中断向量,当IRQ中断请求时内核会跳到 其在异常向量表中所处的位置去处理请求,ARM的启动代码必须在这个IRQ中断处理程序 中分发处理才能分辨不同设备的中断请求,但有了上面的硬件的预处理过程,软件分发变得 十分简单,一条语句就够了:即将AIC中断向量寄存器(AIC_IVR)里的值赋给PC就可以 了。下面是AT91SAM9261的启动代码中定义的异常向量表:VectorsLDRPC,Reset_AddrLDRPC,Undef_AddrLDRPC,SWI_AddrLDRPC,PAbt AddrLDRPC,Dabt_Add

5、r;Reserved vector is used as size information for 2-nd level;bootloader to use when copying program code to External SDRAMIF:DEF:SIZE_INFODCDIIImage$ER_ROM1$RO$Lengthll+IIImage$RW_RAM1$RW$LengthllELSENOPENDIFLDRPC,PC,#-0xF20 ; Vector From AIC_IVRLDRPC,PC,#-0xF20 ; Vector From AIC FVR可以看到:IRQ对应异常处理指令

6、是LDR PC,PC,#-0xF20,当执行这条指令时,由 ARM流水线结构,此时的PC = 0x18 + 2*4 = 0x20,因此执行之后PC被赋予地址:0x20 - 0xF20 = OxFFFFFlOO里的内容,即IRQ向量寄存器AIC_IVR的内容,程序跳转到相应的中 断例程中。对比一下S3C2410的启动代码:VectorsLDRPC, Reset_AddrLDRPC, Undef_AddrLDRPC, SWI_AddrLDRPC, PAbt_AddrLDRPC, DAbt_AddrNOP;Reserved VectorLDRPC, IRQ_AddrLDRPC, FIQ_AddrRe

7、set_AddrDCDReset_HandlerUndef_AddrDCDUndef_HandlerSWI_AddrDCDSWI_HandlerPAbt_AddrDCDPAbt_HandlerDAbt_AddrDCDDAbt_HandlerDCD0;Reserved AddressIRQ_AddrDCDIRQ_HandlerFIQ_AddrDCDFIQ_HandlerUndef_HandlerBUndef_HandlerSWI_HandlerBSWI_HandlerPAbt_HandlerBPAbt_HandlerDAbt_HandlerBDAbt_HandlerIFIntVT_SETUP 0

8、IRQ_HandlerBIRQ_EntryENDIFFIQ HandlerBFIQ Handler在异常向量表中,IRQ对应的处理指令是:LDR PC, IRQ_Addr,最终PC会跳到 IRQ_Entry去执行。IRQ_Entry里面做了相应处理,即找到中断源,跳转到中断向量表的合适位置去执行具体的中断处理程序(当然之前要定义中断向量入口表)。如下所示:Interrupt Vector Table AddressHandleEINTOEQUIntVTAddressHandleEINTlEQUIntVTAddress +4HandleEINT2EQUIntVTAddress +4*2Handl

9、eEINT3EQUIntVTAddress +4*3HandleEINT4_7EQUIntVTAddress +4*4HandleEINT8_23EQUIntVTAddress +4*5HandleReservedEQUIntVTAddress +4*6HandleBATFLTEQUIntVTAddress +4*7HandleTICKEQUIntVTAddress +4*8HandleWDTEQUIntVTAddress +4*9HandleTIMER0EQUIntVTAddress +4*10HandleTIMER1EQUIntVTAddress +4*11HandleTIMER2EQUI

10、ntVTAddress +4*12HandleTIMER3EQUIntVTAddress +4*13HandleTIMER4EQUIntVTAddress +4*14HandleUART2EQUIntVTAddress +4*15HandleLCDEQUIntVTAddress +4*16HandleDMA0EQUIntVTAddress +4*17HandleDMA1EQUIntVTAddress +4*18HandleDMA2EQUIntVTAddress +4*19HandleDMA3EQUIntVTAddress +4*20HandleMMCEQUIntVTAddress +4*21H

11、andleSPI0EQUIntVTAddress +4*22HandleUART1EQUIntVTAddress +4*23;HandleReservedEQUIntVTAddress +4*24HandleUSBDEQUIntVTAddress +4*25HandleUSBHEQUIntVTAddress +4*26HandleIICEQUIntVTAddress +4*27HandleUART0EQUIntVTAddress +4*28HandleSPI1EQUIntVTAddress +4*39HandleRTCEQUIntVTAddress +4*30HandleADCEQUIntVT

12、Address +4*31IRQ_Entrysub sp,sp,#4;reserved for PCstmfdsp!,r8-r9ldr r9,=INT0FFSETldr r9,r9ldr r8,=HandleEINT0add r8,r8,r9,lsl #2ldr r8,r8str r8,sp,#8ldmfd sp!,r8-r9,pcENDIFAT91SAM9261和S3C2410两款芯片对中断处理的过程可以用下图来说明,我们可以更加清晰的看到两种中断处理过程的异同:S3C2410的中断处理流程AT91SAM9261的中断处理流程IRQ中断请求IRQ中断请求MtPC跳转到异常向量表中0x18地址

13、,执行IRQ异常对应的异常处理指令:LDR PC, IRQ_Addr3ZPC跳转到异常向量表中0x18地址,执行IRQ 异常对应的异常处理指令:LDR PC,PC,#-0xF20 *APC-0xF20的结果是:0XFFFFF100,即中断向量寄存器AIC_IVR的 地址。寄存器里存放的就是对应中断源的处理函数地址PC跳至目标中断处理函数执行StPC从0x18跳转至用户编写的一段代码,这段 代码负责解析中断源,完成PC的再次跳转解析中断源,读取用户事先定义好的中断 向量表,得到中断处理函数的目标地址VPC跳至目标中断处理函数执行三 AT91SAM9261 按键中断示例下面以按键中断为例,具体解析

14、AT91SAM9261的中断处理。1、首先查看硬件原理图,确定按键和CPU的连接方式:SW7硬件原理图显示:按键SW7和PB27连接,PB27是由PIO (Perihepheral Input/Output)Controller 管理的。我们由芯片手册可知:每个 PIO Controller 管理的引脚可以配置为通用 I/O 口线,或复用为外设I/O。中断信号FIQ和IRQ0IRQn通过PIO控制器多路复用。然而, 由于PIO控制器对于输入无效并且中断口线仅被用为输入,所以没有必要分配I/O 口线给中 断功能。因此我们需要将PB27配置为输入模式2、使能PIO控制器的时钟AT91F PMC EnablePeriphClock ( AT91C BASE PMC, 1 A91C ID PIOB );只有PIO控制器时钟被使能才能产生PIO控制器中断。3、配置PB27为输入模式AT91F PIO CfgInput( AT91C BASE PIOB, SW MASK );这里的SW_MASK = 12

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号