•由于8259A只有一条地址线A0,所以它只能有两个端口地址,而8259A有7个命令字,每个命令字要写入相应的寄存器。为此,采取以下几点措施:
第一,以端口地址区分;
第二,把命令字中的某些位作为特征码来区分;
第三,以命令字的写入顺序来区分。
由表7.1可见,8259A只有一根端口选择线A0,这说明其内部只有两个I/O端口,对应于A0=0和1,分别叫做0口和1口。CPU只能通过这两个端口来实现对8259A中各寄存器的读/写操作。
表7.2给出了表7.1中各信号线对8259A读/写操作的控制真值表。其中D4、D3两位是初始化命令字(ICWi)或操作命令字(OCWi)中的标志特征位。对该表说明如下:
表7.2 A0、、
、
对8259A读/写操作的控制作用
A0 | | | | D4 | D3 | 读 写 操 作 |
0 | 0 | 1 | 0 | 0 | 0 | 数据总线→OCW2 |
0 | 0 | 1 | 0 | 0 | 1 | 数据总线→OCW3 |
0 | 0 | 1 | 0 | 1 | × | 数据总线→ICW1 |
1 | 0 | 1 | 0 | × | × | 数据总线→OCW1、ICW2、ICW3、ICW4 |
0 | 0 | 0 | 1 |
|
| IRR、ISR、中断级BCD码→数据总线 |
1 | 0 | 0 | 1 |
|
| IMR→数据总线 |
× | × | 1 | 1 | × | × | 禁止 |
× | 1 | × | × | × | × | 禁止 |
(1) OCW2、OCW3、ICW1和IRR、ISR、中断BCD都是通过0口(A0=0)来访问的,但因为前三个命令寄存器是只写的,而后三者是只读的,因此可通过读/写控制信号、
等于10或01来区分对它们的寻址。
(2) 同样,对通过同一端口——1口(A0=1)来访问的OCW1、ICW2、ICW3、ICW4和IMR,也可通过、
等于10或01来区分。
(3) 对既是同一端口(0口)、又都是只写寄存器的OCW2、OCW3和ICW1的访问是通过在命令字中引入两位标志位D4、D3来区分的。
(4) 对既是同一端口(1口)、又都是只写寄存器的ICW2、ICW3、ICW4和OCW1的访问,需要通过严格遵守规定的写入顺序来得到保证。8259A内部设置了与规定顺序相一致的时序控制逻辑。
(5) 对既是同一端口(0口),又都是只读寄存器的IRR、ISR和中断级BCD码的访问,决定于在读出之前,CPU写入芯片的操作命令字OCW3的内容。