《ARM嵌入式C编程标准教程第四章S3C2410的中断系统.ppt》由会员分享,可在线阅读,更多相关《ARM嵌入式C编程标准教程第四章S3C2410的中断系统.ppt(30页珍藏版)》请在三一办公上搜索。
1、第四章 S3C2410的中断系统,S3C2410的中断系统,S3C2410的处理器中断S3C2410的中断控制S3C2410的中断源S3C2410中断控制专用寄存器S3C2410中断控制程序编写步骤本章实验例程,S3C2410的中断系统,S3C2410的处理器中断S3C2410的中断控制逻辑如图,它可以处理56个中断源的中断请求。这些中断源可以是来自片内外设的中断,比如DMA、UART和I2C等;也可以是来自处理器外部中断输入引脚。,S3C2410的中断系统,S3C2410的处理器中断下面的11个中断源通过分支中断控制器来申请使用中断INT_ADC A/D转换中断;INT_TC 触摸屏中断;I
2、NT_ERR2 UART2收发错误中断;INT_TXD2 UART2发送中断;INT_RXD2 UART2接收中断;INT_ERR1 UART1收发错误中断;INT_TXD1 UART1发送中断;INT_RXD1 UART1接收中断;INT_ERR0 UART0收发错误中断;INT_TXD0 UART0发送中断;INT_RXD0 UART0接收中断。,S3C2410的中断系统,S3C2410的处理器中断片内UARTn中断和EINTn是逻辑“或”的关系,它们共用一根中断请求线。中断控制逻辑(interruption controller logic)的任务是在片内外围和外部中断源组成的多重中断发
3、生时,选择其中一个中断,通过FIQ(快速请求中断)或IRQ(通用中断请求)向CPU内核发出中断请求。,S3C2410的中断系统,S3C2410的处理器中断 实际上最初CPU内核只有FIQ和IRQ两种中断,其他中断都是各个芯片厂家在设计芯片时,通过加入一个中断控制器来扩展定义的。这些中断根据中断优先级的高低来进行处理,更符合实际应用系统中要求提供多个中断源的要求。例如,如果定义所有的中断源为IRQ中断(通过中断模式寄存器设置),并且同时有10个中断发出请求,那么这时可以通过读中断优先级寄存器来确定哪一个中断被优先执行,S3C2410的中断系统,S3C2410的处理器中断当多重中断源请求中断时,硬
4、件优先级逻辑会判断哪一个中断将被执行;同时,硬件逻辑将会执行位于0 x18(或0 x1C)地址处的指令,再由软件编程识别各个中断源,然后再根据中断源跳转到相应的中断处理程序,S3C2410的中断系统,中断控制4.2.1 程序状态寄存器的F位和I位 4.2.2 中断模式(INTMOD)4.2.3 中断挂起寄存器(INTPND)和中断源挂起寄存器(SRCPND)4.2.4 中断屏蔽寄存器(INTMSK)4.2.5 中断优先寄存器(PRIORITY),S3C2410的中断系统,4.2.1 程序状态寄存器的F位和I位 如果CPSR(程序状态寄存器)的F位被设置为1,那么CPU将不接受来自中断控制器的F
5、IQ(快速中断请求);如果CPSR程序状态寄存器的I位被设置为1,那么CPU将不接受来自中断控制器的IRQ(通用中断请求)。因此,为了使能FIQ和IRQ,必须先将CPSR程序状态寄存器的F位和I位清零,并且中断屏蔽寄存器INTMSK中相应的位也要清零。在使用C语言编写控制程序时,CPSR在程序中是不可见的。F位和I位清零可由中断屏蔽寄存器INTMSK中相应的位清零自动完成。,S3C2410的中断系统,4.2.2 中断模式(INTMOD)S3C2410提供了两种中断模式,即FIQ(快速)模式和IRQ(通用)模式。所有的中断源在中断请求时都要确定使用那一种中断模式。INTMOD相应位为0,选通用中
6、断模式;INTMOD相应位为1,选快速中断模式。上电或复位时INTMOD相应位为0,默认选通用中断模式。,S3C2410的中断系统,4.2.3 中断挂起寄存器(INTPND)和中断源挂起寄存器(SRCPND)S3C2410有两个中断挂起寄存器:中断源挂起寄存器(SRCPND)和中断挂起寄存器(INTPND)。这两个寄存器用于指示对应的中断源和中断是否被激活。当中断源请求中断时,SRCPND寄存器的相应位被置1;当中断被激活时,INTPND寄存器的相应位被置1。,S3C2410的中断系统,4.2.3 中断挂起寄存器(INTPND)和中断源挂起寄存器(SRCPND)如果屏蔽位被设置为1,则相应的S
7、RCPND位会被置1,而INTPND寄存器不会有变化;如果INTPND被置位,只要标志I或标志F被清零,就会执行相应的中断服务子程序。在中断服务子程序中要先向SRCPND中的相应位写1来清除挂起状态,再用同样的方法来清除INTPND相应位的挂起状态。注意:可以通过INTPND=INTPND来实现清零,以避免写入不正确的数据引起错误。,S3C2410的中断系统,4.2.4 中断屏蔽寄存器(INTMSK)当INTMSK寄存器的相应位(屏蔽位)为1时,对应的中断被禁止;当INTMSK寄存器的屏蔽位为0时,则相应的中断正常实行。如果一个中断的屏蔽位为1,则该中断请求不被受理。,S3C2410的中断系统
8、,4.2.5 中断优先寄存器(PRIORITY)上面已介绍过,S3C2410共有56个中断源,有26个中断控制器,外部中断EXTIN823共用一个中断控制器,外部中断EXTIN47共用一个中断控制器,9个UART中断分成3组,共用3个中断控制器,ADC和触摸屏共用一个中断控制器。中断的优先级是由主组号和从ID号的级别控制,具体见表4-1。中断优先级设置模块如图4-2所示:,S3C2410的中断系统,4.2.5 中断优先寄存器(PRIORITY)从上图可以看出,中断优先级产生模块共有7个中断仲裁器(AIRBITER0AIRBITER6),每个中断仲裁器是否使能由寄存器PRIORITY6:0决定,
9、每个中断仲裁器下面有46个中断源,这些中断源对应着REQ0REQ5这6个优先级。每个中断仲裁器可以控制6个中断请求的优先顺序(ARB_MODE),仲裁器和中断请求的优先顺序如表4-1示:其中,REQ 0中断优先级总是最高的,REQ5中断优先级总是最低的。,S3C2410的中断系统,S3C2410的中断系统,S3C2410的中断系统,4.3 S3C2410中断源表4-2所示为S3C2410的56个中断源。在56个中断源中,有30个中断源提供给中断控制器,其中,外部中断EINT4EINT7通过“或”的形式提供一个中断源送至中断控制器,EINT8EINT23也通过“或”的形式提供一个中断源送至中断控
10、制器。,S3C2410的中断系统,4.3 S3C2410中56个中断源具体来说:EINT0EINT23(24个)、nBATT_FLT(1个)、INT_TICK(1个)、INT_WDT(1个)、INT_TIMER0INT_TIMER4(5个)、INT_UART0INT_UART2(各3个,共9个)、INT_LCD(2个)、INT_DMA0INT_DMA3(4个)、INT_SDI(1个)、INT_SPI0INT_SPI1(2个)、INT_USBD(1个)、INT_USBH(1个)、INT_IIC(1个)、INT_RTC(1个)、INT_ADC(2个),共56个。,S3C2410的中断系统,4.4
11、中断控制专用寄存器在4.2节中已介绍中断控制器有5个,但S3C2410有8个寄存器与中断有关,有5个专用于中断控制:源挂起寄存器(SRCPND)、中断模式寄存器(INTMOD)、中断屏蔽寄存器(INTMSK)、中断优先权寄存器(PRIORITY)和中断挂起寄存器(INTPND),与中断有关的寄存器如表4-3所列。中断源发出的中断请求首先被寄存在中断源挂起寄存器(SRCPND)中,中断模式寄存器INTMOD把中断请求分为两组:快速中断请求(FIQ)和通用中断请求(IRQ),中断优先权寄存器(PRIORITY)处理中断的优先级。,S3C2410的中断系统,4.4.1 IRQ偏移寄存器(INTOFF
12、SET)除上面介绍的5个中断控制寄存器以外,还有几个寄存器与中断控制有关。中断偏移寄存器INTOFFSET给出IRQ模式的中断请求中被响应的中断的地址(哪个IRQ模式的中断请求被响应)。,S3C2410的中断系统,4.4.2 外部中断控制寄存器(EXTINTn)EXTINTn配置外部中断的触发类型是电平触发还是边沿触发以及触发的极性。EXTINT2:0的具体配置参考数据手册。,S3C2410的中断系统,4.4.3 外部中断屏蔽寄存器(EINTMASK)EINTMASK23:4分别对应外部中断234,该位等于1,对应外部中断被屏蔽;该位等于0,对应外部中断被使能,EINTMASK3:0保留。,S
13、3C2410的中断系统,4.5 中断控制程序编写步骤4.5.1 主程序工作4.5.2 中断服务程序工作4.5.3 中断服务程序示例,S3C2410的中断系统,4.5.1 主程序工作先清除中断源挂起寄存器(SRCPND)和中断挂起寄存器(INTPND),可用rSRCPND=rSRCPND和rINTPND=r INTPND来完成;设中断模式,这里使用通用中断,rINTMOD=0 x00000000;因上电或复位时rINTMOD是清0的,这步也可以不做。,S3C2410的中断系统,4.5.1 主程序工作I/O口初始化,有些中断源要通过I/O口向CPU申请中断,如外部中断0(EXTINT0)通过F口的
14、GPF0、外部中断11(EXTINT11)通过G口的GPG3向CPU申请中断,此时两个口的控制寄存器GPFCON和GPGCON的要设置成:GPFCON1:0=1,0;GPGCON7:6=1,0。具体见下章I/O口介绍。设中断服务函数地址,S3C2410在2410addr.h中定义了40个宏,设置了系统支持的中断服务函数的指针,设中断服务函数地址就是把我们编写的中断服务函数的地址(就是中断服务函数的名字)赋予相应的函数指针。函数指针定义如下:(见课本),S3C2410的中断系统,4.5.1 主程序工作从上面可以看出,每个中断源的中断服务函数指针名是固定的:pISR+中断源。设中断触发方式,触发方
15、式有5种,有上升沿、下降沿、双沿、低电平、高电平触发方式,外部中断触发方式在外部中断控制寄存器(EXTINTn)中设定。如EINT0触发方式在EXTINT02:0 中设定,2:0=000低电平、001高电平、01X下降沿、10X上升沿、11X双沿触发,更详细内容见S3C2410.pdf.。取消总中断屏蔽和子中断屏蔽,等待中断,如下面实验例程通过rEINTMASK&=(111);rINTMASK&=(BIT_EINT0|BIT_EINT8_23);来实现。,S3C2410的中断系统,4.5.2 中断服务程序工作在中断服务程序中,先屏蔽中断,防止其他中断产生干扰我们中断服务程序的执行;执行中断服务
16、程序;清中断源挂起寄存器(SRCPND)和中断挂起寄存器(INTPND);取消总中断屏蔽和子中断屏蔽,等待新中断产生;中断返回。,S3C2410的中断系统,4.5.3 中断服务程序示例在主程序中,系统初始化后,程序进入死循环,等待中断。同时,初始化定时器1,设定时器中断时间,当设定时器定时时间到,产生中断。在北京精仪达盛科技公司EL-ARM830教学实验系统中,接有两个LED发光管,两个LED发光管的阴极分别接I/O口G的bit8和bit9,阳极通过电阻接电源。在中断服务程序中,把LED1和LED2两只发光管循环亮灭,每循环亮灭一次,说明来一次中断。关于定时器操作,可参考第十一章内容。(程序见
17、课本),S3C2410的中断系统,第四章习题与练习1,S3C2410的中断模式有哪两种?2,S3C2410的中断控制寄存器有几个,每个的作用是什么?3,S3C2410的中断源挂起寄存器和中断挂起寄存器的区别和作用有哪些?4,如何清除中断请求?5,如何使能某中断源申请的中断?6,如何屏蔽某中断源申请的中断?7,外部中断0(EXTINT0)通过F口的GPF0、外部中断11(EXTINT11)通过G口的GPG3向CPU申请中断,此时两个口的控制寄存器GPFCON和GPGCON如何设置?8,阅读例子程序,熟悉中断程序编写步骤。9,如何绕过项目和仿真器设置以及项目初始化程序的编写困难,快速完成嵌入式程序设计?10,S3C2410中断有几种触发方式?如何选择中断触发方式?,