7.4.3 DMA控制器8237A
DMA 控制器8237A 是8086/8088系列微处理器的配套芯片,可用来接管CPU 对总线的控制权,在存储器与I/O 设备之间建立直接进行数据块传送的高速通路。
1.8237A 芯片概述及主要功能
8237A 必须与一个8位锁存器(8282或其他代用芯片)配合使用,才能形成完整的4通道DMA 控制器。8237A 各通道可分别完成3种不同的操作:
(1)DMA 读操作,读存储器发送给I/O 设备。
(2)DMA 写操作,读I/O 设备写存储器。
(3)DMA 校验操作,此时通道不进行数据传送操作,只是完成校验功能。
当某一通道进入DMA 校验方式时,8237A 不产生对存储器和I/O 设备的读/写控制信号,但是仍保持对系统总线的控制权;并且每一个DMA 周期都将响应I/O 设备的DMA 请求,发出DACK 信号,I/O 设备可使用这一响应信号对所得到的数据进行某种校验操作。因此,DMA 校验操作并不是由8237A 自身完成的。
8237A 可处于主工作状态和从工作状态。在8237A 未取得总线控制权以前,CPU 处于主工作状态,8237A 处于从工作状态。当8237A 取得总线控制权后,8237A 便上升为主工作状态,完全在8237A 控制下完成存储器和I/O 设备之间的数据传送功能,CPU 不再参与数据传送的控制。
8237A 是一种双列直插式的高性能可编程DMA 控制器,共40个引脚。8237A 采用+5 V工作电源,主频为5 MHz,传送速度可达1.6 MB/s。8237A 的主要功能如下:
(1)每个8237A 芯片中有4个可以独立传送数据的DMA 通道,每个DMA 通道可控制4个I/O 设备进行数据传送。
(2)可以分别允许或禁止每个通道的DMA 请求。4个通道的DMA 请求有不同的优先级,优先级可以是固定的,也可以是循环的。
(3)每个通道进行一次DMA 传送的数据最大长度可达64 KB。DMA 数据传送可以在存储器与I/O 设备间进行,也可以在存储器的两个区域之间进行。
(4)8237A 进行DMA 数据传送的方式有4种,分别为单字节传送、数据块传送、请求传送和级联传送方式。
(5)如果通道数不够,可以通过级联方式,将几片8237A 级联在一起,以扩展更多的通道。
2.8237A 的工作状态
在DMA 控制器获得总线控制权之前,它受CPU 的控制,需要由CPU 对DMA 控制器进行编程,以确定通道的选择、数据传送的方式和类型、内存单元起始地址、地址是递增还是递减及传送的总字节数等。CPU 也可以读取DMA 控制总线的状态,此时,CPU 处于主工作状态,而DMA 控制器和其他芯片一样,是系统总线的从设备,它的工作方式被称为从工作状态方式。
当DMA 控制器得到总线控制权后,DMA 就处于主工作状态,在DMA 控制下,I/O 设备和存储器之间或存储器与存储器之间可进行直接的数据传送。
3.8237A 内部结构
8237A 的内部结构如图7.18所示,主要包括有4个通道的内部寄存器组、时序与控制逻辑、优先级编码电路、地址/数据缓冲器组、命令控制逻辑5个部分。
图7.18 8237A 的内部结构
(1)内部寄存器组:8237A 有4个独立的DMA 通道,每个通道都有各自的7个寄存器,这些寄存器包括:基地址寄存器、基字节寄存器、当前地址寄存器、当前字节寄存器、模式寄存器、请求触发寄存器和屏蔽寄存器。另外,8237A 内部还有这4个通道共用的命令寄存器、状态寄存器、DMA 服务请求寄存器以及暂存寄存器等。通过对这些寄存器的编程,可设置8237A 优先级管理方式,设置8237A 的工作方式以及实现存储器之间数据传送等一系列操作。
(2)时序与控制逻辑:当8237A 处于从工作状态时,这部分电路用于接收从CPU 发送来的复位、时钟、片选和读/写控制等信号,完成相应的控制操作;当8237A 处于主工作状态时,则向存储器、I/O 设备发出相应的控制信号。
(3)优先级编码电路:该部分电路根据CPU 在8237A 初始化时送来的命令,对同时提出DMA 请求的多个通道进行优先级排队判优。判优可以是固定判优也可以是循环判优。固定判优是指四个通道的优先级是不变的,即通道0优先级最高,其次是通道1,通道3的优先级最低。在循环判优中,四个通道的优先级不断变化,即本次循环执行DMA 操作的通道,到下一次循环为优先级最低。不论优先级是高还是低,只要某个通道正在进行DMA 操作,其他通道无论级别高低,均不能打断当前的操作。当前通道操作结束后,再根据优先级的高低,响应下一个通道的DMA 操作申请。
(4)数据/地址缓冲器组:这部分包括两个I/O 缓冲器和一个输出缓冲器,通过这三个缓冲器可以把8237A 的数据线、地址线和CPU 的系统总线相连。8237A 的A 0~A 7为地址线。DB0~DB7在8237A 处于从工作状态时传输数据,主工作状态时传送地址。
(5)命令控制逻辑:该部分电路在主工作状态时,对CPU 送来方式字的最低两位D1 D0进行译码,以确定DMA 的操作类型。该部分电路在从工作状态时,接收CPU 送来的寄存器选择信号A0~A3,选择8237A 内部相应的寄存器;A0~A3与、
两个信号配合可组成各种操作命令。
4.8237A 引脚及功能
如图7.19所示,8237A 是一个40引脚的双列直插式芯片。因为8237A 既可做主模块又可做从模块,所以其外部引脚设置也具有一定的特点。如8237A 的I/O 读/写线和数据线是双向的,还设置了存储器读/写线和16位地址输出线,这些都是其他I/O 接口芯片所没有的。
图7.19 8237A 的引脚
下面具体地介绍一下8237A 的各个引脚:
(1)CLK:时钟信号,输入。该信号用来控制8237A 的内部定时和数据传送速率。8237A 的时钟频率为4 MHz,之后改进的8237A-5DMA 控制器,时钟频率可达到5 MHz。
(2):片选信号,输入,低电平有效。在从工作状态下,即空闲时,当
有效时选中8237A,这时DMA 控制器作为一个普通的I/O 设备,允许CPU 向其输出工作方式控制字、操作方式控制字,或读入状态寄存器中的内容。
(3)RESET:复位信号,输入,高电平有效。当8237A 被复位时,其屏蔽寄存器被置1,其余寄存器置0,8237A 处于从工作状态,即不作为DMA 控制器,仅作为一般I/O 设备。
(4)READY:准备就绪信号,输入,高电平有效。当进行DMA 操作,参与传送的设备中有慢速I/O 设备或存储器速度比较慢时,可能需要延长读/写操作周期,这时可使READY 信号为低电平,自动插入等待周期Tw,直到READY 变成高电平,恢复正常节拍。
(5)ADSTB:地址选通信号,输出,高电平有效。此信号有效时,将通过DB0~DB7 将8237A 缓冲器的高8位地址信号传送到片外地址锁存器。
(6)AEN:地址允许信号,输出,高电平有效。此信号有效时,将由片外锁存器锁存的高8位地址送入地址总线,与芯片直接输出的低8位地址一起构成16位内存偏移地址。同时,AEN 信号使得与CPU 相连的地址锁存器无效,从而保证了地址总线上的信号来自DMA 控制器,而不是来自CPU。
(7):存储器读信号,输出,低电平有效。当8237A 处于主工作状态时,可与
配合把数据从存储器读出到外设中,也可用于控制存储器间的数据传送,把数据从源地址单元中读出。当8237A 处于从工作状态时,该信号无效。
(8):存储器写信号,输出,低电平有效。当8237A 处于主工作状态时,可与
配合将数据从I/O 设备写入存储器,也可用于存储器间的数据传送,实现把数据写入目的地址单元。当8237A 处于从工作状态时,该信号无效。
(9):输入/输出设备读信号,双向,低电平有效。当8237A 处于从工作状态时,
是由CPU 向8237A 发送的控制信号,表示CPU 读取8237A 内部寄存器的值,该信号为输入信号。当8237A 处于主工作状态时,IOR 是由8237A 发给I/O 设备的读控制信号,表示从I/O 设备读数据并送到内存单元,该信号为输出信号。
(10):输入/输出设备写信号,双向,低电平有效。当8237A 处于从工作状态时,
作为输入控制信号,当它为低电平时,CPU 向8237A 的内部寄存器中写入信息,对8237A 进行初始化编程。当8237A 处于主工作状态时,它作为输出控制信号,与
相配合,将从存储器读出的数据写入I/O 设备中。
(11):传输过程结束信号,双向,低电平有效。在DMA 周期,当8237A 的任一通道中的当前字计数器减为0,8237A 会在
引脚上输出一个有效的低电平信号,作为DMA 传输过程结束信号。反之,如果外部输入一个低电平信号到
引脚上,就会强制终止DMA 传送,并使8237A 内部寄存器复位。
(12)DREQ0~DREQ3:通道0~3的DMA的请求信号,输入,有效电平可由工作方式控制字确定。它们分别是连接到四个通道的I/O设备,向8237A请求DMA操作的请求信号。DREQ信号需要保持有效电平一直到8237A控制器做出DMA应答信号DACK为止。当8237A被复位时,DREQ信号被初始化为高电平有效。在8237A采用固定优先级的情况下,DREQ0的优先级最高,DREQ3的优先级最低。当8237A采用循环优先级时,其优先级可以循环改变。
(13)DACK 0~DACK 3:通道0~3的DMA 响应信号,输出,有效电平可由工作方式控制字确定。DACK 信号是由8237A 控制器发给四个通道中申请DMA 操作的通道的应答信号。当8237A 收到从CPU 传来的允许响应信号HLDA,开始DMA 传送后,相应通道的DACK 信号升为高电平,用来通知外部电路现已进入DMA 周期。
(14)HRQ:总线请求信号,输出,高电平有效。该信号送到CPU 的HOLD 端,是DMA 控制器接到某个通道的DMA 请求信号后,且该通道请求未被屏蔽情况下,DMA 控制器向CPU 发出请求占用总线的信号。
(15)HLDA:总线响应信号,输入,高电平有效。此引脚与CPU 的HLDA 端相连,此信号是CPU 发给8237A,同意8237A 占用总线控制权请求的应答信号。当8237A 接收到HLDA 信号后,即可进行DMA 操作。
(16)A0~A3:低8位地址线的低4位,双向。A0~A3有两种不同的使用情况,第一种是当8237A 处于从工作状态,作为一般I/O 接口,A 0~A 3为输入,作为选中8237A 内部寄存器的地址选择线;第二种是当8237A 处于主工作状态时,A0~A3为输出,作为选中存储器的低4位地址来使用。
(17)A4~A7:低8位地址线的高4位,输出。A4~A7仅用在8237A 处于主工作状态时,提供访问存储器低字节的高4位地址。
(18)DB0~DB7:8 位数据线,双向。DB0 ~DB7 数据线的作用主要有3 个:一是当8237A 处于从工作状态时,提供CPU 访问8237A 寄存器的数据通道;二是在8237A 接到CPU 发出的HLDA 应答信号后,将访问存储器的高8位地址通过DB0~DB7送到外部缓冲器锁存;三是当8237A 处于主工作状态时,在读周期把源存储器的数据经DB0~DB7线送入数据缓冲器保存,在写周期再把数据缓冲器保存的数据经DB0~DB7传送到目的存储器。
5.工作方式
8237A 可以工作在主工作状态和从工作状态,当它没有获得总线控制权时,作为从设备由CPU 控制,可完成初始化操作。8237A 一旦获得总线控制权,就由从属状态变为主控状态进行DMA 数据传送。数据传送完毕,8237A 将总线控制权交还给CPU,又由主工作状态变为从工作状态。
当8237A 从CPU 获得总线控制权后,作为主控设备执行DMA 传送时有以下4种数据传送方式。
(1)单字节传送方式
8237A 控制器每响应一次DMA 申请,只传送一个字节的数据,数据传送后当前字节计数器自动减1,当前地址寄存器作加1或减1修改;8237A 撤销HRQ 信号,释放系统总线控制权,并退还给CPU。如果传送使当前字节计数器减为0,或接收到外部信号时,终止DMA 过程。
(2)块传送方式
在这种传送方式下,8237A 每响应一次DMA 请求要连续地传送一个数据块,直到当前字节计数器减为0或接收到外部信号时,终止DMA 传送,8237A 释放总线。8237A在进行块传送时,HRQ 信号一直保持有效。(3)请求传送方式
这种方式与块传送方式类似,按照字节计数器的设定值进行传送,只是在这种传送方式下,要求DREQ 在整个传送期间一直保持有效,8237A 每传送一个字节就要检测一次DREQ,若有效则继续传送下一个字节;若无效则停止传送,结束DMA 过程。此时,DMA的传送现场全部保留,待请求信号DREQ 再次有效时,8237A 按原来的计数和地址值继续进行传送,直到计数器减为0或接收到外部信号时才终止DMA 传送,释放总线。
(4)级联传送方式
这种传送方式实际上是扩充通道数,当一片8237A 通道不够用时,可通过多片级联的方式增加DMA 通道。8237A 级联方式如图7.20所示,级联由主、从两级构成,从片8237A的HRQ 和HLDA 引脚分别与主片8237A 的DREQ 和DACK 引脚相连,一个主片至多可连接四个从片。在级联工作方式下,8237A 从片负责进行DMA 数据传送,主片在从片和CPU 之间传递联络信号,并负责对从片的优先级进行管理。
图7.20 8237A 的级联方式
6.8237A 的工作时序
(1)I/O 设备和内存间的DMA 数据传送时序
8237A 主要用于I/O 设备和内存之间进行高速的数据传输,其时序如图7.21所示。
图7.21 I/O 设备和内存间DMA 数据传送时序
8237A 有两个工作周期,即空闲周期(8237A 处于从工作状态)和有效周期(8237A 处于主工作状态)。每个工作周期都包含若干操作状态,8237A 共设有7个独立的操作状态:SI、S0、S1、S2、S3、S4和SW,每个状态对应一个时钟周期。
在8237A 的7个操作状态中,SI称为非操作状态,当8327A 未接到DMA 请求时便进入SI状态,在SI状态下,CPU 可通过编程,预置8237A 的操作方式。S0称为DMA 服务的第一个状态,此时8237A 已向CPU 发出一个DMA 请求信号,但还没收到应答信号。当8237A 收到CPU 的应答信号HLDA 后,DMA 数据传送正式开始。S1、S2、S3和S4称为DMA 服务的工作状态,慢速设备可以通过使用READY 信号线,在S2和S4或S3和S4之间插入等待状态SW。
(2)空闲周期
在8237A 上电之后、未编程前或无DMA 请求时处于空闲周期,这时8237A 处于从工作状态。此时,8237A 一方面对DREQ 线进行采样,以确定是否有DMA 请求;另一方面对端进行采样,若
为低电平(有效),而DREQ 也为低电平(无效)则进入编程状态。这时,CPU 可对8237A 进行编程,把各种命令参数写入内部寄存器,或者从内部寄存器中读出数据进行检查。
(3)有效周期
当8237A 初始化完成后,在SI状态检测到外部有效的DREQ 信号,就向CPU 发出DMA 请求信号HRQ,并进入有效周期S0状态,等待允许DMA 操作的应答信号HLDA。此时,8237A 仍然可以接受CPU 的访问,S0是一个由从工作状态到主工作状态的过渡阶段。如果8237A 在S0周期的上升沿检测到HLDA 信号(高电平),则表示CPU 已交出系统总线的控制权,下一个周期8237A 便可进入DMA 传送状态周期S1。
8237A 的一个完整的DMA 传送周期由S1、S2、S3和S4共4个状态组成。S1状态周期用来更新高8位地址。8237A 在S1状态周期,发出地址允许信号AEN,将要访问的存储单元的高8位地址A8~A 15送到数据总线DB0~DB7上,并发地址选通信号ADSTB。ADSTB信号的下降沿(S2 周期内)把高8 位地址锁存到外部的地址锁存器中,低8 位地址A0~A7由8237A 直接送到地址总线上,在整个DMA 传送中都要加以保持。
在S2状态周期中,8237 A 要完成两个工作。首先要修改存储单元的低16 位地址。此时8237A 通过DB0~DB7线输出这16位地址的高8位A8~A15,通过A0~A7线输出16位地址的低8位。其次,8237 A 要向I/O 设备输出DMA 响应信号DACK,并使读/写信号有效,这样I/O 设备与内存间才可在读/写信号控制下交换数据。通常DREQ 信号必须保持到DACK 有效之后才能失效,在图7.20 中用多条斜线表示失效允许的时间范围。
S3状态为读周期。在这个状态下,发出DMA 读或写命令。此时,将从内存或I/O 设备读取的8位数据发送到DB0~DB7线上并等待写周期的到来。如果采用提前写方式,则在S3中同时发出DMA 读和DMA 写命令,即把写命令提前到与读命令同时从S3开始。如果采用压缩时序,则可以将S3去掉,从S2直接到S4。
S4状态为写周期。在这个状态下,发出DMA 读或写命令。此时,将读周期之后保存在数据线DB0~DB7线上的数据字节写到内存或I/O 设备。到此,8237A 完成了一个字节的数据传送。
(4)扩展写周期
如前所述,8237A 的一个完整的DMA 传送周期由S1、S2、S3和S4共4个状态组成。在系统允许的范围内,为了加快数据传送,8237A 可以采用压缩时序,即将传送时间压缩到S2和S4两个时钟周期内。压缩时序只能在连续传送数据的DMA 操作中使用。不管是正常时序还是压缩时序,当高8位地址需要修正时,S1状态仍必须按时出现。
如果I/O 设备的速度比较慢,采用正常时序不能满足要求,那么就要在硬件上通过将READY 信号变为低电平来使8237A 插入等待状态SW 来对传送周期进行扩展。一些I/O设备是利用8237A 发出的信号或者
信号的下降沿来产生READY 信号的,而这两个信号都是在传送过程的最后才发出的。为了将写脉冲拉宽,并且使它们提前到来,就要用到扩展写信号的功能。扩展写信号的功能是通过对命令寄存器的D5位的设置来实现的,当将D5位置1时,写信号被扩展到两个时钟周期。
对于慢速的存储器和I/O 设备,在S3后半个周期,8237A 检测READY 输入信号,如果其为低电平则插入等待状态SW,直到READY 变为高电平,才进入S4。在S4结束时,8237A 完 成DMA 数 据 传 输。
7.8237A 的内部寄存器
8237A 有两类内部寄存器,一类为通道寄存器,另一类为命令和状态寄存器。8237A共有4个通道,每个通道有5个通道寄存器,分别是:基地址寄存器、当前地址寄存器、基字节计数器、当前字节计数器和工作方式寄存器,这些寄存器的值由CPU 在初始化时写入。8237A 的另一类寄存器为命令和状态寄存器,这类寄存器是4个通道所共用的,命令寄存器用来设置8237A 的传送方式和请求控制方式等,命令寄存器的值由CPU 在初始化时写入;状态寄存器用来存放8237A 的工作状态信息,可供CPU 读取、查询。8237A 各寄存器的接口地址分配及读写功能如表7.1所示。
表7.1 8237A的内部寄存器的端口分配及读写功能
(1)命令寄存器
命令寄存器的格式如图7.22所示。
D0:负责控制存储器到存储器传送。D0=1时,允许存储器到存储器传送,D0=0时,禁止存储器到存储器传送。由通道0和通道1控制在存储器之间传送数据。8237A 由通道0从源地址单元中读出数据并存储到暂存寄存器中,再由通道1从暂存寄存器中读出数据并写入目的单元中。当通道1的当前字节计数器减为0时,8237A 产生信号,结束当前的DMA 数据传送。
图7.22 命令寄存器的格式
D1:在存储器到存储器传送的过程中,负责控制通道0的源地址不变。D1=1,保持通道0的源地址不变;D1=0,不保持通道0的源地址不变。这样做可以使源地址内的同一个数据传送到一组目的存储单元中去。当D0=0时,D1位无意义。
D2:负责控制8237A 工作允许与否。D2=0,允许8237A 工作;D2=1,禁止8237A工作。
D3:选择8237A 读时序。D3=0时,8237A 选择正常读时序;D3=1时,8237A 选择压缩读时序。
D4:负责设置8237A 通道的优先级。D4=0,采用固定优先级;D4=1,采用循环优先级。
D5:负责控制写入的时刻。D5=0,采用滞后写;D5=1,采用扩展写。
D6:决定请求信号DREQ 的有效电平。当D6=0时,DREQ 高电平有效;当D6=1时,DREQ 低电平有效。
D7:决定响应信号DACK 的有效电平。当D7=0时,DACK 低电平有效;当D7=1时,DACK 高电平有效。
(2)工作方式寄存器
工作方式寄存器的格式如图7.23所示。
D1D0:负责DMA 传送时的通道选择。D1D0=00~11分别与通道0~通道3相对应。
D3D2:决定DMA 传送类型。D3D2=01 为写传送,将I/O 设备的数据写入存储器;D3D2=10为读传送,将存储器中的数据读出送至I/O 设备;D3D2=00为校验方式,是一种伪传送,此时存储器和I/O 接口的控制信号无效,但是在每一个DMA 周期后,地址加1或减1,字节计数器减1,直至减到0,产生信号,可以利用这个时序进行校验操作。
D4:决定自动设置方式。如果D4=1,则当计数器减为0并产生信号时,当前字节计数器和当前地址寄存器会自动地从基字节计数器和基地址寄存器中获取初值,又从头开始重复操作。
D5:决定每传送一个字节后地址是自增还是自减。当一个字节数据传送完毕,如果D5=0,则地址加1;如果D5=1,则地址减1。
图7.23 工作方式寄存器的格式
D7D6:决定DMA 传送方式。D7D6的取值决定8237A 的4种数据传送方式,D7D6=00为请求传送,D7D6=01 为单字节传送,D7D6=10 为数据块传送,D7D6=11 为级联方式。
(3)请求寄存器
DMA 请求既可以由I/O 设备发出,也可以通过写入请求命令(软件)产生。请求寄存器的格式如图7.24所示。
D1D0:负责通道选择。D1D0=00~11分别与通道0~通道3相对应。
D2:DMA 请求使能位。D2=1,表示该通道有DMA 请求;D2=0,表示该通道无DMA请求。
当执行存储器到存储器的DMA 传送时,启动DMA 过程的不是外部的DREQ 信号,而是由内部软件发送DMA 请求实现的。即通过编程对通道0的请求寄存器写入DMA 请求04 H 命令,从而产生DREQ 请求,使8237A 产生总线请求信号HRQ,启动DMA 传送。
图7.24 请求寄存器的格式
(4)屏蔽寄存器
该寄存器用来禁止或允许某通道的DMA 请求。当某个通道的屏蔽位=1时,8237A禁止该通道的DMA 请求。通道的屏蔽位可用下面两种命令字置位或清除。
①单通道屏蔽字。单通道屏蔽字的格式如图7.25所示,它每次只能屏蔽一个通道。
D1D0:负责通道选择。D1D0=00~11分别与通道0~通道3相对应。
D2:表示屏蔽与否。D2=1,禁止此通道的DMA 请求;D2=0,允许此通道的DMA请求。
图7.25 单通道屏蔽字的格式
②四通道屏蔽字。四通道屏蔽字用来同时设定四个通道的屏蔽位,格式如图7.26所示。
图7.26 四通道屏蔽字的格式
D3D2D1D0分别与通道3、2、1、0的屏蔽位相对应,若为1,则禁止该通道的DMA 请求;若为0,则允许该通道的DMA 请求。
(5)状态寄存器
状态寄存器用来存放8237A 各通道的工作状态与请求标志,格式如图7.27所示。
图7.27 状态寄存器的格式
D3D2D1D0:分别表示通道3、2、1、0的终止计数状态。当某通道终止计数(计数值为“0”)或出现外部的信号,则相应位置1;8237A 复位或CPU 读后,此4位将被清除。
D7D6D5D4:分别表示通道3、2、1、0的请求信号DREQ 的输入是否有效。为1表示该通道的DMA 传送过程已经结束/有DMA 请求,为0表示该通道的DMA 传送过程未结束/无DMA 请求,
(6)暂存寄存器
暂存寄存器用于对数据的暂时保存。当8237A 进行从存储器到存储器的DMA 数据传送时,先由通道0将源存储单元中的数据读出,保存到暂存寄存器中,再由通道1从暂存寄存器中读出数据,传送到目的存储单元中。
(7)清除命令
8237A 的清除命令不需要写入命令寄存器,只需要对特定的DMA 端口执行一次写操作即可完成清除任务,并且与写入的数据无关。8237A 的清除命令共有3条:
①主清除命令。主清除命令的功能与硬件RESET 信号作用类似,可以对8237A 进行软件复位。执行主清除命令,只要对A3~A0=1101 的端口进行一次写操作,便可以使8237A 处于复位状态。
②清除先/后触发器命令。在向8237A 通道内的16位寄存器进行读写时,因为数据线是8位,所以要分2次写入。可以用先/后触发器来控制读/写16位寄存器的高字节还是低字节。当先/后触发器为“0”时,对低字节操作;当先/后触发器为“1”时,对高字节操作。要注意先/后触发器有自动置位功能,在执行RESET 或清除命令之后,该触发器为“0”,CPU可访问寄存器的低字节。当CPU 访问之后,先/后触发器自动置位为“1”,CPU 可访问寄存器的高字节。当CPU 再次访问之后,先/后触发器又自动置位为“0”。先/后触发器的端口地址为A3~A0=1100。
③清除屏蔽位命令。当8237A 的DMA 通道初始化时,需要清除屏蔽位以开放各通道的DMA 请求。执行清除屏蔽位命令只需对端口地址A3~A0=1110(屏蔽寄存器地址)进行一次写“0”操作,就可清除四个通道的屏蔽位,开放全部通道的DMA 请求。