《第5章ARM中断处理课件.ppt》由会员分享,可在线阅读,更多相关《第5章ARM中断处理课件.ppt(36页珍藏版)》请在三一办公上搜索。
1、第五章 ARM中断处理,1,2,1 中断概述,CPU与外设的数据传输方式通常有以下几种:查询方式CPU不断地查询外设状态,如果外设准备就绪就开始传输数据,如果外设没有准备好,就进入循环等待 中断方式当外设准备好与CPU进行数据交换时,首先想CPU提出中断请求。,CPU在接到中断请求并在一定的条件下,暂停原来的程序,并执行中断服务程序,执行完后再次回到原程序的DMA方式不经CPU而直接进行数据交换的过程,3,中断概述,4,中断概述,2. S3C2440中断系统结构1、中断系统结构主要由中断源和控制寄存器两大部分构成,其寄存器主要有4种:模式、屏蔽、优先级、挂起(标志)寄存器等。,5,2、中断优先
2、级仲裁器及工作原理,中断系统有6个分仲裁器和1个总仲裁器,每一个仲裁器可以处理6路中断。,6,中断向量表(2级),第一级(上电复位时)位于启动代码(裸机)bootloader的起始位置,7,8,程序开始和入口地址,Vector_entry:BReset_HandleBUndef_HandleBSWI_HandleBPrefetch_HandleBAbort_Handle NOPBIRQ_HandleBFIQ_Handle,第二级(用于IRQ中断),9,第二级中断源入口地址,10,中断源的管理,11,12,8个专用中断控制器,13,主要使用前5个寄存器,该寄存器也就是中断标志寄存器各位:1:对应
3、中断源有中断请求0:对应中断源无中断请求注意:必须在中断处理程序中对其标志位清0。其方法为写1.,1、SRCPND-中断源挂起(标志)寄存器,14,该寄存器是设置各中断源是FIQ中断还是IRQ中断各位:1:对应中断源设为FIQ中断模式0:对应中断源设为IRQ中断模式,2、INTMOD-中断模式寄存器,15,各位:1:屏蔽对应中断源0:开放对应中断源,3、INTMSK-中断屏蔽寄存器,16,4、PRIORITY-中断优先级寄存器,ARB_SELn-n组优先级顺序控制位00:REQ0, 1, 2, 3, 4, 5 01:REQ0, 2, 3, 4, 1, 510:REQ0, 3, 4, 1, 2,
4、 5 11:REQ0, 4, 1, 2, 3, 5ARB_MODEn-n组优先级循环控制位0:优先顺序固定不变 1:优先顺序循环,每响应一次中断,其顺序循环改变一次,但REQ0、REQ5位置不变。,17,各位:1:对应的中断源被响应,且正在执行中断服务0:对应中断源未被响应注意:必须在中断处理程序中对其服务标志位清0。方法为对某位写1便清除为0。即在清除SRCPND中相应位后,要清除该寄存器相应位。,5、INTPND-中断服务(挂起)寄存器,18,该寄存器的偏移值指示在INTPND中显示的中断源各位:1:对应的中断源,在INTPND中被置位说明:当在中断服务程序中对SRCPND、INTPND中
5、的标志位清0时,该寄存器的对应位自动清0。,6、INTOFFSET-中断偏移寄存器,19,7、SUBSRCPND-子中断源请求标志寄存器,对有多个中断源的外设,显示其具体的中断请求各位:1:对应的子中断源有请求0:对应的子中断源无请求注意:在中断服务程序中,需要对其置1的标志位清0。,20,8、INTSUBMSK-子中断源屏蔽寄存器,对有多个中断源的外设,对具体的中断源进行屏蔽各位:1:屏蔽对应的子中断源0:开放对应的子中断源,21,主要设置各个外中断源的触发方式、滤波,9、外中断控制寄存器,22,EINT07-中断请求信号触发方式选择000:低电平触发001:高电平触发01x:下降沿触发10
6、 x:上升沿触发11x:双边沿触发第3、7、11、15、19、23、27、31位-保留,(1)EXTINT0-外中断触发方式控制寄存器0,23,EINT815-中断请求信号触发方式选择000:低电平触发001:高电平触发01x:下降沿触发10 x:上升沿触发11x:双边沿触发第3、7、11、15、19、23、27、31位-保留,(2)EXTINT1-外中断触发方式控制寄存器1,24,EINT1623-外中断请求信号触发方式选择000:低电平触发001:高电平触发01x:下降沿触发10 x:上升沿触发11x:双边沿触发第3、7、11、15、19、23、27、31位-为FILTEN各引脚滤波控制位
7、0:禁止滤波1:使能滤波,(3)EXTINT2-外中断控制寄存器2,25,中断源的管理,26,27,S3C2440A具有24个外部中断分别连接至:GPG0-GPG15:外部中断EINT8EINT23GPF0GPF7:外部中断EINT0EINT7支持上升沿、下降沿、高电平、低电平、双沿触发,设置步骤:1. 设置触发方式:上升沿、下降沿、高电平、低电平、双沿触发2. 清中断源挂起寄存器、中断服务寄存器(可选、防止原有中断干扰)3. 设置中断模式(IRQ或FIQ可选,默认为IRQ)4. 设置中断优先级(可选,一般默认即可)5. 打开外部中断屏蔽6. 设置中断服务入口程序,进入中断:1、清中断源挂起寄
8、存器2、清中断服务寄存器 防止反复进入中断3、执行中断服务程序,用到的寄存器:SRCPND INTPND INTMASKEXTINT0 EINTMASK EINTPEND中断触发方式选择:000:低电平触发 001:高电平触发01x:下降沿触发 10 x:上升沿触发11x:双边沿触发,在2410init.s文件中与的中断初始化部分程序开始及中断入口bResetHandler bHandlerUndef;handler for Undefined modebHandlerSWI;handler for SWI interruptbHandlerPabort;handler for PAbortb
9、HandlerDabort;handler for DAbortb.;reservedbHandlerIRQ;handler for IRQ interrupt bHandlerFIQ;handler for FIQ interrupt本段意义:利用后面定义的宏来展开上面各行,使其进入它们所对应的中断服务子程序。,中断程序举例,32,LTORG ;声明一个数据缓冲池的开始HandlerFIQ HANDLER HandleFIQHandlerIRQ HANDLER HandleIRQHandlerUndef HANDLER HandleUndefHandlerSWI HANDLER Handle
10、SWIHandlerDabort HANDLER HandleDabortHandlerPabort HANDLER HandlePabort本段意义:利用后面定义的宏来展开上面各行,使其进入它们所对应的中断服务子程序,33,;本宏意义:转到相应中断服务子程序去执行 MACRO$HandlerLabel HANDLER $HandleLabel;如Label=IRQ , ( HandlerIRQ )$HandlerLabelsubsp,sp,#4stmfdsp!,r0 ldr r0,=$HandleLabel ldr r0,r0str r0,sp,#4ldmfd sp!,r0,pcMEND,3
11、4,IRQ中断服务程序IsrIRQ subsp,sp,#4 ;reserved for PCstmfdsp!,r8-r9 ldrr9,=INTOFFSET;中断偏移寄存器ldrr9,r9ldrr8,=HandleEINT0;中断向量表首地址addr8,r8,r9,lsl #2ldrr8,r8strr8,sp,#8ldmfdsp!,r8-r9,pc本段意义:根据中断服务号,转去执行相应的中断处理程序段。,35,;中断向量表IntVectorTableHandleEINT0 # 4HandleEINT1 # 4HandleEINT2 # 4HandleEINT3 # 4HandleEINT4_7# 4HandleEINT8_23# 4HandleRSV6# 4HandleBATFLT # 4HandleTICK # 4HandleWDT# 4HandleTIMER0 # 4HandleTIMER1 # 4,36,