1、内容回顾,DMA传输基本概念 DMA的传送过程、传送方式和操作类型。 DMA控制器8237A 8237A的内部结构和外部引脚。 8237A的内部寄存器(10种)及其地址分配。 8237A的编程步骤和工作时序。 PC中的DMA应用 DMA系统的组成。 单片DMA系统和双片DMA系统。 DMA系统的应用实例。,1,第五章 中断技术,2,5.1 中断技术概述,中断是CPU与外设间进行信息交换的一种形式。 该形式下,CPU无需完全服务于某个外设,效率高。 当出现某些异常情况或某个外设有请求时,CPU暂停正在执行的程序,转去执行某一特定的程序,执行完后再返回原来被终止的程序处继续执行。,3,(1) 中断
2、的常用术语,中断 指CPU正在执行一个程序的过程中,由于出现了某些异常情况或外设提出了某种请求,CPU暂停正在执行的程序,转去处理异常情况或执行外设请求的特定程序,执行完后再返回原来被终止的程序处继续执行。这个过程(三部曲)称为中断。 主程序 未发生中断时,CPU正在执行的程序称为主程序。,4,中断服务程序 处理中断事件的程序段称为中断服务程序(Interrupt Service Routine,ISR)或中断子程序。 不同的中断对应不同的ISR。 中断断点 中断发生时,主程序中被终止的当前指令的下一条指令的地址称为断点。 CPU转去执行ISR时,断点被压入栈中进行保护,等ISR执行完毕,CP
3、U从栈顶获得中断断点(出栈),确保能返回到主程序处继续执行。,5,中断源 引起中断的事件或设备。 内部中断:在CPU的内部产生。例:CPU执行程序时遇到的特殊情况,如:除法错误等。 外部中断:在CPU的外部产生。例:外设提出的中断,如电源故障等。 中断类型号 微机系统中有多个中断源。为便于区分,为每个中断源分配一个编号,即中断类型号。,6,中断接口 当中断源向CPU发中断请求时,需由硬件电路来进行管理,如:屏蔽某中断请求、接受某中断请求、中断优先级排队、中断嵌套和中断结束等。 实现以上中断管理的逻辑电路称为中断接口。 本章使用8259A可编程中断控制器对系统的中断进行管理。,7,中断识别 指C
4、PU确定哪一个中断源发出中断请求的过程。 目的:最终形成该中断源所对应的中断服务程序的入口地址,实现程序的转移。 中断识别的2种方法: 查询中断:采用软件或硬件查询技术来确定发出中断请求的中断源。 向量中断:由中断向量指示中断服务程序的入口地址。,8,中断向量和中断向量表 中断向量:指中断服务程序的入口地址。 每个中断服务程序都有一个确定的入口地址。 包含段基址CS和偏移地址IP,共占4个字节。 中断向量表:将系统中所有的中断向量集中起来,按中断类型号从小到大的顺序存放在内存某区域。这个存储区域称为中断向量表。 PC机中共有256个中断(0255),每个中断向量占4个字节,共占1KB的存储区域
5、。 用 000003FFH 的内存单元存储中断向量表。,9,(2) 中断过程,从中断源请求中断到完成中断服务程序后返回主程序的过程,称为中断过程。包含4个阶段。 中断源请求中断 外设发出中断请求时,中断接口电路一般应设置中断请求触发器,保持外设的中断请求信号,直到CPU响应该中断后才清除它。 中断接口电路应设置中断屏蔽寄存器,CPU可通过对其进行设置,使得某些中断源的中断请求不能提交到CPU。,10,中断判优 由于同一时刻可能会有多个中断源同时请求中断服务,因此接口电路需对这些中断源进行优先级判别和优先级排队。这个过程称为中断判优。 CPU按照优先级的高低循序来响应中断。,11,中断响应 收到
6、中断请求后,若CPU满足响应条件,则进入中断响应周期。CPU响应中断的条件如下: CPU当前指令执行结束。 没有更高级的中断请求在执行。 CPU处于开中断状态 (IF=1)。可用指令改变IF的状态:STI开中断;CLI关中断。 中断响应周期需完成的操作(CPU硬件自动完成) 清除中断允许标志位IF和单步陷阱标志位TF,以免在响应过程中被新的中断源中断,破坏了当前中断处理的现场。 将标志寄存器FLGAS和中断断点 (CS、IP) 压栈保存。 查找中断向量表,获得ISR的入口地址,执行ISR。,12,中断服务 CPU转入中断服务程序后,需做以下几件事情: 保护现场:ISR将要用到的寄存器压栈,以免
7、其数据破坏。 开中断:以便在执行ISR时,能响应更高级的中断请求。 中断处理:处理中断请求所要求的操作。 关中断:保证在恢复现场时不被新的中断打断。 恢复现场:在ISR结束前,执行出栈操作,恢复各寄存器的内容,以便主程序正确执行。 开中断:保证返回主程序后仍能响应中断。 中断返回:ISR的最后一条指令为IRET,它将IP、CS和FLAGS的内容依次弹出,以便恢复到主程序的断点处。,13,14,中断响应及处理过程示意图,(3) 中断管理,中断管理包括中断源识别、优先级排队和中断嵌套。 中断源识别 PC机内有多个中断源,CPU收到中断请求后,需识别是哪一个中断源发出了中断请求信号,以便执行相应的中
8、断服务程序。 中断源识别的两种方法: 软件查询:CPU逐个查询各中断源的状态,从而确定是哪个设备发出了中断请求。 硬件处理:中断接口电路将要响应的中断类型号送给CPU。,15,2. 中断的优先级排队 当有多个中断源同时请求中断时,由于CPU在同一时刻只能响应并处理一个中断请求,因此,需根据中断的性质及轻重缓急对多个中断源进行优先级排队。 CPU先响应优先级高的中断请求。高优先级的中断请求可中断低优先级的中断服务。 优先级排队的方法: 软件查询法 硬件菊花链排队法 可编程中断控制器排队法,16,软件查询法,17,软件查询法的编程实现有2种方法:屏蔽法、移位法。屏蔽法,18,IN AL,20H ;
9、 读取中断请求触发器的内容 TEST AL,80H JNE A_ISP ; 外设A有请求,则转入A的服务程序 TEST AL,40H JNE B_ISP ; 外设B有请求,则转入B的服务程序 TEST AL,20H JNE C_ISP ; 外设C有请求,则转入C的服务程序 ,移位法,19,IN AL,20H SHL AL,1 JC A_ISP ; 外设A有请求,则转至A的服务程序 SHL AL,1 JC B_ISP ; 外设B有请求,则转至B的服务程序 SHL AL,1 JC C_ISP ; 外设C有请求,则转至C的服务程序 ,软件查询法的优缺点:优点:实现简单,节省硬件。缺点: 中断源较多时
10、,查询程序较长,由查询转入相应的中断服务程序入口需要的时间较长。 查询的先后顺序决定了中断的优先级顺序:先被查询的中断,优先级最高。,20,硬件菊花链法在每个外设的接口上接一个逻辑电路,这些电路构成一个链来实现中断应答信号的控制,称为菊花链。,21,菊花链工作原理 中断请求:设备A、B、C通过接口发出中断请求:1有请求,0无请求。只要有一个设备发出请求,则 INTR = 1。 中断响应:若CPU允许中断,则发INTA中断响应信号。该信号先送给外设A的菊花链电路。 若A没有请求,则它输出的INTA仍为0,继续往下传。 若A有中断请求,则经过或门时,由于其中断请求为1,故输出的INTA为1,使得后
11、继的中断得不到响应。,22,特点:越靠近CPU的外设,优先级越高。,可编程控制器排队法 早期的PC多采用软件查询或菊花链法。 目前的PC一般采用专用的可编程控制器芯片来完成中断优先级的排队管理,如8259A。,23,3. 中断嵌套 CPU正在处理某个中断的过程中,若出现了级别更高的中断请求,则CPU停止执行级别低的ISR,而转去处理级别更高的中断。等高级别的中断处理完后,再返回原来的低级中断继续执行,依次类推,直到返回主程序。这种方式称为多重中断或中断嵌套。,24,内容概要,25,中断的常用术语:9个基本概念 中断过程:申请、判优、响应、服务 中断管理:判优、优先级、嵌套,(1) 中断的类型,
12、8086/8088用8位二进制数表示一个中断类型号,可区分256个中断源。 8086/8088中断系统的结构,26,外部中断由CPU外的硬件产生,又称硬件中断。有以下2种: NMI(不可屏蔽中断) 上升沿触发,不受中断允许标志位IF的控制。无论IF如何,只要NMI信号有效,CPU在当前指令结束后,立刻响应该中断。(Sti 和 Cli 指令无效) 中断类型号为2,CPU无需发中断响应即可立即进入2号中断服务程序执行。 在外部中断中,NMI的优先级最高,用于电源掉电、时钟错误等紧急情况,一般用户不能使用。,27, INTR(可屏蔽中断) 高电平触发,必须保持到当前指令结束。 受中断允许标志位IF控
13、制。Sti 指令允许中断,Cli 指令禁止中断。 中断类型号为 080FH 和 070H077H。当中断允许时,CPU发出中断响应信号INTA,并从8259A获得中断源的中断类型码。 中断响应的条件: 有中断请求信号 系统处于开中断状态,28,内部中断由CPU执行指令产生的中断,又称软件中断。 除法错 当除数为0,或对带符号数进行除法运算时所得结果超出规定的范围,则CPU自动产生该中断。 中断类型号为0。,29, 单步中断 CPU每执行一条指令,就进入一次单步中断。其ISR的功能是显示出CPU内部各寄存器的内容。 单步中断在调试程序时非常有用。 受标志寄存器TF标志位控制。TF=1时,CPU自
14、动产生单步中断。 中断类型号为1。,30, 断点中断 INT 单字节中断指令,默认中断类型号为3。 调试时可在程序关键处设置断点。当程序执行到该指令处,转去执行一个断点中断,其功能是显示CPU内部各寄存器的内容,并给出一些提示信息。,31, 溢出中断 INTO 单字节中断指令。CPU执行该指令时,产生类型号为4的内部中断。 该指令总是跟在带符号数加、减法运算指令之后。若标志寄存器的OF=1,执行溢出中断,其中断服务程序给出出错信息;若OF=0(无溢出),也进入该中断,但只对标志位进行测试,即返回原程序。 用户定义的软件中断 双字节中断指令INT n,由用户定义,类型号为n。 软件中断不可被屏蔽
15、。CPU不发响应信号,中断控制器不提供中断类型号。,32,内、外中断的优先级次序 8086/8088系统中,除单步中断外,所有内部中断的优先级均高于外部中断。 除单步中断外,所有内部中断都不能被屏蔽。,33,(2) 中断向量表,8086/8088系统支持256个中断源,各个中断源用不同的中断类型号标识,即:0255。 每个中断源都有相应的中断服务程序,每个中断服务程序都有不同的入口地址(又称中断向量) 。 每个入口地址由4个字节标识: 低2个字节:存放中断入口的偏移地址(IP)。 高2个字节:存放中断入口的段基址(CS)。 系统各个中断入口地址的集合形成中断向量表。共占1KB空间,地址范围 0
16、0000H003FFH。,34,35,由于0255号中断的入口地址依次连续排列,故:已知某中断的类型号为n,可算出其对应的中断服务程序入口地址在中断向量表中存储的位置。 方法:类型号 n4 = 中断向量在中断向量表中的首地址,然后顺序取出4个字节内存单元的内容,低2个字节送入偏移地址IP,高2个字节送入段地址CS,即: (IP) (4n+1, 4n)。 (CS) (4n+3, 4n+2) 。 获得了中断的入口地址,即可转入相应的中断服务程序执行中断处理过程。,36,【例5-1】已知类型号为15H的中断,其中断服务子程序存放在内存的5678H: 0100H 5678H: 0123H单元。画出该中
17、断的中断向量在中断向量表中的位置和内容。解: 中断服务程序的入口地址(起始地址)为5678H: 0100H,其中偏移地址IP的内容为0100H,段地址的内容为5678H。 已知中断类型号为15H, n 4 = 15H 4 = 0054H,故0054H 和 0055H单元存放偏移地址0100H。0056H 和 0057H单元存放段地址 5678H。 由此可画出中断向量在中断向量表中的位置和内容。,37,38,(3) 中断向量的设置与修改,中断向量表建立中断类型号与中断向量(即中断服务程序)之间的对应关系。 中断类型号固定不变,但其对应的中断向量(即存储单元中存储的内容)可以修改和变化。(注:系统
18、中的一些专用中断不允许修改) 设置或修改中断向量前,要关闭中断,避免在设置或修改过程中被中断。 设置中断向量的2种方法: 直接写入法 利用DOS功能调用,39, 直接写入法直接使用数据传送指令或串操作指令把中断向量写入向量表对应的单元中。 【例5-2】设中断类型号为n,对应的中断服务程序名为P1,则设置中断向量时需将P1程序的偏移地址放到内存0000段的4n+1、4n单元中;将其段地址放到 4n+3、4n+2单元中。,40,41,CLI ;关中断 MOV AX,0 MOV DS,AX ;中断向量表段基址为0 MOV BX,n*4 ;中断类型号为n MOV AX,OFFSET P1 MOV DS
19、:BX,AX ;偏移地址放入4n,4n+1单元 MOV AX,SEG P1 MOV DS:BX+2,AX ;段地址写入4n+2,4n+3单元 STI ;开中断,【例5-3】某外设的中断服务程序名为P1,中断类型号为5。请使用直接写入法设置其中断向量。,42,CLI ;关中断 MOV AX,0 MOV DS,AX ;中断向量表段基址为0 MOV AX,OFFSET P1 MOV 0014H,AX ; 4*5=0014H MOV AX,SEG P1 MOV 0016H,AX ;段地址写入0016H, 0017H单元 STI ;开中断, DOS 功能调用写入法使用INT 21H中断的25H号功能调用
20、,设置中断向量。功能号:AH = 25H入口参数:DS = 中断服务程序入口地址的段基址DX = 中断服务程序入口地址的偏移量AL = 中断类型号,43,【例5-4】某外设的中断服务程序名为P1,中断类型号为5。请使用DOS功能调用法设置其中断向量。,44,PUSH DS ;原 DS 入栈 MOV AX,SEG P1 ;段基址存入DS中 MOV DS,AX MOV AX,OFFSET P1 MOV DX,AX ;偏移地址存入DX中 MOV AL,5 ;中断类型号在AL中 MOV AH,25H ;DOS调用功能号 INT 21H POP DS ;DS出栈,中断向量的修改中断类型号不变,但是其指向
21、的中断服务程序(入口地址)改变,即中断向量改变。修改中断向量的步骤: 利用35H号功能,获取原中断向量,并保存。 利用25H号功能,设置新的中断向量。 新的中断服务程序服务完毕,利用25H号功能恢复原中断向量。,45,35H号功能读取中断向量入口参数:AH = 35H,AL = 中断号出口参数:ES = 中断服务程序入口地址的段基址BX = 中断服务程序入口地址的偏移地址 25H号功能设置新的中断向量入口参数:AH = 25H,AL = 中断号DS = 中断服务程序入口地址的段基址DX = 中断服务程序入口地址的偏移地址出口参数:无,46,【例5-5】修改类型号为n的中断向量,使得新中断服务程
22、序入口地址的段基址为SEG_INTR,偏移地址为OFFSET_INTR。对应的程序段为:,47,MOV AH,35H ;获取原中断向量 MOV AL, n INT 21H ;保存在 ES: BX中 MOV OLD_OFF,BX ;保存原中断向量的偏移量 MOV BX,ES MOV OLD_SEG,BX ;保存原中断向量的段基址,48,MOV AH,25H ;设置新的中断向量 MOV AL, n MOV DX,SEG_INTR MOV DS,DX ;DS = 段基址 MOV DX,OFFSET_INTR ;DX = 偏移地址 INT 21H MOV AH,25H ;恢复原中断向量 MOV AL,
23、 n MOV DX,OLD_SEG MOV DS,DX ;DS = 段基址 MOV DX,OLD_OFF ;DX = 偏移地址 INT 21H,内容概要,49,中断的类型:外部中断与内部中断 中断向量表:中断入口地址的排列 中断向量表的设置与修改,5.3 8259A可编程中断控制器,Intel 8259A是一种可编程中断控制器,可协助CPU对系统的中断进行管理。 8259A的功能: 接受和扩充外设的中断请求 中断优先级排队 提供中断类型号 屏蔽或打开中断 接受CPU命令或返回当前工作状态 一片8259A可直接管理8级中断,通过级联可扩展至64级中断。 通过对8259A进行编程,可设置多种工作方
24、式,以满足不同中断系统的需要。,50,(1) 8259A 的内部结构,51,1. 数据总线缓冲器 8位的双向三态缓冲器,用来连接8259A与系统的数据总线。 8259A通过它与CPU进行命令、状态和数据信息的传送。 2. 读/写控制逻辑 接收CPU的读写命令,完成对8259A内部端口的读写操作。 具体操作内容由CS、RD、WR 和 A0 信号来决定。,52,3. 级联缓冲/比较器 CAS0 CAS2 用于多块8259A的级联。 4. 中断请求寄存器 (IRR) 8位寄存器,通过引脚 IR0 IR7 与8个中断源相连。 若IRi = 1,则 IRR寄存器相应的第 i 位置1,表明该中断源有中断请
25、求。 5. 中断屏蔽寄存器 (IMR) 8位寄存器,第 i 位为1,表示屏蔽 IRi 的请求。 其值可通过软件设置或改变。,53,6. 中断优先权判别电路 PR 对已进入IRR且未被IMR屏蔽的各中断请求进行优先权判别,确定一个优先级最高的中断,向CPU发送中断请求信号INT。 若CPU响应该中断,则在中断服务寄存器ISR中相应位置1,表示CPU目前正在为该中断服务。 若8259A正在为某一中断服务时,又出现了新的中断请求,则PR判断新的中断请求优先级是否更高。若是,则进入中断嵌套。,54,7. 中断服务寄存器 (ISR) 8位寄存器,用来记录CPU当前正在为哪个或哪几个中断源服务。 当CPU
26、响应 IRi 请求时,ISR中相应的位置1。当ISR中有多个1时,表明CPU处于中断嵌套中。 当某个中断处理完毕,ISR相应的位复位。,55,8. 控制逻辑 作用: 根据IRR、IMR和PR的状态,通过INT信号向CPU发送中断请求。 接受来自CPU的中断响应信号INTA,使ISR相应的位置1,且使IRR相应的位清0,避免该中断源的一次请求产生多次中断。 内部包含7个寄存器: ICW1 ICW4 存放初始化命令字,用来设置8259A的工作方式和工作条件等。 OCW1 OCW3 存放操作命令字,用来对中断处理过程进行动态控制。,56,几个缩写字母的含义 IRR:中断请求寄存器(Interrupt
27、 Request Register) IMR:中断屏蔽寄存器(Interrupt Mask Register) ISR:中断服务寄存器(In Service Register) PR:优先级裁决器(Priority Resolver)ICW:初始化命令字(Initialization Command Word) OCW:操作命令字(Operation Command Word),57,(2) 8259A 外部引脚,58,D7 D0:双向三态数据线,可与系统数据总线相连,用于在8259A与CPU间传送命令、状态等信息。 A0:用于选择8259A内部寄存器的端口地址。8259A内有2个端口地址:A
28、0 = 0对应的端口称为“偶端口”,A0 = 1对应的端口称为“奇端口”。 WR、RD、CS:写、读、片选信号。 INT:中断请求信号,高有效。向CPU发中断请求。 INTA:中断响应信号,为2个负脉冲。 第一个负脉冲作为中断应答信号,CPU发LOCK信号,防止其它处理器或DMA控制器占用总线。 第二个负脉冲到来时,8259A告知CPU中断类型号。,59,IR7 IR0:中断请求输入信号,高电平或上升沿有效。 CAS2 CAS0:级联信号线,双向。 主片8259A的 CAS2 CAS0 为输出。 从片8259A的 CAS2 CAS0 为输入。 SP/EN:主从片设定/允许缓冲信号,双向双功能。
29、 缓冲方式下,为输出信号,EN信号控制缓冲器。 非缓冲方式下,作为输入信号,表示8259A是主片(SP = 1)还是从片(SP = 0)。,60,(3) 8259A 工作方式,1. 8259A 的工作过程单片8259A工作时,每次中断处理过程如下: 当 IR7 IR0 上有中断请求,则 IRR 中相应的位置1。 对于已进入IRR且未被IMR屏蔽的中断请求,PR电路进行优先级判定,得到最高级的中断请求。 控制逻辑接收中断请求,向CPU发 INT 信号。 若CPU允许中断,则在当前指令结束后连续发出2个中断应答信号INTA,进行中断响应。每个信号持续2个时钟周期。,61,CPU发第一个 INTA
30、时,输出总线锁定信号 LOCK,防止其它处理器或DMA控制器占用总线。8259A收到第一个负脉冲后,将优先级最高的中断ISR相应位置1,同时使IRR相应位清0。,62,CPU发第二个 INTA 时,撤销总线锁存信号 LOCK,地址允许信号 ALE 无效,允许数据线工作。8259A收到第二个负脉冲后,将相应中断的类型号送到数据线上。CPU读取中断类型号,查找中断向量表得到中断向量,转而进入中断服务程序。 若系统为自动结束中断方式(AEOI),则8259A会在第二个脉冲结束时,自动将ISR的相应位复位;若是非自动结束中断方式 (EOI),则ISR相应位的“1”一直保持,直到CPU发EOI (中断结
31、束) 命令时才将其复位。,63,2. 8259A 的级联方式 单片8259A最多可管理8级中断。当中断源多于8个时,需将多个8259A芯片级联构成主从模式。 系统最多支持8个8259A芯片级联,即:最多可支持64个中断源。 每个从片的IR7 IR0可直接与8个中断源相连,经过优先级判优后主片发送INT信号。主片对所有从片发来的INT进行判优后,最终向CPU发INT信号。,64,65,SP/EN 引脚用于区分8259A是主片还是从片。高电平为主片,低电平为从片。 主从片通过CAS2CAS0 互连。主片的CAS2CAS0为输出信号,从片的CAS2CAS0 为输入信号。 当CPU发出第一个INTA时
32、,主片使ISR相应的位置1,使IRR的相应位清0;并通过CAS2CAS0 输出一组从片的编码 ID2ID0。 从片收到该编码后,与自身存储在 ICW3 中的 D2D0 编码进行比较。若相同,则在第二个INTA信号到来时,将从片的中断类型号送到数据总线。,66,3. 8259A的中断触发方式 电平触发:IRi 端出现高电平时,有中断请求。边沿触发: IRi 端出现上升沿时,有中断请求。,67,注意:当该中断请求得到响应后 (ISR相应位置1),必须及时撤销其高电平,否则可能会再次触发中断。,优点: IRi 端可一直保持高电平,而不会被误判为又一次中断请求。,4. 8259A的中断屏蔽方式 普通屏
33、蔽方式 中断屏蔽寄存器IMR的某位为1,则禁止相应的中断请求;若为0,则允许相应的中断请求。 由于优先权判别器PR的作用,只有级别高的中断源才允许中断。 若CPU执行主程序时不希望某些中断源申请中断,或者在处理某中断时不希望比该中断级别低的中断源申请中断,可采用该方法。,68,特殊屏蔽方式 在处理某中断时,若想开放级别较低的中断请求,则要将IMR中本级中断的相应位置1,使得本级中断被屏蔽,为开放级别较低的中断提供可能。 此外,还应将本级中断ISR的相应位复位,才能够允许级别较低的中断请求。 即:设置特殊屏蔽方式后,IMR的某位置1,同时使ISR 的对应位复位。这样既可屏蔽本级中断,又可真正开放
34、级别较低的中断。,与普通屏蔽的区别:特殊屏蔽方式除了在IMR中屏蔽本级中断源外,还需使当前ISR的相应位复位。,5. 8259A的中断优先权管理方式 固定优先级各中断源的优先级由 IRi 端引脚的编号所决定。 普通全嵌套方式 简称全嵌套方式,是8259A最基本、最常用的方式。 IR0 优先级最高,IR7 最低。一个中断被响应时,只有更高级的中断请求才会被响应。,70,特殊全嵌套方式 一般用于级联场合。不但响应更高级别的中断,还可响应同级别的中断。 级联时从片的 INT端连接主片的 IRi 端。从片上不同级别的中断请求,主片视之为同一级别。采用普通全嵌套,则无法再次响应第二次高级别的中断。而采用
35、特殊全嵌套方式,则可正常响应。,71,单片8259A时,通常采用普通全嵌套方式即可。 多片级联时,从片可采用普通全嵌套方式,而主片必须采用特殊全嵌套,以便响应“同级”中断。,循环优先级(轮转)某中断接收服务后,其优先权自动降为最低,而相邻中断源的优先级升为最高。 优先权自动循环方式 初始时,IR0 优先级最高,IR7 优先级最低。 优先权特殊循环方式 该方式下,由用户编程来指定初始时哪个中断源的优先级最低。 例:初始时规定 IR5 最低,则优先级顺序为:IR6 IR7 IR0 IR4 IR5。,72,6. 8259A的中断结束方式 当某个中断请求得到响应时,其ISR的相应位置1。当其中断服务结
36、束时,其ISR中的相应位必须清0。 中断结束方式是指使ISR相应位复位的方式。 8259A有2种中断结束方式 自动结束方式(AEOI) 非自动结束方式(EOI),73,自动结束方式(AEOI) 该方式下,ISR中的相应位复位由8259A硬件自动完成。(硬件自动复位) 当CPU响应某中断时,8259A第二个INTA信号的下降沿自动将ISR的相应位复位。注意:此时中断服务程序并未结束。 该方式只适用于单片8259A芯片、且不会发生中断嵌套的场合。因为第二个INTA信号自动将ISR的相应位复位,但此时中断服务程序并未结束,却会响应级别较低的中断请求,则高级的中断请求反而可能得不到及时处理。,74,非
37、自动结束方式(EOI) 该方式下,由CPU发EOI命令来使ISR的相应位复位。 普通中断结束方式 CPU向8259A发送中断结束命令EOI,使当前 ISR 中级别最高的位复位。 该方式只适用于全嵌套方式,不能用于循环优先级方式。因为只有在全嵌套方式下,当前 ISR 中级别最高的位对应的才是当前正在处理的中断。,75,特殊中断结束方式 CPU向8259A发送EOI命令,该命令字指定了要结束哪一级中断源,从而使ISR相应的位复位。 多片8259A级联时,在中断结束前,必须检查刚结束的中断是否是该从片的唯一中断。要等该从片的中断服务全部结束后,才能给主片发中断结束命令。,76,7. 8259A 连接
38、系统总线的方式 缓冲方式 多片8259A级联时,8259A 通过总线驱动器与数据总线相连。 此时8259A的 SP/EN 端输出一个低电平 ( EN = 0) 作为总线驱动器的启动信号。即:SP/EN 信号与总线驱动器的允许端相连。,77,78,输出 信号,非缓冲方式 当系统中只有单片或少数几片 8259A 时,8259A 可直接与数据总线相连。此时,8259A的SP/EN端作为输入信号。 单片8259A时,SP = 1。多片8259A 级联时,主片的 SP = 1,从片的 SP = 0。,79,80,(3) 8259A 编程,81,CPU向8259A发送的命令字分为以下2种: 初始化命令字
39、ICW 包含ICW1 ICW4 四个命令字,在系统启动时由初始化程序设置。 一旦设定后,在系统工作过程中一般不再改变。 操作命令字 OCW 包含OCW1OCW3,由应用程序设定,用来对中断处理过程进行动态控制,如:中断屏蔽、中断结束、优先权设定、中断状态的查询等。 可多次设置。,82,8259A 只有一根输入地址线 A0,如何区分7个寄存器?,ICW1: 20H A0=0,D4 = 1 ICW2: 21H A0=1 ICW3: 21H A0=1,ICW1中的 SNGL (D1) = 0 ICW4: 21H A0=1,ICW1中的 IC4 (D0) = 1OCW1: 21H A0=1 OCW2:
40、 20H A0=0,D3D4 = 00 OCW3: 20H A0=0,D3D4 = 10,83,采用特征位法、时序法及读写分时法解决端口冲突。,(一)初始化命令字 ICW,1. ICW1:设置中断请求方式、是否级联等。,84,85,D0 (ICW4) 的设置:8086/8088系统必须设置 D0 = 1,即:需要 ICW4。 写入ICW1后,8259A内部有一个初始化过程,相当于Reset 功能,其作用: 指示8259A顺序逻辑复位,即它准备按 ICW2、ICW3、ICW4 的顺序接受其余初始化命令字。 清除 IMR、ISR。 指定优先级方式为全嵌套方式、普通屏蔽方式、非自动中断结束方式。,8
41、6,【例5-6】若 8259A 采用电平触发,单片使用,需要 ICW4,请写出 ICW1 的初始化程序段。,MOV AL, 1BH ; ICW1 = 0001 1011 OUT 20H,AL ;偶端口,2. ICW2:设置类型码。,87,中断类型号 = 高5位 (ICW2) + 低3位 (IRi 的编码) 。 ICW2 紧随 ICW1 之后。CPU响应中断发第2个INTA时,8259A 将ICW2的内容(中断类型号)送到数据总线。,88,【例5-7】在PC微机中断系统中,硬盘中断类型号的高5位是08H,它的中断线连接到 8259A 的 IR5 上,请写出设置 ICW2 的程序段。,MOV AL
42、, 08H ;高5位 OUT 21H,AL ;奇端口,CPU响应硬盘中断后,8259A把IR5的编码101作为低3位,与ICW2中设置的高5位合一起,构成完整的8位中断类型号0DH,经数据总线提供给CPU。,3. ICW3:设置级联方式。 仅当级联模式下(即 ICW1 的 SNGL = 0 时)才需设置ICW3。这时需分别对主片和从片进行设置。 主片ICW3:说明主片 IR7 IR0 的哪些引脚上连有从片。,89,从片ICW3: ID2ID0的编码值说明该从片的INT信号连接至主片 IR7 IR0 的哪个引脚。,90,例:从片的 INT 连接至主片的 IR5,则 ID2ID0 = 101。,4
43、. ICW4:设置缓冲方式、中断结束方式等。 当 ICW1 的 IC4 =1时,需设置ICW4。,91,当 buf=0时 M/S位不起作用,92,【例5-8】PC机中,单片8259A与系统总线之间采用缓冲器连接,非自动结束方式,正常完全嵌套。请写出设置 ICW4 的程序段。,MOV AL, 0DH ;0000 1101B OUT 21H,AL ;奇端口,(二)8259A 初始化编程,要使中断系统正常工作,CPU必须对系统中的每片8259A 进行初始化编程,即:顺序将ICW1 ICW4 写入各个8259A芯片。 单片8259A时,需依次写入ICW1、ICW2 和 ICW4。 多片8259A时,需
44、依次写入ICW1 ICW4 。,93,94,95,【例5-9】IBM PC/XT机中,仅用单片8259A,中断请求采用边沿触发,中断类型号为08H 0FH,普通全嵌套,缓冲方式,非自动中断结束方式。8259A的端口地址为20H和21H。请按上述要求对8259A进行初始化编程。,MOV AL,00010011B ; ICW1: 边沿触发, 单片, 需ICW4 OUT 20H,AL MOV AL,00001000B ; ICW2: 08H0FH 的高5位 OUT 21H,AL MOV AL,00001101B ; ICW4: 全嵌套, 缓冲, EOI方式 OUT 21H,AL,96,【例5-10】
45、IBM PC/AT机中,使用两片8259A构成主从中断系统。 从片的 INT 与主片的IRQ2相连。 主片的中断类型号为08H 0FH,端口地址为20H和21H。 从片的中断类型号为70H 77H,端口地址为0A0H和 0A1H。 主片、从片均采用边沿触发、缓冲、非自动中断结束方式。请按照上述要求对8259A进行初始化编程。,97,主片编程:,MOV AL,00010001B ; ICW1: 边沿触发、级联、需 ICW4 OUT 20H,AL MOV AL,00001000B ; ICW2: 08H0FH 的高5位 OUT 21H,AL MOV AL,00000100B ; ICW3: 主片
46、IRQ2 接有从片 OUT 21H,AL MOV AL,00011101B ; ICW4:特殊全嵌套、缓冲方式、 OUT 21H,AL ; 主片、EOI方式,98,从片编程:,MOV AL,00010001B ; ICW1: 边沿触发、级联、需 ICW4 OUT 0A0H,AL MOV AL,01110000B ; ICW2: 70H77H 的高5位 OUT 0A1H,AL MOV AL,00000010B ; ICW3: 从片接主片的 IRQ2 OUT 0A1H,AL MOV AL,00001001B ; ICW4:普通全嵌套、缓冲方式、 OUT 0A1H,AL ; 从片、EOI方式,(三)
47、操作命令字 OCW,对8259A进行初始化后(写入初始化命令字),8259A进入工作状态,可接收 IRi 的中断请求,并按系统设定的方式来响应和管理中断。 在8259A工作期间,可通过写入操作命令字OCW,对其中断管理方式进行动态设置和修改。 操作命令字有3个:OCW1 OCW3。,99,1. OCW1:设置中断屏蔽字 直接对 IMR 相应的位进行设置。,100,101,【例5-11】已知8259A的端口地址为20H、21H。若要屏蔽IR5、IR4和IR1引脚上的中断请求,而不改变其余中断源原来的屏蔽情况。试给出对应的程序段。,IN AL,21H ; 读取 IMR 的当前值 OR AL,001
48、1 0010B ; IRQ5、IRQ4、IRQ1 OUT 21H,AL ; 写入 OCW1,2. OCW2:设置/修改优先级模式、发送EOI命令等,102,D7 (R):0为固定优先级;1为循环优先级。 D6 (SL):0为“普通” ;1为“特殊” 。这2位决定优先级方式:R=0, SL= :固定优先级 (L2L0无效)R=1, SL=0 :优先级自动循环 (L2L0无效) R=1, SL=1 :优先级特殊循环 (L2L0有效)此时L2L0指明循环开始时哪个IRi 的优先级最低。,103,D5 (EOI):1时发EOI命令;0时不发EOI命令。在非自动中断结束方式下,可通过发EOI命令来使ISR 相应的位复位。(非硬件复位)EOI位可和SL位配合使用。 EOI=1, SL=:不发EOI命令。 EOI=1, SL=0 :普通中断结束。此时EOI命令将ISR中优先级最高的中断对应的位清0。(L2L0无效) EOI=1, SL=1 :特殊中断结束。此时EOI命令将ISR中L2L0所指定的中断对应位清0。 (L2L0有效),104,R、SL、EOI 三位的组合含义,105,106,MOV AL,0010 0000B ; OCW2:EOI=1, SL=0 OUT 20H,AL ; 写入 OCW2 IRET ; 中断返回,回到主程序,