可编程中断控制器A.ppt
1,7.5 可编程中断控制器 8259A,8259A的功能8259的引脚与功能结构8259A的中断工作过程8259A的工作方式8259A的编程8259A在IBMPC/XT中的应用举例,2,7.5 可编程中断控制器 8259A,一、功能Intel 8259A是可编程中断控制器,配合80X86CPU管理可屏蔽中断中断优先权的管理中断屏蔽的管理中断结束的管理,3,8259A,8259A具体功能:1片8259A可以管理8级中断,经级连最多可扩展至64级每一级中断都可单独被屏蔽或允许在中断响应周期,可提供中断向量号(配合I8086/88/286/386),或相应的调用指令(配合 I8080/85)。8259A有多种工作方式,可通过初始化编程进行设置。,4,二、8259的引脚与功能结构,D7D0,INTA,INT,中断请求寄存器,中断屏蔽寄存器,数据总线缓冲器,IR0,IR7,读/写控制逻辑,级联缓冲器比较器,RD,WR,A0,CS,CAS0,CSA1,CAS2,SP/EN,优先权判别电路,中断服务寄存器,控制逻辑,5,8259的内部结构,1。中断请求寄存器IRR保存8条外界中断请求信号IR0IR7的请求状态Di位为1表示IRi引脚有中断请求;为0表示无请求2、中断服务寄存器ISR保存正在被8259A服务着的中断源(或已进入中断处理程序)。Di位为1表示IRi中断正在服务中;为0表示没有被服务3、中断屏蔽寄存器IMR保存对中断请求信号IRi的屏蔽状态Di位为1表示IRi中断被屏蔽(禁止);为0表示允许8259占用两个端口地址A0=1、0(奇地址、偶地址)。,见P252 图8-13 8259A与系统总线的连接,6,5.控制逻辑 控制逻辑电路中,有一组初始化命令字Reg:ICW1ICW4 一组操作命令字Reg:OCW1OCW3。系统刚开始时,初始化命令字送8259A,以后过程中将保持不变,操作命令则用来在过程中控制中断操作。控制逻辑按编程设定方式管理8259A的全部工作。,4.优先权判别电路 用来识别和管理各中断请求信号的优先级别。,6.数据总线缓冲器 三态缓冲器。8259A与CPU的数据总线接口,7,8,三、8259A的中断工作过程,00100000,00000000,ISR,IRR,D0,D7,D0,D7,0 0 0 0 0 0 0 0,IMR,优先权电路,INT,INTA,CPU,INTR,INTA,D2,1,1,1,0,9,8259A的工作过程,1.上电后,由CPU执行一段程序对8259初始化(通过输入初始化命令字实现)。完成初始化后,8259A处于 就绪状态。,CPU 进入响应中断的过程,继而执行中断子程序。,10,8259A的中断过程,CAS0CAS2,D0D7,SP/EN,IR0IR7,CPU响应周期,8259A工作波形,INT,第1个总线周期T1 T2 T3 T4,ALE,CLK,第2个总线周期T1 T2 T3 T4,第1个-INTA前保持高电平,INTA,LOCK,中断向量,主片输出级联信号从片接收,11,四、8259A的工作方式,普通全嵌套方式,特殊全嵌套方式,自动循环方式,特殊循环方式,优先权固定方式,优先权循环方式,设置优先权方式,普通中断结束方式,特殊中断结束方式,自动中断结束方式,非自动中断结束方式,结束中断方式,中断屏蔽方式,普通屏蔽方式,特殊屏蔽方式,中断触发方式,边沿触发方式,电平触发方式,数据线连接方式,缓冲方式,非缓冲方式,与CPU配合方式,与8080/8085 CPU配合,与8086/8088 CPU配合,级连方式,级连,不级连,12,1.设置优先权方式,普通全嵌套方式8259A的中断优先权顺序固定不变,从高到低依次为:IR0、IR1、IR2、IR7中断请求后,8259A对当前请求中断中优先权最高的中断 IRi 予以响应,将其向量号送上数据总线,对应ISR的 Di位置位,直到中断结束(ISR的 Di 位复位)在ISR的 Di 位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套特殊全嵌套方式允许同级中断嵌套(用于级连主片)优先权自动循环方式最高优先权自动转移到相邻的低优先级中断源(P332),如IR3被响应后,IR3最低,IR4最高。优先权特殊循环方式优先权由OCW2设置哪个IR最低,其他的随之确定。,13,特殊全嵌套方式(适用于8259级联的情况)级联时,主片 须采用特殊的全嵌套方式。,普通全嵌套方式常用方式,又称全嵌套方式,适用于单片 8259的情况。,特点:和全嵌套方式基本相同,不同的是:在处理某以及中断时,可响应同级中断,从而实现对同 级中断请求的特殊嵌套.,14,主片编程为特殊全嵌套方式:当处理一级中断时,如果有同级的中断请求,也会给予响应。否则:当从片8259IR2有中断请求,若主片是普通全嵌套方式,则会屏蔽从片上的IR0、IR1(比IR2优先级高)中断请求。因为从片上的8个IRi变成了主片的同一级。而特殊全嵌套方式,对来自同一从片的较高优先级请求不会屏蔽。,在从片的中断处理程序快结束时,应给 8259A发EOI(中断结束)命令,方法是:(a)向从片发EOI;(b)读从片的ISR内容:若为0,表示从片只有一个中断源申请中断,再向主片发一个EOI命令。若不为0,表示从片存在两个以上的中断源在申请中断,则不应发EOI给主片。,15,(3)优先权循环方式 一个系统的优先权比较复杂,所以不能总规定IR0高 IR7低。8259A设计了两种改变优先权的方法。,特殊循环方式适用于中断源的优先级需要任意改变的情况 通过OCW2命令字设置当前的最低优先级IR5,使得有:IR6 IR7 IR0 IR5。,16,2.结束中断处理方式 在中断请求得到响应时,ISR中相应位置1,中断服务结束时,必须使这个位复位为0以标识中断处理结束。这个中断结束是指8259结束中断,而不是CPU结束执行中断服务程序。,非自动中断结束方式 普通中断结束方式(EOI)适用于全嵌套方式 当8259A工作在全嵌套方式时,则当前服务过的中断源就是中断优先权最高的源,可以用非特殊(普通)的EOI使它在ISR中的相应位清0。这个命令加在中断服务程序的末尾处。,用于系统中只有一片8259A,多个中断不会嵌套的情形。系统一进入中断处理,就将当前中断服务寄存器ISR的对应位清除。对8259A来说,好像已经结束了当前中断。在命令字ICW4中将AEOI(D1)位置“1”。,17,不管是普通、还是特殊的中断结束方式,级联系统中的中断结束必须发送两次EOI:一次给从片,一次给主片。(向从片发EOI后,须检查从片中的所有申请中断的源是否全服务过。只有都服务过了,才能向主8259送另一个EOI命令)。,特殊结束中断方式非全嵌套方式下 当8259A工作在非全嵌套模式时,8259A可能不能确定刚服务的源的等级,需要用特殊的EOI命令,指出要清除哪个ISR位。,18,中断结束字,什么是8259A的中断结束字(EOI)?,8259A判断中断服务寄存器ISR的状态:若某位为1,表示该中断源正在得到服务;一般情况下,将不再响应同级或低级的中断(采用特殊屏蔽方式时,可响应低级别的中断)若某位为0,表示该中断服务已结束,可响应低级级别中断。用指令向8259A送中断结束字,可以使ISR的某位清0,19,3.屏蔽中断源方式 通过IMR编程可允许或禁止中断,普通屏蔽方式 通过命令字OCW1设置IMR某位或某几位为1,则屏蔽其中断请求。置0则允许该级中断。,特殊屏蔽方式用于开放较低级中断请求 在8259中,当一个中断请求被响应时,ISR对应位置1。在该位未复位时,8259A会禁止所有优先级比它低的中断。,用特殊屏蔽方式可以做到:屏蔽当前中断级(IMR对应位为1);ISR中相应位复位,则较本级低的中断源申请可以得到响应。,20,屏蔽中断源方式 P331,普通屏蔽方式将 IMR的 Di 位置1,对应的中断 IRi 将被屏蔽,该中断请求将不能从8259A送到CPU如果将 IMR 的 Di位置0,则允许对应的中断产生特殊屏蔽方式允许发生低级的中断嵌套,用于级连时的主片。将IMR的 Di 位置1,中断IRi被屏蔽;同时,ISR的Di位将置0,允许发生低级的中断。,21,4.与CPU的配合方式,与8086/8088 CPU配合中断响应时,INTA信号2个总线周期有效,8259A送相应的中断向量号(1个字节)到数据总线。,8086/88CPU,8259A,中断向量号,INTA,INTR,22,5.级连方式,不级连只用1片,如 PC/XT级连使用29片,如 PC/AT(2片),主片,从片,-INTA,INTR,IR0,IR7,IR7,IR0,CAS0CAS2=010,INT,INT,D0D7,23,中断级连,8259A可以级连,1个主片最多可以级连8个从片级连时,主片的级连线CAS0CAS2连至每个从片的CAS0CAS2,输出被选中的从片编号,每个从片的中断请求信号 INT,连至主8259A的一个中断请求输入端IRi;主片的 INT 线连至CPU的中断请求输入端INTR在非缓冲方式下,引脚SP/EN,通过接地指定该片充当从片(-SP0);反之若接高电平则该片充当主片(-SP1)。,24,6.数据线连接方式,缓冲方式对8259A的数据线(输出中断向量)加缓冲器予以隔离和驱动SP/EN引脚作为输出端,输出允许信号,用以关闭或开启缓冲器非缓冲方式SP/EN引脚作为输入端在8259A级连时,用它选择该芯片充当主片或从片,25,CAS0 IR0CAS1 IR1CAS2 IR2 IR3INTA IR4 IR5INT IR6 IR7SP/EN,CAS0INTA CAS1 CAS2INT IR0 IR1SP/EN IR7,CAS0 IR0CAS1 IR1CAS2 IR2 IR3INTA IR4 IR5INT IR6 IR7SP/EN,INTA,INTR,+5V,8259级联非缓冲工作示意图,8259A的级连,输出得到响应的从片编号,26,7.中断触发方式,边沿触发方式中断请求输入端出现上升沿为有效的中断请求信号电平触发方式中断请求端出现高电平为有效的中断请求信号,27,8259A是可编程中断控制器,对其编程可以分为两部分:初始化编程:由CPU向8259A送24个字节的初始化命令字 ICW(Initialization Command Word)。工作方式编程:由CPU向8259A送三个字节的操作命令字 OCW(Operation Command Word)。8259A必须通过ICW初始化,则处于全嵌套工作方式,在8259A工作期间,OCW规定或设置其工作方式,动态地控制CPU处理中断的过程。,五、8259A的编程,28,初始化编程8259A开始工作前写入。用户必须对8259A进行初始化编程。通过写入初始化命令字ICW对8259A进行初始化。共有ICW1-ICW4。工作方式编程在8259A工作期间写入,共有OCW1OCW3。可以随时向8259A写入工作命令字OCW,使之按用户设置的新的工作方式进行工作用户还可以通过写工作命令字OCW通知8259A,下面的操作要读取8259A中的状态信息,以便了解其工作情况,29,1.初始化命令字ICW,8259A在开始工作前必须写入初始化命令字初始化命令字ICW最多可以有4个:ICW1ICW4必须按照以下顺序依次写入其中 ICW1 和 ICW2 是必须的ICW3和ICW4是否需要,由具体的工作方式(在ICW1中的设置)决定。,30,ICW1 写入偶地址,A0=0,表示可以任意,为1为0都可以(建议为0)1只能为1,作为标志,表示写的为ICW1D3 中断触发方式:LTIM1,电平触发方式LTIM0,边沿触发方式 D1 规定单片或级连方式:SNGL1,单片方式SNGL0,级连方式,且后边要写ICW3D0 是否写入ICW4IC41,要写入ICW4IC40,不写入ICW4,即ICW4规定的位全为0,特征:A0=0,ICW1中D4=1 ICW1启动了8259A中的初始化顺序,自动发生一系列事件,31,ICW1启动了8259A中的初始化顺序,自动发生一系列事件,对中断请求信号边沿检测电路复位;清IMR、ISR;指定IR0优先级最高;设定为普通屏蔽方式;设定为非自动结束中断方式。,32,ICW2 写入奇地址 A0=1,设置中断向量号 T7T3为中断向量号的高5位 低3位由8259A自动确定:IR0为000、IR1为001、IR7为111,33,ICW3 写入奇地址 A0=1,针对从片,针对主片,级连命令字主片:Si1,说明其对应引脚IRi 上连接有从片;否则引脚IRi上没有连接从片从片:ID0ID2 编码说明该从片的INT引脚接到了主片上的哪个IRi引脚,34,ICW4 写入奇地址 A0=1,SFNM 嵌套方式:特殊全嵌套方式(SFNM1)普通全嵌套方式(SFNM0)BUF 数据线的缓冲方式:缓冲方式(BUF1)非缓冲方式(BUF0),M/S:主片/从片选择:主片(M/S=1)从片(M/S=0)AEOI 中断结束方式:自动中断结束(AEOI1)非自动中断结束(AEOI0)微PM处理器类型:16位80 x86(PM1)8位8080/8085(PM0),35,8259A芯片的初始化流程,36,初始化主片8259A,mov al,11h;写入ICW1out 20h,alintr1:mov al,08h;写入ICW2out 21h,alintr2:mov al,04h;写入ICW3out 21h,alintr3:mov al,1h;写入ICW4out 21h,al,中断控制器的初始化程序段,PC机上8259地址:20h-21h,37,初始化从片8259A,mov al,11h;写入ICW1out 0a0h,alintr5:mov al,70h;写入ICW2out 0a1h,alintr6:mov al,02h;写入ICW3out 0a1h,alintr7:mov al,01h;写入ICW4out 0a1h,al,中断控制器的初始化程序段,该题中8259的两个地址:0a0h、0a1h,38,2.工作命令字OCW,8259A工作期间,可以随时接受工作命令字OCWOCW共有3个:OCW1OCW3写入时没有顺序要求,需要哪个OCW就写入那个OCW,在写入ICW1ICW4后,8259A就绪,可接收中断请求信号,若不再写入OCW,则处于全嵌套中断工作方式。,若需改变上述8259A的中断控制方式,或为了屏蔽某些中断,以及读出8259A的一些状态信息,如IRR、ISR、IMR的内容,则必须写入操作命令字OCW。,39,OCW1 写入奇地址,屏蔽命令字其内容将写入中断屏蔽寄存器IMR Mi=1,则禁止对应IRi中断;Mi=0,则允许对应IRi中断。各位互相独立。,OCW1可放置于程序的任何地方,实现对某些中断的屏蔽或开放,也就实现了对优先权的改变。,40,OCW2 写入偶地址,L2L0的3位编码指定IR引脚,R、SL和EOI配合使用产生中断结束EOI命令和改变优先权顺序,OCW2标志,发中断结束命令字控制中断优先权的循环,OCW2标志,41,OCW2(中断结束和优先权循环控制字)设置优先级是否循环,循环的方式,中断结束的方式。,42,43,OCW3 写入偶地址,ESMM、SMM设置中断屏蔽方式,P、RR和RIS规定随后读取的状态字含义,OCW3标志,44,OCW3(屏蔽和读状态控制字),设置和撤消特殊屏蔽方式 D6 D5 1 0 复位为普通屏蔽方式 1 1 置为特殊屏蔽方式,设置中断查询方式 查询外部事件是否有中断请求.i)写OCW38259A,其中D2=1 ii)读查询字(对同一地址),45,2。查询字:在OCW3的D2位P为1后的下一个读命令,查询为外设服务,中断位I位为1,有外设请求中断,W2W0的编码 当前中断请求的最高优先级,CPU内部禁止中断时,或不想用INT 引脚向CPU 申请中断时,可通过查询字获得外设中断请求情况。,46,3.读取状态字,CPU可随时读出IRR、ISR、IMR和查询字A0为低(偶地址)时由OCW3中RR和RIS位编码决定读取的是IRR或ISR,由OCW3中P=0位决定下面读取的是A0为高(奇地址)时,读取的是IMR,47,8259A的端口,48,4.命令字和状态字的区别方法,利用读写信号区别写入的控制寄存器和读出的状态寄存器利用地址信号区别不同I/O地址的寄存器由控制字中的标志位说明是哪个寄存器由芯片内顺序控制逻辑按一定顺序识别不同的寄存器由前面的控制字(引导字)决定后续操作的寄存器,接口电路中常用的方法,49,8087协处理器中断请求RAM奇偶错I/O通道检查错,NMI屏蔽寄存器屏蔽控制,定时器(主板上)键盘(主板上),NMI,INTR,01234567,优先级,8088CPU,8259A,I/O通道,IBM PC/XT机中的外中断管理,未用异步通信卡(辅)异步通信卡(主)硬盘软盘并行打印机,在8086系统中,CPU和8259A的所有数据传送都在数据总线的低8位上进行。地址总线的A1与8259A的A0相连,以保证数传都在总线的低8位中进行。,50,8259A在IBM PC/AT上的应用,CAS02,CAS02,+5V,主8259A,80286 CPU,INTRD0D7,SP/ENINTD0D7,日时钟键盘串行口2串行口1并行口2软盘并行口1A0-INTR1 CS,IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 A0 CS,从8259A,D0D7INTSP/EN,实时钟改向0AH中断保留保留保留协处理器硬盘保留A0-INTR2 CS,IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15 A0 CS,系统总线B25B24B23B22B21,系统总线B4D3D4D5D6D7,INTA,RD,WR,INTA,IOR,IOW,INTA,RD,WR,-S0-S2,82288,51,PC机中8259A应用注意事项,利用上升沿做为中断请求IRQ的有效信号IRQ0IRQ7中断向量号依次为08H0FHIRQ8IRQ15中断向量号依次为70H77H(PC/AT机)采用普通全嵌套优先权方式,中断优先权从高到低顺序为IRQ0IRQ2、IRQ8IRQ15(级连从片)、IRQ3IRQ7,且不能改变采用普通中断结束EOI方式,需在中断服务程序最后发送普通EOI命令一般采用普通屏蔽方式,通过写IMR相应位为0允许中断,应注意不要破坏原屏蔽状态。,52,外部中断服务程序,编写外部可屏蔽中断服务程序,需注意:中断服务结束时应向8259发送中断结束命令EOI(OCW2)一般只能采用存储单元来传递参数不能使用DOS系统功能调用(DOS为单用户单任务操作系统,不能重入)中断服务程序要尽量短小,以免影响系统的实时性,53,外部中断服务程序(续),编写主程序,需注意:修改中断向量控制CPU的中断允许标志设置8259A的中断屏蔽寄存器,54,例题:可屏蔽中断服务程序,在PC机中:8259A的IRQ0(向量号为08H)中断请求来自定时器8253,每隔55ms产生一次定时中断该例的 08H 号中断服务程序将显示一个字符串,10次中断共显示10个字符串用内存单元(共享变量)在主程序与外部中断服务程序之间传递参数:中断发生的次数显示信息安排在共同的数据段中,55,数据段,intmsgdb A 8259A Interrupt!db 0dh,0ah,0counterdb 0,例7.2,56,保存中断向量,mov ax,35 08hint 21hpush bx;保存偏移地址push es;保存段基地址,例7.2,57,设置中断向量,clipush ds;保护dsmov dx,offset new08h;中断入口地址mov ax,seg new08hmov ds,axmov ax,25 08hint 21hpop ds;恢复ds,例7.2,58,设置中断寄存器,in al,21h;读IMRpush axand al,0feh;允许IRQ0(接8253)out 21h,almov counter,0;设置中断次数初值sti;开中断,例7.2,59,循环等待中断,start1:cmp counter,10jb start1;中断10次退出,例7.2,就在主程序循环当中,60,new08hprocsti;开中断push ax;保护寄存器push bxpush dsmov ax,datamov ds,ax;设置数据段DS,例7.2,进入中断服务程序,61,中断处理,inc countermov si,offset intmsg;显示信息call dpstri,例7.2,62,显示字符串,dpstriproc;显示字符串子程序push axpush bxdps1:lodsb;取一字符cmp al,0;判是否结束标志jz dps2,例7.2,63,显示字符串(续),mov bx,0mov ah,0ehint 10hjmp dps1dps2:pop bxpop axretdpstriendp,例7.2,64,退出中断服务程序,mov al,20h;送中断结束字out 20h,alpop ds;恢复寄存器pop bxpop axiret;中断返回new08hendp,例7.2,65,主程序结束,clipop axout 21h,alpop dxpop dsmov ax,25 08hint 21hstimov ax,4c00hint 21h,例7.2,A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!A 8259A Interrupt!,66,驻留中断服务程序,内存驻留TSR(Terminate and Stay Resident)程序应用程序运行后仍然保存在主存中,可以被其他程序调用利用DOS功能调用 31H 代替 4CH 终止程序小型驻留程序常编写成.COM程序,但驻留程序也可编成.EXE程序需要驻留内存的程序段要书写在其他代码的前面,67,例题:报时中断驻留服务程序,在PC机中系统 08H 号中断服务程序调用 INT 1CH 指令中断每隔55ms调用这个报时中断,中断65543次就是时间过了1小时该例编写驻留内存的 INT 1CH 中断服务程序用于整点报时,程序功能是每过1小时显示1条信息执行此程序后,该报时中断服务程序将驻留内存,注意:因 65543=65536+7,假定用2个字来记录中断发生的次数,则每经过1小时有:高字=高字+1低字=低字+7 低字能被7整除时表示时间为整点,68,new1chprocsti;开中断push si;保护寄存器push dsmov si,cs;com程序数据和代码共段mov ds,si;设置数据段DSadd countl,1;处理低字adc counth,0;处理高字,例7.3,进入中断服务程序,69,中断处理,cmp countl,7;低字为7否jnz n1ch1cmp counth,1;高字为1否jnz n1ch1mov countl,0;计满1小时mov counth,0mov si,offset intmsgcall dpstri,例7.3,65543=65536+7=高字1H/低字7H,70,退出中断服务程序,n1ch1:pop ds;恢复寄存器pop siiret;中断返回countldw 0;数据counthdw 0intmsgdb One Hour Has Passed!db 0dh,0ah,0new1chendp,例7.3,One Hour Has Passed!,71,显示字符串,dpstriproc;显示字符串子程序push axpush bxdps1:lodsbcmp al,0jz dps2,例7.3,72,显示字符串(续),mov bx,0mov ah,0ehint 10hjmp dps1dps2:pop bxpop axretdpstriendp,例7.3,73,主程序开始,start:mov ax,csmov ds,axmov dx,offset new1chclimov ax,25 1chint 21hstimov dx,offset tsrmsgmov ah,09hint 21h,例7.3,74,主程序结束,mov dx,offset start;计算驻留内存的边界add dx,15;以“节”(16B)为单位处理mov cl,4shr dx,cladd dx,10h;加程序段前缀开销256Bmov ax,31 00h;程序驻留int 21htsrmsgdb INT 1CH Program Installed!db 0dh,0ah,$end start,例7.3,INT 1CH Program Installed!,75,第8章教学要求,1.掌握中断的基本概念。(中断、CPU响应中断的条件、CPU响应中断的过程、中断优先权)。表2.掌握8088的中断类型、中断响应过程、中断向量表。3.掌握8259的功能、特点。理解8259A的内部结构、寄存器作用、中断过程、命令字。4.掌握8259A的普通全嵌套优先权、普通中断结束、边沿触发方式5、熟悉内部、外部中断服务程序的编写。,