1、第五章 中断技术,5.1 基本概念 一、中断 中断是一个过程。它是指CPU在正常运行程序时,由于内部/外部事件,由主程序转到为中断事件服务的程序中去,服务完毕,再返回执行原程序。这一过程称为中断。 8086/8088中断系统可以处理256种中断类型。 中断可以分为 硬件中断: 由外部硬件产生的中断。 软件中断: 由程序预先安排的中断。 中断的特征:具有随机性。,二、中断的基本过程 分为四个阶段中断请求 (中断判优) 中断响应 中断服务 中断返回,1.中断请求 外设先(通过接口)发送“中断请求”信号 给CPU。 CPU检查“中断请求INTR”输入线。 CPU有权决定是否响应中断(中断允许): 若
2、允许请求,则中断允许触发器IF置“1”, (使用STI指令开中断)。 若不允许申请,(用CLI指令)关中断,触发器IF=0。,没有获得允许向CPU发出中断请求,则称为 中断被屏蔽(中断屏蔽)。 不允许中断请求的情况: 如:在实时控制时,需采集一段连续数据。为防止数据丢失,不允许其他中断请求; 又:执行管理程序中某些重要程序,CLI指令进行屏蔽。,2.中断响应 在中断响应过程中应解决以下4个问题:保护断点、保护现场(如标志寄存器或其他寄存器)、CPU关中断(不允许此时被新的中断源打断)、CPU控制权的转移(中断响应过程的关键,其实质是如何由中断源得到相应服务程序的入口地址的问题)。 现在常用的方
3、法是采用中断向量,即由所响应的中断源在中断响应时向CPU提供自己的中断向量号,CPU根据中断向量号就能够找到中断服务程序的入口地址,进而转入中断服务程序。 CPU在当前指令执行结束时,响应中断,进入中断的响应周期;发出两个中断回答信号INTA完成一个中断响应周期;进行断点及标志保存 如:段地址(CS),偏移地址(IP)标志FR以及压入堆栈。读取中断类型号,找到中断源;装入中断服务程序的入口地址(CS,IP),3.中断服务 执行中断服务程序,以完成中断源提出的处理要求。 中断服务程序是软件编程问题,与子程序的编写原则类似。用STI指令开中断,以实现中断嵌套,并对服务程序中所用的寄存器应预先保护(
4、若中断响应中CPU不是自动保护的话),而在服务程序后面加入恢复现场的语句。 转入中断服务程序后,其服务程序的内容有: a.与CPU交换数据,进行I/O操作; b.外部期望CPU给以控制,进行参数修改。 在程序开头,将可能使用的寄存器内容进栈,即保护现场。 在服务程序的末尾,将入栈的寄存器内容弹出,即恢复现场。,4.中断返回 中断返回就是控制权由中断服务程序转移到被中断程序的过程。 执行中断返回指令IRET。大多数中断返回指令还有其他的附加功能,例如部分或全部恢复CPU的现场(除程序计数器外,还有标志寄存器FR等),有些CPU的中断返回指令可自动恢复全部通用寄存器的内容。 中断服务程序结束,执行
5、中断返回。 自动将保存在堆栈中的标志FR,断点(IP,CS)依次弹出并装入。 返回到中断前的地址(断点地址)开始继续执行主程序。,三、中断源 中断源:发出中断请求的外设或引起中断的内部原因称为中断源。分内部中断和外部中断。 内部中断也称为软件中断,它是来自CPU内部,包括INT n产生的中断、除法错、溢出中断、单步中断。 外部中断又称为硬件中断,其中断源是CPU外部的某种事件,分为:非屏蔽中断和可屏蔽中断。屏蔽是指CPU拒绝响应中断请求,不许打断CPU执行的主程序。非屏蔽中断:由NMI(Non-Maskable Interrupt)进入,不受IF屏蔽,整个系统中仅有一个非屏蔽中断,一般处理系统
6、的重大故障,如系统掉电处理。CPU接收到非屏蔽中断请求后,立即停下当前工作转非屏蔽中断处理子程序。该子程序就是要在晶振停振前对现场作紧急处理:保护现场数据到非易失性存储器中;启动备用电源。可屏蔽中断:正常情况下,由INTR进入,只有IF=1时(STI)才被响应,IF=0时屏蔽该请求。 CPU在执行完当前指令后响应。中断源优先级从高到低为:INT n(除单步中断)、NMI、INTR、单步中断。,CPU识别中断的方法: 两种: 向量中断 程序查询中断 向量中断:在CPU响应中断后,由中断控制器 将服务程序入口地址送到CPU。 查询中断:采用软件查询技术来确定发出中 断请求。,四、多重中断(中断嵌套
7、),主程序,五、中断处理的隐操作及堆栈技术的使用 CPU执行中断服务程序前后,其状态标志和程序断点的进栈和出栈,都是硬件自动完成,这些操作称隐操作。 堆栈的使用1.建栈操作 MOV AX,1050H MOV SS,AX ;将当前堆栈基址送入SS MOV SP,0008H;将堆栈段偏移地址送入SP 此时,栈顶指向1058H处。,2.进栈操作(堆栈的深度:最大64KB空间) PUSH AX (SS:堆栈寄存器 SP:栈偏移地址)3.退栈操作 POP AX ;先送AX, POP BX ;后送BX,上图中操作的指令序列如下: MOV AX,1050H ;建栈 MOV SS,AX MOV SP,0008
8、H PUSH BX ;进栈 PUSH AX POP AX ;退栈 POP BX,1.中断服务程序的入口地址-中断向量 CPU响应中断后,中断源提供地址信息,由此地址信息对程序的执行进行导向,引导到中断服务程序中去,故把这个地址信息称为中断向量。 中断向量包括中断服务程序的段基址CS,偏址IP共4个字节。 中断向量表:所有的中断向量集中存放到存储器的某一区域,这一区域称之为中断向量表。,二.80X86的中断类型码及中断向量表,中断向量表,0BA9,0125,0000,03FF,1024个单元,000003FF共1024个字节存放256个向量,2.中断向量,中断向量指针与中断类型号 中断向量:中断
9、服务程序入口地址 中断向量指针:指出中断向量存放在中断矢量表中的位置(或地址)。,在PC系列中中断向量指针由中断类型号提供的,即 向量地址=0000:类型号4,如:硬盘“1NT13H”它的向量地址=0000:13H4=0000:004CH004CH开始连续4个单元中用来存放“INT 13H”的中断向量:,中断号向量地址中断向量 硬盘13H13H4=4CH0070:0FC9,三、硬中断(见下表)1.不可屏蔽中断NMI-通常用于处理紧急/灾难性事件 RAM奇偶校验错PCK I/O通道校验错I/O CHCK 协处理器8087运算错INT 响应时间:在当前机器周期之后立即响应。,2.可屏蔽中断INTR
10、 INTR中断可以被CPU用指令CLI来禁止,由STI允许。中断响应条件:I F=1 , INTR=1中断响应时间:当前指令执行完以后,所以,INTR高电平信号需要一定的保持时间。INTR中断响应过程如下:CPU的中断响应要用2个时钟周期,分别向 引脚发两个负脉冲,第1个表示接受该中断,外设接到第2个负脉冲后,通过低8位数据总线向CPU送中断类型码n。CPU可由此获得该中断源的处理程序的入口地址。2个时钟周期间用2-3个空闲状态隔开。,M,80,X86,I P,CS,PSW,INTR 1,INTA 2,类型码N 3,中,断,矢,量,表,零,页,地,址,空,间,4,个,字节,TYPE 0,TYP
11、E 1,IP,CS,6,N*4,SS,9,PA,(,20,位,.,入口),中断,服务,程序,STI,CLI,10,.,IRET 11,IF .TF清零5,7,断点,.,现场恢复,12,4 断点.,.,现场,进堆栈,8,中,断,响,应,过,程,INTR,四.80X86的中断响应总线周期:,当: CPU收到INTR中断请求 当前一条指令执行完,且中断允许标志位IF=1 那么:CPU进入中断响应周期,它通过总线控制器发出二个连续中断应答信号完成一个中断响应周期,INTA周期,在中断响应周期的两个工作: 1.第一个INTA脉冲时,通知中断源,其中断请求已被响应,准备发送类型码。此时,CPU产生LOCK
12、信号,使总线处于封锁状态,防止DMA占用总线。 2.在第二个INTA,CPU通过数据总线低8位读取类型码。同时,LOCK信号撤除,总线解封 。,中断响应总线周期时序波形图,CPU对各种中断的响应过程:(1)执行2个中断响应总线周期:读取中断类型码,并计算中断向量地址暂存(可屏蔽中断专有)。(2)写周期:FR入栈。(3)IF、TF清零,即屏蔽INTR中断和单步中断;(4)2个写周期:保护断点入栈(顺序压入CS、IP)。(5)2个读周期:根据中断向量号,查中断向量表,把入口地址值装入CS和IP中,转入中断处理程序。P252图7-17执行IRET指令,从堆栈中弹出三个字,FR的内容和断点地址。,中断
13、处理子程序的结构模式(1)一系列入栈指令保护各reg值。(2)若允许中断嵌套,用STI开中断,使IF=1,以允许高级别请求进入。(3)中断处理具体内容。(4)用CLI设置关中断,使IF=0,禁止其他中断进入。(5)给中断命令寄存器送EOI。(6)一系列出栈指令恢复各reg值。(7)最后一条中断返回指令IRET返回主程序,恢复IP、CS和FR。中断处理子程序与一般的子程序的区别:前者最后一条指令是中断返回指令,功能是恢复IP、CS、FR;后者是返回指令,若是可被程序调用的子程序,该指令功能是恢复IP、CS。,5.3 8259A可编程中断控制器,一、可编程的中断控制器芯片8259A的功能1.一片8
14、259芯片可响应8级INTR中断请求,通过级连INTR可扩展至64级。2.可对各级INTR请求进行优先权管理,8259具有完全嵌套,循环优先级,特定屏蔽等多种优先权管理方式。3.对每一级中断请求进行均可依需要给予屏蔽或开放。4.当CPU响应INTR中断请求后,8259可提供相应的中断类型码,从而使CPU迅速转入中断服务程序入口。5.可通过编程手段,设置8259的8种不同工作方式。,二、8259A的内部结构(28条引线),8259中断控制器由8个主要部分组成,根据8259是一专用接口芯片,可将它的8个部分按下面三个部分划分:,1.与CPU接口部分:,WR与A0配合,将D7-D0的控制字写入控制寄
15、存器,完成OUT操作;RD与A0配合,将8259的内容通过D7-D0写入CPU,完成IN操作,A0=0,8259偶地址A0=1,8259奇地址,2.与外部硬件(中断源)连接部分:(1)中断请求寄存器(IRR):一片8259有8条INTR中断请求线 IR0IR7,每一条请求线有一个对应的触发器来存放中断请求信号。记录哪一级IRi中断源有请求。有中断请求时,置IRR相应位为1。当中断请求被响应时,IRR相应位复位。,3.内部工作寄存器ISR:(1)正在服务寄存器ISR,用于记录已被获准的中断请求(即将与IR对应的IS位置位) (注意:ISR除存放正在被服务的中断源外,还包括尚未服务完而中途被别的中
16、断源暂时中止的中断) CPU正在执行中断请求服务时,ISR相应位=1,直至该中断结束,由于可能有多重中断,ISR可能有多位为1。 例:ISR5=1,若该级中断未响应完,IR3申请中断,IR3优先级高于IR5,所以ISR3=1,进入多重中断,IR5挂起,执行中断的服务程序,ISR3=1,ISR5=1,当IR3的中断完成,ISR3=0,ISR5=1,继续执行IR5的服务程序,直至结束。,(2)中断屏蔽寄存器IMR的每一位可对IRR中相应的中断源进行屏蔽,如果禁止某IR提出中断请求,就将其中在IMR中的相应位置“1”。 IMR对于较高优先权的IR实行屏蔽并不影响较低优先权的IR的输入 .IMRi=1
17、 禁止中断(对其中断不予理睬);IMRi=0 允许中断IMR 00000011IRR 01001011ISR 00001000 检查哪些屏蔽;再比较优先级别,( 3)优先权分析器 对保存在IRR的各个中断请求经过判断,确定其中一个为最高优先权,然后在中断响应周期时间将它选通到中断服务寄存器 中。l,返回,CAS0 CAS1 CAS2 SP/EN,三、8259的引脚及其功能 8259有28个引脚,具体如下:,8259的中断响应过程: 1.当有一条或多条中断请求引脚信号有效时(即IR70相应引脚为“1”),中断请求寄存器IRR的相应位被置为“1”。 2.若中断请求IR1线中至少有一个中断请求被允许
18、,则8259通过INT引脚向CPU的INTR送出中断请求信号。 3.若CPU处于开中状态(IF=1),则在当前指令执行完后,向8259发回INTA信号,表示中断请求已被CPU响应。 4.8259接收到CPU发出的INTA信号后。将中断请求源(对应于各IRi) 中 优先权最高的对应的ISR位置位,然后将IRR中相应的IRi位复位。,5. 8086CPU继续启动另一个中断响应周期,发送第二个INTA信号,此时 8259向数据总线DB70送出8位的中断类型码。,Type码N,用户在对8259初始 化编程时设定,由中断请求线IRi的进制编码决定,由8259自动插入填写,该中断类型码的生成:,6.CPU
19、读取中断类型码N后,用N*4查中断矢量表,获取服务程序入口地址有关信息(IP和CS值),转入服务程序入口执行程序。 7.中断响应周期完成后,8259中断工作结束,被置位的ISR中的相应位复位,其中断方式有两种: 当8259工作于AEOI模式(自动结束方式):当CPU送出的INTA脉冲结束时,其后沿便在“4”中被置位的IS位复位(清零)。 非自动结束方式:在中断服务程序结束处写一中断结束命令(置EIO为“1”),相应IS位 才会被复位。至此,8259的一次中断响应过程完成。,从8259各I/O端口读状态字,中断类型码及查询字 对8259各I/O端口写入初始化命令字,工作方式命令字操作是由RD、W
20、R控制信号进行控制,而对各端口的寻址则是由CS和A0确定的。 具体I/O端口寻址及操作情况如下: 一片8259只占两个端口地址,也就是说8259只有两个I/O端口-奇数口和偶数口,四 . 对8259的端口寻址及其操作(读/写基本操作),对8259的端口寻址及其基本操作(读/写基本操作),注意:8259只有两个端口,由A0位确定: 1:奇数口 0:偶数口 由奇/偶数端口及控制字中的某些特定位来确定命令字往那个R中送。,DB7-0,DB7-0,级联缓冲/比较器 一片8259A可接收8级中断;超过8级时由多片8259A级联构成主从关系使用。 *CAS2-CAS0:主8259A输出级联地址,从8259
21、A输入级联地址。P265图7-19 从片的INT输出接到主片的一个IR输入。在中断响应期间,若主8259判定所响应的是由某一从片的中断请求,则主片在CAS0-2上发该从片识别号,并由各从片接收,从片将自己的号相比较。若一致的话,应在第二个INTA响应周期,把自己片内中断源的向量号通过D7-D0送给CPU。 注意:当系统的从片数目小于8时,一定不要将从片的INT接到主片的IR0上。因为非级联的IR有请求时,主片在级联上的驱动信号为000,若真的从8259接到主IR0,它响应中断发出的向量号与主片发出的向量号冲突。,*SP /EN:8259A处于缓冲状态(通过总线收发器与复用总线相连)时,EN有效
22、(=0),8259A向CPU输出,相当于读;无效(=1)CPU写8259A。处于非缓冲状态时,SP表明主从关系,=0为从8259A,=1为主8259A。,二、8259A工作方式8259通过编程可选择多种工作方式。1中断触发方式 8259A有两种中断触发方式:电平触发方式(高电平是有效的中断请求信号)和边沿触发方式(由低电平到高电平的跳变是有效的中断请求信号)。 利用初始化命令字ICW1实现对8259A中断触发方式的设置。 总之,在第二个INTA有效期内,将当前中断类型码n送到CPU。 D7 D6 D5 D4 D3 D2 D1 D0D7-D3高5位,用户通过软件定义。D2-D0为000-111,
23、对应IR0-IR7,由最优先的中断源决定。例如P258 图7-20,2中断结束方式三种中断 中断请求处理结束,作结束处理。将中断服务寄存器ISR中的相应位清0。 (1)自动中断结束方式(中断结束后,CPU给8259不发送EOI命令) 来自IRi的中断请求被响应后,将ISR寄存器中的相应位置1,CPU进入中断响应总线周期,而在第二个中断响应信号INTA结束时,就自动将ISR中的相应位清0。 这种中断结束方式,CPU不需在中断处理结束时给8259A发送任何信息(EOI)。8259A不知道中断在什么时候被CPU处理完毕。当下一个中断请求到来时,即使新进入的中断请求的优先权比已响应的前一个中断请求的优
24、先权低,并且前一个中断请求尚未被CPU处理完毕,这个后来的并具有较低优先级的中断请求也将被响应。这是不合理的,并可能会产生严重后果。因此,适于中断源少且单片8259。 设置方法是对8259A初始化时,使初始化命令字ICW4的AEOI位为1即可。,(2)普通中断结束方式全嵌套方式(中断结束后,发送一个EOI命令) 当CPU处理完一个中断请求时,需向8259A发送一个EOI命令。8259A接收到这个EOI命令后,就将ISR寄存器中最高优先级的置1位清0。相当于结束了当前正在处理的中断。 可能造成这种工作方式出错的是在中断服务程序中修改了中断优先级,如将全嵌套方式修改为非全嵌套方式。 设置方式是通过
25、向8259A发出操作命令字OCW2实现的,并要使OCW2中的EOI1,SL=0,R0。P261图7-23,(3)特殊中断结束方式非全嵌套方式 用ISR寄存器无法确定当前正在处理哪一级中断,即不能用普通中断结束方式实现中断结束处理,而必须采用特殊中断结束方式。 结束方式通过向8259A发出一条特殊中断结束命令来实现的,这个命令中指出了要清除ISR的置1位中的哪一位。当操作命令字OCW2中的EOI1,SL1且R0时,就是一条特殊中断结束命令,此时,OCW2中的L2,L1,L0这3位指出要清除ISR的哪一位。 例P262图7-25,3优先级管理方式4种 优先级固定优先:所有IR请求都有固定级别,且不
26、随中断事件出现和处理而改变(IR0最高,IR7最低); (1)全嵌套方式8259A初始化后自动进入的基本工作方式 8259A各IRi引入的中断请求具有固定的优先级。优先级从IR0到IR7,依次降低。 ISR寄存器的第i位为1时,表示CPU正处理从IRi引入的中断请求。此时,8259A允许优先级比IRi高的其他中断请求进入,并暂时中止当前正在处理的中断进行优先处理。对优先级与IRi相同或比IRi优先级低的其他中断,则禁止其进入。 中断处理结束后,CPU发送EOI,使8259A将ISR寄存器中相应位清0。P259图7-22,(2)特殊全嵌套方式 与普通全嵌套方式基本相同。不同的是:当CPU正处理某
27、一级中断请求时,允许中断优先级更高甚至同级的中断请求进入。 P261图7-23 特殊全嵌套方式一般用在8259A级联系统中,此时可将主片编程设定为特殊全嵌套方式,从而可以响应来自同一从片的其他中断请求(此种中断请求在主片看来仍属与当前正在处理中断的同一级)。 具体方法: 在主8259的中断源IR处理中,中断返回前先对从8259发出EOI命令,使当前正处理的优先级ISR=0; 此后判断从8259的ISR中是否还有1 ,若有,不给主8259发EOI;若全为0 ,给主8259发EOI。实质:主8259中同级或更高级中断源可中断正处理的程序。,(3)自动循环方式 改变优先级别 任何一级中断请求被处理完
28、后,CPU向8259A发送EOI命令。8259A接收到这个EOI命令后,将ISR寄存器中优先级最高的置1位清0,并重新赋给它最低优先级,而将最高优先级赋给比它低一级的中断请求,其他中断请求的优先级则以循环方式类推。 例如,假设当前ISR中3、5两位为1,即CPU当前正处理从IR3和IR5来的中断请求。当从IR3来的中断请求被处理完毕后,CPU给8259A发送EOI命令,8259A就将ISR的第3位清0(假设当前第3位的优先级大于第5位),并将最低优先级赋给IR3,而将最高优先级赋给IR4。这样,各级中断的优先级从高到低依次为IR4,IR5,IR6,IR7,IR0,IR1,IR2,IR3。,(4
29、)特殊循环方式 比前两种灵活。用户根据要求用置优先权命令指定最低优先级,例如设置IRi为最低优先级,那么最高优先级被赋给IRi+1,其他各级按循环方式类推。 4中断屏蔽方式 中断优先级的管理采用中断屏蔽的方式,将中断屏蔽寄存器相应位置位屏蔽某一级或几级中断。分为两种情况: (1)普通屏蔽方式 将IMR中的某一位或几位置“1”,即可将相应的中断请求屏蔽。例如,将IMR中第2位置“1”,则从IR2来的中断请求被屏蔽。,(2)特殊屏蔽方式 大多数系统下,当一个中断请求被处理时,禁止同级或较低级的中断响应。但有时希望可以响应较低级的中断请求,此时,就要采用特殊屏蔽方式。 特殊屏蔽方式实现:操作命令字O
30、CW3中的ESMM(允许特殊屏蔽方式)和SMM(特殊屏蔽方式)同时为l,并将IMR寄存器的对应于本级中断的位“置1”。这样,除本级中断以外,所有没被屏蔽的中断请求(较低优先级或较高优先级)到达时都会得到响应。此时优先级顺序无效。主要是为在处理较高级中断时能够响应较低级中断提供方便。 在处理完成之后,可通过清除IMR的相应屏蔽位,并发出OCW3(ESMM1,SMM0),便可退出特殊屏蔽方式。P262图7-24,总结三种优先权管理方式:(1)完全嵌套方式* 固定分配优先权。* 中断嵌套深度=中断系统的中断级数。* 中断嵌套过程中:ISR内容不断变化;要求堆栈容量大;每个中断服务程序应用指令STI开
31、中断;中断处理完,CPU向8259A回送结束命令EOI,使ISR相应位清0。,中断结束方式:普通EOI方式:只给8259A送EOI,8259A将ISR级别最高的置1位清0。适用于中断服务程序未修改中断级别的情况。特殊EOI方式:向8259A送EOI和当前结束的中断级别。适用于任何情况。自动EOI方式:第二个INTA后沿自动将ISR相应位清0。适用于以预定速率发生的中断。,(2)自动循环方式 基本思想:每当任何一级中断处理完,它的优先级变为最低级,最高优先级赋予原来比它低一级的中断请求。 普通EOI循环方式:中断处理完,CPU给8259A送普通EOI命令,8259A修改ISR和各级中断优先级。自
32、动EOI循环方式:第二个INTA后沿自动将ISR相应位清0,并立即改变各级中断的优先级。特殊EOI循环方式:在主程序或中断服务程序中用指令把最低优先级赋予某级中断,该指令执行完毕即修改了各级中断,此时必须用特殊EOI方式结束中断处理。,(3)中断屏蔽方式禁止全部可屏蔽中断用CLI指令。禁止部分可屏蔽中断:普通屏蔽方式:将IMR中某一位或某几位置1。适用于二种情况:CPU执行主程序时,禁止响应某些中断;CPU处理中断过程中,禁止级别比它高中断。特殊屏蔽方式:仅屏蔽本级中断,允许其他比它高或低的中断进入。,三、8259A的级联使用(1)硬件连接一片8259A只能管理8级中断,如果有多于8级的中断,
33、可以用多片8259A构成级联方式,主片与从片的CASoCAS2相连,每片从片的INT连接到主片相应的IRi上,主片的INT则与CPU相连。主片与从片的区分在于主片的SPEN端接“1”信号,而从片则接“0”信号。 8259A级联方式连接:P256图7-19 引脚信号:IRi、SP/EN(主SP接电源 ,从SP 接地。CAS2-CAS0、INT、INTA 8259A与8086系统连接图:P264图7-26,(2)中断处理过程中断源(中断请求)从片(中断请求)主片(中断请求)CPU(中断响应)主片(输出级联地址)、从片从片(输出中断类型码)CPU(执行中断服务程序,非自动EOI方式结束时送二个EOI
34、)主片、从片(复位ISR)(3)优先级管理* 两级级联最多可管理64级中断(1主8从)。问题:1主4从可引入几级中断?36级* 优先级顺序:对8259A未采用循环方式改变各引脚优先级时,接入优先级高引脚的从片优先级高于接入优先级低引脚的从片。,* 特殊完全嵌套方式举例说明:设主片IR6接一从片,从片IR7来一中断请求并被CPU处理,从片IR0又来一中断,若主片ISR置1的优先级最高者即为IR6,则应响应此中断。选讲:处理过程中二片8259A的IRR和ISR状态变化如下:从IRR=1000 0000主IRR=0100 0000主IRR=全0 主ISR=0100 0000 从IRR=全0 从ISR
35、=1000 0000 从IRR=0000 0001主IRR=0100 0000主IRR=全0 主ISR=0100 0000 从IRR=全0 从ISR=1000 0001中断处理结束:从ISR=1000 0000 主ISR=全0 从ISR=全0级联方式下,主8259A应设为特殊完全嵌套方式。,启动8259开始工作:向8259送入24个字节的初始化命令字 (ICW14),对8259工作方式进行设量:向8259送出3个字节的操作命令字 (OCW13),Initialigation CommandWord,Operation Command Word,向8259相应端口送入24个字节的初始化命令字。
36、初始化命令字输出顺序如下:,(一 )对8259的初始化编程顺序:,1 SNGL为“1”/“0”: 由ICW1中的D1位说明 ICW4 需 要 否: 由ICW1中的D0位决定2 4个命令字中, ICW1 ICW2是必须的, 而ICW3 ,ICW4是由工作方式来确定是否需要。,说明:,(二)、各初始化命令字的格式及其含义 1. ICW1:中断请求触发方式的设定 格式如下:,当某IRI中断请求被CPU响应后,在系统的第二个INTA周期8259须向CPU提供8位的TYPE码(其高5位由ICW2的D7D3位提供,其低3位由 IRI的二进制编码决定,在CPU读取TYPE码前,由8259自动填入到DB70的
37、D2 D1 D0三位数据总线上) INTR中断源的TYPE码=(ICW2的)高5位+低3位(IRI的编码),2. ICW2 : 用于中断类型码的提供,编程举例:在PC机中,硬盘中断源的类型码的高5位由用户或系统在ICW2中设定,ICW2内容为08H,其中断请求线与8259的IR5相连,类型码的形成过程如下: TYPE码高5位已获得:D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 1 用户初始化编程: MOV AL, 08H; AL ICW2内容 OUT 21H, AL; AL ICW2对应端口 (A0=1),CPU响应硬盘中断请求后,8259在INTA2送低3位至ICW2对应端
38、口中,将IR5 对应101连同ICW2的高5位一齐送到DB70上:,得到硬盘中断TYPE码为0DH,在PC/XT和PC/AT中,IRI的二进制编码也就是在系统中断优先级的编码。,. PC/XT、PC/AT中断类型码的生成表见书P98,3 . ICW3(中断级联方式的设定): ICW3初始化命令字用于8259的级联,若系统中只有一片8259A,则不需要设置命令字ICW3,若有多片8259级联,则主、从8259片都必须设置ICW3命令字,且主、从片的ICW3格式有所区别,具体如下:,(2)ICW3的格式: a.主片ICW3,S 7-0:,1-8259主片的IRi引脚上连接有8259从片0-无从片连
39、接,说明:当由多片8259A构成级联中断控制器结构时,与中断请求线IRI相连的8259A叫做从8259,与CPU的INTR引脚相连的那一片8259A叫做主8259A,级联将中断源由8扩至64级。 编程举例:若主8259的IR3和IR5两 输入端分别连接了从 8259A片,则有主8259的ICW3的值为00101000B=28H。 MOV AL, 28H; 主ICW3 AL OUT 21H, AL; AL 主ICW3对应 端口A0=1,0 0 0 IR00 0 1 IR10 1 0 IR20 1 1 IR31 O O IR4 标明从8259的INT引脚1 0 1 IR5 具体与主8259的哪一个
40、1 1 0 IR6 IRI引脚相连1 1 1 IR7,.从8259的从ICW3的设定过程与主ICW3相同 例如 :有主8259的IR6和IR1分别连接了从片8259,则 有: 从片A的ICW3=00000001B=01H-与主片IR1相连 从片B的ICW3=00000110B=06H-与主片IR6相连 编程如下:,MOV AL, 01H; OUT 21H, AL; MOV AL, 06H; OUT 21H, AL;,级联方式下CPU对从片中断请求的响应 1 . 从IRI 经判优,最终到达CPU的INTR引脚; 2 .CPU响应INTR请求,发出INTA,给所有8259(主及从); 3 . 主8
41、259通过级联线CAS20向所有从片送出优先权最高的中断源所在的从8259的标识码符; 4 . 各从片将CAS20上来的ID2-0码与自己的ID2-0码核对,进行比较以后,相符的从8259就在INTA2周期送出中断类型码; 5 . 在CPU发出INTA2时,从DB70上读取TYPE码.,CPU,INTR INTA WR RD,DB,8,CS A0SP/EN IR0 8259从INT INTA IR7WRRD CAS20,CS A0SP/ENN IR0 8259从INTINTA IR7WRRD CAS20,8259中断级联方式的连线,CS A0SP/EN IR0 8259主 INT IR7INT
42、AWRRD CAS20,4.ICW4格式:,(嵌套和中断结束方式),1 16位CPU0 8位CPU,D7 D6 D5 D4 D3 D2 D1 D0,0 0 0 SFNM BUF M/S AEOI MPM,1 特定的完全嵌套方式0 正常的完全嵌套方式,0 1 0 1 1,非缓冲方式缓冲方式/从缓冲方式/主,结束中断的方式, 1 自动EDI 由OCW2具体规定 0 非自动EDI,注:非缓冲方式(BUF=0时),则M/S无意义,此时主/从 由SP端决定。主片:SP=+5V,从片:SP接地,编程举例:在TP-86单片机中,CPU8086为16位机,采用非自动结束中断方式, 使用1片8259,正常完全方
43、式,8259与系统总线间采用缓冲器连接, 其对应ICW4为00001101B=0DH MOV DX, 0FFDEH ; ICW4对应端口地址 DX MOV AL, 0DH ; 设置ICW4 送 AL OUT DX, AL; ICW4送8259奇数口(A0=1),(三).设置8259的工作方式,通过设置OCW1-OCW3实现,. 特定完全嵌套方式的设定(ICW4) 问题的提出:,在级联方式中,当从控接收到比“正在服务”中的那一个优先等级更高的中断申请时,就不会被主控识别,就是说,从控的较高优先级的中断就不能被及时服务。 为了解决这个问题,8259提供了一种特定的完全嵌套方式。 如果在主控中采用这
44、种方式,那么当从控收到一个更高的中断请求时,它是会被主控识别的。这种完全嵌套方式是在初始化时由ICW4指定的。,8259的工作方式有: 1 中断屏蔽方式: 正常 OCW1 IMR 特定 OCW3(D6 D5=1)设定 2 中断嵌套方式 : 完全固定,依IR0IRR7排优 特定的完全嵌套 ICW4(D4 SFNM)=1 (CPU可以响应所有与正在被响应的ISRI同 级以及更高优先权的中断请求) 3 中断优先权排队方式 :优先权固定 优先权轮转,由OCW2具体操作 4 中断结束方式 : 自动结束,在INTA2自动使ISRI置0, ICW4的D1=1 非自动结束,通过ICW4的D1=0 以及 OCW2 指定/不指定,轮转/不轮转,