作为一种可编程中断控制器,8259A可以通过一组初始化命令字和操作命令字确定其工作方式和操作模式。8259A有四个初始化命令字和三个操作命令字,分别用ICW1~ICW4、OCW1~OCW3来表示。在微机系统中,一片8259A占用两个I/O端口,由片选信号和端口选择线A0共同确定。由于通常端口选择线A0连接到CPU的地址线A0,故两个I/O端口的地址通常为2n和2n+1,分别称为偶地址端口和奇地址端口。其中,ICW1、OCW2和OCW3写入偶地址端口,其余命令字写入奇地址端口。
1.初始化命令字
8259A初始化命令字有四个,分别用ICW1~ICW4表示,用于系统初始化时对8259A进行初始化设置,它们有着固定的写入次序。
1)ICW1
ICW1格式如图6-3所示。ICW1主要用来设定中断请求的触发方式,是否级联,初始化过程中是否使用ICW4等。
图6-3 ICW1格式
ICW1写入8259A的偶地址端口,且其D4位必须为1,以标识该命令字为初始化命令字ICW1。D7~D5位和D2位用于8080/8085系统,在X86系统中无效(通常以0填充)。D3位LTIM用于选择中断请求信号的触发方式,1为电平触发,0为边沿触发。D1位SNGL用来表示8259A是否级联使用,1代表系统中只有一片8259A,0代表有多片8259A级联使用。D0位IC4用来表示是否需要写入初始化命令字ICW4,对于X86微机系统,该指令字是必需的,即IC4必须为1。
2)ICW2
ICW2格式如图6-4所示,用来设置预置的中断类型码。
图6-4 ICW2格式
ICW2又称为中断向量字节,在用于8086/8088系统时,该命令字的高5位规定中断向量的高5位,即同一片8259A的8级中断的中断向量的高5位是相同的,而低3位是对应IR线的编码(000~111)。ICW2的低3位可以任意取值,一般取0。
3)ICW3
当系统中使用多片8259A级联时才需要写入ICW3,对于主片和从片,ICW3具有不同的格式。对于主片,ICW3的格式如图6-5所示。
图6-5 主片ICW3格式
对于从片,ICW3的格式如图6-6所示。
图6-6 从片ICW3格式
在系统中存在多片8259A级联的情况下,从片的INT端连接到主片的IRi输入端,并且紧随ICW2将ICW3写入各8259A的奇地址端口,以说明各8259A之间的连接关系。对于主片,Si为1代表相应的IRi连接有从8259A,否则对应IRi连接着中断源设备或未连接。对于从片,ID2~ID0用来说明从片连接到了主片的那个IRi端。例如,在PC/AT以上的X86微机系统中,两片8259A级联,从片连接到主片的IR2端,此时主片必须被送入ICW3命令字00000100(S2=1),从片则需要送入ICW3命令字00000010(2)。
4)ICW4
ICW4是一个用于综合设置的初始化指令字(见图6-7),在ICW1的IC4位为1时,ICW4会在ICW3(多片8259A级联)或ICW2(只有一片8259A)之后送到8259A的奇地址端口。
图6-7 ICW4格式
ICW4的D7~D5位填充为0,其后的D4位SFNM用来说明8259A的嵌套方式,SFNM=1表示8259A使用特殊全嵌套方式,为0表示8259A使用一般全嵌套方式。D3位BUF=1表示8259A工作在缓冲方式下,与系统数据总线之间通过总线驱动器相连,为0表示8259A工作在非缓冲方式,直接与系统数据总线相连。D2位M/S用于缓冲方式下工作的8259A,用来确定该片是主片还是从片。D1位AEOI用来选择中断结束方式,AEOI=1代表使用自动中断结束方式,AEOI=0代表使用一般EOI方式或特殊EOI方式。D0位用来描述8259A芯片的CPU环境,μPM=0代表8259A使用在以8080/8085为CPU的系统中,在以X86为CPU的微机系统中,μPM位必须置1。
8259A的四个初始化指令字在写入时必须遵循一定的次序,其中ICW1和ICW2是必须写入的,ICW3和ICW4则与8259A的应用环境有关。8259A的初始化过程如图6-8所示。(www.xing528.com)
图6-8 8259A初始化过程
在类似PC/AT这样的使用多片8259A级联的微机系统中,各8259A必须分别被初始化,只有所有的8259A都得到初始化之后,整个硬件中断系统才能够正常工作。
2.操作命令字
经过初始化编程后,8259A即进入设定的工作状态,接受IR0~IR7的中断请求。在运行过程中,用户还可以通过向8259A写入一些操作命令字来进一步对其进行控制。8259A支持三个操作命令字OCW1~OCW3。
1)OCW1
OCW1用于设定8259A的中断屏蔽寄存器IMR,故称中断屏蔽字。OCW1写入8259A的奇地址,其每一位Mi对应于一个IRi的中断屏蔽状态,当Mi=1时,IRi上的中断请求将被屏蔽(见图6-9)。
图6-9 OCW1格式
2)OCW2
OCW2用于控制8259A的中断结束和在中断结束的同时改变优先级的排序,故称中断结束命令字(见图6-10)。OCW2是一个组合命令字,写入8259A的偶地址。
图6-10 OCW2格式
中断结束命令字中D4和D3位为00,是OCW2的标志,其D7位R代表是否采用优先级循环方式,D6位SL代表L2~L0三位是否有效,D5位EOI=1代表中断结束命令,用来清除ISR中的某个位,这三个位具有8种不同的组合,它们代表了8种不同的操作。D2~D0三个位的L2~L0编码用来表示一个IRi,仅当SL位为1时方有效。R、SL和EOI三个位的8种不同组合如图6-11所示。
图6-11 OCW2中R、SL、EOI位的组合功能
例如,在X86微机系统中,8259A使用一般EOI,固定优先级,故需要使用R=0、SL=0、EOI=1的中断结束命令来实现中断的结束。这就要求所有的硬件中断服务程序在IRET指令之前向8259A的偶地址端口(20H或A0H)写一个中断结束指令字00100000,也就是20H。
3)OCW3
OCW3写入8259A的偶地址,其D4和D3位为01,是OCW3的标志,其余各位用来实现三个不同的功能(见图6-12)。
图6-12 OCW3格式
OCW3分为三个部分,D6和D5两个比特用来设置/取消特殊屏蔽方式。当ESMM位为1时,代表进行特殊屏蔽设置/取消操作,设置/取消特殊屏蔽方式由SMM位为1还是为0决定(SMM=1时设置特殊屏蔽方式,SMM=0时取消特殊屏蔽方式),ESMM为0代表不改变屏蔽方式。
OCW3的第二部分是其D2位,P=1是一条查询命令,代表下一次对偶地址的读操作可以得到8259A的中断状态字,在该状态字中,最高位用来表示当前是否有中断请求,如果最高位为1,则最低的三位用来表示当前响应的中断源编码。当P=1时,RR位和RIS位无效。
OCW3的第三部分是其D1和D0位,这两位的组合只有当P=0时才有效,用于对8259A中IRR和ISR寄存器进行读取。当RR=1时,代表下一次对偶地址的读操作可以得到8259A的某一个寄存器的当前值,而读取哪个寄存器则由RIS位确定,RIS=0代表读取IRR,RIS=1代表读取ISR。
IMR寄存器的读取不需要事先写入任何指令字,在8259A完成初始化操作后,任何时刻都可以通过对奇地址端口进行读操作获得8259A中断屏蔽寄存器IMR的内容。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。