8237A的软件命令
n/ p- i5 k6 [2 J 除了有10种能和CPU通信的寄存器外,8237A还有3种软件命令。所谓软件命令,是指不需要通过数据总线写入控制字,而直接由地址和控制信号译码得到的命令。说得通俗些,软件命令是对一些特定端口地址进行操作的输出指令,执行这些输出指令时,只要地址的低4位A3~A0是规定的值,就产生相应的作用。在这样的输出指令中输出数据是不起作用的。表6.9给出了8237A寄存器和软件命令的寻址。
+ I0 H x7 K) B4 y+ a
1)清除高/低触发器命令
$ S' |' f% p4 I! s1 d
8237A的数据总线只有8位,写入和读出16位的寄存器需分两次进行。为此,8237A设置了高/低触发器。该触发器为0,对16位寄存器进行读/写是读/写低8位;为1,则读/写高8位。清除高/低触发器命令是将高/低触发器清0。
6 s8 x4 j! p: N7 R$ Y
8237A复位后,高/低触发器被清O。每当16位寄存器进行一次操作(读/写8位),该触发器都要改变状态。设该触发器的初始状态为0,现对某16位寄存器操作,则读/写的是低8位。操作之后该触发器变为1,接着对该寄存器操作,就自动地针对高8位。此后,该触发器又变为0,如果再对另一16位寄存器进行操作,则对其低8位操作。由此可见,一般情况下,可分两次对16位寄存器进行操作,而不必过问高/低触发器。
A( ]7 p" S* v% m" Q
设置清除高/低触发器命令为改变读/写操作的顺序提供了手段。例如,对低8位操作后,通过清除高/低触发器命令可将刚被置1的高/低触发器清0,以便再继续进行低8位操作。
) ^6 i, L5 E% n0 M8 z 2)主清除命令
4 ]- ? ` A7 M& t6 C5 R$ @7 C 该命令的作用同硬件复位。它使命令寄存器、状态寄存器、请求寄存器、临时寄存器以及内部高/低触发器清0,使屏蔽寄存器置为全1(即屏蔽状态),使8237A处于空闲周期。
; j* G4 U4 I g7 ?- z" U 3)清屏蔽寄存器命令
! y' @/ [+ t" }8 W/ t 该命令清除4个通道的全部屏蔽位,允许各通道接受DMA请求。
. \- u4 |0 l( Q2 K5 u$ x0 h" k
( [( q5 d/ R, m8 n) ]% p" F