第六章 DMA控制器和定时计数器

六、 8237的工作方式

8237的各个通道在进行DMA传送时,有四种工作方式 1.单字节传送方式

每次DMA操作仅传送一个字节的数据,完成一个字节的数据传送后,8237 将当前地址寄存器的内容加1(或减1),并将当前字节数寄存器的内容减1,每 传送完这一个字节,DMAC就将总线控制权交回CPU。 2.数据块传送

在这种传送方式下,DMAC一旦获得总线控制权,便开始连续传送数据。每传送一个字节,自动修改当前地址及当前字节数寄存器的内容,直到将所有 规定的字节全部传送完,或收到外部EOP信号,DMAC才结束传送,将总线控 制权交给CPU,一次所传送数据块的最大长度可达64KB,数据块传送结束后 可自动初始化。

显然,在这种方式下,CPU可能会很长时间不能获得总线的控制权。这在 有些场合是不利的,例如,PC机就不能用这种方式,因为在块传送时,8088 不能占用总线,无法实现对DRAM的刷新操作。 3.请求传送

只要DREQ有效,DMA传送就一直进行,直到连续传送到字节计数器为0 或外部输入使EOP变低或DREQ变为无效时为止。 4.级联方式

利用这种方式可以把多个8237连接在一起,以便扩充系统的DMA通道数。 下一级的HRQ接到上一级的某一通道的DREQ上,而上一级的响应信号DACK 可接下一级的HLDA上,其连接如图6-5所示。

在级联方式下,当第二级8237的请求得到响应时,第一级8237仅应输出HRQ信号而不能输出地址及控制信号,因为,第二级的8237才是真正的主控制器,而第一级的8237仅应起到传递DREQ请求信号及DACK应答信号的作 用。

七、 8237的DMA传输类型

DMA所支持的DMA传送,可以在I/O 图6-5 8237级联方式工作框图 接口到存储器;存储器到I/O接口及内存的不

同区域之间进行,它们具有不同的特点,所需要的控制信号也不相同 1.I/O接口到存储器的传送。

当进行由I/O接口到存储器的数据传送时,来自I/O接口的数据利用DMAC送出的IOR控制信号,将数据输送到系统数据总线D0~D7上,同时,DMAC送出存储器单元地址及MEMW控制信号,将存在于D0~D7上的数据写入所选中的存储单元中。这样就完成了由I/O接口到存储器一个字节的传送。同时DMAC修改

内部地址及字节数寄存器的内容。

2. 存储器到I/O接口

与前一种情况类似,在进行这种传送时,DMAC送出存储器地址及MEMR 控制信号,将选中的存储单元的内容读出放在数据总线D0~D7上,接着,DMAC 送出IOW控制信号,将数据写到规定的(预选中)端口中去,而后MDAC自动修 改内部的地址及字节数寄存器的内容。 3. 存储器到存储器

8237具有存储器到存储器的传送功能,利用8237编程命令寄存器,可以 选择通道0和通道1两个通道实现由存储器到存储器的传送。在进行传送时.采 用数据块传送方式,由通道0送出内存源区域的地址和MEMR控制信号,将选中 内存单元的的数据读到8237的暂存寄存器中,通道0修改地址及字节数寄存器 的值;接着由通道1输出内存目的区域的地址及MEMW控制信号,将存放在暂存 寄存器中的数据,通过系统数据总线,写入到内存的目的区域中去,尔后通道 1修改地址和字节数寄存器的内容,通道1的字节计数器减到零或外部输入EOP 时可结束一次DMA传输过程。

八、 8237各个通道的优先级及传输速率

1.优先级

8237有两种优先级方案可供编程选择: (1).固定优先级

规定各通道的优先级是固定的,即通道0的优先级最高,依次降低,通道 3的优先级最低。 (2).循环优先级

规定刚被服务通道的优先级最低,依次循环。这就可以保证4个通道的优 先级是动态变化的,若3个通道已经被服务则剩下的通道一定是优先级最高的。 2.传送速率

在一般情况下,8237进行一次DMA传送需要4个时钟周期(不包括插入的 等待周期SW)。例如,PC机的时钟周期约210ns,则一次DMA传送需要

210ns?4+2l0ns=1050ns。多加一个210 ns是考虑到人为插入一个SW的缘故。

另外,8237为了提高传送速率,可以在压缩定时状态下工作。在压缩定时 状态下,每个DMA总线周期仅用2个时钟周期就可以实现,从而可以大幅度 地提高数据的传送速率。

习题与思考:

1. 什么叫DMA传送方式?试说明DMA方式传送数据的主要步骤。

2.试比较DMA传输、查询式传输及中断方式传输之间的优缺点和适用场合? 3.DMA控制器芯片Intel8237有哪几种工作方式?各有什么特点? 4.Intel8237支持哪几种DMA传输类型?

第二讲:

6. 1 DMA控制器Intel8237

回 顾:DMA的基本概念,DMA 控制器芯片8237的性能概述,内、外部

结构,工作周期,工作方式,通道的优先级及数据传输速率。

本讲重点:DMA 控制器芯片8237的内部寄存器,端口地址,编程与应用。

讲授内容:

九、 8237的内部寄存器组

8237有4个独立的DMA通道,有许多内部寄存器。前面表6-1已经给出 了这些寄存器的名称、长度和数量,我们来详细介绍各个寄存器的功能和作用。 1.基地址寄存器

用以存放16位地址,只可写入而不能读出。在编程时,它与当前地址寄存器被同时写入某一起始地址,可用作内存区域的首地址或末地址。在8237进行DMA数据传送的工作过程中,其内容不发生变化,只是在自动预置时,其内容可被重新写到当前地址寄存器中去。 2.基字节数寄存器

用以存放相应通道需要传送数据的字节数,只可写入而不能读出。在编程时它与当前字节数寄存器被同时写入要传送数据的字节数。在8237进行DMA数据传送的工作过程中,其内容保持不变,只是在自动预置时,其内容可以被重新写到当前字节数寄存器中去。 3.当前地址寄存器

存放DMA传送期间的地址值。每次传送后自动加l或减l。CPU可以对其进行读写操作。在选择自动预置时,每当字节计数值减为0或外部EOP有效后,就会自动将基地址寄存器的内容写入当前地址寄存器中,恢复其初始值。 4.当前字节数寄存器

存放当前的字节数。每传送一个字节,该寄存器的内容减1。当计数值减 为0或接收到来自外部的EOP信号时,会自动将基字节数寄存器的内容写入该寄 存器,恢复其初始计数值,即为自动预置。 5.地址暂存寄存器和字节数暂存寄存器

这两个16位的寄存器和CPU不直接发生关系,我们也不必要对其进行读/ 写操作,因而对如何使用8237没有影响。 6.方式寄存器

每个通道有一个8位的方式寄存器,但是它们占用同一个端口地址,用来存放方式字,依靠方式控制字本身的特征位来区分写入不同的通道,用来规定通道的工作方式,各位的作用如下:

D7 D6 D5 D4 D3 D2 D1 D0

00 通道0

00 请求传输方式 01 通道1 01 单字节传输方式 通道选择 10 通道2 10 块传输方式 方式选择 11 通道3 11 级联传输方式 00 校验传输

传输类型选择 01 写传输 10 读传输 11 无意义

自动预置功能选择,0—禁止;1—允许。 地址增/减1选择,0—增1;1—减1。

图6-6 8237的方式寄存器

自动预置就是当某一通道按要求将数据传送完后,又能自动预置初始地址和传送的字节数,而后重复进行前面已进行过的过程。

校验传送就是实际并不进行传送,只产生地址并响应EOP信号,不产生读写控制信号,用以校验8237的功能是否正常。 7.命令寄存器

8237的命令寄存器存放编程的命令字,命令字各位的功能如图6-7所示,

D7 D6 D5 D4 D3 D2 D1 D0

0 DACK低电平有效 0 禁止存储器到存储器传输

1 DACK高电平有效 1 允许存储器到存储器传输 0 DREQ高电平有效 0 禁止通道0地址保持

1 DREQ低电平有效 1 允许通道0地址保持。D0=0时无意义 0 不扩展写入 0 启动8237工作 1 扩展写入 1 停止8237的工作 0 固定优先权 0 正常时序 1 旋转优先权 1 压缩时序 图6-7 8237的命令寄存器

其中:

D0位用以规定是否允许采用存储器到存储器的传送方式。若允许这样做, 则利用通道0和通道1来实现。

D1位用以规定通道0的地址是否保持不变。如前所述,在存储器到存储器 传送中,源地址由通道0提供,读出数据到暂存寄存器,而后,由通道l送出 目的地址,将数据写入目的区域;若命令字中D1=0,则在整个数据块传送中(块 长由通道1决定)保持内存源区域地址不变,因此,就会把同一个数据写入到整 个目的存储器区域中。

D2位是允许或禁止8237芯片工作的控制位。

D3位用于选择总线周期中写信号的定时。例如,PC机中动态存储器写是由 写信号的上升沿启动的。若在DMA周期中写信号来得太早,可能造成错误, 所以PC机选择D3=0。命令字的其他位容易理解,不再说明。

D5位用于选择是否扩展写信号。在D3=0(正常时序)时,如果外设速度较 慢,有些外设是用8237A送出的IOW和MEMW信号的下降沿来产生的READY 信号的。为提高传送速度,能够使READY信号早些到来,须将IOW和MEMW 信号加宽,以使它们提前到来。因此,可以通过令D5=1使IOW和MEMW信号 扩展2个时钟周期提前到来。 8.请求寄存器

用于在软件控制下产生一个DMA请求,就如同外部DREQ请求一样。图6-8所示,为请求字的格式,D0D1的不同编码用来表示向不同通道发出DMA请求。在软件编程时,这些请求是不可屏蔽的,利用命令字即可实现使8237按照命令字的D0D1所指的通道,完成D2所规定的操作,这种软件请求只用于通道工作在数据块传送方式之下。

D7 D6 D5 D4 D3 D2 D1 D0

00 通道0 无用 01 通道1 通道选择 10 通道2 11 通道3

0—复位请求位;1—置位请求位。

图6-8 8237请求寄存器

9.屏蔽寄存器

8237的屏蔽字有两种形式:

①单个通道屏蔽字。这种屏蔽字的格式如图6-9所示。利用这个屏蔽字,每次只能选择一个通道。其中D0D1的编码指示所选的通道,D2=l表示禁止该通道接收DREQ请求,当D2=0时允许DREQ请求。

②四通道屏蔽字。可以利用这个屏蔽字同时对8237的4个通道的屏蔽字进行操作,故又称为主屏蔽字。该屏蔽字的格式如图6-10所示。它与单通道屏蔽字占用不同的I/O接口地址,以此加以区分。

D7 D6 D5 D4 D3 D2 D1 D0

00 通道0 无用 01 通道1 通道选择 10 通道2 11 通道3

0—清除屏蔽位;1—置屏蔽位。

图6-9 8237的单通道屏蔽寄存器

D7 D6 D5 D4 D3 D2 D1 D0

0 清通道0屏蔽位

无用 1 置通道0屏蔽位 0 清通道1屏蔽位 1 置通道1屏蔽位 0 清通道2屏蔽位 1 置通道2屏蔽位 0 清通道3屏蔽位 1 置通道3屏蔽位

图6-10 8237四通道屏蔽寄存器

D7 D6 D5 D4 D3 D2 D1 D0 D0=1 通道0已终止计数 D1=1 通道1已终止计数 D2=1 通道2已终止计数 D3=1 通道3已终止计数

D7=1 通道3请求 D6=1 通道2请求 D5=1 通道1请求 D4=1 通道0请求 图6-11 8237的状态寄存器

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4