4.中断控制技术(8259A)


4.1 中断的概念

  1. 为什么要用中断

    1. 中断:外设向CPU发中断请求,CPU接受到中断请求并在一定条件下,暂时停止执行原来的程序而转去处理中断,处理好中断服务再返回继续执行原来的程序
    2. 中断是CPU被动的相应外设要求服务
  2. 中断源

    1. 除法错中断:0
    2. 断点中断:3
    3. 指令中断
    4. 溢出中断:4
    5. 非屏蔽中断:2
    6. 可屏蔽中断
    7. 单步中断:1
  3. 中断系统的功能

    1. 中断响应
    2. 断点保护和中断处理
    3. 中断优先权排队
    4. 中断嵌套

4.2 简单的中断情况

  1. CPU响应可屏蔽中断的条件

    1. 有中断源发出的中断请求信号
    2. 开放总中断:IF=1
    3. 现行指令结束后相应中断
  2. CPU响应中断要自动完成的任务

    1. 关中断,保护断点
    2. 保护现场
    3. 开中断
    4. 具体中断处理
    5. 关中断
    6. 恢复现场
    7. 开中断、中断返回

4.3 确定中断优先权

  1. 软件查询

    优点:

    1. 询问次序就是优先权次序
    2. 完成中断源识别
    3. 省硬件,不需要优先权排队电路
  2. 硬件排队电路

4.4 微机中断系统

  1. 8086中断系统

    1. 向量中断机制
    2. 中断向量号:0~255
    3. 借助专用中断控制器8259A实现优先权管理
  2. 中断方式

    1. 软件中断
      1. 与硬件无关,不执行中断响应周期。除单步中断外,不可屏蔽,优先级高于外部中断
      2. 除法错中断0、单步中断1(受TF影响)、断点中断3、溢出中断4、指令设置的中断
      3. 中断是确定的
      4. 中断类型码自动形成
    2. 硬件中断
      1. 非屏蔽中断(NMI引脚) :02H
      2. 可屏蔽中断(INTR引脚):当IF=1,响应
      3. 中断是随机的
      4. 中断类型码由中断控制器提供
  3. 中断向量表

    1. 中断类型码:中断源对应的编号0~255
    2. 中断向量:中断服务程序的入口地址(CS,IP)
    3. 中断向量表:所有中断向量集中放在一起:00000H~003FFH
    4. 中断向量指针:中断向量最低字节指针=中断类型号*4
  4. 中断相应期间,CPU工作

    1. 关闭中断
    2. CS、IP、FR中的内容入栈
    3. 中断服务程序段地址送入CS中,偏移地址送入IP中

4.5 可编程中断控制器8259A

  1. 8259A

    1. 功能
      1. 中断优先权管理
      2. 接收中断请求
      3. 提供中断类型号
      4. 屏蔽与开放中断
    2. 特点
      1. 单片可处理8级中断
      2. 9片级联64级中断
      3. 片内寻址A0,2个端口地址
    3. 内部结构

      1. 中断请求寄存器IRR
        • Di=1,IRi引脚有中断请求
      2. 中断服务寄存器ISR
        • Di=1,IRi中断正在服务中
      3. 中断屏蔽寄存器IMR
        • Di=1,IRi中断已加屏蔽
      4. 优先权分析器PR
        • 比较新进入中断与ISR中正被处理的中断的优先级,决定INT是否发出中断请求
    4. 端口

      • 偶地址IRRISRICW1、OCW2、OCW3

      • 奇地址IMROCW1、ICW2、ICW3、ICW4

    5. 优先级的管理方式

      • 完全嵌套方式
        • 中断被相应时,中断类型码被放在总线上,ISR对应位ISn被置1,CPU发出EOI前,始终保持
      • 特殊完全嵌套方式
        • 多片级联方式,特殊全嵌套仅设置在主片中
        • 可相应同级中断
  2. 初始化编程(ICW)

    • ICW1:芯片控制初始化命令字
      • D7~D5=0
      • D4=1,指示ICW1
      • D3=1,电平触发;D3=0,边沿触发
      • D2=0
      • D1=1,单片;D1=0,级联
      • D0=1,使用ICW4
    • ICW2:设置中断类型码
      • 输入中断类型码,再置零后三位
    • ICW3:主片/从片初始化命令字
      • 主片:从片对应引脚=1
      • 从片:D2D1D0指出连于主片哪一个引脚
    • ICW4:方式控制初始化命令字
      • D4=0,一般全嵌套方式;D4=1,特殊全嵌套
      • D3=0,非缓冲方式;D3=1,缓冲方式
      • D2=0,从片;D2=1,主片
      • D1=0,中断非自动结束;D1=1,自动结束
      • D0=0,8位机;D0=1,16位机
  3. 中断操作编程(OCW)

    1. OCW1:屏蔽命令字
      1. 屏蔽对应位=1
    2. OCW2:设置优先级循环方式、中断结束方式
      1. D7=1,优先级循环方式;D7=0,非循环使用D6
      2. D6=1,用D2D1D0指定中断等级
      3. D5=1,中断结束后,发中断结束命令,使ISR中对应ISn;D5=0,不发EOI,自动清除对应ISn
      4. D4D3=00,特征位

      image-20220527202208600

      1. 若D5 = 1,而D6 = 0, 则清除优先级最高位
      2. 若D5 = 0,则清对应位
      3. 顺序:自动、正常、(置位)、特定
    3. OCW3:设置特殊屏蔽方式、查询、读寄存器
      1. D6D5=11,置特殊屏蔽方式;D6D5=10,撤销
      2. D4D3=01
      3. D2=1,查询是否有中断请求正在处理
      4. D1D0=10,读IRR; D1D0=11,读ISR
      5. 读IMR,直接用奇地址端口读

习题


1. 8088/8086中断向量表的作用是什么

集中存放中断服务程序入口地址

2. 什么叫中断向量?它放在哪里?对应于1CH的中断向量在哪里?如1CH中断程序从5110H:2030H开始,则中断向量应怎样存放?

  • 中断服务程序的入口地址

  • 00000H~003FFH

  • 1C*4=70H

70H 30H
71H 20H
72H 10H
73H 51H

3. 叙述可屏蔽中断的响应过程,一个可屏蔽中断或者非屏蔽中断响应后,堆栈顶部四个单元中是什么内容?

  • CS+IP

4. 非屏蔽中断处理程序的入口地址怎样寻找

  • 02H*4

5. 8259A中IRR、IMR和ISR三个寄存器的作用是什么?

  1. 中断请求寄存器IRR
    • Di=1,IRi引脚有中断请求
  2. 中断服务寄存器ISR
    • Di=1,IRi中断正在服务中
  3. 中断屏蔽寄存器IMR
    • Di=1,IRi中断已加屏蔽

6. 如果1CH中断程序从5110H:2030H开始,则中断向量应该如何存放

1
2
3
4
5
6
7
8
9
CLI
PUSH ES
MOV AX,0
MOV ES,AX
MOV DI,4*1CH
MOV [DI],5110H
MOV [DI+2],2030H
POP ES
STI

7. 假设某中断的类型码为47H,其中断服务程序入口为SEV,试设置中断向量

1
2
3
4
5
6
7
8
9
10
11
CLI
PUSH DS
MOV AX,0
MOV DS,AX
MOV DI,4*47H
MOV AX,OFFSET SEV
MOV [DI],AX
MOV AX,SEG SEV
MOV [DI+2],AX
POP DS
STI

8.某系统中用两片8259A级联组成中断系统

  1. 8259A主片的IR1、IR5上引入两个中断源,其中断类型码为31H、35H,中断服务程序的入口地址为1000:2000H和1000:3000H。

  2. 从片接在主片的IR3上,从片的IR4、IR5上引入两个中断源,其中断类型码为44H、45H,中断服务程序的入口地址为2000:3600H和2000:4500H。

  3. 8259A主片口地址为C8H/C9H,从片口地址为CAH/ CBH。

  4. 边沿触发、非缓冲

    image-20220523111357645主片初始化程序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MOV AL,00010001B //ICW1
    OUT 0C8H,AL
    MOV AL,00110000 //ICW2 16进制转2进制
    OUT 0C9H,AL
    MOV AL,00001000 //ICW3 只需管从片
    OUT 0C9H,AL
    MOV AL,00010101 //ICW4
    OUT 0C9H,AL
    MOV AL,11010101 //OCW1
    OUT 0C9H,AL
  5. 从片初始化程序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MOV AL,00010001B 
    OUT 0CAH,AL
    MOV AL,00101000B
    OUT 0CBH,AL
    MOV AL,00000011B
    OUT 0CBH,AL
    MOV AL,00000001B
    OUT 0CBH,AL
    MOV AL,00110000B
    OUT 0CBH,AL