4、寄存器和编程 在"8237A的结构"一节,介绍了8237A的主要寄存器。本节着重介绍编程寄存器各数据位的意义和编程方法。 1) 编程寄存器数据位的意义 ● 命令寄存器 命令寄存器(command register)控制8237A的操作。图3-24 给出了命令寄存器各位的功能。 命令寄存器利用D0位选择是否使用存储器到存储器的DMA传送模式。如果选择存储器到存储器的传送。8237A规定由通道0和通道1来实现。通道0存放源存储器地址,通道1存放目标存储器地址(这类似于MOVSB指令的操作)。一个字节由通道0访问的地址读出,存入8237内部的暂存寄存器,然后,8237启动一个存储器写周期,将暂存寄存器的内容写入通道1选择的存储器地址当中,所传输的字节数由通道1设置的计数寄存器值决定。 也可以将通道0访问的存储器地址固定,仅仅通道1访问的存储器地址发生变化。这种存储器到存储器的传送,可以用来将某一地址单元存储器的值填充到一个区域的存储器当中。命令寄存器的D1位用来选择是否将通道0的地址保持不变。 D2位用做允许或禁止整个DMA控制器,初始化时必须将D2位置为允许DMA的逻辑1。使用正常传送时序或压缩传送时序由D3位决定。正常传送时序的一个DMA周期包含3个时钟周期,压缩传送时序包含2个时钟周期。D5位用于正常时序情况下的写脉冲扩展,在通道连接的I/O设备需要较宽的写脉冲时,使得写脉冲可以提前一个时钟周期有效。 D4位确定4个DMA请求的优先级方式,有固定优先和循环优先两种。在固定优先级方式中,通道0优先级最高。在循环优先级方式中,最近被服务过的通道优先级最低,循环优先方式所有通道优先级相等。 D6和D7位编程输入信号DREQ和输出信号DACK的极性。 |