1.8237的内部结构
8237的内部结构组成框图如图8-3所示,主要包含以下几个部分:
①4个独立的DMA通道。每个通道都有一个16位的基地址寄存器、一个16位的基字节数计数器、一个16位的当前地址寄存器、一个16位的当前字节数计数器及一个8位的方式寄存器,方式寄存器接收并保存来自于CPU的方式控制字,使本通道能够工作于不同的方式下。图8-3中的“读缓冲”和“读/写缓冲”每个通道有一套,因此共有4套。
②定时及控制逻辑电路。在DMA请求服务之前,CPU编程对给定的命令字和方式控制字进行译码,以确定DMA的工作方式,并控制产生所需要的定时信号。
图8-3 8237的内部结构组成框图
③优先级编码逻辑。对通道进行优先级编码,确定在同时接收到不同通道的DMA请求时,能够确定相应的先后次序。每个通道的优先级可以通过编程确定为是固定的优先权,或者是循环优先权。
④共用寄存器。除了每个通道中的寄存器之外,整个芯片还有一些共用的寄存器:包括一个16位的地址暂存寄存器、一个16位的字节数暂存寄存器、一个8位的状态寄存器、一个8位的命令寄存器、一个8位的暂存寄存器、一个4位的屏蔽寄存器和一个4位的请求寄存器等。后面将对这些寄存器的功能与作用进行较为详细的介绍。
⑤8237的数据引线、地址引线都有三态缓冲器,因而可以连接也可以释放总线。
8237内部寄存器的类型和数量见表8-1。其中,凡数量为4个的寄存器,则每个通道一个,凡数量只有一个的,则为各通道所共用。
表8-1 8237的内部寄存器的类型和数量
2.8237的工作时序
8237的工作时序如图8-4所示。
为了区别于CPU的时钟周期,DMA的每一个时钟周期称为一个S状态。
①SI状态是空闲状态。在进入DMA传输之前,8237一直处在连续的SI状态。这时8237作为从属器件,可以接受CPU的编程写或读。在SI状态中8237要不断地采样各DREQ信号。若有DREQ信号(一个或多个)产生,且经过屏蔽逻辑及优先级排队后仍有效,在SI的上升沿产生HRQ信号,向CPU发出总线请求,同时结束SI状态,进入S0状态。
②S0状态中8237等待CPU的总线响应信号HLDA,在HLDA信号有效之前,8237一直重复S0状态。S0状态中的8237还是从属器件,可以接收CPU的读/写。在某个S0的上升沿检测到HLDA信号有效以后,则下一状态开始S1。真正的DMA传送是从S1状态开始的。
(3)S1状态首先产生AEN信号,使CPU等其他总线器件的地址线和系统总线的地址线断开,而使8237的地址线接通。AEN信号一旦产生后在整个DMA过程中一直有效。S1状态还有一个作用是产生DMA地址选通信号ADSTB,将DB7~DB0上送出的地址信号A15~A8用ADSTB的下降沿锁存到外部锁存器中。考虑到在块传送方式中,相邻字节的高位地址往往是相同的。最极端的情况下,连续传送256个字节,低位地址A7~A0计数产生进位,地址A15~A8才变化一次。因此不必每次都用ADSTB信号将一个不变的A15~A8重复锁存。这种情况下,连续下去的DMA时序中省去S1状态,不产生ADSTB信号,直接从S2状态开始,如图8-4中后一部分所示。
图8-4 8237的工作时序
④S2状态中8237产生DMA响应信号DACK给外部设备。得到响应的外部设备,可用DACK信号实现CPU控制总线时片选信号的作用,使自己在整个DMA期间都处于选中状态,同时地址总线上出现所要访问的存储器地址A15~A0。
⑤S3状态产生或读信号,于是数据线DB7~DB0上出现被传送的字节。正常的读信号从S3状态一直持续到S4状态,以便使DB7~DB0上的数据稳定至S4状态写入目的电路。另有一种压缩读方式取消S3状态,读信号和写信号同时在S4状态时产生,适用于高速电路。相反若DMA传送数据的源或目的电路速度较慢,不能在S3、S4两个状态完成数据读/写,则可以将8237的准备好Ready端变低,使S3和S4之间插入等待状态SW,直到准备好后,Ready变高才结束,SW进入S4状态。在系统中除通道0以外都固定地插入一个SW。
⑥S4状态产生或写信号,将DB7~DB0上的数据写入目的电路,写信号也可以提前到S3状态时产生,这就是所谓的扩展写(超前写)。若是块传输,则在S4结束后又进入S1(或S2),继续传输下一字节。若是单字节传输或是块传输的最后一个字节传输完成,则产生传输结束信号,并撤销总线请求信号HRQ释放总线。外部输入的信号强制8237在完成传输当前字节的S4后结束DMA过程。
综上所述,在进入DMA传输过程之后,传送一个字节一般需要4个S状态。各个状态的主要作用是:S1产生AEN信号并锁存存储器地址A15~A8;S2产生DACK信号并送出存储器地址;S3读数据;S4写数据。在存储器地址A15~A8不变的情况下可省去S1;压缩读数据可以推迟到S4中;超前写也可以提前到S3开始。在设备速度较慢的情况下,还可以在S3和S4之间插入SW。
3.8237的外部引脚
8237是具有40个引脚的双列直插式集成电路芯片,其引脚图如图8-5所示。
图8-5 8237引脚图
CLK:时钟信号输入引脚,对于标准的8237,其输入时钟频率为3MHz,对于8237-2,其输入时钟频率可达5MHz。:芯片选择信号,输入引脚。
RESET:复位信号,输入引脚,用来清除8237中的命令、状态请求和暂存寄存器,且使字节指针触发器复位并置位屏蔽触发器的所有位(即使所有通道工作在屏蔽状态),在复位之后,8237工作于空闲状态SI。
READY:外设向8237提供的高电平有效的“准备好”信号输入引脚,若8237在S3状态以后的时钟下降沿检测到READY为低电平,则说明外设还未准备好下一次DMA操作,需要插入SW状态,直到READY引脚出现高电平为止。
DREQ0~DREQ3:DMA请求信号输入引脚,对应于4个独立的通道,DREQ的有效电平可以通过编程来加以确定,优先级可以固定,也可以循环。
DACK0~DACK3:对相应通道DREQ请求输入信号的应答信号输出引脚。
HRQ:8237向CPU提出DMA请求的输出信号引脚,高电平有效。(www.xing528.com)
HLDA:CPU对HRQ请求信号的应答信号输入引脚,高电平有效。
DB0~DB7:8条双向三态数据总线引脚。在CPU控制系统总线时,可以通过DB0~DB7对8237编程或读出8237的内部状态寄存器的内容;在DMA操作期间,由DB0~DB7输出高8位地址信号A8~A15,并利用ADSTB信号锁存该地址信号。在进行内存不同区域之间的DMA传送时,除了送出A8~A15地址信号外,还分时输入从存储器源区域读出的数据,送入8237的暂存寄存器中,等到存储器写周期时,再将这些数据通过这8个引脚,由8237的暂存寄存器送到系统数据总线上,然后写入到规定的存储单元中去。
A3~A0:4条双向三态的低位地址信号引脚。在空闲周期,接收来自于CPU的4位地址信号,用以寻址8237内部的不同的寄存器(组);在DMA传送时,输出要访问的存储单元或者I/O端口地址的低4位。
A7~A4:4条三态地址信号输出引脚。在DMA传送时,输出要访问的存储单元或者I/O端口地址的中4位。:I/O读信号,低电平有效的双向三态信号引脚。在空闲周期,它是一条输入控制信号,CPU利用这个信号读取8237内部状态寄存器的内容;而在DMA传送时,它是读端口控制信号输出引脚,与相配合,使数据由外设传送到内存。:I/O写信号,低电平有效的双向三态信号引脚。在空闲周期,它是一条输入控制信号,CPU利用这个信号对8237内部寄存器进行编程;而在DMA传送时,它是写端口控制信号输出引脚,与相配合,使数据由内存传送到外设。:低电平有效的双向三态信号引脚,用于DMA传送,控制存储器的读操作。:低电平有效的双向三态信号引脚,用于DMA传送,控制存储器的写操作。
AEN:高电平有效的输出信号引脚,由它把锁存在外部锁存器中的高8位地址送入系统的地址总线,同时禁止其他系统驱动器使用系统总线。
ADSTB:高电平有效的输出信号引脚,此信号把DB7~DB0上输出的高8位地址信号锁存到外部锁存器中。:双向,当字节数计数器减为0时,在上输出一个有效的低电平脉冲,表明DMA传送已经结束;也可接收外部的信号,强行结束8237的DMA操作或者重新进行8237的初始化。当不使用EOP端时,应通过数千欧的电阻接到高电平上,以免由它输入干扰信号。
+5V、GND及NC引脚:电源、地及空脚。
4.8237的工作方式
8237的各个通道在进行DMA传送时,有4种工作方式:
(1)单字节传送方式
每次DMA操作仅传送一个字节的数据,完成一个字节的数据传送后,8237将当前地址寄存器的内容加1(或减1),并将当前字节数寄存器的内容减1,每传送完这一个字节,DMAC就将总线控制权交回CPU。
(2)数据块传送
在这种传送方式下,8237一旦获得总线控制权,便开始连续传送数据。每传送一个字节,自动修改当前地址及当前字节数寄存器的内容,直到将所有规定的字节全部传送完,或收到外部信号,8237才结束传送,将总线控制权交给CPU。一次所传送数据块的最大长度可达64KB,数据块传送结束后可自动初始化。
显然,在这种方式下,CPU可能会很长时间不能获得总线的控制权。这在有些场合是不利的,例如,PC就不能用这种方式,因为在块传送时,8086不能占用总线,无法实现对DRAM的刷新操作。
(3)请求传送
只要DREQ有效,DMA传送就一直进行,直到连续传送到字节计数器为0或外部输入使变低或DREQ变为无效时为止。
(4)级联方式
利用这种方式可以把多个8237连接在一起,以便扩充系统的DMA通道数。下一级的HRQ接到上一级的某一通道的DREQ上,而上一级的响应信号DACK可接到下一级的HLDA上。8237级联方式工作框图如图8-6所示。
在级联方式下,当第二级8237的请求得到响应时,第一级8237仅应输出HRQ信号而不能输出地址及控制信号,因为第二级的8237才是真正的主控制器,而第一级的8237仅应起到传递DREQ请求信号及DACK应答信号的作用。
5.8237的DMA传送类型
图8-6 8237级联方式工作框图
DMA支持3种传送类型:I/O接口到存储器的传送、存储器到I/O接口的传送、存储器到存储器的传送。
(1)I/O接口到存储器的传送 当进行由I/O接口到存储器的数据传送时,来自I/O接口的数据利用8237送出的控制信号,将数据输送到系统数据总线D0~D7上,同时,8237送出存储器单元地址及控制信号,将存在于D0~D7上的数据写入所选中的存储单元中。这样就完成了由I/O接口到存储器一个字节的传送。同时8237修改内部地址及字节数寄存器的内容。
(2)存储器到I/O接口的传送 与前一种情况类似,在进行这种传送时,8237送出存储器地址及控制信号,将选中的存储单元的内容读出放在数据总线D0~D7上,接着,8237送出控制信号,将数据写到规定的(预选的)端口中去,而后8237自动修改内部的地址及字节数寄存器的内容。
(3)存储器到存储器的传送
8237具有存储器到存储器的传送功能,利用8237编程命令寄存器,可以选择通道0和通道1两个通道实现由存储器到存储器的传送。在进行传送时,采用数据块传送方式,由通道0送出内存源区域的地址和控制信号,将选中内存单元的数据读到8237的暂存寄存器中,通道0修改地址及字节数暂存寄存器的值;接着由通道1输出内存目的区域的地址及控制信号,将存放在暂存寄存器中的数据,通过系统数据总线写入到内存的目的区域中去,而后通道1修改地址和字节数寄存器的内容,通道l的字节计数器减到零或外部输入时可结束一次DMA传输过程。
6.8237各个通道的优先级
8237有两种优先级方案可供编程选择:
(1)固定优先级
规定各通道的优先级是固定的,即通道0的优先级最高,依次降低,通道3的优先级最低。
(2)循环优先级
规定刚被服务通道的优先级最低,依次循环。这就可以保证4个通道的优先级是动态变化的,若3个通道已经被服务,则剩下的通道一定是优先级最高的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。