540 likes | 736 Views
第七章 中断. 本章学习要求. 熟悉 8088 的中断类型、中断响应过程、中断向量表 掌握内部中断服务程序的编写 理解 8259A 的内部结构、寄存器作用、中断过程 掌握 8259A 的普通全嵌套优先权、普通中断结束、边沿触发方式. 所谓中断,就是指当 CPU 正在执行程序时,外设 ( 或其它中断源 ) 向 CPU 发出请求, CPU 暂停当前程序的执行,转向该外设服务 ( 或称中断服务 ) 程序,当中断服务程序运行结束后,返回原程序继续执行的过程。 中断控制方式的优点 分时操作 实时处理 故障处理. 中断源.
E N D
本章学习要求 • 熟悉8088的中断类型、中断响应过程、中断向量表 • 掌握内部中断服务程序的编写 • 理解8259A的内部结构、寄存器作用、中断过程 • 掌握8259A的普通全嵌套优先权、普通中断结束、边沿触发方式 微机原理第七章 中断(2)
所谓中断,就是指当CPU正在执行程序时,外设(或其它中断源)向CPU发出请求,CPU暂停当前程序的执行,转向该外设服务(或称中断服务)程序,当中断服务程序运行结束后,返回原程序继续执行的过程。 • 中断控制方式的优点 • 分时操作 • 实时处理 • 故障处理 微机原理第七章 中断(3)
中断源 • 外部中断(硬中断):来自INTR和NMI引脚的中断。 • 非屏蔽中断的优先权高于可屏蔽中断。其中断请求信号是发生在NMI上的电压跳变(边沿触发)。 (时序图) • 可屏蔽中断 : 出现在INTR线上的请求信号是电平触发的。只有当中断允许标志位IF为1时,CPU才能响应INTR的中断请求。如果IF为0,即使INTR端有中断请求信号CPU也不会响应。这种情况称为中断屏蔽。 • 内部中断:来自CPU内部的,通过软件调用的中断。 • 除法溢出中断――0号中断 • 单步中断――1号中断 • INT指令中断 • 溢出中断――4号中断 • 优先权:除法错→INT n →INTO →NMI →INTR →单步 微机原理第七章 中断(4)
中断过程 • 中断检测 • 中断响应 • 执行中断服务程序中断返回 微机原理第七章 中断(5)
可屏蔽中断的响应过程 : ① 读取中断类型码 ② 将标志寄存器的值推入堆栈 ③ 把标志寄存器的IF和TF清零 ④ 将断点保护到堆栈中。 ⑤ 寻找中断向量,转入中断处理程序 微机原理第七章 中断(6)
软件中断 • 用一条指令进入中断处理子程序,并且,中断类型码由指令提供。 • 不执行中断响应总线周期,也不从数据总线读取中断类型码。 • 不受中断允许标志IF的影响 • 执行过程中可响应外部硬件中断 • 软件中断没有随机性 微机原理第七章 中断(7)
中断处理子程序 ① 进一步保护中断现场 ② 开放中断 ③ 中断处理的具体内容 ④ 弹出堆栈指令 ⑤ 中断返回指令 微机原理第七章 中断(8)
中断向量表的设置 • 方法一:在程序设计时定义一个如下格式的数据段: VECDATA SEGMENT AT 0 ORG n* 4 VINTSUB DW noffset, nseg …… VECDATA ENDS • 方法二:DOS中的功能调用INT 21H,预置的参数是: • AH中预置入功能号25H; • AL中预置入要设置的中断类型号; • DS:DX中预置入中断服务程序的入口地址(包括段地址和偏移地址)。 微机原理第七章 中断(9)
方法三: VECDATA SEGMENT AT 0 ORG n*4 VINTSUB DW 2 DUP(?) ………… VECDATA ENDS ININT SEGMENT ASSUME CS:ININT,DS:VECDATA MOV AX,VECDATA MOV DS,AX MOV VINTSUB,noffset MOV VINTSUB+2,nseg ININT ENDS 微机原理第七章 中断(10)
中断的优先权管理 • 软件查询方式 微机原理第七章 中断(11)
中断优先权排队电路 微机原理第七章 中断(12)
菊花链法 ≥ 中断应答 ____ INTA ≥ INTR 中断请求 微机原理第七章 中断(13)
专用芯片管理方式 微机原理第七章 中断(14)
8259A 微机原理第七章 中断(15)
结构 8259A的内部结构及工作原理 微机原理第七章 中断(16)
8259A的工作方式 • 触发方式 • 中断优先权管理方式 • 屏蔽中断源方式 • 中断结束方式 微机原理第七章 中断(17)
8259A的中断优先权管理方式 • 完全嵌套方式 • 自动循环方式 • 中断屏蔽方式 微机原理第七章 中断(18)
完全嵌套方式是8259A被初始化后自动进入的基本工作方式,在这种方式下,由各个IRi端引入的中断请求具有固定的中断级别。IR0具有最高优先级,IR7具有最低优先级,其他级顺序类推。完全嵌套方式是8259A被初始化后自动进入的基本工作方式,在这种方式下,由各个IRi端引入的中断请求具有固定的中断级别。IR0具有最高优先级,IR7具有最低优先级,其他级顺序类推。 微机原理第七章 中断(19)
8259A在完全嵌套方式下,可采用以下3种中断结束方式:8259A在完全嵌套方式下,可采用以下3种中断结束方式: • 普通EOI方式: 当任何一级中断服务程序结束时,只给8259A传送一个EOI结束命令,8259A收到这个EOI命令后,自动将ISR寄存器中级别最高的置“1”位清“0”。 • 特殊EOI方式: 在普通EOI方式的基础上,当中断服务程序结束给8259A发出EOI命令的同时,将当前结束的中断级别也传送给8259A,就被称作特殊EOI方式。这种情况下,8259A将ISR寄存器中指定级别的相应位清“0”,显然这种结束方式可在任何情况下使用。 • 自动EOI方式: 任何一级中断被响应后,ISR寄存器中相应位置“1”,CPU将进入中断响应总线周期,在第2个中断响应信号(INTA)结束时,自动将ISR寄存器中相应位清“0”,被称作自动EOI方式。 微机原理第七章 中断(20)
自动循环方式 • 普通EOI循环方式: 当任何一级中断被处理完后,CPU给8259A回送普通EOI命令,8259A接收到这一命令后将ISR寄存器中优先级最高的置“1”位清“0”,并赋给它最低优先级,而将最高优先级赋给原来比它低一级的中断请求,其他中断请求的优先级别以循环方式类推。 • 自动EOI循环方式:任何一级中断响应后,在中断响应总线周期中,由第2个中断响应信号 INTA 的后沿自动将ISR寄存器中相应位清“0”,并立即改变各级中断的优先级别,改变方案与上述普通EOI循环方式相同。 • 特殊EOI循环方式:此方式具有更大的灵活性,它可根据用户要求将最低优先级赋给指定的中断源。用户可在主程序或中断服务程序中利用置位优先权命令把最低优先级赋给某一中断源IRi,于是最高优先级便赋给IRi+1,其他各级按循环方式类推。 微机原理第七章 中断(21)
中断屏蔽方式 • 普通屏蔽方式: 将中断屏蔽寄存器IMR中的某一位或某几位置“1”,即可将相应级的中断请求屏蔽掉。 • 特殊屏蔽方式: 当CPU正在处理某级中断时,要求仅对本级中断进行屏蔽,而允许其他优先级比它高或低的中断进入系统,这被称作特殊屏蔽方式。 微机原理第七章 中断(22)
中断触发方式 • 电平触发方式 • 当定义为电平触发方式时,从IR7~IR0输入的有效信号应为高电平。 • 边沿触发方式 • 当IRi端上出现由低电平到高电平的正跳变时,表示中断请求信号有效,最好用负脉冲的后沿来实现。 微机原理第七章 中断(23)
8259A的级联 微机原理第七章 中断(24)
可编程中断控制器8259A的初始化操作可明确地分成两个部分,首先要通过预置命令字(ICWi)对8259A进行初始化,然后8259A将自动进入操作模式。可在8259A操作过程中通过操作命令字(OCWi)来定义8259A的操作方式,而且在8259A的操作过程中允许重置操作命令字,以动态地改变8259A的操作与控制方式。可编程中断控制器8259A的初始化操作可明确地分成两个部分,首先要通过预置命令字(ICWi)对8259A进行初始化,然后8259A将自动进入操作模式。可在8259A操作过程中通过操作命令字(OCWi)来定义8259A的操作方式,而且在8259A的操作过程中允许重置操作命令字,以动态地改变8259A的操作与控制方式。 • 每片8259A包含两个内部端口地址,一个偶地址端口(A0=0),一个奇地址端口(A0=1),其他高位地址码由用户定义,用来作为8259A的片选信号(CS)。 微机原理第七章 中断(27)
8259A的预置命令字共4个(ICW1~ICW4)。不是任何情况下都需要设置4个预置命令字,可根据8259A的使用情况来选取,它们的设置流程如图所示。8259A的预置命令字共4个(ICW1~ICW4)。不是任何情况下都需要设置4个预置命令字,可根据8259A的使用情况来选取,它们的设置流程如图所示。 微机原理第七章 中断(28)
ICW2具体格式 微机原理第七章 中断(30)
ICW3只对级联方式有效,端口地址为奇地址。对于主8259A,使用格式如图a所示,对于从8259A的使用格式如图b所示。ICW3只对级联方式有效,端口地址为奇地址。对于主8259A,使用格式如图a所示,对于从8259A的使用格式如图b所示。 微机原理第七章 中断(31)
ICW4对于8086/8088系统是必须设置的预置命令字 微机原理第七章 中断(32)
当8086系统中8259A单级使用,其端口地址为80H和81H,可用下面的初始化程序段来写入预置命令字ICW1~ICW4:当8086系统中8259A单级使用,其端口地址为80H和81H,可用下面的初始化程序段来写入预置命令字ICW1~ICW4: MOVAL,13H 定义ICW1 OUT80H,AL; MOVAL,18H 定义ICW2 OUT81H,AL; MOVAL,01H 定义ICW4 OUT81H,AL; 由ICW2可确定该8259A引入的8级中断的中断类型码为18H~1FH。 微机原理第七章 中断(33)
2. 操作命令字 8259A经ICWi预置后已进入初始化状态,可接收来自IRi端的中断请求。自动进入操作命令状态,准备接收CPU写入8259A的操作命令字OCWi。 (1) OCW1用来实现中断屏蔽功能,其端口地址为奇地址(A0=1),OCW1内容被直接置入中断屏蔽寄存器IMR中,其格式如下: A070 1M7 M6 M5 M4 M3 M2 M1 M0 Mi= 1:屏蔽由IRi引入的中断请求 0:允许IRi端中断请求进入 微机原理第七章 中断(34)
图9.13 微机原理第七章 中断(35)
(2) OCW2用来定义中断结束方式,其端口地址为偶地址(A0=0),其格式如图9.14所示。 图9.14 微机原理第七章 中断(36)
由R,SL,EOI 3位编码可定义多种不同的中断结束方式或发出置位优先权命令。 • 当3位编码为“001”,则定义8259A采用普通EOI结束方式,一旦中断服务程序结束,将给8259A送出EOI结束命令,8259A将ISR寄存器中当前级别最高的置“1”位清“0”。 • 当3位编码为“011”,则定义8259A采用特殊EOI结束方式,一旦中断处理结束,除给8259A送EOI结束命令外,还由L2 L1 L0字段给出当前结束的是哪一级中断,8259A应将ISR寄存器中指定级别的相应位清“0”。 • 当3位编码为“101”,定义8259A采用普通EOI循环方式。一旦中断结束,8259A一方面将ISR寄存器 微机原理第七章 中断(37)
中当前级别最高的置“1”位清“0”;另一方面将最低优先级赋给刚结束的中断请求IRi,将最高优先级赋给中断请求IRi+1,其他中断请求的优先级别按循环方式顺序改变。 中当前级别最高的置“1”位清“0”;另一方面将最低优先级赋给刚结束的中断请求IRi,将最高优先级赋给中断请求IRi+1,其他中断请求的优先级别按循环方式顺序改变。 • 当3位编码为“111”,则定义8259A采用特殊EOI循环方式。一旦中断结束,8259A将ISR寄存器中由L2 L1 L0字段给定级别的相应位清“0”;并将最低优先级赋给这一中断请求,最高优先级赋给原来比它低一级的中断请求,其他级按循环方式顺序改变。 • 当3位编码为“100”和“000”,则定义8259A采用自动EOI循环方式(置位)和取消自动EOI循环方式(复位)。一旦被定义为自动EOI循环方式,CPU将在中断响应总线周期中第2个中断响应信号INTA结束 微机原理第七章 中断(38)
时,将ISR寄存器中的相应位置“0”;并将最低优先级赋给这一级,最高优先权赋给原来比它低一级的中断,其他中断请求的级别按循环方式分别赋给。 时,将ISR寄存器中的相应位置“0”;并将最低优先级赋给这一级,最高优先权赋给原来比它低一级的中断,其他中断请求的级别按循环方式分别赋给。 • 当3位编码为“110”时,则表示向8259A发出置位优先权命令,将最低优先级赋给由L2 L1 L0字段所给定的中断请求IRi。其他中断源的级别按循环方式分别赋给。 • (3) OCW3端口地址仍为偶地址(A0=0),D4D3(=01)作为OCW3的标志位可与OCW2区别开,其格式如图9.15所示。 微机原理第七章 中断(39)
图9.15 微机原理第七章 中断(40)
RR位用作读寄存器命令。RR=1,表示CPU要求读取8259A中某寄存器内容。RIS位用来为读寄存器命令确定读取对象:RIS=0时表示要求读IRR寄存器内容,RIS=1时表示要求读ISR寄存器内容。这就是说,如果将RR和RIS位置成“10”然后安排一条输入指令(IN),则将8259A中的IRR寄存器内容读到CPU的累加器中。而如果将RR和RIS位置成“11”,同样安排一条IN指令,则读到累加器中的将是8259A中ISR寄存器的内容。如果CPU需要读出当前IMR寄存器的内容,则不需要设置RR和RIS位的状态,只要端口地址设置成奇地址(A0=1),直接安排一条IN指令,便可将IMR寄存器内容读入累加器中,这种情况实际上与OCW3控制字无关,可在程序的任何位置安排IN指令来实现。RR位用作读寄存器命令。RR=1,表示CPU要求读取8259A中某寄存器内容。RIS位用来为读寄存器命令确定读取对象:RIS=0时表示要求读IRR寄存器内容,RIS=1时表示要求读ISR寄存器内容。这就是说,如果将RR和RIS位置成“10”然后安排一条输入指令(IN),则将8259A中的IRR寄存器内容读到CPU的累加器中。而如果将RR和RIS位置成“11”,同样安排一条IN指令,则读到累加器中的将是8259A中ISR寄存器的内容。如果CPU需要读出当前IMR寄存器的内容,则不需要设置RR和RIS位的状态,只要端口地址设置成奇地址(A0=1),直接安排一条IN指令,便可将IMR寄存器内容读入累加器中,这种情况实际上与OCW3控制字无关,可在程序的任何位置安排IN指令来实现。 微机原理第七章 中断(41)
P位可称作查询位,将P位置“1”后,表示向8259A发出查询命令,查询当前是否有中断请求正在被处理,如果有,则给出当前处理的最高优先级是哪一级,可查询的中断状态字格式如图9.16所示。P位可称作查询位,将P位置“1”后,表示向8259A发出查询命令,查询当前是否有中断请求正在被处理,如果有,则给出当前处理的最高优先级是哪一级,可查询的中断状态字格式如图9.16所示。 图9.16 微机原理第七章 中断(42)
当系统中8259A采用完全嵌套方式。已知当前ISR寄存器中第2位和第5位置“1”,即第2级和第5级中断正在处理过程中,当前正在执行的应该是第2级中断服务程序。如果在第2级中断服务程序中,将OCW3中P位置“1”后,安排如下一条输入指令:当系统中8259A采用完全嵌套方式。已知当前ISR寄存器中第2位和第5位置“1”,即第2级和第5级中断正在处理过程中,当前正在执行的应该是第2级中断服务程序。如果在第2级中断服务程序中,将OCW3中P位置“1”后,安排如下一条输入指令: 微机原理第七章 中断(43)
OCW3中的ESMM和SMM位是用来实现或取消特殊屏蔽方式,当ESMM和SMM位置成“11”时,表示定义8259A采用特殊屏蔽方式,这种情况下只屏蔽同级中断请求进入,而允许高级中断打断低级中断,也允许低级中断打断高级中断。当ESMM和SMM位置成“10”时,表示取消这种特殊屏蔽方式。OCW3中的ESMM和SMM位是用来实现或取消特殊屏蔽方式,当ESMM和SMM位置成“11”时,表示定义8259A采用特殊屏蔽方式,这种情况下只屏蔽同级中断请求进入,而允许高级中断打断低级中断,也允许低级中断打断高级中断。当ESMM和SMM位置成“10”时,表示取消这种特殊屏蔽方式。 • 上述操作控制字OCW1~OCW3可安排在预置命令字之后,用户可根据需要在程序的任何位置上设置它们,当需要读取ISR或IRR寄存器内容或需要查询当前8259A的中断状态时,都必须先定义OCW3,然后用IN指令读入。如果只需要读入IMR寄存器内容,则不需要定义OCW3。由此看来并不是任何时候都需要设置OCW3操作命令字。 微机原理第七章 中断(44)
3. 8259A级联使用的初始化程序举例 • 某系统中设置两片8259A实现中断控制,它们之间采用级联方式连接,一片从8259A的INT端与主 • 8259A的IR3端相连,已知当前主8259A的IR0和IR5端上分别引入两个中断请求,从8259A的IR2和IR3端上也分别引入两个中断请求,如图9.17所示。 微机原理第七章 中断(45)
图9.17 微机原理第七章 中断(46)
已知主8259A引入的中断类型码分别为40H和45H,它们的中断服务程序在同一段中,其段基址为1000H,偏移地址分别为1050H和2060H,而由从8259A引入的中断请求IR2和IR3的中断类型码为32H和33H,它们的中断服务程序的段基址为2000H。偏移地址分别为5440H和3620H,那么首先应将4个中断入口写入中断入口地址表中。已知主8259A引入的中断类型码分别为40H和45H,它们的中断服务程序在同一段中,其段基址为1000H,偏移地址分别为1050H和2060H,而由从8259A引入的中断请求IR2和IR3的中断类型码为32H和33H,它们的中断服务程序的段基址为2000H。偏移地址分别为5440H和3620H,那么首先应将4个中断入口写入中断入口地址表中。 微机原理第七章 中断(47)
图9.18 微机原理第七章 中断(48)
若已知主8259A的端口地址为FFE8H和FFE9H,从8259A的端口地址为FFFAH和FFFBH,应分别对主8259A和从8259A进行初始化操作。若已知主8259A的端口地址为FFE8H和FFE9H,从8259A的端口地址为FFFAH和FFFBH,应分别对主8259A和从8259A进行初始化操作。 对主8259A的初始化程序段如下: MOVAL, 11H MOVDX, 0FFE8H OUTDX, AL ;定义ICW1 MOVAL, 40H MOVDX, 0FFE9H OUTDX, AL ;定义ICW2 MOVAL, 08H OUTDX, AL; 定义ICW3 MOVAL, 11H 微机原理第七章 中断(49)
OUTDX, ALH ;定义ICW4 MOVAL, 0D6H OUTDX, AL ;定义OCW1 MOVAL, 20H MOVDX, 0FFE8H OUTDX, AL ;定义OCW2 经过这样初始化的主8259A中断控制器被定义为级联使用方式,中断请求信号IRi采用边沿触发方式;可引入的中断类型码为40H~47H;主8259A的IR3端上接有从8259A;采用特殊完全嵌套方式,非自动EOI结束方式,非缓冲方式,由SP=1确定为主8259A;屏蔽掉IR0,IR3和IR5以外的其他中断源;采用普通EOI结束方式。 微机原理第七章 中断(50)