可编程中断控制器8259

内部结构

8059内部结构

  1. IRR — 中断请求寄存器,保存 8个输入端IR0~IR7的中断申请状态,输入可高电平有效,也可上升沿有效

  2. ISR — 中断服务寄存器,保存CPU正在处理的中断请求

  3. IMR — 中断屏蔽寄存器,对中断申请进行屏蔽控制

  4. 中断优先级分析器决定中断申请的优先级
    把初始化命令字和操作命令字结合进行设置,可以有四种优先级管理方式

    • 全嵌套方式(中断请求按优先级0-7进行处理,0级中断的优先级最高)
    • 自动循环方式(优先级相等。这种方式下,优先级队列是在变化的,一个设备受到中断服务后,它的优先级自动降为最低)
    • 特殊循环方式(设置最低优先级)
    • 特殊的全嵌套方式(可在级联时使用,与全嵌套方式基本相同,不过允许同级中断)
  5. 控制逻辑

    • 初始化命令寄存器组:ICW1~ICW4
    • 操作命令寄存器组: OCW1~OCW3
    • INT 中断申请输出,高电平有效,可连接8086 INTR引脚
    • $\overline{INTA}$ 中断响应输入,接收8086发出的中断响应信号,有效时8259应输出中断类型码
    • D7~D0 双向三态数据线,传送数据
    • $\overline{RD}$ 读信号,低电平有效
    • $\overline{WR}$ 写信号,低电平有效
    • $\overline{CS}$ 片选信号,低有效,给8259分配地址
    • A0 用于选择8259内部不同的寄存器。
    • CAS2~CAS0 级联信号线,当8259为主片时为输出,从片时为输入
    • $\overline{SP}/\overline{EN}$ 在非缓冲工作方式时,用作输入,决定8259A为主片还是从片,主片接+5V,从片接地;在缓冲工作方式时,用作输出,由它打开总线缓冲器

初始化命令字

初始化命令字一般在初始化8259时才写入,而且写入有严格的顺序,先写ICW1,最后写ICW4

  1. ICW1(芯片控制)
    ICW1
A0 D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 1 LTIM 0 SNGL IC4
A0=0,D4=1 表示对ICW1编程
  • D0(IC4)
    D0=1 需要ICW4
    D0=0 不需要ICW4
  • D1(SNGL)
    D1=1 为单片8259工作方式
    D1=0 为级联工作方式,此时要用ICW3指明级联端
  • D2(ADI)
    指明8080/8085系统中地址间距,
    8086系统不用
  • D3(LTIM)
    D3=1 中断请求是电平触发方式
    D3=0 上升沿触发方式
  • D5D7(A5A7)
    8080/8085系统中断服务程序页面地址,
    8086系统不用
  1. ICW2(类型)
    ICW2
A0 D7 D6 D5 D4 D3 D2 D1 D0
1 T7 T6 T5 T4 T3 T2 T1 T0
A0=1,跟在ICW1后表示对ICW2编程
  • A15A8 为8080/8085系统中页面地址高8位~~
  • T7~T3 为8086系统中的中断类型码的高5位,低3位根据申请端自动填充
  1. ICW3(主/从)
    ICW2

A0||D7|D6|D5|D4|D3|D2|D1|D0
-|-|-|-|-|-|-|-|-|-|-
1|主片|S7|S6|S5|S4|S3|S2|S1|S0
1|从片|0|0|0|0|0|ID2|ID1|ID0
A0=1,且ICW1的D1(SNGL)=0,跟在ICW2后表示对ICW3编程

  • 主片 Si=1 表示第IRi引脚上连接有从片
  • 从片 ID2ID0对应从片的识别码,即表明从片连接到主片的第几个输入引脚上。CPU发出第一个中断响应负脉冲$\overline{INTA}$时,主片通过CAS2 ~CAS0送出识别码通知有中断请求的从片,每个从片将CAS2CAS0上信号与自己内部的识别码(ID2~ID0)相比较,若相同,则在第二个$\overline{INTA}$信号到来时送出自己的中断类型码。
  1. ICW4(方式控制)
    ICW2
A0 D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 SFNM BUF $M/\overline{S}$ AEOI 1
A0=1,且ICW1的D0=1,跟在其他初始化字后表示对ICW4编程
  • D0(μpm)
    D0=1 为非8位处理器体系
    D0=0 为8位处理器体系
  • D1(AEOI)
    D1=1 自动结束中断方式,在第二个$\overline{INTA}$清ISR(中断服务寄存器)中的对应位
    D1=0 非自动结束中断方式,中断结束时发EOI命令清ISR中的对应位
  • D2($M/\overline{S}$)
    在缓冲方式下(BUF=1),选择主片和从片,$M/\overline{S}$=1为主片,$M/\overline{S}$=0为从片。
    在非缓冲方式下,则$M/\overline{S}$不起作用,可为1,也可为0. 由$\overline{SP}/\overline{EN}$引脚设定主片和从片(接高电平为主片,接低电平为从片)。
  • D3(BUF)
    D3=1 为缓冲工作方式,$\overline{SP}/\overline{EN}$为缓冲选通信号。
    D3=0 为非缓冲工作方式。
  • D4(SFNM)
    D4=1 为特殊全嵌套方式,此时允许同级中断再次进入,一般用于多片级联方式
    D4=0 为普通全嵌套方式,禁止同级中断再次进入。

操作命令字

  1. OCW1(IMR)
    ICW2
    A0=1 表示设置OCW1

    • Mi=1 表示屏蔽IRi输入中断请求
  2. OCW2
    ICW2
    A0=0,且D4D3 = 00,表示对OCW2编程

    • R 优先权循环状态
      R=1 优先权自动循环
      R=0 优先权不循环
    • SL 设定标志
      SL=1 L2、L1、L0有效
      SL=0 L2、L1、L0无效
    • EOI 中断结束命令标志
      EOI=1,非自动结束方式时清ISR中对应位
      一般EOI指令(普通结束指令)为
      MOV AL, 20H
      OUT 20H, AL
    • L2 L1 L0 指明中断号或最低优先权
      R-SL-EOI
  3. OCW3
    ICW2
    A0=0,且D4D3 = 01,表示对OCW3编程

ESMM SMM
1 1 设置特殊屏蔽,无优先级,未屏蔽中断申请均可进入
1 0 取消特殊屏蔽
0 × 无操作
  • P=1 ,设置8259A为查询工作方式,此时8259A不发INT信号,CPU通过查询指令决定服务程序
    查询得到格式如下表所示
    image
    I=1 表示有中断请求
    W2 W1 W0为当前最高优先级的中断请求中断号

  • P=0,由RR和RIS设置下一个读取的寄存器

RR RIS
1 0 在下一个A0=0端口读IRR(中断请求寄存器)
1 1 在下一个A0=0端口读ISR(中断服务寄存器)