您好,欢迎来电子发烧友网! ,新用户?[免费注册]

当前位置:电子发烧友网 > 图书频道 > 电子 > 《计算机组成原理与汇编语言》 > 第5章 输入输出技术

第4节 中断控制器8259

5.2.3 中断控制器8259


·弄清芯片外部引线以便将它们连接到系统中;
·了解它们的工作方式和工作特点,以便有选择地应用它们的某些工作方式;
·理解芯片内部的控制字、命令字,以便对它们进行编程;
·了解每块芯片所占的地址,以便具体进行连接;
·在上述基础上实现对芯片的初始化及具体应用。

下面我们就开始具体介绍可编程中断控制器8259。

   1. 8259的外部引线

     可编程中断控制器8259外部引线图如图5.15所示。
 
      D0-D7为双向数据线,与系统总线的数据线相连接。

       WR、RD 为写和读控制信号,与系统总线的读写信号相连接。

       CS为片选信号,只有CS 为低电平时,才能实现CPU对8259的写或读操作。 

       A0是8259内部寄存器的选择信号。 

       INT为8259的中断请求输出信号,可直接接到CPU的INTR输入端。

       INIT为中断响应输入信号。 

       CAS0~CAS2为级联控制线。

       SP/EN 为双功能引线。

      IR0~IR7中断请求输入端。
 
   8259的内部有多个寄存器,其中包括:

   中断请求寄存器(IRR),其内部保存着所有外部中断源IR0~IR7的中断请求状态。
 
   中断服务寄存器(ISR),用来保存所有正在服务的中断源。当8259收到中断结束命令时,其寄存的状态进行调整。

   中断屏蔽寄存器(IMR),保存着被屏蔽的所有中断源。其屏蔽功能可用命令修改。

2. 8259的工作方式

       通过编程,可以设置8259的不同工作方式,以便适应不同环境的需要。这也说明8259工作的灵活性和适应性。

   (1) 8080/85与8086/88工作模式
   (2) 特殊屏蔽方式

    在正常情况下,当一个中断请求被响应时,8259将禁止所有同级及更低优先级中断请求,这就称为一般屏蔽方式。
     
   但是,在一特殊情况下,希望也允许较低优先级的中断请求产生中断。这时,可用特殊屏蔽方式。要做到这一点,需要利用后面将要提到的8259初始化命令字。

    一个特殊屏蔽方式的示意图如图5.19所示,其中SMM等需要参看后面的命令字的定义。

(3) 中断结束

   8259中,中断结束是利用复位ISR中的相应位来实现的。

   具体有两种方法:

   ① 自动结束。
 
   ② 利用命令结束。
   (a)一般中断结束命令(EOI)。
   (b)特殊中断结束命令(SEOI)。

(4)优先级循环

   根据8259命令字的规定,它有两种优先级规定:循环优先级和固定优先级。
   
   循环优先级有3个结构:自动优先级循环用于中断源具有相等优先级的情况。

(5)查询状态

   通过将操作命令字OCW3中的P位置1(后面要提到),可以查询8259的状态。

3. 8259的内部控制字


(1)初始化命令字

   ①初始化命令字ICW1。在A0=0,D4=1时为写入,各位的功能见图5.21。
   ②初始化命令字ICW2。 
   ③初始化命令字ICW3。
   ④初始化命令字ICW4。 

 

   (2) 操作命令字OCW

       ①操作命令字OCW1。

       ②操作命令字OCW2。 

   R为优先级循环控制位,R=1为循环优先级;R=0为固定优先级。 L2、L1、L0为系统最低优先级编码,用它们来指定哪个IR优先级最低。

   EOI是中断结束命令。该位为1时,将复位现行中断的中断服务寄存器中的相应位。在非自动EOI的情况下,需要用OCW2来复位当前最高优先级所对应的位。

   SL用于选择L2、L1、L0编码。当SL=1时,L2~L0编码有效。SL=0时,L2~L0编码无效。除上述所说的外,R,SL,EOI编码功能见图5.26和表5.1。

     ③操作命令字OCW3。OCW3可用以设置查询方式、特殊屏蔽方式以及读8259的中断请求寄存器IRR、

      中断服务寄存器ISR、中断屏蔽寄存器IMR的当前状态。OCW3各位功能如图5.27所示。

   4. 8259的寻址与连接

    为了使8259按照设计者的要求工作,就需要利用软件将初始化命令及操作命令字写入8259;

    另一方面为了知道8259的工作状态,又必须将其内部的一些寄存器的内容读出来。对寄存器和命令的访问控制如表5.2所示。

 

 

 

5. 8259的初始化使用

   下面是8259的初始化程序:

   SET59A:MOV DX,0FF00H ;8259A的地址,A0=0

   MOVAL,13H; ICW1,LT1M=0,单片,需要ICW4 

   OUT DX,AL

   MOV DX,0FF02H;8259地址,此时A0=1

   MOV AL,48H;ICW2,中断向量码

   OUT DX,AL
   MOV AL,03H ;ICW4,8086/88模式,自动EOI,非缓冲

   OUT DX,AL;方式,一般全嵌套

   MOV AL,0E0H; OCW1,屏蔽IR5,IR6,IR7

   因为未用到这3个中断输入 

   OUT DX,AL
   

 

 


   MOV DX,0FF02H

   MOV AL,0;取OCW1为00H

   OUT DX,AL;取00H写入IMR

   IN AL,DX;读IMR

   OR AL,AL;判断其内容为00H否

   JNZ IMERR

   MOV AL,0FFH

   OUT DX,AL

   IN AL,DX

   ADD AL,1

   JNZ IMERR
      在读IMR时,可直接在对应A0=1的地址上读出;但要读IRR或ISR时,则必须先向8259写入一个命令字OCW3。以下是读出ISR内容的一段程序:

   MOV DX,0FF00H ;对应A0=0

   MOV AL,0BH ;0BH为OCW3

   OUT DX,AL ;OCW3写入8259

   IN AL,DX ;读出ISR的内容,放在AL中

   具体做法如下:

   (1) 编写20ms中断服务程序

   CLOCK PROC FAR

   PUSH AX

   PUSH SI

   MOV AX,SEGTIMER

   MOV DS,AX

   MOV SI,OFFSETTIMER

   MOV AL,[SI] ;取50次计数

   INC AL

   MOV[SI],AL

   CMP AL,50 ;判1s到否?

   JNE TRNED

   MOV AL,0

   MOV [SI],AL 

   MOV AL,[SI+1] ;取60s计数

   ADD AL,1

   DAA

   MOV [SI+1],AL 

   CMP AL,60H ;判1min到否?

   JNE TRNED

   MOV AL,0

   MOV [SI+1],AL 

   MOVAL, [SI+2] ;取60min计数

   ADD AL,1

   DAA

   MOV [SI+2],AL

   CMP AL,60H ;判1h到否?

   JNE TRNED

   MOV AL,0

   MOV [SI+2],AL

   MOV AL,[SI+3];取小时计数
   ADD AL,1

   DAA

   MOV [SI+3],AL

   CMP AL,24H

   JNE TRNED

   MOV AL,0

   MOV [SI+3],AL

   TRNED:POP SI

   POP AX

   STI

   IRET

   ENDP


   (2)确定中断向量,初始化8259


   (3)初始化中断向量表


   (a)直接编程初始化中断向量表

   INTITB:MOV AX,0000H

   MOV DS,AX

   MOV SI,0120H

   MOV DX,OFFSETCLOCK

   MOV [SI],DX

   MOV DX,SEGCLOCK

   MOV [SI+2],DX
(b) DOS系统调用

   若在DOS下工作,则可采用DOS系统调用:

   INT 21H的功能25H

   25H→AH

   中断向量码→AL

   中断服务程序段:偏移量→DS:DX
 程序如下: 

   MOV AH,25H ;功能号

   MOV AL,48H ;中断向量码

   MOV DX,SEGCLOCK

   MOV DS,DX

   MOV DX,OFFSETCLOCK

   INT21H
  6. 8259的级联

     当微型机系统中的中断源较多,一片8259不能解决问题时,可以采用级联工作方式。这时指定一片8259为主控芯片,它的INT接到CPU上而其余的8259芯片均作为

从属芯片,其INT输出接到主控芯片的IR输入端。由于主控8259有8个IR输入端,故一个主控8259可以连接8片从属8259,最多允许有64个IR输入。