1 / 54

7.5 可编程中断控制器 Intel 8259A

7.5 可编程中断控制器 Intel 8259A. 7.5.1 8259A 的功能 8259A 是可编程中断控制器 (Programmable Interrupt Controller) 芯片, 用于管理和控制 80x86 的外部中断请求,可实现中断优先级判定,提供中断类型号,屏蔽中断输入等功能。 单片 8259A 可管理 8 级中断,若采用级联方式,最多可以用 9 片 8259A 构成两级中断机构,管理 64 级中断。 8259A 是可编程器件,它所具有的多种中断优先级管理方式可以通过主程序在任何时候进行改变或重新组织。. 7.5.2 8259A 的内部结构及外部引脚

apu
Download Presentation

7.5 可编程中断控制器 Intel 8259A

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 7.5 可编程中断控制器Intel 8259A 7.5.1 8259A的功能 8259A是可编程中断控制器(Programmable Interrupt Controller)芯片,用于管理和控制80x86的外部中断请求,可实现中断优先级判定,提供中断类型号,屏蔽中断输入等功能。单片8259A可管理8级中断,若采用级联方式,最多可以用9片8259A构成两级中断机构,管理64级中断。8259A是可编程器件,它所具有的多种中断优先级管理方式可以通过主程序在任何时候进行改变或重新组织。

  2. 7.5.2 8259A的内部结构及外部引脚 1.8259A的内部结构 图7.21 8259A内部结构框图

  3. 中断请求寄存器IRR(Interrupt Request Register),8位,接受并锁存来自IR0~IR7的中断请求信号,当IR0~IR7上出现某一中断请求信号时,IRR对应位被置1;中断屏蔽寄存器IMR(Interrupt Mask Register),8位,若IRR中记录的各级中断中有任何一级需要屏蔽,只要将IMR的相应位置1即可,未被屏蔽的中断请求进入优先权判别器;中断服务寄存器ISR(In-Service Register),8位,保存当前正在处理的中断请求,例如,如果ISR的D2=1,表示CPU正在为来自IR2的中断请求服务;优先权判别器PR(Priority Resolver)能够将各中断请求中优先级最高者选中,并将ISR中相应位置1。若某中断请求正在被处理,8259A外部又有新的中断请求,则由优先权判别器将新进入的中断请求和当前正在处理的中断进行比较,以决定哪一个优先级更高。若新的中断请求比正在处理的中断级别高,则正在处理的中断自动被禁止,先处理级别高的中断,由PR通过控制逻辑向CPU发出中断申请INT。

  4. CPU收到中断请求后,若IF=1,则CPU完成当前指令后,响应中断,即执行两个中断响应总线周期,在 引脚上发出两个负脉冲。8259A收到第一个负脉冲后,使IRR锁存功能失效,不接受IR0~IR7上的中断请求信号;直到第二个负脉冲结束后,才又使IRR锁存功能有效,并清除IRR的相应位,使ISR的对应位置1,以便为优先级裁决器以后的裁决提供依据。收到第二个负脉冲后,8259A把当前中断的中断类型号送到D7~D0,CPU根据此类型号进入相应的中断服务程序。在中断服务程序结束时向8259A发中断结束命令,该命令将ISR寄存器的相应位清0,中断处理结束。

  5. 数据总线缓冲器是8259A与系统之间传送信息的数据通道。数据总线缓冲器是8259A与系统之间传送信息的数据通道。 读/写控制逻辑包含了初始化命令字寄存器和操作命令字寄存器。其功能是确定数据总线缓冲器中数据的传输方向,选择内部的各命令字寄存器。当CPU发读信号时将8259A的状态信息放到数据总线上;当CPU发写信号时,将CPU发来的命令字信息送入指定的命令字寄存器中。 级联缓冲/比较器用来存放和比较在系统中用到的所有8259A的级联地址。主控8259A通过CAS0、CAS1和CAS2发送级联地址,选中从控8259A。

  6. 图7.22 8259A引脚

  7. 2.8259A的外部引脚 8259A采用28脚双列直插封装形式,如图7.22所示。 CS:片选信号,输入,低电平有效,来自地址译码器的输出。只有该信号有效时,CPU才能对8259A进行读/写操作。 WR:写信号,输入,低电平有效,通知8259A接收CPU从数据总线上送来的命令字。 RD:读信号,输入,低电平有效,用于读取8259A中某些寄存器的内容(如IMR、ISR或IRR)。

  8. D7D0:双向、三态数据线,接系统数据总线的D7D0,用来传送控制字、状态字和中断类型号等。 IR7IR0:中断请求信号,输入,从I/O接口或其他8259A(从控制器)上接收中断请求信号。在边沿触发方式中,IR输入应由低到高,此后保持为高,直到被响应。在电平触发方式中,IR输入应保持高电平。 INT:8259A向CPU发出的中断请求信号,高电平有效,该引脚接CPU的INTR引脚。 INTA:中断响应信号,输入,接收CPU发来的中断响应脉冲以通知8259A中断请求已被响应,使其将中断类型号送到数据总线上。

  9. CAS0CAS2:级联总线,输入或输出,用于区分特定的从控制器件。8259A作为主控制器时,该总线为输出,作为从控制器时,为输入。 SP/EN:从片/允许缓冲信号,输入或输出,该引脚为双功能引脚。在缓冲方式中(即8259A通过一个数据总线收发器与系统总线相连),该引脚被用做输出线,控制收发器的接收或发送;在非缓冲方式中,该引脚作为输入线,确定该8259A是主控制器(SP/EN=1)还是从控制器(SP/EN=0)。8259A的级联方式如图7.23所示。

  10. A0为地址输入信号,用于对8259A内部寄存器端口的寻址。每片8259A对应两个端口地址,一个为偶地址,一个为奇地址,且偶地址小于奇地址。在与8088系统相连时,可直接将该引脚与地址总线的A0连接;与8086系统连接时要特别注意,因为8259A只有8根数据线,8086有16根,8086与8259A的所有数据传送都用16位数据总线的低8位进行。要保证所有传送都用总线的低8位,最简单的方法是将8086地址总线的A1和8259A的A0端相连,这样,就可以用两个相邻的偶地址作为8259A的端口地址,从而保证用数据总线的低8位和8259A交换数据。

  11. 在这种情况下,从CPU的角度来看,对两个端口寻址时,使A0总是为0,而A1为1或者为0,即这两个端口用的是相邻的两个偶地址;从8259A的角度来看,只有地址总线的A1和8259A的A0端相连,地址总线的A0未与8259A相连,所以,当地址总线的A1为0时,8259A认为是对偶地址端口进行访问,当地址总线的A1为1时,8259A认为是对奇地址端口进行访问,从而将两个本来相邻的偶地址看成是一奇一偶两个相邻地址。这样,又正好符合了8259A对端口地址的要求。因此,在实际的8086系统中,总是给8259A分配两个相邻的偶地址,其中,一个为4的倍数,对应于A1=0,A0=0,并使这个地址较低;另一个为2的倍数,对应于A1=1,A0=0,并使这个地址较高。

  12. 7.5.3 8259A的工作方式 1.中断优先级管理方式 1) 全嵌套方式 全嵌套方式也称固定优先级方式。在这种方式下,由IR端引入的中断请求具有固定的优先级,IR0最高,IR7最低。在对8259A初始化后若没有设置其他优先级方式,则默认为全嵌套方式。

  13. 当一个中断请求被响应时,ISR中的对应位ISn被置1,8259A把中断类型号放到数据总线上,然后进入中断服务程序。一般情况下(除中断自动结束方式外),在CPU发出中断结束命令(EOI)前,此对应位一直保持为1,以封锁同级或低级的中断请求,但并不禁止比本级优先级高的中断请求,以实现中断嵌套。

  14. 2) 特殊全嵌套方式 在主从结构的8259A系统中,将主片设置为特殊全嵌套方式,可以在处理某一级中断时,不但允许优先级更高的中断请求进入,也允许同级的中断请求进入。

  15. 3) 优先级自动循环方式 采用这种方式,各中断源优先级是循环变化的,主要用在系统中各中断源优先级相同的情况下。一个设备的中断服务完成后,其优先级自动降为最低,而将最高优先级赋给原来比它低一级的中断请求。开始时,优先级队列还是IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7(IR0最高,IR7最低);若此时出现了IR0请求,响应IR0并处理完成后,队列变为IR1,IR2,IR3,IR4,IR5,IR6,IR7,IR0;若又出现了IR4请求,处理完IR4后,队列变为IR5,IR6,IR7,IR0,IR1,IR2,IR3,IR4(IR5变为最高优先级)。

  16. 4) 优先级特殊循环方式 该方式与优先级自动循环方式相比,只有一点不同,即可以设置开始的最低优先级。例如,最初设定IR4为最低优先级,那么IR5就是最高优先级,而优先级自动循环方式中,最初的最高优先级一定是IR0。

  17. 5) 查询方式 这种方式下,CPU的IF位为0,禁止外部的中断请求。外设仍然向8259A发中断请求信号,要求CPU服务,此时,CPU需要用软件查询方法来确认中断源,从而实现对外设的服务。CPU首先向8259A发查询命令,紧接着执行一条输入指令(IN),从8259A的偶地址读出一个字节的查询字,由该指令产生的RD信号使ISR的相应位置1。CPU读入查询字后,判断其最高位,若最高位为1,说明8259A的IR端已有中断请求输入,此时该查询字的最低三位组成的代码表示了当前中断请求的最高优先级,CPU据此转入相应的中断服务程序。

  18. 2.中断屏蔽方式 1) 普通屏蔽方式 通过对中断屏蔽寄存器(IMR)的设定,实现对中断请求的屏蔽。中断屏蔽寄存器的每一位对应了一个级别的中断请求,当某一位为1时,与之相应的某一级别的中断请求被屏蔽。CPU在响应某一中断请求时,还可以在主程序或中断服务程序中对IMR的某些位置1,以禁止高级别中断的进入。

  19. 2) 特殊屏蔽方式 当一个优先级较高的中断请求正在被处理时,若设置了特殊屏蔽方式,则允许优先级较低的中断进入正在处理的高级别中断。

  20. 3.中断结束方式 1) 中断自动结束方式 该方式在第二个INTA负脉冲的后沿即完成对应的ISR位的复位。注意,该方式是在中断响应后,而不是在中断处理结束后将ISR位清0。这样,在中断处理过程中,8259A中就没有“正在处理”的标识。此时,若有中断请求出现,且IF=1,则无论其优先级如何,都将得到响应。尤其是当某一中断请求信号被CPU响应后,如不及时撤消,就会再次被响应(即二次中断)。所以,中断自动结束方式适合于中断请求信号的持续时间有一定限制以及不出现中断嵌套的场合。

  21. 2) 一般中断结束方式 该方式用于全嵌套方式下的中断结束。CPU在中断服务程序结束时,向8259A发常规中断结束命令,将8259A的中断服务寄存器中最高优先级的IS位清0。在全嵌套方式下,ISR中最高优先级的IS位,对应于当前正在处理的中断(即最后一次被响应和处理的中断),将其清0,就相当于结束了当前正在处理的中断。

  22. 3) 特殊中断结束方式(SEOI) 在非全嵌套方式下,根据ISR的内容无法确定最后所响应和处理的是哪一级中断。这种情况下,就必须用特殊的中断结束方式,即在程序中要发一条特殊中断结束命令,该命令指出了要清除ISR中的哪一位。 另外,还要注意在级联方式下,一般不用中断自动结束方式,而是用一般结束方式或特殊结束方式。在中断处理程序结束时,必须发两次中断结束命令,一次是发往主片,另一次发往从片。

  23. 4.中断触发方式 1) 电平触发方式 该方式以IR端上出现的高电平作为中断请求信号。请求一旦被响应,该高电平信号应及时撤除。 2) 边沿触发方式 该方式以IR端上出现由低电平向高电平的跳变作为中断请求信号,跳变后高电平一直保持,直到被响应。

  24. 5.与系统总线的连接方式 1) 缓冲方式 缓冲方式主要用于多片8259A级联的大系统中。在缓冲方式下,8259A通过总线收发器(如8286)和数据总线相连。8259A的SP/EN作为输出(EN有效)。 2) 非缓冲方式 非缓冲方式主要用于单片8259A或片数不多的8259A级联的系统中。该方式下,8259A直接与数据总线相连,8259A的SP/EN作为输入(SP有效)。只有单片8259A时,SP/EN端必须接高电平;有多片8259A时,主片的SP/EN端接高电平,从片的该引脚接低电平。

  25. 7.5.4 8259A的编程 8259A是可编程的中断控制器,它的工作状态和操作方式是由CPU通过命令字进行控制的。8259A有两类命令字——初始化命令字ICW(Initialization Command Words)和操作命令字OCW(Operation Command Words)。相应地,在8259A的控制部分有7个CPU可访问的寄存器,这些寄存器分成两组:一组用做存ICW,另一组存OCW。当计算机刚启动时,用初始化程序设定ICW,即由CPU按次序发送24个不同格式的ICW,用来建立起8259A操作的初始状态,此后的整个工作过程中该状态保持不变。相反,操作命令字(OCW)用于动态控制中断处理,是在需要改变或控制8259A操作时随时发送的。每片8259A有2个片内地址A0=0和A0=1,所有的命令字都是通过这两个端口来发送的。注意,当发出ICW或OCW时,CPU中断申请引脚INTR应关闭(使用CLI指令)。

  26. 1.初始化命令字 1)  ICW1 ICW1主要用于设置工作方式,其格式及各位的定义如图7.24所示。 图7.24 ICW1的作用

  27. 对A0=0的端口写入一个D4=1的数据,表示初始化编程开始。对A0=0的端口写入一个D4=1的数据,表示初始化编程开始。 D4:特征位,必须为1; D3:LTIM位,设置中断请求信号的触发方式,0为边沿触发,1为高电平触发。 D1:SGNL位,是否工作在单片方式,0为多片级联,1为单片。 D0:IC4 位,是否有ICW4,0表示后面不需设置命令字ICW4,1表示后面还需要设置ICW4。 D2和D7D5这4位在仅对8080/8085系统有意义,8086/8088系统中这4位不用,通常置为0。

  28. 2)  ICW2 ICW2用于设置中断类型号,写入A0=1的端口,其格式如图7.25所示。 图7.25 ICW2的作用

  29. 在8086/8088系统中,只设置D7D3,即只需设置中断类型号的高5位,编程时D2D0的值可任意设定(通常设为0),D2D0的实际内容由8259A根据中断请求来自IR0IR7的哪一个输入端,自动填充为000111中的某一组编码,与高5位一同构成8位的中断类型号。例如,在PC/XT中ICW2为00001000B,则对于从IR0、IR1、IR2、IR3、IR4、IR5、IR6和IR7上引入的各中断请求,其相应的中断类型号为08H、09H、0AH、0BH、0CH、0DH、0EH和0FH。

  30. 3)  ICW3 ICW3用于设置级联,写入A0=1的端口,格式如图7.26所示。 图7.26 ICW3的作用

  31. 只有当系统中有级联(ICW1的SNGL位为0)时,才写入ICW3。只有当系统中有级联(ICW1的SNGL位为0)时,才写入ICW3。 对于主片,ICW3的S0S7指明了IR0IR7各引脚连接从片的情况,置1的位表示对应的引脚有从片级联。例如,若主片ICW3的内容为07H(00000111B)时,说明主片的IR0、IR1、IR2上连有从片。对于从片,ICW3的D7D3不用,置0即可;用D2D0表示与主片的对应引脚级联,例如,若某从片ICW3的内容为07H,说明该从片的INT引脚与主片的IR7相连。

  32. 4)  ICW4 ICW4用于设置8259A的工作方式,写入A0=1的端口,格式如图7.27所示。ICW1的IC4位为1时,才写入ICW4。 图7.27 ICW4的作用

  33. D4:SFNM位,设置中断的嵌套方式,0为一般嵌套方式,1为特殊的全嵌套方式。 D3:BUF位,若该位为1,则8259A工作于缓冲方式,8259A通过数据总线收发器和总线相连,SP/EN引脚为输出;该位为0,8259A工作于非缓冲方式,SP/EN引脚为输入,用做主片、从片选择端。 D2:M/S位,当D3即BUF位为1时,该位才有效,用于主片/从片选择,0表示本片8259A为从片,1表示本片8259A为主片;当BUF位为0时,该位无效,可设为任意值。

  34. D1:AEOI位,设置结束中断方式。0表示中断正常结束,靠中断结束指令清除ISR相应位;1表示自动结束中断,即CPU响应中断后,立即自动清除ISR相应位。 D0:μPM位,设置微处理器类型。0表示系统采用8080/8085微处理器;1表示系统采用8086/8088微处理器。

  35. 2.初始化编程 8259A初始化流程图如图7.28所示。任何一种8259A的初始化都必须发送ICWl和ICW2,只有在ICWl中指明需要ICW3和ICW4以后,才发送ICW3和ICW4。一旦初始化以后,若要改变某一个ICW,则必须重新再进行初始化编程,不能只是写入单独的一个ICW。 例如,PC/AT机中8259A的主片定义为:上升沿触发、在IR2级联从片、有ICW4、非AEOI方式、中断类型号08H0FH、一般的中断嵌套方式、端口地址是20H、21H;从片定义为:上升沿触发、级联到主片的IR2、有ICW4、非AEOI方式、中断类型号为70H78H、一般的中断嵌套方式、端口地址是A0H、A1H。初始化过程如下:

  36. 初始化主片 初始化从片 MOV AL,11H MOV AL,11H OUT 20H,AL OUT 0A0H,AL MOV AL,08H MOV AL,70H OUT 21H,AL OUT 0A1H,AL MOV AL,04H MOV AL,02H OUT 21H,AL OUT 0A1H,AL MOV AL,01H MOV AL,01H OUT 21H,AL OUT 0A1H,AL

  37. 图7.28 8259A初始化顺序

  38. 3.操作命令字 系统初始化完成以后,可以在应用程序中随时向8259A送操作命令字,以改变8259A的工作方式,读出8259A内部寄存器的值等。 1) OCW1 OCW1的功能是设置和清除中断屏蔽寄存器的相应位,写入A0=1的端口,格式如图7.29所示。

  39. 图7.29 OCW1的作用 MX=1表示屏蔽中断源IRX;MX=0表示来自IRX的中断请求得到允许。例如,若OCW1=03H,说明IR0和IR1上的中断请求被屏蔽。

  40. 2) OCW2 OCW2用于设置优先级循环方式和中断结束方式,写入A0=0的端口,格式如图7.30所示。 D4和D3位是特征位,D4D3=00表示写入的是OCW2。 D7:R位,表示优先级是否循环。为1,采用优先级循环方式;为0,则为非循环方式。 D6:SL位,表示L2L0是否有效。为1,L2L0位有效;为0,则L2L0位无效。 D5:EOI位,中断结束命令位。为1时,OCW2用做结束中断命令;为0时,OCW2用做设定优先级循环方式的命令字。

  41. 图7.30 OCW2的作用

  42. D2、D1、D0:L2L0位,只有SL位为1时,这三位才有意义。L2L0位有三个作用:一是当OCW2给出特殊中断结束命令时,L2、L1和L0三位的编码指出了要清除中断服务寄存器ISR中的哪一位;二是当OCW2给出结束中断且指定新的最低优先级命令时,将ISR中与L2、L1和L0编码值对应的位清0,并将当前系统最低优先级设为L2、L1和L0指定的值;三是当OCW2给出优先级特殊循环命令时,由L2、L1和L0的编码指定循环开始的最低优先级。

  43. 3)OCW3 OCW3的功能有三个方面:设置和撤消特殊屏蔽方式、设置中断查询方式以及设置对8259A内部寄存器的读出。OCW3写入A0=0的端口,格式如图7.31所示。 D4和D3位是特征位,D4D3=01表示写入的是OCW3。 D7:无关位,可设为任意值。 D6:ESMM位,即允许特殊屏蔽方式位。该位为1时SMM位才有意义。

  44. 图7.31 OCW3的作用

  45. D5:SMM即特殊屏蔽方式位。为1,表示设置特殊屏蔽方式;为0,表示清除特殊屏蔽方式。 D2:P位,为1时表示该OCW3用做查询命令(查询方式在前面已经介绍过,在此不再赘述);为0表示非查询方式。 D1和D0:RR位和RIS位。这两位的组合用于指定对中断请求寄存器(IRR)和中断服务寄存器(ISR)内容的读出。D1D0=10时,表明紧接着要读出IRR的值;D1D0=11时,表明紧接着要读出ISR的值。

  46. 4.8259A的读操作 在PC机中8259A的端口地址为20H和21H。常用的读操作有如下几种。 (1) 读出IRR的值:先向20H端口写0AH(OCW3 RR=1、RIS=0),再读20H端口。 例如: MOV AL,0AH ;OCW3=0AH OUT 20H,AL ;OCW3写入8259A IN AL,20H ;读出IRR 内容

  47. (2) 读出ISR的值:先向20H端口写0BH(OCW3 RR=1、RIS=1),再读20H端口。 例如: MOV AL,0BH ;OCW3=0BH OUT 20H,AL ;OCW3写入8259A IN AL,20H ;读出ISR 内容

  48. (3) 读查询字(读出最高级别的中断请求IR):先向20H端口写0CH(OCW3 P=1),再读20H端口。例如: MOV AL,0CH ;OCW3=0CH OUT 20H,AL ;OCW3写入8259A IN AL,20H ;读出查询字内容

  49. (4) 读IMR的值。随时可用奇地址读IMR的值,并对其作修改。 • 例1: • IN AL,21H ;读IMR • AND AL,7FH ;开放IR7中断 • OUT 21H,AL ;修改IMR • 例2: • IN AL,21H ;读IMR • OR AL,80H ;关闭IR7中断 • OUT 21H,AL ;修改IMR

  50. 5.8259A应用举例 图7.32 8259A 在PC/XT机中的连接

More Related