来自老师第4章_第1页
来自老师第4章_第2页
来自老师第4章_第3页
来自老师第4章_第4页
来自老师第4章_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

复习:ARM异常中断处理,保存子程序的返回地址ARM体系中的异常中断的种类ARM的处理器模式各异常中断对应着一定的处理器模式应用程序通常运行在用户模式下不同的处理器模式对应有该处理器模式的物理寄存器组外部中断模式=通用中断模式ARM的各异常中断向量地址、对应的模式及优先级中断向量表的大小32字节,其中每个异常中断占4个字节,保留4个字节。每个中断异常所占用的4个字节存放跳转指令或一个向PC寄存器赋值的数据访问指令。按照优先级从高到底的次序执行。ARM处理器对异常中断的相应过程

(1)保存处理器当前状态,中断屏蔽位和各个条件标志位。将当前程序状态寄存器CPSR的内容保存到将要执行的异常中断对应的SPSR中。(2)根据要进入的异常类型,强制设置程序状态寄存器CPSR中的相应位,使处理器进去相应的执行模式。(3)将连接寄存器lr_mode(R14_mode)设置成返回的地址(当前PC+4或PC+8,与异常的类型有关)。(注:可作为第一步进行)(4)将程序计数器值(PC),设置成该异常中断的中断向量向量地址,从而跳转到中断处理程序处执行。(注:必须在最后一步执行)第四章S3C2410的中断系统主要内容:4.1 S3C2410的中断源4.2S3C2410的中断处理4.3中断控制4.4子中断源的中断控制4.5中断向量设置4.6其它常用寄存器4.7中断程序编写中需注意问题4.8中断实验和中断程序编写4.1S3C2410的中断源56个中断源32个中断源提供中断控制器,其中外部中断源:

EINT0~EINT3,4通过个中断控制寄存器EINT4~EINT7通过“或”的形式提供一个中断源送至中断控制器EINT8~EINT23通过“或”的形式提供一个中断源送至中断控制器注:S3C2410处理两类中断:通用中断和快速中断S3C2410的中断源4.2S3C2410的中断处理可以处理56个中断源的中断请求。中断源可以是来自片内的中断,如DMA、UART和I2C等可以来自处理器外部中断输入引脚有11个中断源通过分支中断控制器来申请使用中断(与其它中断共用一个中断向量)INT_ADCA/D转换中断INT_TC触摸屏中断INT_ERR2UART2收发错误中断INT_TXD2UART2发送中断INT_RXD2UART2接受中断INT_ERR1UART1收发错误中断INT_TXD1UART1发送中断INT_RXD1UART1接受中断INT_ERR0UART0收发错误中断INT_TXD0UART0发送中断INT_RXD0UART0接受中断通过分支中断控制器来申请使用中断的11个中断源注:片内UARTn中断和外部中断输入EINTn为逻辑“或”的关系,共用一根中断请求线S3C2410的中断控制逻辑(中断控制过程)

中断控制逻辑的任务:在片内和外部中断源组成的多重中断发生时,中断控制器仲裁后,选择其中一个中断,通过FIQ(快速中断请求)或IRQ(通用中断请求)向CPU内核发出中断请求。当多重中断源请求中断时,硬件优先级逻辑判断哪一个中断将被执行;同时,硬件逻辑执行位于0x18(或0x1C)地址处的指令;然后由软件编程识别各个中断源;最后根据中断源跳转到相应的中断处理程序中断控制逻辑的执行过程中断源是指给出中断向量的中断子中断源是指与其它中断共用一个中断向量的中断。例:UART0是一个中断源,而TXD0和RXD0就是子中断源中断源与子中断源的区别注:子中断源向CPU申请中断,子中断源挂起寄存器中相应位要置1,如果该子中断没被屏蔽,则该子中断源所归属的总中断源挂起寄存器中相应位也要置14.3中断控制5个控制寄存器控制系统中断:中断模式(INTMOD)寄存器中断挂起(INTPND)寄存器中断源挂起(SRCPND)寄存器中断屏蔽(INTMSK)寄存器中断优先级(PRIORITY)寄存器ARM920T提供两种中断模式:FIQ模式(快速模式)和IRQ模式(通用模式)所有的中断源在中断请求时都要确定使用那一种中断模式复位时各位等于0,如果采用通用中断,中断模式寄存器可以不用设置4.3.1中断模式(INTMOD)寄存器中断模式(INTMOD)寄存器与对应的中断源的关系4.3.2中断挂起寄存器和中断源挂起寄存器工作过程:

当中断源向CPU申请中断时,SRCPND寄存器的相应位被置1,表明哪一个中断源向CPU申请了中断如果当前没有优先级与此中断源相等或高于的中断服务在执行,并该中断没被屏蔽,此中断会被响应,INTPND相应位会被置1

4.3.3中断屏蔽寄存器(INTMSK)

当INTMSK寄存器的屏蔽位为1时,对应的中断被禁止;当INTMSK寄存器的屏蔽位为0时,则相应的中断正常执行,如果一个中断的屏蔽位为1,则该中断请求不被受理中断屏蔽寄存器(INTMSK)4.3.4中断优先级寄存器(PRIORITY)S3C2410共有56个中断源,有32个中断控制器外部中断EXTIN8~23共用一个中断控制器外部中断EXTIN4~7共用一个中断控制器9个UART中断分成3组,共用3个中断控制器ADC和触摸屏共用一个中断控制器系统对中断优先级实行由中断优先寄存器(PRIORITY)和7个中断仲裁器组组成的两级控制,7个中断仲裁器组由6个子中断仲裁器组(ARBITER0~ARBITER5)和一个主中断仲裁器组(ARBITER6)组成

每个中断仲裁器下面有4~6个中断源,这些中断源对应着REQ0~REQ5这6个优先级中断仲裁器分组

工作过程:当一个中断源向CPU申请中断时,它首先要在自己所在的子中断仲裁器组进行仲裁比较,如果此中断仲裁器组中没有和它同级别或高于它的中断源向CPU申请中断,则它进入主中断仲裁器组和其他组的优先中断源进行仲裁比较,决定能否向CPU申请中断。优先级寄存器设定4.4子中断源的中断控制

与中断向量中的中断源共用一个中断向量,称为子中断源。两个子中断控制寄存器:子中断源挂起寄存器(SUBSRCPND)反馈中断的工作状态子中断屏蔽寄存器(INTSUBMSK)对中断进行控制子中断源挂起寄存器(SUBSRCPND)各位功能子中断屏蔽寄存器(INTSUBMSK)各位功能4.5中断向量设置中断源的中断向量:该中断服务函数的入口地址所有中断服务函数的入口地址都在2410addr.h中定义成函数指针。在主程序中,把中断服务函数的入口地址(函数名)赋给该指针即可。2410addr.h中定义的函数指针形式为:pISR_XXX,pISR表示是中断服务函数的指针,XXX表示中断源名字。例:#definepISR_EINT0(*(unsigned*)(_ISR_STARTADDRESS+0x20))//定义外部中断0的服务函数的指针。中断服务函数的名前加关键字_irq,表明此函数是中断服务函数,例:void_irqUart0_TxInt(void)//串行通信0通道发送中断服务函数void_irqUart0_RxIntOrErr(void)

//串行通信0通道接收字符和接收错误代码中断服务函数做串行通信发送中断实验时:

pISR_UART0=(unsigned)Uart0_TxInt;做串行通信接收中断实验时:pISR_UART0=(unsigned)Uart0_RxIntOrErr;注:中断服务函数声明时名前也要加关键字_isr。4.6其它常用寄存器S3C2410中,外部中断有专门寄存器:外部中断控制寄存器(EXTINTN0~EXTINTN2)外部中断屏蔽寄存器(EINTMASK)外部中断挂起寄存器(EINTPEND)1.外部中断控制寄存器(EXTINTN)高电平低电平脉冲上升沿脉冲下降沿双沿

外部中断控制寄存器主要控制外部中断触发模式,触发模式有:EXTINT0配置EXTINT1配置EXTINT2配置2.外部中断屏蔽寄存器(EINTMASK)控制外部中断的允许和禁止外部中断屏蔽寄存器的配置3.外部中断挂起寄存器(EINTPEND)表示:当前正在响应的中断服务程序是外部中断中哪一个申请的

EINTPEND的配置

思考:为什么EINT0~EINT3在EINTMASK和EINTPEND中无对应的配置位?4.7中断程序编写中需注意问题1.中断初始化

一般在系统复位后和中断程序执行结束,要对中断挂起寄存器初始化。可按如下方法进行(以免写入不正确数据引起错误):rSRCPND=rSRCPND;rINTPND=rINTPND;2.头文件中挂起位

在头文件2410addr.h中对中断挂起位和清中断挂起位进行了如下宏定义,在使用时只要用挂起位的名即可:#defineBIT_EINT0(0x1)#defineBIT_EINT1(0x1<<1)#defineBIT_EINT2(0x1<<2)#defineBIT_EINT3(0x1<<3)#defineBIT_EINT4_7(0x1<<4)#defineBIT_EINT8_23(0x1<<5)#defineBIT_WDT(0x1<<9)#defineBIT_TIMER0(0x1<<10)#defineBIT_TIMER1(0x1<<11)#defineBIT_TIMER2(0x1<<12)#defineBIT_TIMER3(0x1<<13)#defineBIT_TIMER4(0x1<<14)#defineBIT_UART2(0x1<<15)#defineBIT_LCD(0x1<<16)#defineBIT_DMA0(0x1<<17)#defineBIT_DMA1(0x1<<18)#defineBIT_DMA2(0x1<<19)#defineBIT_DMA3(0x1<<20)#defineBIT_SDI(0x1<<21)#defineBIT_SPI0(0x1<<22)#defineBIT_UART1(0x1<<23)#defineBIT_USBD(0x1<<25)#defineBIT_USBH(0x1<<26)#defineBIT_IIC(0x1<<27)#defineBIT_UART0(0x1<<28)#defineBIT_SPI1(0x1<<29)#defineBIT_RTC(0x1<<30)#defineBIT_ADC(0x1<<31)#defineBIT_ALLMSK(0xffffffff)#defineBIT_SUB_ALLMSK(0x7ff)#defineBIT_SUB_ADC(0x1<<10)#defineBIT_SUB_ERR2(0x1<<8)#defineBIT_SUB_TXD2(0x1<<7)#defineBIT_SUB_RXD2(0x1<<6)#defineBIT_SUB_ERR1(0x1<<5)#defineBIT_SUB_TXD1(0x1<<4)#defineBIT_SUB_RXD1

温馨提示

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

评论

0/150

提交评论