微机接口技术——中断
中断的基本概念
中断:是指CPU在执行程序的过程中,由于某种外部或内部事件的作用,使CPU停止当前正在执行的程序而转去为该事件服务,待时间服务结束后,又能自动返回到被中止了的程序中继续执行的过程。
中断源:能够引发CPU中断的信息源
比如:
8254 0#
,由此引发的中断称为日时钟中断;
键盘接口
,由此引发的中断称为键盘中断;
设备故障
,由此引发的中断称为故障中断
中断的分类
-
外部中断 : 外部事件引发的中断
- 即由CPU以外的设备发出,并由CPU的中断请求信号引脚输入所引发的中断称为
外部中断
,也叫硬件中断
- 即由CPU以外的设备发出,并由CPU的中断请求信号引脚输入所引发的中断称为
-
内部中断 : 由CPU内部事件,即由CPU硬件故障或程序执行中的事件所引发的中断称为内部中断。
拓展:又分为软件中断和异常
-
软件中断 : 执行有定义的
INT n
指令而引发的中断- BIOS中断
- DOS中断
- DOS专用中断
- DOS保留中断
- 用户可调用的DOS中断
- 保留给用户开发的中断
-
异常 : 由于CPU本身故障、程序故障等引发的中断
- 故障(Fault)
- 陷阱(Trap)
- 中止(Abort)
-
-
软件中断由于程序事先安排好,因此发生时间可预知;而外部中断和异常的发生是随机的。
中断系统 :为实现中断而采取的硬件,软件措施
中断系统应具备的基本功能 :
-
对于硬件中断,接口电路中应具备
屏蔽
和开放
的功能,这种功能由程序员通过软件去控制。 -
能实现中断判优(中断排队),当有多个中断源提出请求时,应能优先响应高级别的中断。
-
能够实现中断嵌套,即高级别的中断源能够中断低级别的中断服务程序。
-
响应中断后,能自动转入中断处理,处理完毕能自动返回断点。
80X86 中断指令
-
开中断指令 STI
功能:使F寄存器中
I
标志置1,CPU处于开中断状态 -
关中断指令 CLI
功能:使F寄存器中
I
标志置0,CPU处于关中断状态。 -
软件中断指令 INT n
为中断类型码,
n
为0~255之间有定义的无符号整数。 功能:无条件转向n型中断服务子程序
-
中断返回指令 IRET
功能:依次从栈顶弹出6个元素→
IP
,CS
,F
如果栈顶是
INT n
的断口地址,则执行IRET
后,返回断点,否则不能。
-
IRET
是中断服务子程序的出口指令 -
IRET
和RET
的区别-
IRET
从栈顶弹出6 个元素→IP
,CS
,F
远程
RET
,从栈顶弹出4个元素→IP
,CS
近程
RET
,从栈顶弹出2个元素→IP
-
中断向量和中断向量表
-
中断系统是为实现中断而采取的软,硬件措施
-
中断指令,中断向量和中断向量表是实现中断的重要软件措施。
CPU依据中断向量号获取中断服务子程序入口地址,但在实模式下和保护模式下采用不同的途径:
-
中断向量:中断向量是实模式下,中断服务子程序的入口地址
它由2部分组成:
- 服务程序所在代码段的段基址 2 个字节
- 服务程序入口的偏移地址 2 个字节
- 中断服务程序入口的物理地址 =
段
基
址
(
十
六
进
制
)
×
16
+
偏
移
地
址
(
十
六
进
制
)
段基址(十六进制) \times 16 + 偏移地址(十六进制)
段基址(十六进制)×16+偏移地址(十六进制)
- 2 4 = 16 2^4 = 16 24=16, 对于二进制就是左移4位, 对十六进制就是左移一位
-
中断向量表: 所有中断向量的集合
-
中断向量表的设置
CPU规定:在实模式下,中断向量表需设置在系统的RAM最低端的
1K
单元(0 ~ 3FFH
) -
中断向量表的表地址与中断类型的关系
举个栗子 :
21H
型中断向量:存放在84H~ 87H
单元中 问:
9CH
型中断向量存放在何处?解: ∵ 9 C H × 4 = 9CH× 4= 9CH×4= 10011100 00 = 270 H =270H =270H
∴ 9 C H 9CH 9CH型中断向量存于 270 H ~ 273 H 270H ~ 273H 270H~273H单元中
注: n × 4 = n 的 二 进 制 后 接 00 n\times 4 = n的二进制后接00 n×4=n的二进制后接00 即相当二进制后面接两个零, 相当于 2 2 = 4 2^2 = 4 22=4
十进制数后加0相当于乘以10; 同理, 二进制数后加0相当于乘以2.
- 每个入口占用4 Bytes (即每个中断向量占4字节), 低字为段内偏移 , 高字为段基址;
- 中断向量表大小为1 KB (即1024 Bytes) , 共 256 个入口
- 每个中断号对应的中断向量占4个字节, 有256个中断号, 4 × 256 = 1024 4\times 256 = 1024 4×256=1024个字节, 即 1 K B 1KB 1KB.
例子:某中断的中断类型号为
68H
,试述中断操作过程。 解:
① 取中断类型号
68H
② 计算中断向量地址 68 H × 4 = 1 A 0 H 68H×4=1A0H 68H×4=1A0H
③ 取中断入口地址 C S = A 000 H CS=A000H CS=A000H, I P = 2050 H IP=2050H IP=2050H
④ 转向中断服务程序
⑤ 返回到
INT 68H
的下一条指令
保护模式为32位寻址。中断描述符表IDT
每一表项对应一个中断向量号,表项称为中断门描述符、陷阱门描述符。这些门描述符为8字节长,对应256个中断向量号,IDT
表长为
2
K
B
2KB
2KB。由中断描述符表寄存器IDTR
来指示IDT
的内存地址。
以中断向量号乘以8作为访问IDT
的偏移,读取相应的中断门/陷阱门描述符表项。门描述符给出中断服务子程序入口地址(段,偏移),其中32位偏移量装入EIP
寄存器,16位的段值装 入CS寄存器。由于此段值是选择符,还必须访问GDT
或LDT
,才得到段的基地址。
系统中断的分类
一.CPU中断
CPU中断是指:CPU执行某些操作而引发的中断,这类中断使用了0、1、3、4、6、7中断号。
-
除法错中断—— 0型中断
CPU执行
DIV
或IDIV
指令,如果除数为0,或者商数超出寄存器的表示范围,CPU自动调用0型中断服务程序。 -
单步中断—— 1型中断
当标志寄存器的T标志为1时,CPU一条指令执行完毕,自动调用1型中断服务程序。但是, DOS为1型中断设计的服务程序只有一条
IRET
指令。实际上,单步中断是因为DEBUG程序的需要而设计的。在用户程序中执行“INT 1”指令是毫无意义的。 -
断点中断—— 3型中断
CPU执行“INT 3”指令后,调用3型中断服务程序,而DOS系统的3型中断服务程序也只有一条
IRET
指令。断点中断也是因为DEBUG 程序的需要而设计的。 -
溢出中断—— 4型中断
对应的软件中断指令有两种汇编格式
① INTO
② INT 4
当FLAG寄存器的溢出标志为1,在这种条件下,执行“INTO”指令,将会调用4型服务程序。
二. 软件中断
执行有定义的INT n指令而引发的中断,称为软件中断。在这里,之所以加了“有定义的”这一限制词,是因为并非所有的中断号都有与之配套的中断服务程序。
软件中断使用05H
, 10H~FFH
中的若干个中断号。软件中断又可分为BIOS中断、DOS中断。
三. 硬件中断
1、不可屏蔽中断
定义:不受CPU内的中断允许触发器IF控制的中断。
与CPU连接:由 8086 C P U 8086CPU 8086CPU的 N M I NMI NMI管脚引入。上升沿触发,高电平应保持两个时钟周期。
影响:这种中断一旦产生,在CPU内部直接生成中断类型号02。
2、可屏蔽中断
定义:是用户可以控制的中断
途径:是通过对CPU的IF的设置来禁止和允许CPU响应中断。
与CPU连接:
-
由 I N T R INTR INTR管脚引入。
-
设备需要提供中断类型号
-
CPU响应中断后,取中断类型号的4倍作为中断服务入口地址表的地址,通过查表得到相应的中断服务程序首地址,转去执行相应的中断服务程序。
可编程中断控制器8259A
一、8259A的功能及工作特点
-
功能:
1)1片 8259 A 8259A 8259A可管理8级中断,并对其进行优先级管理;面向CPU的专用接口,是辅助CPU进行中断管理的。
2)9片 8259 A 8259A 8259A组成的主从式中断系统可管理64级中断,并对其进行优先级管理;
3)对中断源有屏蔽或允许中断申请的操作。
4)能自动送出中断类型码,使CPU迅速找到中断处理子程序的入口地址 。
-
工作特点:
1)采用NMOS工艺制造。
2)单一的+5V电源。
3)具有28根引腿的双列直插式芯片。
4)使用灵活,在实际系统中,其可编程性可使其工作在多种 不同工作方式。
二、8259A的内部结构及管脚分配
1)数据总线缓冲器
是用于 8259 A 8259A 8259A与CPU交换数据信息的接口。
2)读/写逻辑电路
是用于 8259 A 8259A 8259A与CPU交换控制信息的接口。
3)级联缓冲比较器
是用于多片 8259 A 8259A 8259A的连接。
4)中断请求寄存器
是用于 8259 A 8259A 8259A与中断源的连接,用来锁存外部来的请求,锁存目的是为了判断来的请求是否可以转换为向CPU发出的请求。
5)中断屏蔽寄存器
是反映中断源的中断申请是否被屏蔽。决定是否将信号送入判决器进行判决进而向CPU发出请求信号呢?
6)当前服务寄存器
反映当前CPU正在为哪一个中断源服务以及还未完成哪个中断源的服务。是判决依据,是否进行中断潜逃的判决依据。
7)优先级判决寄存器(优先权电路)
是用于识别中断请求信号的优先级别。判决新来的是否比正在服务的优先级更高。
8)控制逻辑
含有若干寄存器,其作用是向CPU发出中断申请信号,接收来自于CPU的中断响应信号。
- 外部引腿
-
D7~D0:双向数据线,与系统总线DB相连,实现与CPU的数据交换。
-
IR7~IR0:外部中断请求信号线,在构成主从式中断系统时,主片的IR端接从片的 I N T INT INT。
-
RD:读命令信号线,当其有效时,控制信息从 8259 A 8259A 8259A读至CPU。
-
WR:写命令信号线,当其有效时,控制信息从CPU读至8259。
-
INT:与CPU的 I N T R INTR INTR相连,用于向CPU发中断请求
-
INTA:用于接收来自于CPU的中断响应信号。
-
CS:片选信号线,通常由CPU高位地址控制,有效时,表示该片 8259 A 8259A 8259A被选中。
-
A0:端口选择信号线,=0为偶地址;=1为奇地址。且偶地址较低。
-
CAS2~CAS0:双向级联信号线,8259做主片时,它们为输出线(选择某一从片), 8259 A 8259A 8259A做从片时,它们为输入线(与SP/EN配合实现 8259 A 8259A 8259A的级联)。
-
SP/EN:输入输出多功能信号线。
缓冲方式:输出,EN=1,CPU→ 8259 A 8259A 8259A;EN=0, 8259 A 8259A 8259A→CPU。
非缓冲方式:输入,SP=1,本片为主片;SP=0,本片为从片。
- 编程结构
控制部分由7个寄存器组成:
分成两组:
第一组:ICW1~ICW4
第二组:OCW1~OCW3
处理部分由IRR
、ISR
、PR
个寄存器组成,其功能是接收和处理从IR0
~IR7
进入的中断。
-
工作原理
1 ) 当有一个或多个中断源申请中断时,一条或几条IR 变高,使 I R R IRR IRR 的相应位置1 (锁存请求)。
2 ) 在对中断源的中断申请不屏蔽的情况下, 8259 A 8259A 8259A 把中断申请信号转发给PR 作判决。
3)PR 根据 I R R IRR IRR 和 I S R ISR ISR 的内容,经判决决定该中断源优先级是否高于正在服务中断源的优先级,若高,则通过控制逻辑的INT 线向CPU 申请中断。
4 )若CPU 处于开中断状态,则CPU 执行完当前指令后响应中断,用 I N T A INTA INTA信号作为响应中断的回答信号。5) 8259 A 8259A 8259A 收到第一个负脉冲信号后使 I R R IRR IRR 锁存功能失效(第二个负脉冲到达时才恢复锁存功能),并使 I S R ISR ISR 的相应位置1 ,同时使 I R R IRR IRR 的相应为复0 ,以避免该中断再次发出中断请求。
6 ) 8259 A 8259A 8259A 收到第二个负脉冲时,通过数据总线输出中断类型码。
7)若$8259A 工 作 在 < f o n t c o l o r = b l u e > 自 动 结 束 中 断 模 式 < / f o n t > , 则 在 第 二 个 负 脉 冲 结 束 时 , 使 中 断 源 在 工作在<font color = blue>自动结束中断模式</font> ,则在第二个负脉冲结束时,使中断源在 工作在<fontcolor=blue>自动结束中断模式</font>,则在第二个负脉冲结束时,使中断源在ISR$ 中的相应位复0 ;否则,直到中断处理子程序结束发出 E O I EOI EOI 命令时,才使$ISR $中的相应位复位。
三、 8259A 的中断管理方式
三种主要工作方式
四种从属工作方式
1. 三种主要工作方式
全嵌套和特殊全嵌套方式
8259
A
8259A
8259A 在初始化完成后若未设定其他的工作方式,就自动进入全嵌套方式。
全嵌套方式:
✓ 中断请求的优先级固定, 其顺序是
I
R
0
IR0
IR0最高,
I
R
7
IR7
IR7最低 。
✓ 不响应同级及较低 的中断请求。
✓ 全嵌套 工作 方式由 由
I
C
W
4
ICW4
ICW4 的
D
4
=
0
D4=0
D4=0 来确定 。
特殊全嵌套方式:
✓ 中断请求的优先级固定 ,其顺序是
I
R
0
IR0
IR0最高,
I
R
7
IR7
IR7最低 。
✓ 响应同级的中断请求。
✓ 特殊全嵌套工作 方式由
I
C
W
4
ICW4
ICW4 的
D
4
=
1
D4=1
D4=1来确定
循环优先级方式
两种:自动循环优先级方式、特殊循环优先级方式
自动循环优先级
自动循环优先级定义: 某级被响应后,降为最低 。如$IR4
被
响
应
后
,
优
先
级
顺
序
变
为
:
被响应后, 优先级顺序变为:
被响应后,优先级顺序变为:IR5,IR6,IR7,IR0,IR1,IR2,IR3,IR4$
自动循环优先级设置: 是由
O
C
W
2
OCW2
OCW2 的
R
=
1
,
S
L
=
0
R=1 ,SL=0
R=1,SL=0 来确定的。
特殊循环优先级
特殊循环优先级定义: 通过编程来确定某一设备为最低优先级
特殊循环优先级设置: 是由
O
C
W
2
OCW2
OCW2的
R
=
1
R=1
R=1 ,$SL=1
来
确
定
的
。
而
来确定的。而
来确定的。而L2, L1, L0$最低优先级的二进制编码。
特定屏蔽方式
两种:普通屏蔽方式、特殊屏蔽方式
普通屏蔽方式
普通屏蔽方式定义:CPU 向 8259 A 8259A 8259A的 I M R IMR IMR中发一个屏蔽字,若屏蔽字中某一位或某几位为 “ 1” ,则与这些位相对应的中断源就被屏蔽。同级和低级的中断请求被禁止 。
普通屏蔽方式设置:是由 O C W 1 OCW1 OCW1来设置的。
特殊屏蔽方式
特殊屏蔽方式提出: 为了提高系统的实时性,实现优先级别的动态改变,允许优先级别低的中断级别高的。
特殊屏蔽方式定义:CPU 向
8259
A
8259A
8259A的
I
M
R
IMR
IMR中发一个屏蔽字,若屏蔽字中某一位或某几位为“ 1” ,则与这些位相对应的中断源就被屏蔽。同级和低级的中断请求被禁止。
特殊屏蔽方式设置:
-
用 O C W 3 OCW3 OCW3设置特殊屏蔽方式;
-
用 O C W 1 OCW1 OCW1对当前较高优先级的中断进行屏蔽;
2 . 四种从属工作方式
中断结束方式
中断结束方式定义: 如何和何时使 8259 A 8259A 8259A中的 I S R ISR ISR中的相应位清零,不是中断服务子程序的结束。
中断结束方式种类:
自动EOI 结束方式
自动EOI 结束方式定义:8259 自动在最后一个中断响应脉冲的后沿将中
断服务寄存器ISR 中相应位清零。
自动EOI 结束方式过程: 中断请求、CPU 响应,发第一个,
I
S
R
ISR
ISR 相应位
置“1” ,CPU 发第二个,
8259
A
8259A
8259A 提供中断类型码,
I
S
R
ISR
ISR 相应位清零,结束则与这些位相对应的中断。
自动EOI 结束方式应用场合:
❖
8259
A
8259A
8259A 单机系统;
❖ 8259 A 8259A 8259A 多机系统的主片,不能用于从片;
自动EOI 结束方式设置:
I
C
W
4
ICW4
ICW4的
A
E
O
I
=
1
AEOI=1
AEOI=1确定
一般EOI 结束方式
定义:全嵌套方式下的中断结束命令。该命令能自动地把当前ISR
中的最高优先级的那一位清“0” 。在全嵌套方式下,应该使用该方式。
特殊EOI 结束方式
定义:非全嵌套方式下的中断结束命令。在非全嵌套方式下无法确定最后响应的是哪一级中断,所以应向 8259 A 8259A 8259A发出特殊 E O I EOI EOI命令,即指定哪一级中断返回,使其 I S R ISR ISR中的相应位清“0” 。可以在任何情况下使用。
读8259A 状态
读8259A 的状态是指读8259A内部的IRR 、ISR 和IMR的内容
(1)读IRR
先发出 O C W 3 OCW3 OCW3命令( 使 R R = 1 、 R I S = 0 , 地 址 A 0 = 0 使RR=1、RIS=0 ,地址A0=0 使RR=1、RIS=0,地址A0=0),在下一个RD 脉冲时可读出 I R R IRR IRR。
(2)读ISR
先发出
O
C
W
3
OCW3
OCW3命令(
使
R
R
=
1
、
R
I
S
=
1
,
地
址
A
0
=
0
使RR=1、RIS=1 ,地址A0=0
使RR=1、RIS=1,地址A0=0),在下一个RD 脉冲时可读出
I
R
R
IRR
IRR。
(3)读IMR
只要读奇地址端口(
A
0
=
1
A0=1
A0=1),则可读出
I
M
R
IMR
IMR。
中断请求触发方式
(1)电平触发方式
(2)边缘触发方式
缓冲器方式
(1 )缓冲方式
在多片
8259
A
8259A
8259A级联的大系统中,
8259
A
8259A
8259A通过总线驱动器与系统总线相连,这就是缓冲方式,通过SP/EN 端输出一个低电平信号作为总线驱动器的启动信号。
(2 )非缓冲方式
当系统中使用单片
8259
A
8259A
8259A或几片
8259
A
8259A
8259A时,可以将
8259
A
8259A
8259A直接与系统总线相连,这就是非缓冲方式。
四、 8259A 的初始化编程
8259A的命令控制字包括两个部分:初始化命令字和操作命令字
初始化命令字:一般在系统复位后的初始化编程中设置,用于确定 8259 A 8259A 8259A 的基本工作方式,设置以后一般保持不变。
操作命令字:是在初始化以后的正常工作中写入的,它实现对 8259 A 8259A 8259A 的状态,在工作中可随时写入操作命令字以修改某些控制方式。
初始化命令字
关于ICW1的说明
❖ 对于8086/8088 系统必须设置ICW4 命令字,因而ICW1 命令字的D0=1;
❖ ICW1 命令字的D1 表示有1片8259A工作还是多片8259A工作。
❖ 边沿触发方式的实现方法是使ICW1 的D3 位置0 ,边电平触发方式的实现方法是使ICW1 的D3 位置1,
关于 ICW2的说明
❖ ICW2 的高5位影响中断类型码;
❖ ICW2 的低3位并不影响中断类型码,再形成中断类型码时由8259A内部电路根据中断源挂在8259A的哪一引退上决定的。
关于 ICW3 的说明
❖ ICW3 仅用于级联方式,切对主片和从片都必须写入ICW3 ,但是两者含义是不同的,分别指示主片上连接从片的情况和从片连接主片的情况;
❖ 系统中是否有多片是由ICW1 的D1 位指示的。
❖ 对于从片,ICW3 是一个校对码。
关于 ICW4 的说明
❖ 缓冲方式的实现方法是将ICW4的D3位置1 ,并通过8259A的SP/EN端输出一个低电平信号作为总线驱动器的启动信号;非缓冲方式的实现方法是将ICW4 的D3位置0 ;
❖ 中断自动结束方式是通过首先设置ICW4的D1位为1实现的。
❖ 一般的中断结束方式是通过首先设置ICW4的D1位为0, 然后通过设置OCW2 实现的。
❖ 特殊全嵌套的实现方法是使ICW4 的D4 位为1。
初始化应该注意的问题
❖ ICW1~ICW4 写入的次序是固定不变的;
❖ ICW1 写入偶地址端口,ICW2 、ICW3 、ICW4 写入奇地址端口。
❖ 对每片8259A 的ICW1 、ICW2 必须设置的, 对8086/8088 还必须设置ICW4。
❖ 当系统是多片级联时,要有ICW3。
❖ 级联时必须分别对主片和从片进行初始化,写入各自的ICW3。
❖ 在8086/8088 系统中是否需要ICW3 、ICW4 已在ICW1 中预先明确了。
初始化流程图:
操作命令字:
操作命令字在应用程序中设置时没有固定的次序,可根据需要多次写入,但对操作命令字写入的端口号有严格规定:
❖ OCW1 :写入“奇地址端口”
❖ OCW2 、OCW3 : 写入“偶地址端口”
- OCW1(屏蔽)
如开放 IR 1 1 、 IR 7 7 ; 屏蔽 IR 3 3 、 IR 6 6 ; ; 其他不变(IMR可读可写)
IN AL,21H ;读取IM
AND AL,7DH
OR AL,48H
OUT 21H,AL
- OCW2 (设置 EOI , SEOI, 循环)
- OCW3 (特殊屏蔽设置,中断查询,读 IRR,ISR )
五、多片 8259A 组成的主从式系统
一个主片一个从片,主片 IR0 连在从片上,主片的 IR1~IR7 没有画,可能有的连在其他从片上,也可能连在其他的外部设备上,也有可能什么也没有连,从片也有8个中断请求输入引腿 IR0~IR7,从图上可以看到什么问题呢?
系统有8259 、8086,如果系统是最大模式工作方式还需要总线控制器,所有控制信号都是通过总线控制器发出的,比如: INTA 、 RD 、 WR 等既连在主片上也连在从片上,再有就是绿色数据总线,黄色表示地址线,对于主片和从片的片选来讲,都是通过地址译码电路片选到 8259A 。
重点介绍 CAS0~CAS2 ,这3 个引腿与级联有关,如何相关呢?对于主片来讲,这3个引腿一定是输出引腿,对从片来讲,也有3 个引腿,是输入引腿,它们之间通过红色线连接,如何联系?可能通过驱动器连也有可能直接连,主片要通过这3个引腿发出一个编码让从片来接收,图上只画了一个从片,其实实际中可能有多个从片,多个从片都连在主片发出的这3个引腿上,主片发出的编码被多个从片接收,只有一个引腿与主片发出的编码相匹配,哪个?就是从片的 ICW3 对应的标识码与它发出的码一致的哪片,才叫匹配片,只有匹配片才发中断类型码,比如从片IR1上来了一个中断请求,这个请求通过从片的 PR 判决认为是高的,它会通过 INT 引腿把这个请求送到主片的IR0上,主片可能通过判决将这个请求通过主片的INT 引腿交给8086 ,如果 8086 当前中断请求是开放的它会响应这个请求,它通过 8288 发出INTA 信号,这个信号会送给主片也会送给从片,主片与从片都收到中断响应信号,之后主从片需要一个协调,协调谁发中断类型号码,因为刚才请求是从片的IR1请求,理所应当是该从片发中断类型码,主片如何让从片发中断类型码?就是通过这3个引腿发一个编码,因为刚才主片是通过 IR0 收到一个中断请求的,所以主片发出的编码是000 ,而只有哪个从片与000匹配呢?从片的ICW3的低3位是000的从片与主片相匹配,这个从片就发中断类型码。从片通过8个引腿送到数据总线上,CPU 从低8位数据总线上获取中断类型码,这个中断类型码是从片IR1发出的,是两部分组成:从片ICW2 的高5位+001