中断控制技术(8259A)
4.中断控制技术(8259A)
4.1 中断的概念
-
为什么要用中断
- 中断:外设向CPU发中断请求,CPU接受到中断请求并在一定条件下,暂时停止执行原来的程序而转去处理中断,处理好中断服务再返回继续执行原来的程序
- 中断是CPU被动的相应外设要求服务
-
中断源
- 除法错中断:0
- 断点中断:3
- 指令中断
- 溢出中断:4
- 非屏蔽中断:2
- 可屏蔽中断
- 单步中断:1
-
中断系统的功能
- 中断响应
- 断点保护和中断处理
- 中断优先权排队
- 中断嵌套
4.2 简单的中断情况
-
CPU响应可屏蔽中断的条件
- 有中断源发出的中断请求信号
- 开放总中断:IF=1
- 现行指令结束后相应中断
-
CPU响应中断要自动完成的任务
- 关中断,保护断点
- 保护现场
- 开中断
- 具体中断处理
- 关中断
- 恢复现场
- 开中断、中断返回
4.3 确定中断优先权
-
软件查询
优点:
- 询问次序就是优先权次序
- 完成中断源识别
- 省硬件,不需要优先权排队电路
-
硬件排队电路
4.4 微机中断系统
-
8086中断系统
- 向量中断机制
- 中断向量号:0~255
- 借助专用中断控制器8259A实现优先权管理
-
中断方式
-
软件中断
- 与硬件无关,不执行中断响应周期。除单步中断外,不可屏蔽,优先级高于外部中断
- 除法错中断0、单步中断1(受TF影响)、断点中断3、溢出中断4、指令设置的中断
- 中断是确定的
- 中断类型码自动形成
-
硬件中断
- 非屏蔽中断(NMI引脚) :02H
- 可屏蔽中断(INTR引脚):当IF=1,响应
- 中断是随机的
- 中断类型码由中断控制器提供
-
-
中断向量表
- 中断类型码:中断源对应的编号0~255
- 中断向量:中断服务程序的入口地址(CS,IP)
- 中断向量表:所有中断向量集中放在一起:00000H~003FFH
- 中断向量指针:中断向量最低字节指针=中断类型号*4
-
中断相应期间,CPU工作
- 关闭中断
- CS、IP、FR中的内容入栈
- 中断服务程序段地址送入CS中,偏移地址送入IP中
4.5 可编程中断控制器8259A
-
8259A
-
功能
- 中断优先权管理
- 接收中断请求
- 提供中断类型号
- 屏蔽与开放中断
-
特点
- 单片可处理8级中断
- 9片级联64级中断
- 片内寻址A0,2个端口地址
-
内部结构
-
中断请求寄存器IRR
- Di=1,IRi引脚有中断请求
-
中断服务寄存器ISR
- Di=1,IRi中断正在服务中
-
中断屏蔽寄存器IMR
- Di=1,IRi中断已加屏蔽
-
优先权分析器PR
- 比较新进入中断与ISR中正被处理的中断的优先级,决定INT是否发出中断请求
-
-
端口
-
偶地址:IRR、ISR、ICW1、OCW2、OCW3
-
奇地址:IMR、OCW1、ICW2、ICW3、ICW4
-
-
优先级的管理方式
- 完全嵌套方式
- 中断被相应时,中断类型码被放在总线上,ISR对应位ISn被置1,CPU发出EOI前,始终保持
- 特殊完全嵌套方式
- 多片级联方式,特殊全嵌套仅设置在主片中
- 可相应同级中断
- 完全嵌套方式
-
-
初始化编程(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位机
-
-
-
中断操作编程(OCW)
-
OCW1:屏蔽命令字
-
屏蔽对应位=1
-
-
OCW2:设置优先级循环方式、中断结束方式
-
D7=1,优先级循环方式;D7=0,非循环使用D6
-
D6=1,用D2D1D0指定中断等级
-
D5=1,中断结束后,发中断结束命令,使ISR中对应ISn;D5=0,不发EOI,自动清除对应ISn
-
D4D3=00,特征位
- 若D5 = 1,而D6 = 0, 则清除优先级最高位
- 若D5 = 0,则清对应位
- 顺序:自动、正常、(置位)、特定
-
-
OCW3:设置特殊屏蔽方式、查询、读寄存器
-
D6D5=11,置特殊屏蔽方式;D6D5=10,撤销
-
D4D3=01
-
D2=1,查询是否有中断请求正在处理
-
D1D0=10,读IRR; D1D0=11,读ISR
-
读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三个寄存器的作用是什么?
-
中断请求寄存器IRR
- Di=1,IRi引脚有中断请求
-
中断服务寄存器ISR
- Di=1,IRi中断正在服务中
-
中断屏蔽寄存器IMR
- Di=1,IRi中断已加屏蔽
6. 如果1CH中断程序从5110H:2030H开始,则中断向量应该如何存放
1 | CLI |
7. 假设某中断的类型码为47H,其中断服务程序入口为SEV,试设置中断向量
1 | CLI |
8.某系统中用两片8259A级联组成中断系统
-
8259A主片的IR1、IR5上引入两个中断源,其中断类型码为31H、35H,中断服务程序的入口地址为1000:2000H和1000:3000H。
-
从片接在主片的IR3上,从片的IR4、IR5上引入两个中断源,其中断类型码为44H、45H,中断服务程序的入口地址为2000:3600H和2000:4500H。
-
8259A主片口地址为C8H/C9H,从片口地址为CAH/ CBH。
-
边沿触发、非缓冲
主片初始化程序
1
2
3
4
5
6
7
8
9
10MOV 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 -
从片初始化程序
1
2
3
4
5
6
7
8
9
10MOV 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
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 喵喵虎冲呀!
评论