转自http://freeforever.bokee.com/1537539.html
8259A初始化命令字(ICW1-ICW4):8259A的中断操作功能很强,包括中断的请求、屏蔽、排队、结束、级联以及提供中断类型号和查询等操作,并且其操作的方式又有不同。它既能实现向量中断,又能进行中断查询,它可以用于16位机,也可用于8位机。因此,使用起来感到复杂且不好掌握。为此,以8259A的操作功能为线索,来讨论为实现这些功能的各个命令字的含义,为编程使用 8259A提供一些思路。
- ICW1~ICW4在初始化程序中设定,且在整个工作过程中保持不变。
- ICW1~ICW4必须按顺序设定。
- ICW1写入8259偶地址中(A0=0,在AT机中为20H/A0H),ICW2~ICW3写入8259奇地址中(A0=1,在AT机中为21H/A1H)。
ICW1: ICW2: ICW3: ICW4:
中断方式字ICW1:
ICW1是用来设定中断请求触发的方式的命令字。它的各位有如下意义:
D4=1:作为ICW1的标志。
D0(IC4)=1:指出初始化程序中将设置ICW4。
D1(SNGL):D1=0,系统中只有一片8259;D1=1,系统中有多片8259。
D2(ADI):在8086/8088系统中不起作用,设定为0。
D3(LTIM):D3=0,边沿触发;D3=1,电平触发。
中断方式字ICW2:
ICW2是8259A提供给CPU的中断类型号,此中断类型号是一个8位的代码,是通过初始化命令ICW2提供的。但由于ICW2的低3位被8位机占用,因此只有高5位是在初始化编程时,通过命令字ICW2写入的,它的低3位是由中断请求线IRi的二进制编码(如IR4的编码为100)决定,并且是在第一个INTA到来时,见这个编码写入低3位的。
因此,有这样的规定:中断源的中断号是由高5位和低3位相加得到的。高5位由ICW2指定;而其低3位是由中断源所连接的中断请求输入线IR7~IRO的优先级编码决定,并在CPU读取中断号之前,由8259A自动填写。
例如,ICW2=08H,则IR0~IR7请求对应的中断类型码分别为:08H、09H、0AH、0BH、0CH、0DH、0EH、0FH。 ICW2=70H,IR0~IR7请求对应的中断类型码分别为:70H、71H、72H、73H、74H、75H、76H、77H。
中断方式字ICW3:
ICW3设置主8259和从8259的联结关系(仅当ICW1中的SGGL=1,系统中有多片8259级联时,才设置ICW3)。
主8259的ICW3:指出主8259的哪些引脚上联有从8259。
如:ICW3=11110000B,则主8259的IR7、IR6、IR5、IR4上均连有从8259。
从8259的ICW3:
ID2~ID0的编码值,指出该从8259的INT联至主8259的哪个引脚,如联至IR5,则ID2~ID0=101。在多片8259级联的系统中,主 8259的CAS2~CAS0与所有从8259的CAS2~CAS0联在一起,主8259的CAS2~CAS0作为输出,从8259的CAS2~CAS0 作为输入。
当第一个INTA到来时,主8259的CAS2~CAS0输出从8259的编码ID2~ID0。从8259收到该编码后,与其自身的ID2~ID0(在ICW3中)比较,如果相等,则在第二个INTA到来时,该片从8259发出中断类型码。
中断方式字ICW4:
D7~D5: 000为ICW4的标志
SFNM:SFNM=1,特殊的全嵌套方式(Specific Full Nested Mode);SFNM=0,其它的优先级方式
BUF: BUF=1,缓冲方式(Buffered),8259数据线经总线驱动器与系统数据总线相连。BUF=0,非缓冲方式,8259数据线直接与系统数据总线相连。
M/S:主片/从片(Master/Slave)
若BUF=1,M/S=1为主片,M/S=0为从片;若BUF=0,M/S不起作用。
AEOI: AEOI=1,中断自动结束方式(AEOI,Automatic End of Interrupt);AEOI=0,其它结束方式。
|