微机原理与接口技术徐惠民第8章.ppt
微机原理与接口技术,第八章 中断系统,8.1 中断的基本概念,8.1.1 什么是中断 中断是CPU和外部设备交换数据的一种方式。当CPU正常运行程序时,用户通过某种方式向CPU请求为自己服务,CPU接收请求暂时中断正在运行的程序,转去执行直接为用户服务的服务程序,执行完毕后再返回被中断的程序。这一过程被称为中断。中断可以提高CPU与外设交换数据的效率。,8.1 中断的基本概念,8.1.2 中断源能够导致CPU产生中断的来源就是中断源。对于CPU来说,中断源有两类:硬中断源和软中断源。硬中断也称为外中断,是由外部的电路在CPU的引脚上产生的中断请求。软中断是在CPU执行程序过程中产生的中断请求。可以是一条软中断指令,也可以是因为程序运行出现某种问题而导致的软中断。,8.1 中断的基本概念,CPU中断源的示意图:既有硬中断,也有软中断。,另外,要注意CPU的硬中断源与实际的外中断源之间的区别。对于CPU来说,硬中断源就是相应引脚上的中断请求信号;而实际的外中断源是产生这些信号的器件或设备。即实际的外在中断源产生相应的中断信号而形成了硬中断源。,8.1 中断的基本概念,8.1.3 开中断和关中断不同的中断源又可以分为条件中断和无条件中断(一般的软件中断)。对于条件中断,要求CPU必须处于某种条件下,才可以响应中断。如果CPU处于可以响应条件中断的状态,称为开中断状态(IF=1)。如果CPU处于不可以响应条件中断的状态,称为关中断状态(IF=0)。,8.1 中断的基本概念,8.1.4 中断优先级由于CPU存在多个中断源,多个中断源可能同时向CPU申请中断。为了能够有序的处理多个中断申请,所以要有中断优先级的规定。如果CPU在执行中断服务程序时,又接受了新的中断申请,就会打断正在执行的中断服务程序,为新的中断源服务。这种在中断服务过程中,又接受新的中断申请并为之服务的情况,称为中断嵌套。有了中断优先级可以使得中断嵌套有序的进行。,8.1 中断的基本概念,1.软件查询实现中断优先级排队,所有的中断申请接到一个或门电路,无论有一个或者几个中断申请都会在或门的输出向CPU申请中断。同时,各中断输入接到一个锁存器。CPU在响应中断后,从数据总线读入锁存器的内容,并按照中断源的优先级从高到低进行查询,这样即可以实现高优先级的申请首先得到响应。,8.1 中断的基本概念,软件查询中断排队的服务程序流程图 注意:这是CPU响应中断后调用的中断服务程序的流程图。响应程序如下:PORT-R是锁存器地址 IN AL,PORT-R CLC RCL AL,1 JC INTSO1A1:RCL AL,1 JC INTSO2A2:INTSO1:JMP A1INTSO2:JMP A2,上述程序实际上是一个程序段,而不是一个子程序。子程序可以通过RET指令返回;而从程序段返回到跳转点,要有转移指令。,8.1 中断的基本概念,2.硬件电路实现中断源排队:硬件优先权排队电路可以有多种形式,下图所示是一种接口的方式。,运行步骤:1、外中断源向CPU申请中断;(通过一个或门来完成)2、CPU给出中断应答信号;(高电平有效)3、排队电路将选择最高级别的中断,产生相应的三态锁存器的选通信号,将存放在锁存器中的中断源标志传送到CPU的数据总线;4、CPU读入中断源的标志,调用相应的中断服务程序。,8.1 中断的基本概念,软硬件查询中断排队的特点,8.1 中断的基本概念,8.1.5 中断向量表 中断向量表是系统RAM或者系统ROM的一个区域。向量表的大小取决于CPU支持的中断类型和数量。中断向量表存放中断服务程序的入口地址(向量中断的中断向量表),或者是跳转到中断服务程序入口的指令(指令型的中断向量表)。中断向量表用来解决中断和中断服务程序的关联,在中断系统中具有非常重要的作用。,8.1 中断的基本概念,指令型的中断向量表:这种向量表一般位于系统的ROM区域,ROM单元中存放的是转移指令;向量表为每个中断保留了4个字节的空间,足够存放一条转移指令;每一种类型的中断,对应固定的ROM地址;CPU在响应某种中断时,自动地将指令指针调整到中断向量表的相应地址,执行该地址单元中的转移指令,跳到相应的中断服务程序;这种中断向量表和其他程序代码一起固化到ROM存储器的,固化后再修改中断服务程序的入口地址就比较困难。,8.1 中断的基本概念,向量中断的中断向量表:这种向量表一般位于系统的RAM区域,向量表中存放的是中断向量,即中断服务程序的入口地址;表中的中断类型号相当于在硬件优先权电路中的中断源标识;中断类型号也需要在CPU响应中断时传送到CPU的数据总线;由于这种向量表存放在系统RAM区,可随时修改,所以这种向量表使用比较灵活;即使是同一个中断类型号,也可以有若干个不同的中断服务程序,并根据需要来选用。,8.1.6 中断过程 中断是一个过程,中断过程中有一些必须完成的工作要做,这些事情有的是用户做的,有的是CPU做的;对于不同的CPU来说,这样的分工并不都是相同的;在此主要说明8086/8088CPU中断过程中必须要做的事情:1、中断申请:除了软中断外,中断申请是外部设备向CPU发送的中断请求信号。信号可以是电平也可是脉冲,若请求信号和CPU的要求不一致,用户可以通过接口电路来解决。2、中断判优:对中断源判优。若当前没有中断服务进行,则任何级别的中断申请均可交给CPU处理,否则只有更高级别的中断申请被CPU受理,进入中断响应。3、中断响应:CPU收到中断请求后,进入中断响应阶段。中断可分为无条件中断和条件中断。对于无条件中断,CPU是一定响应的。外部中断一般都是有条件的,要针对具体的CPU确定需要什么条件。若中断条件和优先权都没有问题,就正式进入中断响应。CPU在中断响应时,必须要做的事情包括:保存断点地址:自动完成,可堆栈保存也可保存在其他寄存器(由CPU类型决定)。将指令指针指向中断服务程序的入口,开始执行中断服务程序(利用中断向量表)。4、中断服务:即执行中断服务程序。5、中断返回,8.2 8086中断系统,8.2.1 8086的中断源 8086系统可以处理256个不同的中断,对于每个中断,都会分配一个中断类型号。中断类型号的取值是从0255,或者是从00HFFH。8086处理的中断分为两类:软中断和硬中断。硬中断又分为两类:非屏蔽中断和可屏蔽中断。非屏蔽中断就是无条件中断,可屏蔽中断就是条件中断。非屏蔽中断请求从NMI引脚输入,可屏蔽中断的请求从INTR引脚输入。8086的软中断是通过指令“INT n”来引发的。其实软中断并不是真正意义上的中断,它实际上就是一个子程序,它不可屏蔽。INT n指令是双字节指令,其中一个字节是存放中断类型号n。n的取值是0255(00HFFH)。系统规定了中断类型号04的专门用途,这些中断类型号的使用有各自的特点,其余的中断类型号既可以分配给软中断使用,也可以分配给可屏蔽中断使用。,8.2 8086中断系统,8086规定的特殊中断类型号04的中断及其用途,8.2 8086中断系统,8086的中断源:所有中断源中只有可屏蔽中断是条件中断,必须在CPU开中断状态下才可以响应。通过“STI”或“CLI”指令分别使IF置1或置0来完成开关中断。,8.2 8086中断系统,8086中断源的优先级由于8086存在多个中断源,这些中断源之间必须有优先级的差别,以便在几个中断源同时申请中断时,先响应高优先级的中断源。8086中断源的优先级是固定的:除法溢出中断INT n INTO NMIINTR 单步中断(最低)8086本身不处理外中断源的优先级问题,外中断源的优先级问题由中断接口电路来处理。,8.2 8086中断系统,8.2.2 可屏蔽中断的中断周期 8086在响应可屏蔽中断时要进入中断响应周期。中断响应周期需要两个总线周期,共8个T状态。可屏蔽中断的接口电路,要在收到第一个 应答信号后,立即向CPU传送相应外设的中断类型号。,对于8086其他类型的中断,不进入中断响应周期,也不需要外设传送中断类型号。,8.2 8086中断系统,8.2.3 8086的中断向量表 8086的中断向量表位于存储器的03FFH地址,共1024字节。8086的中断向量表采用的是向量中断,中断向量表中存放的是中断向量,也就是中断服务程序的入口地址。1024个字节用来存放256个中断服务程序的入口地址。每个中断号分配4个字节。低地址2个字节是中断入口的IP(偏移地址),高地址的两个字节是中断入口的CS(段地址)。如果已知中断类型号n,在地址从n4开始的2个字节读出n号中断服务程序入口的偏移地址,在地址从n4+2开始的2个字节读出n号中断服务程序入口的段地址。从中断向量表读出中断矢量是CPU的工作,将中断服务程序的入口地址写入中断向量表则是用户的事。写入中断向量表常用的两种方法:1、直接写入法。2、利用DOS功能调用写、读中断向量表。,8.2 8086中断系统,利用DOS功能调用写、读中断向量表。DOS功能调用25H用来写中断向量表。入口参数是:AL:中断类型号;DS:中断服务程序入口的段地址;DX:中断服务程序入口的偏移地址。DOS功能调用35H用来读中断向量表,入口、出口参数如下:AL:中断类型号;ES:读出的中断服务程序入口的段地址;BX:读出的中断服务程序入口的偏移地址。,8.2 8086中断系统,例8-4 设中断类型号为70H,中断服务程序是INTSUB,用DOS功能调用25H将中断服务程序入口地址写入中断向量表。解:相关的程序段如下:PUSHDSMOVAX,SEG INTSUBMOVDS,AXLEADX,INTSUBMOVAL,70HMOVAH,25HINT21HPOPDS,8.2 8086中断系统,8.2.4 8086的中断过程 中断申请:外中断申请(包括NMI、INTR)都是高电平有效。中断响应:无论是哪一种中断申请,8086都要在执行完当前指令后,开始响应中断。标志寄存器的值推入堆栈保护;使得标志IF和TF清零,也就是,进入中断服务程序后,CPU是处于关中断状态;正在执行的程序的断点的CS和IP入堆栈保存;根据中断类型号,查中断向量表,将中断服务程序入口地址写入CS和IP;开始执行中断服务程序。,8.2 8086中断系统,中断服务:中断服务程序都是远过程。如果希望允许中断嵌套,在中断服务程序的开始时,写一条开中断指令:STI。中断返回:用IRET指令。IRET指令的具体操作是:IP(SP),SPSP+2CS(SP),SP SP+2F(SP),SPSP+2,8086响应中断的过程:,8.3 可编程中断控制器8259A及其应用,8259A是可编程中断控制器,实际上就是一种中断接口电路。它在8086环境下,可用于多个INTR中断源的中断接口。NMI中断源不宜用8259A作为中断接口电路。8.3.1 8259A中断控制器的基本功能单片8259可以连接8个中断源,多片8259连接后,可以连接多达64个中断源。可以设置中断源的中断类型号;在CPU应答后,能自动地向CPU发送中断类型号。能管理中断源的优先级,并有固定优先级(自动嵌套方式)和循环优先级(相等优先级)两种管理方式。可以设置中断源的中断请求方式:电平方式或脉冲方式。,8.3 可编程中断控制器8259A及其应用,8.3.2 8259A的功能框图,8.3 可编程中断控制器8259A及其应用,主要模块,包括:中断请求寄存器(IRR),保存还没有得到处理的外部中断源的申请。中断服务寄存器(ISR),登记哪些中断源的申请正在被CPU响应。优先级分析器(PR),有多个中断源申请中断时,优先级分析器判定谁是最高优先级,可以优先服务;或者决定是不是可以中断嵌套。中断屏蔽寄存器(IMR),IMR共有8位,每一位控制一个外部中断源申请。当某一位为“1”时,相应的中断源的申请就被屏蔽,不能进入IRR寄存器进行登记。,8.3 可编程中断控制器8259A及其应用,8.3.3 8259A引脚图,8.3 可编程中断控制器8259A及其应用,8.3.4 8259A的工作方式 作为一个可编程的中断控制器,8259A提供了多种工作方式供用户选择。了解8259A的主要工作方式才能够正确的使用8259A。,8.3 可编程中断控制器8259A及其应用,1.确定中断类型号的方式单片8259A可以为8个中断源分别提供中断类型号。8259A规定8个中断类型号的高5位是相同的,只有低3位不同。中断类型号低3位的值和中断输入引脚的编号相一致。从IR0输入的中断源的中断类型号低3位是“000”,从IR7引脚输入的中断源的中断类型号的低3位是“111”。因此,8259A的8个中断源的中断类型号一定是连续的。如果中断类型 号的高五位为01001,则接到IR0IR7的8个中断源的中断类型号是48H4FH。,8.3 可编程中断控制器8259A及其应用,2.中断结束方式8259A有两种清除ISR(中断服务寄存器)寄存器中的登记的方法,也就是有两种中断结束方式。(1)自动结束中断方式:8259A在CPU发送第二个应答信号的后沿,自动清除被响应的中断在ISR寄存器中的登记。(2)非自动结束中断方式:要求在中断服务程序结束前,通过指令向8259A发送一个结束中断的命令,一般就称为EOI命令(8259A的一种操作命令字),8259A收到这个命令后,才会清除正在服务的中断在ISR寄存器中的登记。,8.3 可编程中断控制器8259A及其应用,3.优先权管理方式8259A对于中断优先权的管理有两种方式、三种具体的做法。(1)全嵌套方式:即固定优先级方式,对于8个中断源,从IR0接入的中断源优先级最高,从IR7接入的中断源优先级最低。(2)循环优先级方式:初始时,仍然是按IR0的优先级最高,IR7的优先级最低,一旦某个中断请求被响应了,这个中断输入对应的优先级就降到最低,原来比这个输入低一级的输入的优先级升位最高,其余各个输入对应的优先级仍然依次排列。,8.3 可编程中断控制器8259A及其应用,(3)特殊全嵌套方式:特殊全嵌套方式在多片8259A级联的时候使用。它允许同级中断的嵌套:后面到来的同级中断申请可以打断前面没有结束的同级中断服务。,从8259A发来的新的申请可以打断前面的中断服务,8.3 可编程中断控制器8259A及其应用,4.中断屏蔽方式一般屏蔽方式:通过对于中断屏蔽寄存器IMR的设置,可以屏蔽一些(甚至全部)中断申请输入到8259A。还可以实现高优先级的中断对低优先级中断的屏蔽。特殊屏蔽方式:8259A还可以设置一种特殊屏蔽方式。在这样的屏蔽方式中,高优先级的中断不对低级中断产生屏蔽。也就是说,各中断源之间的优先级关系就不考虑了。,8.3 可编程中断控制器8259A及其应用,5.8259A和系统数据总线连接的方式(1)非缓冲方式在非缓冲方式下,8259A的数据线直接和系统的数据总线相连接。一般的应用场合,都可以使用这种连接方式。在这种连接方式下,不需要 作为输出信号控制外接的数据缓冲器。作为输入信号来标识8259A是作为主8259A,还是从8259A:接高电平为主8259,接低电平,为从8259。,8259A非缓冲方式的连接,8.3 可编程中断控制器8259A及其应用,(2)缓冲方式在缓冲方式下,8259A的数据线通过数据缓冲器和系统的数据总线相连。数据缓冲器的选通端连接到8259A的 引脚。在这种应用场合,引脚输出低电平的选通信号时,打开所连接的数据缓冲器,8259A才和系统数据总线进行数据传送。,8.3 可编程中断控制器8259A及其应用,8.3.5 8259A的编程 8259A作为一种可编程中断控制器,需要在CPU的控制下工作。CPU传送给8259A的控制命令有两类:初始化命令字和操作命令字。,8.3 可编程中断控制器8259A及其应用,1.8259A的初始化命令字初始化命令字设置8259A的基本工作方式。完成一次初始化编程后,8259A就按照所设置的方式工作,直到重新进行初始化,才可以改变所设置的基本工作方式。8259A共有4个初始化命令字:ICW1ICW4。每个初始化命令字要写到8259A的不同的端口。,8.3 可编程中断控制器8259A及其应用,(1)ICW1初始化命令字:功能:设置中断触发方式,规定初始化过程是否需要ICW3/ICW4。,8.3 可编程中断控制器8259A及其应用,(2)ICW2初始化命令字:功能:写入8个中断源的中断类型号的高5位。,8.3 可编程中断控制器8259A及其应用,(3)ICW3初始化命令字:功能:在多片8259A的系统中,说明主、从8259A之间的连接关系(仅在多片8259A系统中使用)。,8.3 可编程中断控制器8259A及其应用,(4)ICW4初始化命令字:功能:设置8259A的中断结束方式等。,8.3 可编程中断控制器8259A及其应用,(5)8259A的初始化过程,8.3 可编程中断控制器8259A及其应用,2.8259A的操作命令字初始化过程结束后所写入的命令字都是操作命令字。每个操作命令字写入的次数和时间顺序都是没有限定的。8259A有3个操作命令字:OCW1、OCW2和OCW3。,8.3 可编程中断控制器8259A及其应用,(1)OCW1命令字写入端口:A0=1。功能:设置中断屏蔽寄存器。,8.3 可编程中断控制器8259A及其应用,(2)OCW2命令字:写入端口:A0=0。功能:设置中断优先级管理方式,向8259发送中断结束字(EOI)。,8.3 可编程中断控制器8259A及其应用,(3)OCW3命令字:写入端口:A0=0。主要功能:确定下一次读出是IRR还是ISR。,8.3 可编程中断控制器8259A及其应用,3.8259A初始化编程举例例8-5 2片8259级联,从片的INT接主片的IR2。端口地址:主片20H、21H,从片A0H、A1H。主片和从片均采用边沿触发。主片采用特殊全嵌套方式,从片是一般全嵌套方式。采用非缓冲方式,主片接+5V,从片接地。主片的中断类型号为08H0FH,从片的中断类型号为70H77H。写出主8259A和从8259A的初始化程序段。,相应的初始化程序段如下:ICW1A EQU 20H;主片端口地址ICW2A EQU ICW1A+1ICW3A EQU ICW2AICW4A EQU ICW2AICW1B EQU 0A0H;从片端口地址ICW2B EQU ICW1B+1ICW3B EQU ICW2BICW4B EQU ICW2B;-主片8259A-MOV AL,11H;ICW1,边沿触发,多片,需ICW4OUT ICW1A,ALMOV AL,08H;ICW2,中断类型码OUT ICW2A,ALMOV AL,04H;ICW3,IR2接从片OUT ICW3A,ALMOV AL,11H;ICW4,非缓冲,特殊全嵌套,非自动结束OUT ICW4A,AL;-从片8259A-MOV AL,11H;ICW1,边沿触发,多片,需ICW4OUT ICW1B,ALMOV AL,70H;ICW2,中断类型码OUT ICW2B,ALMOV AL,02H;ICW3,INT接主片的IR2OUT ICW3B,ALMOV AL,01H;ICW4,非缓冲,全嵌套,非自动结束OUT ICW4B,AL,