《第5章ARM中断处理课件》由会员分享,可在线阅读,更多相关《第5章ARM中断处理课件(36页珍藏版)》请在金锄头文库上搜索。
1、第五章 ARM中断处理121 中断概述qCPU与外设的数据传输方式通常有以下几种:n查询方式qCPU不断地查询外设状态,如果外设准备就绪就开始传输数据,如果外设没有准备好,就进入循环等待 n中断方式q当外设准备好与CPU进行数据交换时,首先想CPU提出中断请求。,CPU在接到中断请求并在一定的条件下,暂停原来的程序,并执行中断服务程序,执行完后再次回到原程序的nDMA方式q不经CPU而直接进行数据交换的过程3中断概述4中断概述2. S3C2440中断系统结构中断系统结构1、中断系统结构、中断系统结构主要由中断源和控制寄存器两大部分构成,其主要由中断源和控制寄存器两大部分构成,其寄存器主要有寄存
2、器主要有4种:模式、屏蔽、优先级、挂起种:模式、屏蔽、优先级、挂起(标志)寄存器等。(标志)寄存器等。中断源中断源(有子寄存器有子寄存器)子中断源子中断源挂起寄存器挂起寄存器中断源中断源(无子寄存器无子寄存器)子中断源子中断源屏蔽寄存器屏蔽寄存器中断屏蔽中断屏蔽中断模式中断模式优先级仲裁优先级仲裁FIQIRQ中断源挂起中断源挂起中中断断挂挂起起52、中断优先级仲裁器及工作原理、中断优先级仲裁器及工作原理中断系中断系统有统有6个分个分仲裁器和仲裁器和1个总仲裁器,个总仲裁器,每一个仲裁每一个仲裁器可以处理器可以处理6路中断。路中断。6中断向量表(2级)n第一级(上电复位时)q位于启动代码(裸机)
3、bootloader的起始位置78程序开始和入口地址Vector_entry:BReset_HandleBUndef_HandleBSWI_HandleBPrefetch_HandleBAbort_Handle NOPBIRQ_HandleBFIQ_Handle第二级(用于IRQ中断)9第二级中断源入口地址10中断源的管理11128个专用中断控制器13Register Address R/W Description Reset Value SRCPND0x4A000000 R/W 中断标志寄存器中断标志寄存器 0x00000000 INTMOD 0x4A000004 R/W 中断模式寄存器中断
4、模式寄存器0x00000000 INTMSK0x4A000008 R/W 中断屏蔽寄存器中断屏蔽寄存器0xFFFFFFFF PRIORITY0x4A00000C R/W 中断优先级寄存器中断优先级寄存器0x7FINTPND0x4A000010 R/W 中断服务寄存器中断服务寄存器0x00000000 INTOFFSET 0x4A000014R中断偏移寄存器中断偏移寄存器0x00000000 SUBSRCPND 0x4A000018 R/W 子源挂起寄存器子源挂起寄存器0x00000000INTSUBMSK 0x4A00001C R/W 中断子源屏蔽寄存器中断子源屏蔽寄存器0x7FF主要使用前主
5、要使用前5个寄存器个寄存器该寄存器也就是中断标志寄存器该寄存器也就是中断标志寄存器各位:各位:1:对应中断源:对应中断源有有中断请求中断请求0:对应中断源:对应中断源无无中断请求中断请求注意:必须在中断处理程序中对其标志位清注意:必须在中断处理程序中对其标志位清0。其方法为写。其方法为写1.1、SRCPND-中断源挂起(标志)寄存器中断源挂起(标志)寄存器位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源31INT_ADC23INT_UART115INT_UART27nBATT_FLT30INT_RTC22INT_SPI014INT_TIM46保留保留29INT_
6、SPI121INT_SDI13INT_TIM35EINT8_2328INT_UART020INT_DMA312INT_TIM24EINT4_727INT_IIC19INT_DMA211INT_TIM13EINT326INT_USBH18INT_DMA110INT_TIM02EINT225INT_USBD17INT_DMA09INT_WDT1EINT124保留保留16INT_LCD8INT_TICK0EINT014该寄存器是设置各中断源是该寄存器是设置各中断源是FIQ中断还是中断还是IRQ中断中断各位:各位:1:对应中断源设为:对应中断源设为FIQ中断模式中断模式0:对应中断源设为:对应中断源设
7、为IRQ中断模式中断模式2、INTMOD-中断模式寄存器中断模式寄存器位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源31INT_ADC23INT_UART115INT_UART27nBATT_FLT30INT_RTC22INT_SPI014INT_TIM46保留保留29INT_SPI121INT_SDI13INT_TIM35EINT8_2328INT_UART020INT_DMA312INT_TIM24EINT4_727INT_IIC19INT_DMA211INT_TIM13EINT326INT_USBH18INT_DMA110INT_TIM02EINT225
8、INT_USBD17INT_DMA09INT_WDT1EINT124保留保留16INT_LCD8INT_TICK0EINT015各位:各位:1:屏蔽对应中断源:屏蔽对应中断源0:开放对应中断源:开放对应中断源3、INTMSK-中断屏蔽寄存器中断屏蔽寄存器位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源31INT_ADC23INT_UART115INT_UART27nBATT_FLT30INT_RTC22INT_SPI014INT_TIM46保留保留29INT_SPI121INT_SDI13INT_TIM35EINT8_2328INT_UART020INT_DMA
9、312INT_TIM24EINT4_727INT_IIC19INT_DMA211INT_TIM13EINT326INT_USBH18INT_DMA110INT_TIM02EINT225INT_USBD17INT_DMA09INT_WDT1EINT124保留保留16INT_LCD8INT_TICK0EINT0164、PRIORITY-中断优先级寄存器中断优先级寄存器ARB_SELn-n组优先级顺序控制位组优先级顺序控制位00:REQ0, 1, 2, 3, 4, 5 01:REQ0, 2, 3, 4, 1, 510:REQ0, 3, 4, 1, 2, 5 11:REQ0, 4, 1, 2, 3,
10、5ARB_MODEn-n组优先级循环控制位组优先级循环控制位0:优先顺序固定不变:优先顺序固定不变 1:优先顺序循环,每响应一次中断,其顺序循环改变一次,但:优先顺序循环,每响应一次中断,其顺序循环改变一次,但REQ0、REQ5位置不变。位置不变。位号位号含含 义义位号位号含含 义义位号位号含含 义义31:21保保 留留12:11ARB_SEL24ARB_MODE420:19ARB_SEL610:9ARB_SEL13ARB_MODE318:17ARB_SEL58:7ARB_SEL02ARB_MODE216:15ARB_SEL46ARB_MODE61ARB_MODE114:13ARB_SEL35
11、ARB_MODE50ARB_MODE017各位:各位:1:对应的中断源被响应,且正在执行中断服务:对应的中断源被响应,且正在执行中断服务0:对应中断源未被响应:对应中断源未被响应注意:必须在中断处理程序中对其服务标志位清注意:必须在中断处理程序中对其服务标志位清0。方法为对某位写。方法为对某位写1便清除为便清除为0。即在清除即在清除SRCPND中相应位后,要清除该寄存器相应位。中相应位后,要清除该寄存器相应位。5、INTPND-中断服务(挂起)寄存器中断服务(挂起)寄存器位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源31INT_ADC23INT_UART115
12、INT_UART27nBATT_FLT30INT_RTC22INT_SPI014INT_TIM46保留保留29INT_SPI121INT_SDI13INT_TIM35EINT8_2328INT_UART020INT_DMA312INT_TIM24EINT4_727INT_IIC19INT_DMA211INT_TIM13EINT326INT_USBH18INT_DMA110INT_TIM02EINT225INT_USBD17INT_DMA09INT_WDT1EINT124保留保留16INT_LCD8INT_TICK0EINT018该寄存器的偏移值指示在该寄存器的偏移值指示在INTPND中显示的中
13、断源中显示的中断源各位:各位:1:对应的中断源,在:对应的中断源,在INTPND中被置位中被置位说明:说明:当在中断服务程序中对当在中断服务程序中对SRCPND、INTPND中的标志位清中的标志位清0时,该时,该寄存器的对应位自动清寄存器的对应位自动清0。6、INTOFFSET-中断偏移寄存器中断偏移寄存器中断源中断源偏移偏移值值中断源中断源偏移偏移值值中断源中断源偏移偏移值值中断源中断源偏移偏移值值INT_ADC31INT_UART123INT_UART215nBATT_FLT7INT_RTC30INT_SPI022INT_TIM414保留保留6INT_SPI129INT_SDI21INT_
14、TIM313EINT8_235INT_UART028INT_DMA320INT_TIM212EINT4_74INT_IIC27INT_DMA219INT_TIM111EINT33INT_USBH26INT_DMA118INT_TIM010EINT22INT_USBD25INT_DMA017INT_WDT9EINT11保留保留24INT_LCD16INT_TICK8EINT00197、SUBSRCPND-子中断源请求标志寄存器子中断源请求标志寄存器对有多个中断源的外设,显示其具体的中断请求对有多个中断源的外设,显示其具体的中断请求各位:各位:1:对应的子中断源有请求:对应的子中断源有请求0:对应
15、的子中断源无请求:对应的子中断源无请求注意:注意:在中断服务程序中,需要对其置在中断服务程序中,需要对其置1的标志位清的标志位清0。位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源31:11保保 留留7INT_TXD23INT_RXD110INT_ADC6INT_RXD22INT_ERR09INT_TC5INT_ERR11INT_TXD08INT_ERR24INT_TXD10INT_RXD0208、INTSUBMSK-子中断源屏蔽寄存器子中断源屏蔽寄存器对有多个中断源的外设,对具体的中断源进行屏蔽对有多个中断源的外设,对具体的中断源进行屏蔽各位:各位:1:屏蔽对应的子中断源:屏蔽对
16、应的子中断源0:开放对应的子中断源:开放对应的子中断源位号位号中断源中断源位号位号中断源中断源位号位号中断源中断源31:11保保 留留7INT_TXD23INT_RXD110INT_ADC6INT_RXD22INT_ERR09INT_TC5INT_ERR11INT_TXD08INT_ERR24INT_TXD10INT_RXD021主要设置各个外中断源的触发方式、滤波主要设置各个外中断源的触发方式、滤波9、外中断控制寄存器、外中断控制寄存器Register Address R/W Description Reset Value EXTINT0 0x56000088 R/W 外中断触发方式寄存器外
17、中断触发方式寄存器00x0 EXTINT1 0x5600008C R/W 外中断触发方式寄存器外中断触发方式寄存器10x0 EXTINT2 0x56000090 R/W 外中断控制寄存器外中断控制寄存器20x022EINT07-中断请求信号触发方式选择中断请求信号触发方式选择000:低电平触发:低电平触发001:高电平触发:高电平触发01x:下降沿触发:下降沿触发10x:上升沿触发:上升沿触发11x:双边沿触发:双边沿触发第第3、7、11、15、19、23、27、31位位-保留保留15 14 13 12 11109876543210XEINT3XEINT2XEINT1XEINT0(1)EXTI
18、NT0-外中断触发方式控制寄存器外中断触发方式控制寄存器031 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16XEINT7XEINT6XEINT5XEINT423EINT815-中断请求信号触发方式选择中断请求信号触发方式选择000:低电平触发:低电平触发001:高电平触发:高电平触发01x:下降沿触发:下降沿触发10x:上升沿触发:上升沿触发11x:双边沿触发:双边沿触发第第3、7、11、15、19、23、27、31位位-保留保留15 14 13 12 11109876543210XEINT11XEINT10XEINT9XEINT8(2)EXTINT
19、1-外中断触发方式控制寄存器外中断触发方式控制寄存器131 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16XEINT15XEINT14XEINT13XEINT1224EINT1623-外中断请求信号触发方式选择外中断请求信号触发方式选择000:低电平触发:低电平触发001:高电平触发:高电平触发01x:下降沿触发:下降沿触发10x:上升沿触发:上升沿触发11x:双边沿触发:双边沿触发第第3、7、11、15、19、23、27、31位位-为为FILTEN各引脚滤波控制位各引脚滤波控制位0:禁止滤波:禁止滤波1:使能滤波:使能滤波15 14 13 12 11
20、109876543210F19EINT19F18EINT18F17EINT17F16EINT16(3)EXTINT2-外中断控制寄存器外中断控制寄存器231 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16F23EINT23F22EINT22F21EINT21F20EINT2025中断源的管理2627S3C2440A具有24个外部中断分别连接至:GPG0-GPG15:外部中断EINT8EINT23GPF0GPF7:外部中断EINT0EINT7支持上升沿、下降沿、高电平、低电平、双沿触发设置步骤:设置步骤:1. 设置触发方式:上升沿、下降沿、高电平、低电平
21、、双沿触发2. 清中断源挂起寄存器、中断服务寄存器(可选、防止原有中断干扰)3. 设置中断模式(IRQ或FIQ可选,默认为IRQ)4. 设置中断优先级(可选,一般默认即可)5. 打开外部中断屏蔽6. 设置中断服务入口程序进入中断:进入中断:1、清中断源挂起寄存器2、清中断服务寄存器 防止反复进入中断3、执行中断服务程序用到的寄存器:用到的寄存器:SRCPND INTPND INTMASKEXTINT0 EINTMASK EINTPEND中断触发方式选择:中断触发方式选择:000:低电平触发 001:高电平触发01x:下降沿触发 10x:上升沿触发11x:双边沿触发在在2410init.s文件中
22、与的中断初始化部分文件中与的中断初始化部分程序开始及中断入口程序开始及中断入口bResetHandler bHandlerUndef ;handler for Undefined modebHandlerSWI;handler for SWI interruptbHandlerPabort ;handler for PAbortbHandlerDabort ;handler for DAbortb.;reservedbHandlerIRQ;handler for IRQ interrupt bHandlerFIQ;handler for FIQ interrupt本段意义:本段意义:利用后面定
23、义的宏来展开上面各行,使其进入它们所对利用后面定义的宏来展开上面各行,使其进入它们所对应的中断服务子程序。应的中断服务子程序。中断程序举例中断程序举例32LTORG ;声明一个数据缓冲池的开始声明一个数据缓冲池的开始HandlerFIQ HANDLER HandleFIQHandlerIRQ HANDLER HandleIRQHandlerUndef HANDLER HandleUndefHandlerSWI HANDLER HandleSWIHandlerDabort HANDLER HandleDabortHandlerPabort HANDLER HandlePabort本段意义:本段意
24、义:利用后面定义的宏来展开上面各行,使利用后面定义的宏来展开上面各行,使其进入它们所对应的中断服务子程序其进入它们所对应的中断服务子程序33;本宏意义:本宏意义:转到相应中断服务子程序去执行转到相应中断服务子程序去执行 MACRO$HandlerLabel HANDLER $HandleLabel;如如Label=IRQ , ( HandlerIRQ )$HandlerLabelsub sp,sp,#4stmfdsp!,r0 ldr r0,=$HandleLabel ldr r0,r0str r0,sp,#4ldmfd sp!,r0,pcMEND 34IRQ中断服务程序中断服务程序IsrIRQ
25、 subsp,sp,#4 ;reserved for PCstmfdsp!,r8-r9 ldr r9,=INTOFFSET;中断偏移寄存器中断偏移寄存器ldr r9,r9ldr r8,=HandleEINT0;中断向量表首地址中断向量表首地址addr8,r8,r9,lsl #2ldr r8,r8str r8,sp,#8ldmfdsp!,r8-r9,pc本段意义:本段意义:根据中断服务号,转去执行相应的中断处根据中断服务号,转去执行相应的中断处理程序段。理程序段。35;中断向量表中断向量表IntVectorTableHandleEINT0 # 4HandleEINT1 # 4HandleEINT2 # 4HandleEINT3 # 4HandleEINT4_7# 4HandleEINT8_23# 4HandleRSV6# 4HandleBATFLT # 4HandleTICK # 4HandleWDT# 4HandleTIMER0 # 4HandleTIMER1 # 436