专题四:S3C2440中断系统专题四:S3C2440中断系统主要内容:一、概述及基本概念二、S3C2440中断系统三、应用部分接口电路:中断应用实例C程序:中断编程步骤Linux:中断服务函数及其驱动程序专题四:S3C2440中断系统一、概述及其基本概念一、概述及概念1、必要性及应用当计算机用于实时控制时,中断是一个十分重要的功能。现场的各个参数、信息,需要的话可在任何时候发出中断申请,要求CPU处理;CPU就可以马上响应(若中断是开放的话)加以处理。这样的及时处理在查询的工作方式是做不到的。中断功能便于实现1.分时操作2.实时处理3.故障处理4.主机与外设之间的速度匹配计算机在运行过程中,往往会出现事先预料不到的情况,或出现一些故障:如电源突跳,存储出错,运算溢出等等。计算机就可以利用中断系统自行处理,而不必停机或报告工作人员。专题四:S3C2440中断系统2、中断指在计算机执行期间,系统内发生任何非寻常的或非预期紧急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。专题四:S3C2440中断系统3、中断响应中断响应是当中央处理机发现已有中断请求时,中止,保存现行程序执行,并自动引出中断处理程序的过程。中断响应是解决中断的发现和接收问题的过程,是由中断装置完成的。中断响应是硬件对中断请求作出响应的过程,包括识别中断源,保留现场,引出中断处理程序等过程。①CPU在当前指令执行结束时,响应中断,进入中断的响应周期;②发出二个中断回答信号INTA完成一个中断响应周期;③进行断点及标志保存如:将段地址(CS),偏移地址(IP)标志FR以及压入堆栈。④读取中断类型号,找到中断源;⑤装入中断服务程序的入口地址(CS,IP)专题四:S3C2440中断系统4、中断源:引起中断的原因或者说发出中断请求的来源叫做中断源。5、优先级:为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。中断优先级越高,则响应优先权就越高。当CPU正在执行中断服务程序时,又有中断优先级更高的中断申请产生,这时CPU就会暂停当前的中断服务转而处理高级中断申请,待高级中断处理程序完毕再返回原中断程序断点处继续执行,这一过程称为中断嵌套。专题四:S3C2440中断系统二、S3C2440中断系统一、S3C2440中断体系结构ARM体系CPU的7种工作模式1、用户模式(usr):ARM处理器正常的程序执行状态2、快速中断模式(fiq):用于高速数据传输或通道处理3、中断模式(irq):用于通用的中断处理4、管理模式(svc):操作系统使用的保护模式5、数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护6、系统模式(sys):运行具有特权的操作系统任务7、未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真除用户模式外,其他6种工作模式都属于特权模式,大多数程序运行于用户模式,进入特权模式是为了处理中断、异常,或者访问被保护的系统资源专题四:S3C2440中断系统中断是CPU处理外部突发事件的一个重要技术。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类。硬件中断是由处理器自身的硬件系统或着外部硬件部件触发引起的中断类型,硬件中断又可以分为外部中断和内部中断两类:外部中断一般是指由外设发出的中断请求,如:按键中断、串口中断、定时器中断等。外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备的中断请求,S3C2440共有24个外部中断EINT0-EINT24。内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起的中断,内部中断是不可屏蔽的中断,S3C2440共有35个内部中断。软件中断与硬件中断不一样,它不是由硬件触发的,而是由软件调用系统提供的一个指令(SWI)来触发的中断行为,是程序本身有意识的引发的中断行为,由于在用户模式下,程序对处理器资源的访问会受到一些限制,因此,需要采用软中断的方式将处理器工作模式切到异常模式下访问受限资源,因此软中断一般都被用于实现特殊系统调用功能提供给软件系统使用。专题四:S3C2440中断系统三、中断源判定S3C2440中断源如下页表格所示,支持多达60个中断源。次级中断源与(主)中断源共享一条中断线。多个中断源共享一条中断线的需要在中断服务子程序中判断是哪一个中断源发出的中断。S3C2440对60种中断源的管理是按层级分的。如下图所示(三级模式):专题四:S3C2440中断系统专题四:S3C2440中断系统3、中断次级源专题四:S3C2440中断系统四、中断运行控制仲裁步骤由硬件优先级逻辑决定并且写入结果到帮助用户通告是各种中断源中的哪个中断发生了的中断挂起寄存器中。中断处理框图如图所示。如果ARM920TCPU中的PSR的F位被置位为1,CPU不会接收来自中断控制器的快中断请求(FIQ)。同样的如果PSR的I位被置位为1,CPU不会接收来自中断控制器的中断请求(IRQ)。因此,中断控制器可以通过清除PSR的F位和I位为0并且设置INTMSK的相应位为0来接收中断。ARM920T有两种中断模式的类型:FIQ或IRQ,所有中断源在中断请求时决定使用哪种类型。专题四:S3C2440中断系统五、中断优先级设定每个仲裁器可以处理基于1位仲裁器模式控制(ARB_MODE)和选择控制信号(ARB_SEL)的2位的6个中断请求,如下:–如果ARB_SEL位为00b,优先级顺序为REQ0、REQ1、REQ2、REQ3、REQ4和REQ5。–如果ARB_SEL位为01b,优先级顺序为REQ0、REQ2、REQ3、REQ4、REQ1和REQ5。–如果ARB_SEL位为10b,优先级顺序为REQ0、REQ3、REQ4、REQ1、REQ2和REQ5。–如果ARB_SEL位为11b,优先级顺序为REQ0、REQ4、REQ1、REQ2、REQ3和REQ5。请注意仲裁器的REQ0的优先级总是最高并且REQ5的优先级总是最低。此外,通过改变ARB_SEL位,可以轮换REQ1到REQ4的顺序。此处,如果ARB_MODE位被设置为0,ARB_SEL位不能自动改变,这使得仲裁器操作在固定优先级模式中。(注意即使在此模式中,也不能通过手动改变ARB_SEL位来重新配制优先级)。另一方面,如果ARB_MODE为1,ARB_SEL位会被轮换方式而改变,例如如果REQ1被服务ARB_SEL位被自动改为01b以便REQ1进入到最低的优先级。ARB_SEL改变的详细结果如下:–如果REQ0或REQ5被服务,ARB_SEL位不会改变–如果REQ1被服务,ARB_SEL位被改为01b。–如果REQ2被服务,ARB_SEL位被改为10b。–如果REQ3被服务,ARB_SEL位被改为11b。–如果REQ4被服务,ARB_SEL位被改为00b。中断优先级产生模块如下图所示专题四:S3C2440中断系统中断优先级发生模块图专题四:S3C2440中断系统六、中断控制器特殊寄存器此处中断控制器中有5个控制寄存器:源挂起寄存器、中断模式寄存器、屏蔽寄存器、优先级寄存器和中断挂起寄存器。所有来自中断源的中断请求首先被记录到源挂起寄存器中。基于中断模式寄存器,它们被分配到2个组中,包括快中断请求(FIQ)和普通中断请求(IRQ)。IRQ的多仲裁过程是基于优先级寄存器。源挂起(SRCPND)寄存器SRCPND寄存器由32位组成,其每一位都涉及一个中断源。如果中断源产生了中断则相应的位被设置为1并且等待中断服务。因此此寄存器指示出是哪个中断源正在等待请求服务。注意SRCPND寄存器的每一位都是由中断源自动置位,其不顾INTMASK寄存器中的屏蔽位。另外SRCPND寄存器不受中断控制器的优先级逻辑的影响。在指定中断源的中断服务程序中,必须通过清除SRCPND寄存器的相应位来正确的获得来自相同源的中断请求。如果从ISR中返回并且未清除相应位,则中断控制器的操作就好像其它中断请求已经从同一个源进入了。换句话说,如果SRCPND寄存器的指定位被设置为1,其通常被认作一个有效中断请求正在等待服务。清除相应位的时间依赖于用户的需要。如果希望收到来自相同冤源的其它有效请求,则应该首先清除相应位,并且接着使能中断。可以通过写入一个数据到此寄存器来清除SRCPND寄存器的指定位。其只清除那些数据中被设置为1的相应位置的SRCPND位。那些数据中被设置为0的相应位置的位保持不变。专题四:S3C2440中断系统1)RCPND)寄存器SRCPND寄存器由32位组成如表一所示,源挂起(S其每一位都涉及一个中断源,如表二所示。如果中断源产生了中断则相应的位被设置为1并且等待中断服务,因此此寄存器指示出是哪个中断源正在等待请求服务。在指定中断源的中断服务程序中,必须通过清除SRCPND寄存器的相应位来正确地获得来自相同源的中断请求。如果从ISR中返回并且未清除相应位,则中断控制器的操作就好像其他中断请求已经从同一个源进入了。换句话说,如果SRCPND寄存器的指定位被设置为1,其通常被认作一个有效中断请求正在等待服务。清除指定位的方法是通过写入数据到此寄存器中来清除INTPND寄存器的指定位。在指定位写1只会清除数据中设置为1的相应INTPND寄存器位的位置。数据中设置为0的相应位的位置则保持不变。专题四:S3C2440中断系统表一专题四:S3C2440中断系统2)中断模式寄存器(INTMOD)INTMOD寄存器由32位组成,每一位都都涉及一个中断源。如果指定某位为0则表示为IRQ模式中处理;如果某个指定为被设置为1,则在FIQ(快中断)模式中处理相应中断。因此,该寄存器只能有一位为1。3)中断屏蔽寄存器(INTMSK)INTMSK寄存器由32位组成,其每一位都都涉及一个中断源。如果某个指定为被设置为1,则CPU不会去服务来自相应中断源(请注意即使在这种情况中,SRCPND寄存器的相应位也设置为1)的中断请求;如果屏蔽位为0,则可以服务中断请求。专题四:S3C2440中断系统4)中断优先级寄存器(PRIORITY)表2专题四:S3C2440中断系统5)中断挂起寄存器(INTPND)中断挂起寄存器中32位的每一位都表明了是否相应未屏蔽并且正在等待中断服务的中断请求具有最高的优先级。当INTPND寄存器在优先级逻辑后被定位了,只有1位可以设置为1并且产生中断请求IRQ给CPU。IRQ的中断服务程序中可以读取此寄存器来决定服务32个中断源的哪个源。就如SRCPND寄存器,必须在中断服务程序中清除了SRCPND寄存器后清除此寄存器。可以通过写入数据到此寄存器中来清除INTPND寄存器的指定位。只会清除数据中设置为1的相应INTPND寄存器位的位置。数据中设置为0的相应位的位置则保持不变。6)中断偏移寄存器(INTOFFSET)中断偏移寄存器中的值表明了是哪个IRQ模式的中断请求在INTPND寄存器中。此位可以通过清楚SRCPND和INTPND自动清除。专题四:S3C2440中断系统7)次级源挂起寄存器(SUBSRCPND,见表4-21)可以通过写入数据到此寄存器来清除SUBSRCPND寄存器的指定位。只有数据中那些被设置为1的相应SUBSRCPND寄存器位的位置才能被清除。数据中那些被设置为0的相应位的位置则保持不变。8)中断次级屏蔽寄存器(INTSUBMSK,见表4-22)此寄存器有11位,其每一位都与一个中断源相联系。如果某个指定位被设置为1,则相应中断源的中断请求不会被CPU所服务(请注意即使在这种情况中,SRCPND寄存器的相应位也设置为1);如果屏蔽位为0,则可以服务中断请求。专题四:S3C2440中断系统一、中断向量地址表示例Reset_Handler;复位处理0x0Undef_Handler;未定义指令处理0x4S