第7章 中断控制器8259A

中断控制器8259A

Intel 8259A是8088/8086微机系统的中断控制器件,它有对外设中断源进行管理,并向CPU转达中断请求的能力。
用于管理Intel 8080/8085、8086/8088、80286/80386的可屏蔽中断。

8259A的内部结构和工作原理

在这里插入图片描述

1、8259A的组成部分
  • 中断请求寄存器IRR:
    保存8条外界中断请求信号IR0~IR7的请求状态;
    Di位为1表示IRi引脚有中断请求;为0表示无请求。
  • 中断服务寄存器ISR:
    保存正在被8259A服务着的中断状态;
    Di位为1表示IRi中断正在服务中;为0表示没有被服务。
  • 中断屏蔽寄存器IMR:
    保存对中断请求信号IR的屏蔽状态;
    Di位为1表示IRi中断被屏蔽(禁止);为0表示允许。
  • 优先级比较器:
    用以比较正在处理的中断和刚刚进入的中断请求之间的优先级别,以决定是否产生多重中断或中断嵌套 。
  • 数据总线缓冲器
    是8259A与系统数据总线的接口,是8位双向三态缓冲器。
    CPU与8259A之间的控制命令信息、状态信息以及中断类型信息,都是通过该缓冲器传送的。
  • 读/写控制逻辑
    CPU通过它实现对8259A的读/写操作。
  • 级联缓冲器
    用以实现8259A芯片之间的级连,使得中断源可以由8级扩展至64级。
  • 控制逻辑电路
    对整个芯片内部各部件的工作进行协调和控制。
2、8259A的外部引脚

8259A是具有28个引脚的集成电路芯片,这28个引脚分别是:

  • D7-D0:双向数据输入/输出引脚,用以与CPU进行信息交换。
  • IR7-IR0:8级中断请求信号输入引脚,规定的优先级为IR0>IR1>…>IR7,当有多片8259A形成级连时,从片的INT与主片的IRi相连。
  • INT:中断请求信号输出引脚,高电平有效,用以向CPU发中断请求,应接在CPU的INTR输入端
  • INTA :中断响应应答信号输入引脚,低电平有效,在CPU发出第二个INTA时,8259A将其中最高级别的中断请求的中断类型码送出;应接在CPU的INTA中断应答信号输出端
  • RD:读控制信号输入引脚,低电平有效,实现对8259A内部有关寄存器内容的读操作。
  • WR:写控制信号输入引脚,低电平有效,实现对8259A内部有关寄存器的写操作。
  • CS:片选信号输入引脚,低电平有效,一般由系统地址总线的高位,经译码后形成,决定了8259A的端口地址范围。
  • A0:8259A两组内部寄存器的选择信号输入引脚,决定8259A的端口地址。
    A0=0  ICW1、OCW2、OCW3 偶地址
    A0=1  ICW2~ICW4、OCW1 奇地址
  • CAS2~CAS0:级连信号引脚,当8259A为主片时,为输出;否则为输入,与SP/EN信号配合,实现芯片的级连,这三个引脚信号的不同组合000~111,刚好对应于8个从片。
  • SP/EN:SP为级连管理信号输入引脚,在非缓冲方式下,若8259A在系统中作从片使用,则SP=1;否则SP=0;在缓冲方式下,EN用作8259A外部数据总线缓冲器的启动信号。
  • +5V、GND:电源和接地引脚。
3、8259A的工作过程

(1)当有一条或若干条中断请求输入(IR7 ~ IR0)有效时,则使中断请求寄存器的IRR的相应位置位
(2)若CPU处于开中断状态,则在当前指令执行完之后,响应中断,并且从INTA发应答信号**(两个连续的INTA负脉冲)
(3)第一个INTA负脉冲到达时,IRR的锁存功能失效,对于IR7 ~ IR0上发来的中断请求信号不予理睬。
(4)使
当前中断服务寄存器ISR的相应位置1**,以便为中断优先级比较器的工作做好准备
(5)使IRR寄存器的相应位复位,即清除中断请求。
(6)第二个INTA负脉冲到达时,将中断类型寄存器中的内容ICW2,送到数据总线的D7 ~ D0上,CPU以此作为相应中断的类型码
(7)若ICW4中的中断结束位为1,那么,第二个INTA负脉冲结束时,8259A将ISR寄存器的相应位清零。否则,直至中断服务程序执行完毕,才能通过输出操作命令字EOI,使该位复位。

8259A的工作方式

8259A有多种工作方式,这些工作方式,可以通过编程设置或改变。下面,我们进行分类介绍。

1、优先权的管理方式

(1) 全嵌套方式

  • 这是8259A默认的优先权设置方式,在全嵌套方式下,8259A所管理的8级中断优先权是固定不变的,其中IR0的中断优先级最高,IR7的中断优先级最低。
  • CPU响应中断后,请求中断的中断源中,优先级最高的中断源,在中断服务寄存器ISR中的相应位ISn置位,而且把它的中断矢量送至系统数据总线,在此中断源的中断服务完成之前,与它同级或优先级低的中断源的中断请求被屏蔽,只有优先级比它高的中断源的中断请求才是运算的,从而出现中断嵌套
  • 一般情况下(除了中断自动结束方式外),在CPU发出中断结束命令(EOI)前,当前中断服务寄存器ISR中的相应位一直保持“1”。以便为中断优先级裁决器的裁决提供依据。

(2) 特殊全嵌套方式

  • 特殊全嵌套方式与全嵌套方式基本相同,所不同的是,当CPU处理某一级中断时,如果有同级中断请求,那么CPU也会作出响应,从而形成了对同一级中断的特殊嵌套
  • 特殊全嵌套方式通常应用在有8259A级连的系统中,在这种情况下,对主8259A编程时,通常使它工作在特殊全嵌套方式下。这样,一方面,CPU对于优先级别较高的主片的中断输入是允许的,另一方面,CPU对于来自同一从片的优先级别较高(但对于主片来讲,优先级别是相同的)的中断也是允许、能够响应的

(3) 优先级自动循环方式

  • 在实际应用中,中断源优先级的情况是比较复杂的,要求8级中断的优先级在系统工作过程中,可以动态改变。即一个中断源的中断请求被响应之后,其优先级自动降为最低
  • 系统启动时,8级中断优先级默认为IR0~IR7,这时,刚好IR4发出了中断请求,CPU响应之后,若8259A工作在优先级自动循环方式下,则中断优先级自动变为IR5、IR6、IR7、IR0、IR1、IR2、IR3、IR4。

(4) 优先级特殊循环方式

  • 优先级特殊循环方式与自动循环方式相比,只有一点不同,即初始化的优先级是由程序控制的,而不是默认的IR0  IR7。
2、中断源的屏蔽方式

CPU对于8259A提出的中断请求,都可以加以屏蔽控制,屏蔽控制有下列几种方式:

(1)普通屏蔽方式

  • 8259A的每个中断请求输入,都要受到屏蔽寄存器中相应位的控制。若相应位为“1”,则中断请求不能送CPU。屏蔽是通过对屏蔽寄存器IMR的编程(操作命令字OCW1),来加以设置和改变的。

(2)特殊屏蔽方式

  • 有些场合下,希望一个中断服务程序的运行过程中,能动态地改变系统中的中断优先级结构,即在中断处理的一部分,禁止低级中断,而在中断处理的另一部分,又能够允许低级中断,于是引入了对中断的特殊屏蔽方式。
  • 设置了特殊屏蔽方式后,用OCW1对屏蔽寄存器中的某一位复位时,同时也会使中断服务寄存器ISR中的相应位复位,这样就不只屏蔽了正在处理的等级中断,而且真正开放了其它优先级别较低的中断请求
  • 特殊屏蔽是在中断处理程序中使用的,用了这种方式之后,尽管系统正在处理高级中断,但对外界来讲,只有同级中断被屏蔽,而允许其它任何级别的中断请求
3、 结束中断处理的方式

按照对中断结束(复位中断响应寄存器ISR中相应位)的不同处理,8259A有两种工作方式,即自动结束方式(AEI)非自动结束方式。而非自动结束方式又可进一步分为一般的中断结束方式和特殊的中断结束方式

(1)中断自动结束方式

  • 这种方式仅适用于只有单片8259A的场合 ;
  • 在这种方式下,系统一旦响应中断,那么CPU在发第二个INTA脉冲时,就会使中断响应寄存器ISR中相应位复位,这样一来,虽然系统在进行中断处理,但对于8259A来讲,ISR没有相应的指示,就像中断处理结束,返回主程序之后一样。
  • CPU可以再次响应任何级别的中断请求

(2)一般的中断结束方式

  • 一般的中断结束方式适用用在全嵌套的情况下,当CPU用输出指令向8259A发一般中断中断结束命令OCW2时,8259A才会使中断响应寄存器ISR中优先级别最高的位复位

(3)特殊的中断结束方式

  • 在特殊全嵌套模式下,系统无法确定哪一级中断为最后相应和处理的中断,也就是说,CPU无法确定当前所处理的是哪级中断,这时就要采用特殊的中断结束方式。
  • 特殊的中断结束方式是指在CPU结束中断处理之后,向8259A发送一个特殊的EOI中断结束命令,这个特殊的中断结束EOI命令,明确指出了中断响应寄存器ISR中需要复位的位
  • 这里,我们还要指出一点,在级联方式下,一般不用自动中断结束方式,而需要用非自动结束中断方式,一个中断处理程序结束时,都必须发两个中断结束EOI命令,一个发往主片,一个发往从片
4、系统总线的连接方式

(1)缓冲方式

  • 在多片8259A级连的大系统中,8259A通过外部总线驱动器和数据总线相连,这就是缓冲方式。在缓冲方式下,8259的SP/EN输出信号作为缓冲器的启动信号,用来启动总线驱动器,在8259A与CPU之间进行信息交换。

(2)非缓冲方式

  • 当系统中只有一片或几片8259A芯片时,可以将数据总线直接与系统数据总线相连,这时8259A处于非缓冲方式下。
  • 在这种方式下,8259A的作为输入端设置,主片应接高电平,从片应接低电平。
5、引入中断请求的方式

(1)边沿触发方式

  • 8259A将中断请求输入端出现的上升沿,作为中断请求信号,上升沿后相应引脚,可以一直保持高电平。

(2)电平触发方式

  • 8259A将中断请求输入端出现的高电平作为中断请求信号,在这种方式下,必须注意:中断响应之后,高电平必须及时撤除,否则,在CPU响应中断,开中断之后,会引起第二次不应该有的中断。

(3)中断查询方式
当系统中的中断源很多,超过64个时,则可以使8259A工作在查询方式下,中断查询方式的特点是:
①中断源仍往8259A发中断请求,但8259A却不使用INT信号向CPU发中断请求信号。
②CPU内部的中断允许标志复位,所以CPU对INT引脚上出现的中断请求呈禁止状态。
③CPU 用软件查询的方法来确定中断源,从而实现对设备的中断服务,可见,中断查询方式,既有中断的特点,又有查询的特点,从外设的角度来看,是靠中断的方式来请求服务,但从CPU的角度来看,是用查询方式来确定发中断请求的中断源。

8259A的编程

1、8259A的端口地址
  • 若8259A与8088CPU配合使用,可直接将A0与CPU的地址信号输出引脚A0相连,8259A的两个端口地址是连续的;
  • 若8259A与8086CPU配合使用,如将8259A的D7~D0接到16位数据总线的低8位,则A0应与CPU的地址总线A1相连,此时地址总线A0应取0;
  • 当地址总线的A1为0时,8259A认为是对偶地址端口进行访问,当地址总线的A1为1时,8259A认为是对奇地址端口进行访问
2、8259A的初始化编程

在使用8259A之前,必须对其进行初始始化编程,以规定它的各种工作方式,并明确其所处的硬件环境。
若CPU用一条输出指令向8259A的偶地址端口写入一个命令字,而且D4=1,则被解释为初始化命令字
ICW1,输出ICW1启动了8259的初始化操作,8259A的内、外部自动产生下列操作:
①边沿敏感电路复位,中断请求的上升沿有效。
②中断屏蔽器IMR清零,即对所有的中断呈现允许状态。
③中断优先级自动按IR0—IR7排列。
④清除特殊屏蔽方式

8259A初始化流程图:
8259A的初始化编程,需要CPU向它输出一个2—4字节的初始化命令字,输出初始化命令字的流程如图所示,其中ICW1和ICW2是必须的,而ICW3和ICW4需根据具体的情况来加以选择。
在这里插入图片描述
(1)ICW1(芯片控制初始化命令字)

初始化命令字1,写入8259A偶地址端口,其各位的功能及含义如下:
在这里插入图片描述

  • ①D0:IC4位,用以决定是否跟ICW4,若D0=1,则说明必须输出ICW4;若D0=0,则说明不需输出ICW4。若ICW4的各位都为0,则说明不需要输出ICW4。
  • ②D1:SNGL位,取决于8259A芯片是单片工作,还是多片级联工作。若8259A单片工作,则D1=1;若8259A多片级连工作,则D1=0。
  • ③D2:ADI位,只用于MCS80/85系统中,规定CALL地址的间隔,在8088/8086系统中,该位无意义。
  • ④D3:LTIM位,规定中断请求信号的引入方式。若D3=1,则表示中断请求信号为高电平有效;若D3=0,则表示中断请求信号为上升沿有效。
  • ⑤D4:恒定为1,为ICW1的特征位。
  • ⑥D5-7:应用于MCS80/85系统,为入口地址中的编程位,在8088/8086系统中,无意义。

(2)ICW2(设置中断类型码初始化命令字)

初始化命令字2,写入8259A奇地址端口
在这里插入图片描述

  • 当8259A用于MCS80/85系统中时,用于确定中断入口地址的高8位(A15—A8);
  • 当8259A用于8088/8086系统中时,ICW2的D7—D3为编程设置位,作为本芯片所管理8级中断类型码的高5位。而D2—D0位为8级中断源所对应的编码(其中:000—IR0,111—IR7)编程设置对其无影响。
    例:若ICW2=45H,则8极中断源的中断类型码分别为IR0为40H,…,IR7为47H

(3)ICW3(标志主片/从片的初始化命令字)

初始化命令字3,写入相应8259A的奇地址端口

  • ICW3用于8259A的级连,8259A最多允许有一片主片和8片从片级连,使能够管理的中断源可以扩充至64个。
  • 若系统中只有一片8259A,则不用ICW3,若由多片8259A级连,则主、从8259A芯片,都必须使用ICW3,主、从8259A芯片中的ICW3的使用方式不同。

对于主8259A芯片,ICW3的格式如下:
在这里插入图片描述

  • 其中每一位对应于一片从8259A芯片,若相应引脚上接有从8259A芯片, 则相应位为1;否则,若相应引脚上未接从8259A芯片,则相应位为0。
    例:ICW3=1110 0010,则说明IR7、IR6、IR5、IR1上连有从片。

对于从8259A芯片,ICW3的格式如下:
在这里插入图片描述

  • 从8259A芯片中的ICW3,只用其中的低3来设置该芯片的标识符,高5位全为0。
  • 在中断响应时,主8259A通过级连线CS2—CS0,依次向各个从8259A芯片输送中断请求的源中,优先级最高的源所对应的标识符,每个从8259A拿到这个标识符之后,与自己在初始化编程时,由ICW3设置的标识符进行比较,当两者相符合时,则该从8259A芯片在第二个中断响应周期,向CPU提供由ICW2设置的8位中断类型码。
    例:若本从片的INT接在主片的IR1引脚上,
    则ICW3=0000 0001

(4)ICW4(方式控制初始化命令字)
初始化命令字4,写入8259A奇地址端口, 只有当ICW1中的D0=1时才需要设置,其各位的功能及含义如下:
在这里插入图片描述

  • ① D0:μPM位,取决于系统中所采用微处理器的类型,若系统中的微处理器为MCS80/85,则D0=0;反之,若系统中的微处理器为8088/8086则D0=1。
  • ② D1:AEOI位,规定结束中断的方式,若D1=1,则为自动中断结束方式;若D1=0,则需要用中断结束命令来结束中断。
  • ③ D2:M/S位,缓冲方式下使用,若D2=1,则表示为主8259A;若D2=0,则表示为从8259A。
  • ④ D3:BUF位,若8259A工作于缓冲方式,则D3=1;否则,D3=0。
  • ⑤ D4:SFNM位:若D4=1,则规定特殊的全嵌套模式;否则,若D3=0则规定普通的全嵌套模式
  • ⑥ D5-D7:恒定为000。
3、8259A的操作编程

对8259A按照上述流程进行初始化编程之后,相应芯片就做好了接收中断的准备,若中断源发生了中断请求,则8259A按照初始化编程所规定的各种方式来处理这种请求。在8259A的工作期间,CPU也可以通过操作命令字,实现对8259A的操作控制,或者改变工作方式,或者实时读取8259A中某些寄存器的内容。8259A有三个操作命令字,我们分别讨论如下:

(1)OCW1( 中断屏蔽操作命令字)
中断屏蔽字,必须写入相应8259A芯片的奇地址端口,其格式如下:
在这里插入图片描述
它的每一位,可以对相应的中断请求输入进行屏蔽,若OCW1的某一位为1,则相应的中断请求输入被屏蔽;反之,则相应的中断请求输入呈现允许状态。
即若Mi=1,则表示8259A对IRi的中断请求呈屏蔽状态;否则若Mi=0,则表示8259A对IRi的中断请求呈允许状态。

(2)OCW2(设置优先级循环方式和中断结束方式的操作命令字)
必须写入相应8259A芯片的偶地址端口,其格式如下:
在这里插入图片描述
其中D4、D3位恒定为0,是OCW2的特征位,R、SL、EOI三位的不同组合,可以组成7种不同的操作命令,用于改变8259A的工作方式。其中三种操作命令字要用到OCW2的低三位,这三位所形成的编码指出操作所涉及到的中断源。

  • R—用于表示优先级是否采用循环方式;
  • SL—用于确定是否需要使用L2、L1、L0来明确中断源;
  • EOI—用于指示OCW2是否作为中断结束命令。
  • L2、L1、L0—当SL=1时,三位的编码用以指示8个中断源之一。

R、SL、EOI共有8种不同的组合形式,其中有7种是相应的控制命令,分别介绍如下:

  • ①0、0、0:为取消自动EOI循环命令;
  • ②1、0、0:为设置自动EOI循环命令;
  • ③0、0、1:为普通的EOI命令,它适用于完全嵌套方式,在中断服务程序结束时,用于清除ISR中最后被置位的相应位。显然,只有在ICW4中的AEOI=0时,才需要在中断服务子程序中向8259A发普通的EOI命令。
  • ④0、1、1:为特殊的EOI命令,与普通的EOI命令的差别在于,它需要利用L2、 L1、L0位明确指出ISR寄存器中需要被复位的位,
  • ⑤1、0、1:为普通循环的EOI命令,它在中断服务程序结束时使用,它使已置位的ISR寄存器中优先级最高的那一位复位,同时赋予刚刚结束中断处理的中断源的中断优先级最低。
  • ⑥1、1、1:为特殊的EOI循环命令,它一方面复位ISR寄存器中由L2、L1、L0位明确指出的那一位;另一方面,使L2、L1、L0位明确指出的那一个中断源的中断优先级最低。
  • ⑦1、1、0:为置位优先权命令,它用以设置优先级特殊循环方式,即利用L2、 L1、L0位明确指出中断优先级最低的中断源。
  • ⑧0、1、0:非操作命令,无实际意义。

(3)OCW3(设置和撤销特殊屏蔽方式;设置中断查询方式;设置对8259A内部寄存器的读出命令)
必须写入相应8259A芯片的偶地址端口。其格式如下:
在这里插入图片描述

  • ① D0:RIS位,用以决定下一个读操作所对应的寄存器,若D0=1,则下一个读操作读取中断服务寄存器ISR的内容;否则,读取中断请求寄存器IRR的内容。
  • ② D1:RR位,决定下一个操作是否读操作,若D1=1,则下一个操作是读操作;否则,下一个操作不是读操作。
  • ③ D2:P位,用于8259的查询中断方式下,若D2=1,表示为查询命令;否则,表示不是查询命令。
  • ④D3—D4:恒定为10,是OCW3的特征位。
  • ⑤D5—D6:决定8259A是否为设置特殊屏蔽模式命令,若D6、D5为11,则为设置特殊屏蔽模式命令;若D6、D5为01,则为撤消特殊屏蔽模式、返回普通屏蔽模式命令;若D6=0,则D5无意义。
  • ⑥D7:无关

以上内容参考自唐老师授课时的PPT。

  • 10
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值