电子说
在中断控制过程中,中断源的识别和优先权的确定可以用硬件排队电路等实现, Intel 8259A可编程中断控制器就是为完成这些任务而设计的一种器件 。(之前看中断总会看到这个控制器,现在总算知道踏实干什么的了)
它不是I/O接口,而是一种中断管理芯片,统称PIC(Programmable Interrupt Controller)。
8259A可编程中断控制器用来管理8级优先中断,并可将多个8259A级联起来,构成64级中断优先级管理系统,而无需外加电路;
它具有多种工作方式,CPU可以通过编程设定或改变它的工作方式;
CPU响应中断时,8259A能自动提供中断入口地址,而使CPU转向相应的中断处理程序。
中断入口地址可以由用户设定,且入口地址可以选定在任何存储单元。
8259A的主要功能为:
8259A采用NMOS工艺,只需要单一的+5V电源,它的内部电路为静态电路,因此不需要时钟输入,其内部结构如图12所示。
8259A内部结构
数据总线缓冲器是三态、双向、8位的缓冲器,D7~D0用于和CPU的数据总线连接, CPU通过数据总线缓冲器向8259A传送命令码,或从8259A读取状态字。
在中断响应时, 8259A通过数据总线缓冲器向CPU提供CALL指令的操作码和调用子程序入口地址的低8位和高8位,以及中断类型码。
中断请求寄存器用来寄存所有IR输入线输入的中断请求信号,即保存正在请求服务的中断级。有一个请求输入线就有一个触发器来保存相应的状态,共有IR0~IR7 8条输入线,连接8个I/O设备的中断请求信号。
当IR0~IR7中的某一条请求线上升为高电平时,IRR中的相应位置“1”。
优先权电路的主要作用是确定中断请求寄存器IRR中各位的优先级,并确定能否向CPU申请中断。当IRR中有中断请求触发器置位时,优先权电路就选出其中的未被屏蔽的最高优先级,并对该优先级编码;然后再按照一定的优先级方式同中断服务寄存器(ISR)中的最高优先级相比较,以便确定最终有无向CPU申请中断的资格。若可以申请中断,则CPU响应中断请求;发来第一个INTA脉冲时,将级别最高者放入中断服务寄存器(ISR)中的相应位置。
中断服务寄存器(ISR)的主要作用是保存当前被CPU服务的中断级,也就是记录正在被处理的中断请求。当某一级中断被CPU响应,并执行它的中断服务程序时,中断服务寄存器ISR中的相应位置“1”,并一直保持该状态(非自动结束中断方式),直到CPU发出结束中断命令EOI为止。
在中断嵌套情况下,ISR中会有多个位被置“1”。在CPU响应中断,发出第一个INTA时,最高优先级的状态在ISR中相应位置“1”,同时该位的编码写入中断向量寄存器的低3位(高5位由初始化编程时写入),以备在第二个INTA到来时送出对应的中断类型号。
8259A内部结构
中断屏蔽寄存器的主要作用是对各中断源的中断请求信号(IR0~IR7)实现开关控制。这个寄存器中保存对输入请求线上的屏蔽信息,这些信息是由CPU送给8259A的操作命令OCW1来设定的。当某位为“1”时,表示禁止相应的中断请求进入优先权电路。
控制逻辑内部包括内部控制电路、中断控制电路、初始化命令寄存器组和操作命令寄存器组,它根据CPU对8259A编程设定的工作方式产生8259A内部控制信号,并根据中断请求寄存器(IRR)和优先权电路的判别结果,在适当时候向CPU发生中断请求信号,并接收CPU发来的中断响应信号INTA,控制提供中断类型号。
接收CPU来的控制信号,包括端口控制信号A0和CS、数据方向控制信号RD和WR。控制将CPU送来的初始化命令ICW和操作命令OCW存入8259A内部相应的寄存器,用以规定8259A的工作方式。
一片8259A最多可构成八级中断(IR0~IR7),要想扩展中断源,必须多片连在一起,即采用级联方式。级联缓冲/比较器的功能有两个,一是提供级联控制,二是提供缓冲控制。CAS2~CAS0用于提供级联信号,主片输入,从片输出。
对于8088 CPU而言,8259A的工作过程是:
8259A是一个28引脚的双列直插式芯片,其引脚信号可参见图7-12。
中断控制器8259A有四种主要的工作方式:
还有四种从属的工作方式:
另外,它还被分为两大工作类型,即
这是一种最普通的工作方式。8259A在初始化工作完成后若未设定其他的工作方式,就自动进入全嵌套方式。这种方式的特点是:
全嵌套工作方式由ICW4的D4=0来确定。
循环优先级方式是8259A 管理优先级相同的设备时所采用的中断管理方式 ,它包括自动循环优先级方式和特殊循环优先级方式。
这是一个循环套,有一个最低优先权指针,哪一台设备刚被服务后,它就被赋予最低优先权指针。例如,IR7刚被服务,它就被赋予最低优先权指针,按照循环顺序,IR0的优先级就是最高优先级;如果IR4刚被服务,IR4就被赋予最低优先权指针,按照优先级循环顺序,IR5的优先级就最高。这样,当一台设备提出中断请求后,在最不利的情况下(此时它的优先级最低),待其他7台设备被轮流服务一次以后,它变为最高优先级,从而得到系统的服务。但是如果不是在循环优先级方式下(包括自动循环和特殊循环)工作,它可能永远得不到系统的服务。
自动循环优先级方式由OCW2的R=1、SL=0来确定。
特殊循环优先级方式与自动循环优先级方式的不同之处在于:在自动循环优先级方式中,某一设备在被服务之后被确定为最低优先级;而在特殊循环优先级方式中,通过编程来确定某一设备为最低优先级。如IR5被指定为最低优先级,则IR6的优先级最高。特殊循环优先级方式由OCW2的R=1、SL=1来确定,L2L1L0用于指定最低优先级的二进制编码。
一般来说,在命令控制字中,凡是采用“L2L1L0”的都有“特殊”的含义。
8259A的每个中断请求输入信号都可由中断屏蔽寄存器(IMR)的相应位进行屏蔽, IMR的D0对应IR0,D1对应IR1…… D7对应IR7。相应位为“1”则屏蔽中断输入,相应位为“0”则允许中断输入。IMR寄存器由操作命令OCW1进行设置。对中断请求输入信号的屏蔽方式一般有两种:正常屏蔽方式和特定屏蔽方式。
在正常屏蔽方式中,每一个屏蔽位对应一个中断请求输入信号,屏蔽某一个中断请求输入信号对其他请求信号没有影响,未被屏蔽的中断请求输入信号仍然按照设定的优先级顺序进行工作,而且保证当某一级中断请求被响应服务时,同级和低级的中断请求将被禁止。如果CPU允许中断,则高级的中断请求还会被响应,实现中断嵌套。
特定屏蔽方式也叫特殊的中断屏蔽方式,当设定了特定屏蔽方式后,IMR中为“1”的位仍要屏蔽相应的中断请求输入信号,但所有未被屏蔽的位被全部开放,无论优先级别是低还是高,都可以申请中断,并且都可能得到CPU的响应并为之服务。也就是说,这种方式抛弃了同级或低级中断被禁止的原则,任何级别的未被屏蔽的中断请求都会得到响应,所以,可以有选择地设定IMR的状态,开启需要的中断输入。
特定屏蔽方式由OCW3的ESMM和SMM确定,设定时ESMM=1、SMM=1,复位时ESMM=1、SMM=0。
程序查询方式不使用中断,是用软件寻找中断源并为之服务的工作方式。在这种方式下,8259A不向CPU发送INT信号(实际上是8259A的INT信号不连到CPU的INTR信号上),或者CPU关闭自己的中断允许触发器,使IF=0,禁止中断输入。申请中断的优先级不是由8259A提供的中断类型码而是由CPU发出查询命令得到的。
查询时,CPU先向8259A发出查询命令,8259A接到查询命令后,就把下一个IN指令(对偶地址端口的读指令)产生的RD脉冲作为中断响应信号,此时,若有中断请求信号,则在ISR中相应位置“1”,并把该优先级送至数据总线。在RD期间8259A送至数据总线供CPU读取查询的代码格式为:
其中,I是中断请求标志,I=1表示有中断请求,此时W2W1W0有效,W2W1W0就表示申请服务的最高中断优先级。I=0表示没有中断请求,此时W2W1W0无效。例如读入的查询代码是83H,则表示有中断请求,申请中断的优先级输入是IR3。
在查询方式下,CPU不需执行中断响应周期,不必安排中断向量表,8259A能自动提供最高优先级中断请求信号的二进制代码,供CPU查询。该方式使用方便,可扩充中断优先级数目,扩充数目超过64级以上(此时不是中断级联方式,而是一般的端口连接。在查询时,只涉及8259A端口地址。显然,在查询方式下,能够扩展的8259A的数目仅限于系统的I/O空间容量)。
查询方式是由OCW3的P=1来确定的。
所谓中断结束方式是指中断如何结束的方法,这里的“结束”不是指中断服务程序的结束。中断服务程序的结束用IRET指令就可完成,这里的“结束”是指如何和何时使8259A中的ISR中的相应位清0。ISR中某位为“1”,表示CPU正在为之服务;某位为“0”表示CPU已经停止(结束)为之服务。而IRET指令主要是恢复程序的断点,它并不能使ISR的相应位清0。
8259A的中断结束方式有两种:命令中断结束方式(EOI)和自动中断结束方式(AEOI)。
在自动中断结束(AEOI)方式下,8259A自动地在最后一个INTA中断响应脉冲的后沿将中断服务寄存器ISR中的相应位清0。这种方式的过程是:中断请求,CPU响应,发第一个INTA,ISR相应位置“1”, CPU发第二个INTA,8259A提供中断类型码,ISR相应位清0,结束。显然,ISR的相应置“1”位在CPU中断响应周期内自生自灭,因此在ISR中不会有两个或两个以上的置“1”位。
自动中断结束方式(AEOI)的应用场合一般是,8259A单片系统,或不需要嵌套的多级中断系统。AEOI方式只能用于主片8259A,不能用于从片8259A。
自动中断结束方式由ICW4的AEOI=1确定。
读8259A的状态是指读8259A内部的IRR、ISR和IMR的内容。
8259A的中断请求寄存器IRR中有8个中断请求触发器,分别对应8个中断请求信号的输入端IR0~IR7。这些触发器的触发方式有两种,即边沿触发和电平触发。
边沿触发方式由ICW1的LTIM=0确定。
当输入端为高电平时产生中断请求(只要为高电平就可以,不需要脉冲跳变)。但需要注意的是,在电平触发方式下,在发出EOI命令以前,或CPU开放中断以前,必须去掉中断请求信号(使其变为低电平),否则将产生第二次中断。
电平触发方式由ICW1的LTIM=1确定。
所谓缓冲器方式就是在8259A和数据总线之间挂接总线驱动器的方式。在缓冲器方式下,SP/EN引脚将使用EN功能,并使之输出一个有效低电平,开启缓冲器工作。该方式多用于级联的大系统中。
缓冲器方式由ICW4的BUF=1确定。
该方式适用于多片级联,且必须将优先级保存在各从片8259A中的大系统。 该方式与普通的全嵌套方式的工作情况基本相同,有两点区别:
在级联系统中,每个从片的中断请求输出线INT直接连到主片的某个中断请求输入线上,主片的CAS0~CAS2是输出线,输出被响应的从片代码,从片的CAS0~CAS2是输入线,接收主片发出的从片代码,以便与自身代码相比较。级联方式的要点如下:
级联方式由ICW1的SNGL=0确定。
上述的各种工作方式中,全嵌套方式、自动中断结束方式、中断请求触发方式、缓冲器方式、特殊的全嵌套方式、级联方式 等是由初始化命令字ICW来设定的 ,
而循环优先级方式、特定屏蔽方式、查询方式、命令中断结束方式、读8259A状态等是由 操作命令字OCW来设定的 。
8259A是一个可编程器件。为了使8259A实现预定的中断管理功能,并按预定的方式工作,就必须对它进行初始化编程。所谓初始化编程是指系统在上电或复位后对可编程器件进行控制字设定的一段程序。8259A的命令控制字包括两个部分,即初始化命令字和操作命令字。
初始化命令字一般在系统复位后的初始化编程中设置,用于确定8259A的基本工作方式,设置以后一般保持不变。操作命令是在初始化以后的正常工作中写入的,它实现对8259A的状态、中断方式和过程的动态控制,在工作中可随时写入操作命令字以修改某些控制方式。
8259A内部有7个寄存器,分为两组:初始化命令寄存器组和操作命令寄存器组。初始化命令寄存器组包括4个寄存器:ICW1~ICW4对应的寄存器。操作命令寄存器组包括3个寄存器:OCW1~OCW3对应的寄存器。
由于8259A只有一条地址线A0,所以它只能有两个端口地址;而8259A有7个命令字,每个命令字要写入相应的寄存器。为此,采取以下几点措施:第一,以端口地址区分;第二,把命令字中的某些位作为特征码来区分;第三,以命令字的写入顺序来区分。
在PC/XT中,8259A的两个端口地址分别为20H和21H。下面具体讨论8259A的命令字。
初始化命令字有4个:ICW1~ICW4。8259A在进入正常工作之前,必须将系统中的每一个8259A进行初始化设置,以此建立8259A的基本工作条件。
写入的初始化命令字一般为2~4个(在某些条件下,4个初始化命令字并非必须全部写入),最多为4个,然而,ICW1使用偶地址,而ICW2、ICW3、ICW4 都使用奇地址。为了相互区别,初始化命令字的写入必须有一个固定的顺序,其顺序如图14所示。
8259A的ICW写入顺序
系统上电或复位以后,对8259A第一件要做的工作就是按图7-14的顺序写入初始化命令字。
初始化命令字格式如图7-15所示。初始化命令字ICW1的主要功能是:确定级联方式,触发方式。写入ICW1后,8259A内部自动复位,其复位功能为:
初始化命令字ICW2的主要功能是:
初始化命令字ICW3的主要功能是:确定主片/从片的级联状态,即确定主片的连接位和从片的编码。
初始化命令字ICW4的主要功能是:选择CPU系统,确定中断结束方式,规定是主片还是从片,选择是否采用缓冲方式。
初始化命令字一定要在系统复位后首先写入8259A,写入时要严格按照图15的顺序,不允许颠倒。
写完初始化命令字后,8259A已经建立了基本的工作环境,可以接受中断请求,也可以写入操作命令字OCW来改变某些中断管理方式。
操作命令字可以随时写入、修改,但初始化命令字一经写入一般不再改动。
如果在写入初始化命令字后不写入操作命令字,则8259A便处于全嵌套工作方式,即中断优先级为IR0最高,IR7最低,禁止同级及低级中断,高级中断可嵌套处理。
在初始化命令字写入8259A之后,8259A就准备接收中断请求输入信号了。
在8259A工作期间,CPU可以随时通过操作命令字使8259A完成各种不同的工作方式。8259A有三种操作命令字:OCW1、OCW
全部0条评论
快来发表一下你的评论吧 !