1 / 60

第六章 直接存储器存取 DMA 6.1 DMA 的工作原理及工作过程

第六章 直接存储器存取 DMA 6.1 DMA 的工作原理及工作过程 中断传送方式要中断主程序,每次都要保护断点、保护现场、进入中断服务子程序,中断服务完毕又要恢复现场、恢复断点、返回主程序,操作步骤重复繁多,对低速外设这些缺点不明显,中断传送不失为一种行之有效的传送方式。但对成批高速数据传输(如磁盘和内存间成批数据交换)效率则较低,这时宜采用 DMA ( Direct Memory Access: 直接存储器存取)方式。. 6.1.1 DMA 的传送原理

garron
Download Presentation

第六章 直接存储器存取 DMA 6.1 DMA 的工作原理及工作过程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第六章 直接存储器存取DMA • 6.1 DMA的工作原理及工作过程 • 中断传送方式要中断主程序,每次都要保护断点、保护现场、进入中断服务子程序,中断服务完毕又要恢复现场、恢复断点、返回主程序,操作步骤重复繁多,对低速外设这些缺点不明显,中断传送不失为一种行之有效的传送方式。但对成批高速数据传输(如磁盘和内存间成批数据交换)效率则较低,这时宜采用DMA(Direct Memory Access:直接存储器存取)方式。 德 能 日 新

  2. 6.1.1 DMA的传送原理 • 直接存储器存取DMA(Direct Memory Access)方式是用硬件实现存储器与存储器之间或存储器与I\O设备之间直接进行高速数据传送,不需要CPU的干预。这种方式通常用来传送数据块。 • DMA传送包括: • RAM→I/O端口的DMA读传送; • I/O端口 →RAM的DMA写传送; • RAM→RAM的存储单元传送。 德 能 日 新

  3. DMA传送的基本特点是不经过CPU,不破坏CPU内各寄存器的内容,直接实现存储器与I/O设备之间的数据传送。在IBM PC系统中,DMA方式传送一个字节的时间通常是一个总线周期,即5个时钟周期。CPU内部的指令操作只是暂停这个总线周期,然后继续操作,指令的操作次序不会被破坏。所以DMA传送的方式特别适合用于外部设备与存储器之间高许成批的数据传送。图6-1是实现DMA传送的基本原理图。图中一系统总线为界,左侧为于主机板内,其中有DMA控制器;右侧有存储器(部分存储器在主机板内)、外设和外设接口,它们通过I/O插槽与系统总线相接。 德 能 日 新

  4. 系统总线 主机板 CPU 8088 总线 逻辑 存储器 回 答 请 求 DMA 控制器8237 I/O 接口 I/O 接口 图6-1 DMA传送的基本原理图 德 能 日 新

  5. 6.1.2 DMA的工作过程 • DMA传送过程如图6-2所示。从图中可以看出,系统总线分别受到CPU和DMAC这两个器件的控制,即CPU可以向地址总线、数据总线和控制总线发送信息,DMAC也可以向地址总线、数据总线和控制总线发送信息。但是,在同一时间,系统总线只能受一个器件控制。当CPU控制总线时,DMAC必须与总线脱离;而当DMAC控制总线时,CPU必须与总线脱离。因此,CPU与DMAC之间必须有联络信号。 德 能 日 新

  6. CPU DMAC I/O AB DB CB 总线请求 DMA请求 总线响应 DMA响应 图 6-2 DMA传送过程 德 能 日 新

  7. DMA传送的工作过程如下: • ①I/O端口向DMA控制器发出DMA请求,请求数 • 据传送。 • ②DMA控制器在接到I/O端口的DMA请求后,向 • CPU发出总线请求信号,请求CPU脱离系统总 • 线。 • ③CPU在执行完当前指令的当前总线周期后, • 向DMA控制器发出总线请求信号。 • ④CPU随即和系统的控制总线、地址总线及数 • 据总线脱离关系,处于等待状态,由DMA控制 • 器接管这3个总线的控制权。 德 能 日 新

  8. ⑤DMA控制器向I/O端口发出DMA应答信号。 • ⑥DMA控制器把进行DMA传送涉及到的RAM地址 • 送到地址总线上。如果进行I/O端口RMA传送,DMAC向I/O端口发出I/O读命令,向RAM发出存储器写命令;如果进行RAM I/O端口传送,DMAC向RAM发出存储器读命令,向I/O端口发出I/O写命令,从而完成一个字节的传送。 • ⑦当设定的字节数传送完毕,DMA传输过程结束,也可以由来自外部的终止信号迫使传输过程结束。当DMA传送结束后,DMA控制器就将总线请求信号变成无效,并放弃对总线的控制,CPU检测到总线请求信号无效后,也将总线响应信号变成无效,于是,CPU重新控制三总线,继续执行被中断的当前指令的其他总线周期 。 德 能 日 新

  9. DMA用硬件在外设与内存之间直接进行数 • 据交换。通常系统的数据和地址总线以及一 • 些控制信号线(如IO/M、RD、WR等)是由 • CPU管理的,在DMA方式,就要求 CPU让出 • 总线(也就是将这些总线置为高阻状态),而 • 由DMA控制器(DMAC)接管总线。通常,大 • 部分DMA都有三种DMA传送方式: • (1)单字节传送方式 • (2)成组传送方式 • (3)请求传送方式 德 能 日 新

  10. DMA具有下列特点: • ①它使主存既可被CPU访问,又可被外设直接 • 访问; • ②当传送数据块时,主存地址的确定、传送数 • 据的计数控制等都用硬件电路直接实现; • ③主存中要开设专用缓冲区,及时供给和接收 • 外设的数据; • ④DMA传送速度快,可使CPU和外设并行工 • 作,提高了系统的效率; • ⑤DMA在开始前和结束后要通过程序和中断方 • 式进行预处理之后处理。 德 能 日 新

  11. 6.2 DMA控制器及8237DMA控制器 • 6.2.1 8237A的外部引脚 • 8237A是微机系统中实现DMA功能的大规 • 模集成电路控制器。PC/XT使用一片8237A, • PC/AT使用两片8237A,在高档微机中常使用 • 功能芯片取代8237A,但多功能芯片中的DMA • 控制器与8237A的功能基本相同。 德 能 日 新

  12. 1.8237A的内部结构和引脚功能 • 8237A是具有4个独立DMA通道的可编程DMA控制器(DMAC),它使用单一的+5V电源,单相时钟,40引脚双列直插式封装。在实际应用中,8237A必须与一片8位锁存器一起使用,才能形成一个完整的4 通道DMA控制器。8237A必须经初始化后,可以控制每一个通道在存储器和I/O口之间以最高1.6兆波特的速率传送最多达64KB的数据块,而不需要CPU的介入。 德 能 日 新

  13. 8237A的基本功能如下: • (1)一个芯片中有4个独立的DMA通道。 • (2)每一个通道的DMA请求都可以被允许或禁止。 • (3)每个通道的DMA请求有不同的优先级,即可以是 • 固定优先级,也可以是循环优先级。 • (4)每个通道一次传送的最大字节数为64KB。 • (5)8237A提供4种传送方式:单字节传送方式、数据 • 传送方式、请求传送方式和级连传送方式。 德 能 日 新

  14. 8237A的内部结构如图6-3所示。它主要由以下3个部分组成: • (1)DMA通道 • (2)读/写逻辑 • (3)控制逻辑 德 能 日 新

  15. 图6-3 8237A内部结构 HOLD HRQ 控制寄存器 请求寄存器 IOR MEMR HLDA HLDA 状态寄存器 屏蔽寄存器 IOW CLK CLK MEMW 请求触发器 屏蔽触发器 REDAY AEN 方式寄存器 通道0 DREQ0 DACK0 基地址寄存器 当前地址寄存器 基本字节寄存器 当前字节寄存器 ADSTB 暂存寄存器 DREQ1 通道1 DB7~DB0 DACK1 通道2 DREQ2 DACK2 通道3 DREQ3 DACK3 A3~A0 A7~A4 德 能 日 新

  16. 图6-4为8237A的引脚图。各个信号说明如下: • CLK:时钟输入端,通常接到8234时钟发生器的输出引脚,用来控制8237A内部操作定时和DMA传送时的数据传送速率。8237A的时钟频率为3MHz,8237A-5的钟频率为5MHz,后者是8237A的改进型,工作速度比较高,但工作原理及使用方法与8237A相同。 • CS:片选输入端,低电平有效。 • RESET: 复位输入端,高电平有效。当RESET有效时,屏蔽寄存器被置1(4个通道均禁止DMA请求),其他寄存器均清0, 8237A处于空闲周期,所有控制线都处于高阻状态,并禁止4个通道的DMA操作。复位后必须重新初始化。否则8237A不能进入DMA操作。 德 能 日 新

  17. READKY:“准备就绪”信号输入端,高电平有效。当所选择的存储器或I/O端的速度比较慢,需要延长传输时间时,使READY端处于低电平,8237A就会自动地在存储器读和存储器写周期中插入等待周期。当传输完成时,READY端变为高电平,以表示存储器或I/O设备准备就绪。 READKY:“准备就绪”信号输入端,高电平有效。当所选择的存储器或I/O端的速度比较慢,需要延长传输时间时,使READY端处于低电平,8237A就会自动地在存储器读和存储器写周期中插入等待周期。当传输完成时,READY端变为高电平,以表示存储器或I/O设备准备就绪。 • ADSTB: 地址选通输出信号,高电平有效。当此信号有效时,8237A当前地址寄存器的高8位经数据总线DB7~DB0锁存到外部地址锁存器中。 德 能 日 新

  18. AEN:地址允许输出信号,高电平有效。AEN把外部地址锁存器中锁存的高8位地址输出到地址总线上,与芯片直接输出的低8位地址一起共同构成内存单元的低16位地址。AEN:地址允许输出信号,高电平有效。AEN把外部地址锁存器中锁存的高8位地址输出到地址总线上,与芯片直接输出的低8位地址一起共同构成内存单元的低16位地址。 • MEMR:存储器读信号,低电平效,输出,只用于DMA传送。在DMA读周期期间,用于从所寻址的存储器单元中读出数据。 • MEMW:存储器写信号,低电平有效,输出,只用于DMA传送。在DMA写周期期间,用于将数据写入所寻址的存值储单元中。 德 能 日 新

  19. IOR: I/O读信号,低电平有效,双向。当CPU控制总线时,它是输入信号,CPU读8237A内部寄存器。当8237A内部寄存器。当8237A控制总线时,它是输出信号,与MEMW相配合,控制数据由I/O端口传送至存储器。 • IOW:I/O写信号,低电平有效,双向。当CPU控制总线时,它是输入信号,CPU写8237A内部寄存器(初始化)。当8237A控制总线时,它是输出信号,与MEMR相配合,把数据从存储器传送至I/O端口。 • EOP:DMA传送过程结束信号,低电平有效,双向。当DMA控制的任一通道计数结束时,会从EOP引脚输出一个低电平,表示DMA传输结束。而当外部向DMA控制输入EOP信号时,DMA传送过程将被强迫结束,无论是从外部终止外DMA过程,还是内部计数结束引起DMA过程终止,都会使DMA控制器的内部寄存器复位。 德 能 日 新

  20. DREQ0~DREQ3:DMA请求输入信号,有效电平可由编程设定。这4条DMA请求线是外设为取得DMA服条而送到各个通道的请求信号。在固定优先级的情况下,DREQ0的优先级最高,DREQ3的优先级最低。在优先级循环方式下,某通道的DMA请求被响应后,随即降为最低级。8237A用DACK 信号作为对DREQ的响应,因此在相应的DACK 信号有效之前,DREQ信号必须维持有效。 • DACK0~DACK3:DMA对各个通道请求的响应信号、输出的有效电平可由编程设定。8237A接收到通道请求,向CPU发出DMA请求信号HRQ,当8237A获得CPU送来的总线允许信号HLDA后,便产生DACK信号,送到相应的I/O端口,表示DMA控制器响应外设的DMA请求,从而进入DMA服务过程。 德 能 日 新

  21. HRQ: 8237A输出给CPU的总线请求信号,高电平有效。当外设的I/O端口要求DMA传送时,向DMA控制器发送DREQ信号,如果相应的通道屏蔽位为0,即DMA请求未被屏蔽,则DMA控制器的HRQ端输出为有效电平,从而向CPU发出总线请求。 • HLDA: 总线响应信号,高电平有效,是CPU对HRQ信号的应答。当CPU接收到HRQ信号后,在当前总线周期结束之后让出总线,并使HLDA信号有效。 德 能 日 新

  22. A3~A0:地址总线低4位,双向。当CPU控制总线时,它们是地址输入线。CPU用这4条地址线对DMA控制器的内部寄存器进行寻址,完成对DMA控制器的编程。当8237A控制总线时,由这4条线输出要访问的存储单元的最低4位地址。A3~A0:地址总线低4位,双向。当CPU控制总线时,它们是地址输入线。CPU用这4条地址线对DMA控制器的内部寄存器进行寻址,完成对DMA控制器的编程。当8237A控制总线时,由这4条线输出要访问的存储单元的最低4位地址。 • A7~A4: 地址线,输出,只用于在DMA传送时,输出要访问的存储单元的低8位地址中的高4位。 德 能 日 新

  23. DB7~DB0:8位双向数据线,与系统数总线相连。在CPU控制总线时,CPU可以通过I/O读命令从DMA控制器中读取内部寄存器的内容,送到DB7~DB0,以了解8237A的工作情况。也可以通过I/O写命令对DMA控制器的内部寄存器进行编程。在DMA控制器控制总线时,DB7~DB0输出要访问的存储单元的高8位地址(A15~A8),并通过ADSTB锁存到外部地址锁存器中,并和A7~A0输出的低8位地址一起构成16位地址。DB7~DB0:8位双向数据线,与系统数总线相连。在CPU控制总线时,CPU可以通过I/O读命令从DMA控制器中读取内部寄存器的内容,送到DB7~DB0,以了解8237A的工作情况。也可以通过I/O写命令对DMA控制器的内部寄存器进行编程。在DMA控制器控制总线时,DB7~DB0输出要访问的存储单元的高8位地址(A15~A8),并通过ADSTB锁存到外部地址锁存器中,并和A7~A0输出的低8位地址一起构成16位地址。 德 能 日 新

  24. IOR 1 40 A7 IOW 2 39 A6 MEMR 3 38 A5 MEMW 4 37 A4 NC 5 36 EOP READY 6 35 A3 HLDA 7 34 A2 ADSTB 8 33 A1 AEN 9 32 A0 HRQ 10 31 VCC CS 11 30 DB0 CLK 12 29 DB1 RESET 13 28 DB2 DACK2 14 27 DB3 DACK3 15 26 DB4 DREQ3 16 25 DACK0 DREQ2 17 24 DACK1 DREQ1 18 23 DB5 DREQ0 19 22 DB6 GND 20 21 DB7 图6-4 8237A引脚图 德 能 日 新

  25. 6.2.2 8237A的工作方式 • DMA控制器8237A依靠它的可编程特性可以实现对多种DMA传送方式的控制。用程序的方法置入控制字(或称命令字)可以设置和改变DMA传送方式。置入控制寄存器的控制字控制着与整个DMA控制器有关的工作方式。置入各通道内方式寄存器的控制器的控制字控制着本通道的工作方式。 德 能 日 新

  26. 8237在DMA传送时有四种工作方式: • 1.单字节传送方式 • 2.成组传送方式 • 3.请求传送方式 • 4.级连方式 • 级连方式用于通过级连以扩展通道。第二级的HRQ和HLDA信号连到第一级的DREQ和DACK上,如图6-5所示。第二级各个片子的优先权等级与所连的通道相对应。 在这种工作情况下,第一级只起优先权网络的作用,除了由某一个二级的请求向CPU输出HRQ信号外,并不输出任何其它信号,实际的操作是由第二级的片子完成的,若有需要还可以由第二级扩展到第三级等等。 德 能 日 新

  27. 微处 理器 8327 HRQ HLDA HRQ DREQ HLDA DACK 8237A DREQ DACK HRQ HLDA 第二级 第一级 初始装置 附加装置 图6-5 8237的级连 德 能 日 新

  28. 在前三种工作方式下,DMA传送有三种类型: • DMA读、写和校验。 • DMA读传送是把数据由存储器传送至外设,操作时由MEMR有效从存储器读出数据,由IOW有效把数据传送给外设。 • DMA写传送是把由外设输入的数据写至储存储器中。操作时由IOR信号有效从外设输入数据,由MEMW有效把数据写入内存。 • 校验操作是一种空操作,8237本身并不进行任何校验,而只是像DMA读或DMA写送一样地产生时序,产生地址信号,但是存储器和I/O控制线保持无效,所以并不进行传送,而外设可以利用这样的时序进行校验。 德 能 日 新

  29. 存储器到储器传送。8237可以编程工作要这种工作方式,这时就要用到两个通道,通道 0的地址寄存器编程为源区地址;通道 1的地址寄存器编程为目的地址。字节数寄存器编程为传送的字节数,传送由设置一个通道0的软件DREQ启动。8237按正常方式向CPU 发出DMA请求信号HRQ,待CPU 用HLDA信号响应后传送就可以开始,每传送一个字节要用8个小时钟周期,4个时钟周期以通道0为地址从源区读数据送入8237的临时寄存器;另4个时钟周期以通道1为地址把临时寄存器中的数据写入目的区,每传送一个字节,源地址和目的地址都要修改,字节数减量。传送一直进行到通道1的字节数计数器减到零,产生TC引起在EOP端输出一个脉冲,结束DMA传送。 • 在存储器到存储器的传送中,也允许外部送来一个EOP信号停止DMA传送。这种方式可用于数据块搜索,当发现匹配时,发出EOP信号停止传送 。 德 能 日 新

  30. 6.2.3 8237A的内部寄存器 • 8237A的内部寄存器(如表6-1所示)分为两类:一类是4个通道共用的寄存器,另一类是各个通道专用的寄存器。 • (1)控制寄存器 • 8237A的4个通道共用一个控制寄存器。在编程时,由CPU向它写入控制字,而由复位信号(RESET)或软件命令清除它。控制寄存器格式如图6-6所示。控制字是4个通道必须共同遵循的原则。 • 在PC系列机中,当BIOS初始化时,已将控制寄存器设定为00H,即禁止存储器到存储器的传送,允许读/写操作,使用正常是时序,固定优先级,不扩展写信号,DREQ高电平有效,DACK低电平有效。 德 能 日 新

  31. 表6-1 8237内部寄存器 寄 存 器 名 容 量 数 量 基地址寄存器 16位 4 基地节数计数器 16位 4 现行地址寄存器 16位 4 现行字节数寄存器 16位 4 临时地址寄存器 16位 1 临时字节数寄存器 16位 1 状态寄存器 8位 1 控制寄存器 8位 1 临时寄存器 8位 1 方式寄存器 6位 4 屏蔽寄存器 4位 1 请求寄存器 4位 1 德 能 日 新

  32. 0:DACK低电平有效1:DACK高电平有效 0:禁止存储器到存储器传送1:允许存储器到存储器传送 存储器到存储器传送时: 0:源地址不保持 1:源地址保持不变 0:DREQ高电平有效1:DREQ低电平有效 0:不扩展写信号 1:扩展写信号 0:启动8237A工作1:停止工作 0:正常时序 1:压缩时序 0:固定优先级 1:循环优先级 图6-6 控制寄存器格式 德 能 日 新

  33. (2)方式寄存器。8237A的每个通道都有一个方式寄存器,4个通道的方式寄存器共用一个端口地址,方式选择命令的格式如图6-7所示。方式字的最低两位进行通道选择,写入命令字之后,8237A将根据D1和D0的编码把方式寄存器的D7~D2位送到相应通道的方式寄存器中,从而确定该通道的传送方式和数据传送类型。8237A各通道的方式寄存器是6位的,CPU不可寻址。(2)方式寄存器。8237A的每个通道都有一个方式寄存器,4个通道的方式寄存器共用一个端口地址,方式选择命令的格式如图6-7所示。方式字的最低两位进行通道选择,写入命令字之后,8237A将根据D1和D0的编码把方式寄存器的D7~D2位送到相应通道的方式寄存器中,从而确定该通道的传送方式和数据传送类型。8237A各通道的方式寄存器是6位的,CPU不可寻址。 德 能 日 新

  34. 编码选通道 00:通道0 01:通道1 10:通道2 11:通道3 00:请求方式 01:单字节传送方式 10:数据块方式 11:级联方式 00:校验传送 01:写传送 10:读传送 11:无效 当D7D6为11时,不考虑这两位 0:禁止自动预置 1:禁止自动预置 0:地址加1 1:地址减1 图6-7 方式寄存器格式 德 能 日 新

  35. (3)地址寄存器。每个通道有一个16位的基地址寄存器和一个16位的当前地址寄存器。基地址寄存器存放本通道DMA传输时所涉及到的存储区首地址或末地址,这个初始值是在初始化编程时写入的,同时也被写入当前地址寄存器。当进行DMA传送时,由当前地址寄存器向地址总线提供本次DMA传送时的内存地址(低16位)。当前地址寄存器的值在每次DMA传输后自动加1或减1,为传送下一个字节作好准备。在整个DMA传送期间,基地址寄存器的内容保持不变。当通道初始化选择“自动重装“功能时,一旦全部字节传送完毕,基地址寄存器的内容自动重新装入当前地址寄存器。 德 能 日 新

  36. (4)字节寄存器。每个通道有一个16位的基本字节寄存器和一个16位的当前字节寄存器,基本字节寄存器存放本通道DMA传输时字节数的初值。8237A规定:初值比实际传输的字节数少1,初值是在初始化编程时写入的,同时,初值也被写入当前字节寄存器。在DMA传送时,每传送一个字节,当前字节寄存器自动减1,当初值由0减到FFFFH时,产生计数结束信号,EOP端输出有效电平。当通道初始化选择“自动重装“功能时,一旦全部字节传送完毕,基本字节寄存器的内容自动重新装入当前字节寄存器。基本字节寄存器预置初值后将保持不变,也不能被CPU读出,而当前这节寄存器中的内容可以随时由CPU读出。(4)字节寄存器。每个通道有一个16位的基本字节寄存器和一个16位的当前字节寄存器,基本字节寄存器存放本通道DMA传输时字节数的初值。8237A规定:初值比实际传输的字节数少1,初值是在初始化编程时写入的,同时,初值也被写入当前字节寄存器。在DMA传送时,每传送一个字节,当前字节寄存器自动减1,当初值由0减到FFFFH时,产生计数结束信号,EOP端输出有效电平。当通道初始化选择“自动重装“功能时,一旦全部字节传送完毕,基本字节寄存器的内容自动重新装入当前字节寄存器。基本字节寄存器预置初值后将保持不变,也不能被CPU读出,而当前这节寄存器中的内容可以随时由CPU读出。 德 能 日 新

  37. (5)状态寄存器。状态寄存器的格式如图6-8所示。状态寄存器的高4位表示当前4 个通道是否有DMA请求,低4位指出4个通道的DMA传送是否结束,供CPU查询。它与控制器共用一个端口地址。 德 能 日 新

  38. 有DMA请求为1计数结束为1 图6-8 状态寄存器的格式 德 能 日 新

  39. (6)请求寄存器和屏蔽寄存器。请求寄存器和屏蔽寄存器是4个通道公用的寄存器,使用时应写入请求命令和屏蔽命令字,其格式如图6-9所示。 德 能 日 新

  40. 无用位 0:置1请求触发器 1:置0请求触发器 无用位 0:置1请求触发器 1:置0请求触发器 通道选择 00:通道0 01:通道1 10:通道2 11:通道3 通道选择 00:通道0 01:通道1 10:通道2 11:通道3 图6-9 请求寄存器和屏蔽寄存器 德 能 日 新

  41. (7)多通道屏蔽寄存器。8237A允许使用一个屏蔽字一次完成对4个通道的屏蔽置,格式如图6-10所示。其中,D0~D3对应于通道0~3的屏蔽触发器,若某一位为1,则对应通道的屏蔽触发器置1。(7)多通道屏蔽寄存器。8237A允许使用一个屏蔽字一次完成对4个通道的屏蔽置,格式如图6-10所示。其中,D0~D3对应于通道0~3的屏蔽触发器,若某一位为1,则对应通道的屏蔽触发器置1。 德 能 日 新

  42. 通道0 通道1 通道2 通道3 无用位 0:置1屏蔽触发器 1:置0屏蔽触发器 图6-10 多通道屏蔽寄存器 德 能 日 新

  43. (8)先/后触发器。8237A只有8根数据线,而基地址寄存器和基本字节寄存器都是16位,在预置初值时需要分两次进行,每次写入一个字节。(8)先/后触发器。8237A只有8根数据线,而基地址寄存器和基本字节寄存器都是16位,在预置初值时需要分两次进行,每次写入一个字节。 • 先/后触发器是为初值的写入顺序而设置的,在使用先/后触发器时,先将其清“0”,然后写字节先写低位字节,后写高位字节。 • (9)暂存寄存器。暂存寄存器为4通道共用的8位寄存器。在DMA控制器实现存储器到存储器的传送方式时,它暂存中间数据,CPU可以读取暂存寄存器中的内容,其值为最后一次传送的数据。 德 能 日 新

  44. 6.3 8237A的初始化编程 • 6.3.1 8237的寻址及连接 • 8237内部共占用16个I/O端口地址,由地址码的 • A3~A0控制,恰好对应从0000至1111的16种组合。表6-2给 • 出了端口地址的分配关系。需要说明以下两点: • (1)地址0H~7H(0000~0111)分配给4个通道的 • 地址初值寄存器和地址计数器、字节数值寄存器和字节 • 计数器。每个寄存器都是16位,无论是写入还是读出都需要 • 两次。内部逻辑中有个字节指向触发器F接成计数方式工 • 作。F触发器为0,读、写时指向低位字节;F为1,读、写时 • 指向高位字节。每次读、写后F改变状态。表6-2还指出,对 • 地址0CH(1100)执行输出指令(AL寄存器可为任意 • 值),将使F触发器初始化为0。 德 能 日 新

  45. (2)16个I/O端口地址中,除分配给内部编址寄存(2)16个I/O端口地址中,除分配给内部编址寄存 器外,还有几个地址分配用于形成软件命令。这些 命令是:对8237总清等效于外接RESET信号,占 用地址1101;对请求寄存器清0,占用地址1110; 还有已经提到的对字节指向触发器F的清0。这3种 命令都是用输出指令实施的。指令中AL寄存器的内 容不起作用,可为任意值。 德 能 日 新

  46. 表6-2 8237内的地址分配 德 能 日 新

  47. 6.3.2 8237A的初始化 • 8237A的初始化编程: • (1)命令字写入控制寄存器。在初始化时必须设置寄存器,以确定其工作时序、优先级方式、DREP和DACK的有效电平及是否允许工作等。 • 在PC系列机中,当BIOS初始化时,已将通道的控制寄存器设定为00H ,禁止存储器到存储器的传送,允许读、写传送、正常时序,固定优先级,不扩展写信号,DREQ高电平有效,DACK低电平有效。因此在PC微机系统中,如果借用DMA CH1进行DMA传送,则在初始化编程时,不应再向控制寄存器写入新的命令字。 德 能 日 新

  48. (2)屏蔽字写入屏蔽寄存器。当某通道正在进行初始化编程时,接收到DMA请求,可能本初始化结束,8237A就开始进行DMA传送,从而导致出错。因此,初始化编程时,必须先屏蔽末初始化的通道,在初始化结束后再解除该通道的屏蔽。(2)屏蔽字写入屏蔽寄存器。当某通道正在进行初始化编程时,接收到DMA请求,可能本初始化结束,8237A就开始进行DMA传送,从而导致出错。因此,初始化编程时,必须先屏蔽末初始化的通道,在初始化结束后再解除该通道的屏蔽。 • (3)方式字写入方式寄存寄器。通道规定传送类型及工作方式。 • (4)置0先/后触发器。对口地址DMA+0CH执行一条输出指令,从而产生一个写命令,即可置“0”先/后触发器,为始化基地址寄存器和基本字节寄存器作准备。 德 能 日 新

  49. (5)写入基地址和基本字节寄存器。把DMA操作所设计到的存储区首址或末址写入地址寄存器,把要传送的字节数减1,写入基本字节寄存器。这几个寄都是16位的,因此写入要分两次进行;先写低8位,先写高8位。(5)写入基地址和基本字节寄存器。把DMA操作所设计到的存储区首址或末址写入地址寄存器,把要传送的字节数减1,写入基本字节寄存器。这几个寄都是16位的,因此写入要分两次进行;先写低8位,先写高8位。 • (6)解除屏蔽。初始化空间通道的屏蔽寄存器写入D2~D0=0××的命令,置0相应通道的屏蔽解发器,准备响应DMA请求。 • (7) 写入请求寄存器。如果采用软件DMA请求,在完成通道 初始化之后,在程序的适当位置向请求寄存置器写入D2~D0=1××命令,即可使相应通道进行DMA传送。 德 能 日 新

  50. 6.4 DMA的应用举例 • 1.8237A在IBM PC /AT系统中的应用 • 286微机系统使用两片8237A级连,如图6-11所示。它提供了7个DMA通道,通道 • 0~3支持8位数据传送,通道5~7支持16位数据传送。PC/AT有专门的动态RAM刷新电路,硬盘驱动器,通道4作为两个DMA控制器的级联,其佘均保留备用。 • PC/AT DMAC寄存器I/O端口地址见表6-3所示。 德 能 日 新

More Related