12 可编程中断控制器

学习笔记
作者: MingXiao

12.1 中断

作用

  • 使CPU和外设在部分时间并行工作,提高CPU效率
  • 便于实时数据处理
  • 便于发现故障和处理
  • 调用中断例程,方便程序编写

外部中断

  • 不可屏蔽中断(NMI),如I/O校验位错误,掉电等紧急事件,不受IF=0的影响
  • 可屏蔽中断由8259A的INT引脚输出,连接到CPU的INTR,受IF=0的屏蔽

中断优先级

由高到低为

  1. 除法错(INT 0),INT N(N号中断),INTO(溢出错误),都是内部中断
  2. NMI
  3. INTR
  4. 单步中断-t

中断嵌套

当CPU正在处理中断时,有更高优先级的中断被挂起,CPU产生中断嵌套;深度没有限制,但是有堆栈的物理限制

如何实现?

  1. 进入中断后硬件会自动关闭中断
  2. 此时需要使用STI指令打开中断,才能嵌套
  3. 中断结束时,用EOI指令结束中断,用IRET返回到上一级中断/原程序

12.2 8259A的结构和功能

  • IR7-IR0:8级中断请求输入,优先级为IR0 - IR7,多片8259A级联时,从片的INT连接到IRi

  • INT:高电平有效,连接到CPU的INTR

  • INTA:中断响应应答输入,接收到CPU第二个INTA信号时将最高级别的中断请求码送出

  • A0:决定IO地址

  • CAS2-CAS0:级联信号引脚,主片输出,从片输入

  • SP/EN:非缓冲下,主片为1,从片为0;缓冲模式,EN作为外部数据总线缓冲器的启动信号

    缓冲模式:多片时大部分工作于此,少部分可以非缓冲

8259A内部存在4个8bit寄存器,分别是

  1. 中断请求寄存器(IRR),当外部IRi存在请求时,对应的位置为1,响应完为0,可以允许多个中断请求
  2. 中断屏蔽寄存器(IMR),存放屏蔽信息,当对应位置为1时,不响应IRi
  3. 中断服务寄存器(ISR),保存正在处理的中断,IRi被处理时,对应位置为1;多重中断时多个位置为1
  4. 优先级判决器(PR,resolver),判断IRi的优先级,还会判断新的中断能否打断正在执行的中断

由8259A引入的中断类型码

一共8个8bit中断类型码,其中D7-D3由用户编程决定,D2D1D0IRi决定

8259A设置优先级的方式

  • 全嵌套方式
    • IRi具有固定的优先级,初始化后默认进入此方式
      • 中断响应后,ISR对应的bit置1,保持到终端结束,即使有嵌套,类型码N由DataBus送入CPU
    • CPU发出EOI指令,对应的ISR复位(置0);也有自动中断命令AEOI,看芯片设置
    • 高级中断可以嵌套在低级中断中
  • 特殊嵌套方式:允许同级中断嵌套

中断屏蔽方式

  • 使用CLI指令屏蔽所有可屏蔽中断

  • 开中断时,存在两种屏蔽方式

    • 普通屏蔽:将IMR中的对应位置1
    • 特殊屏蔽:仅屏蔽本级中断,其他不屏蔽,不允许同级嵌套
  • 优先权管理

    1. 固定优先级:固定IR0-IR7的优先级
      1. 全嵌套方式:高级中断可以嵌套在低级中断中
      2. 特殊嵌套方式:允许同级嵌套
    2. 循环优先级:圆周循环,轮流处于最高优先级
      1. 自动循环方式:当前中断结束后自动变为最低,下一级变为最高,沿用了IR0-IR7的优先级排序
      2. 特殊循环方式:由编程决定优先级,也会循环
  • 中断结束方式

    1. 自动中断结束(AEOI):第二个中断响应周期下降沿,ISRi置0
    2. 正常中断结束(EOI):CPU发出EOI指令,将ISRi置0
    3. 特殊中断结束(SEOI):CPU发送指定的ISRi置0
    4. 一般中断结束(SEOI):8259A自动选择ISRi置0

12.3 编程控制:初始化命令字

初始化命令字是ICW1-ICW4,对8259A初始化,其中ICW3只在级联时使用

8259A一共有两个端口,根据A0的不同分为奇偶地址口,分别是**21H/20H(在XT机中)**

ICW1

ICW2

紧跟ICW1写入,但是是奇地址

其中

  • T7-T3用于确定中断类型码的D7-D3,如前文所述
  • T2-T0=000,由IRi决定

ICW3

A0=1,只在级联时使用,主片从片的格式不同,要和硬件搭配

注意主/从片的SP/EN接法

ICW4

8086CPU必须设置,A0=1;无ICW3时紧跟ICW2,有就跟3

12.4 编程控制:操作命令字

没有规定写入顺序,但是写入端口有规定

OCW1写入奇地址,OCW2,OCW3写入偶地址

OCW1

也称中断屏蔽字,直接对IMR的各位进行操作

如果是直接更改

mov al, 11111101B
out 21H, al

如果是新增

in al, 21H
and al, 11111101B
out 21H, al

OCW2

设置优先级循环方式和中断结束方式

OCW3



Comments