3. 8259A的编程
因为8259A是可编程的中断控制器,所以它的操作是用软件通过命令进行控制的。8259A的编程命令字有两类:一是初始化命令字(ICW),二是操作命令字(OCW)。相应的8259A的控制部分有一些可编程的位,它们分布在7个8位寄存器中。这些寄存器分成两组,一组用作存ICW,另一组存OCW。当计算机刚开机时,用初始化程序设定ICW,即由CPU按次序发送2~4个不同格式的ICW,用来建立起8259A操作的初始状态,此后的整个工作过程中该状态保持不变。相反操作命令字(OCW)用于动态控制中断处理,是在需要改变或控制8259A操作时发送的。注意:当发出ICW或OCW时,CPU中断申请脚INTR应关闭(使用CLI关中断指令)。
1. ICW(ICW1、ICW2、ICW3、ICW4)初始化命令字编程格式
(1) ICW1(芯片控制初始化命令字)功能介绍:
A0 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
0 |
0 |
0 |
0 |
1 |
LTIM |
ADI |
SNGL |
IC4 |
|
16位机无效 |
标志位 |
电平触发 |
无效 |
弹片使用 |
需要ICW4 |
ICW1负责启动8259A和进行初始化工作:
1) 清除IMR
2) 把最低优先权分配给IR7
3) 把最高优先权分配给IR0
4) 将从设备标志ID置成7
5) 清除特殊屏蔽方式以及设置读IRR方式
(2) ICW2(中断类型号的设置)功能介绍:
A0 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
1 |
T7 |
T6 |
T5 |
T4 |
T3 |
0 |
0 |
0 |
|
中断类型号的高5位 |
16位机无效 |
ICW2负责规定中断类型号字节。编程时规定高5位T7---T3,低3位由IR的编码写入。
例8.3.1:输入时地址线A0=1,IR0---IR7的中断向量为08H---0FH,PC/XT机中的T7—T3==00001,当IR4申请时8259向CPU发出中断申请的类型号为00001100==0CH。
(3) ICW3(主/从片初始化命令字)功能介绍:
主片ICW3:
A0 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
1 |
S7 |
S6 |
S5 |
S4 |
S3 |
S2 |
S1 |
S0 |
主片ICW3负责记录与从片哪一个输入端与从片相连。
当主片输入端IRi上连接有从片的INT时,则Si=1;否则Si=0
从片ICW3:
A0 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
1 |
* |
* |
* |
* |
* |
ID2 |
ID1 |
ID0 |
从片ICW3负责自己连接到主片的哪一端。
应用ICW3时的注意点:
一是什么时候用ICW3:即当ICW1中的SNGI位为0时,也就是工作于级联方式,才需要ICW3设置8259A的状态。
二是(主片接出)判断哪个引脚(IR7—IR0)有级联:当D7—DO的某位为1时则接有从片,为0时不接从片。
三是(从片接入)判断接入主片的哪个引脚:是通过对D2 D1 D0三位的组合来判断接入的引脚。
(4) ICW4(方式控制初始化命令字)功能介绍:
A0 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
1 |
0 |
0 |
0 |
SFNM |
BUF |
M/S |
AEOI |
uPM |
ICW4负责缓冲器方式和中断结束方式的设置。
应用ICW4时的注意点:
一是什么时候写入ICW4:当ICW1的IC=1时,才使用ICW4。
二是命令字各位所代表的含义:
UPM:指定CPU类型:UPM=0时,工作于8080(8位机);UPM=1时,工作于8086(16位机)
AEOI:指定是否自动中断结束方式:1:自动中断结束方式;0:非自动中断结束方式。
BUF:8259A是否工作于缓冲方式:1:工作于缓冲方式、0:不工作于缓冲方式
SFNM:决定8259A在级联时是否工作于特殊全嵌套方式:1:工作于特殊全嵌套方式0:工作于一般全嵌套方式。