900 likes | 1.21k Views
第 8 章 DMA 技术与 DMA 控制器. § 8.1 DMA 技术概述 § 8.2 可编程 DMA 控制器 8237A § 8.3 DMA 技术在微机系统中的应用. 直接存储器存取. §8.1 DMA 技术概述. 1.DMA(Direct Memory Access) 的概念 DMA 方式不用处理器干预完成 M 与 I/O 间数据传送。 DMA 期间系统总线由其它主模块控制 ( 驱动 ) 控制总线的主模块要提供系统的地址及控制信号。 DMA 控制器与处理器配合可实现系统的 DMA 功能。. 地址总线. HOLD
E N D
第8章 DMA技术与DMA控制器 §8.1 DMA技术概述 §8.2 可编程DMA控制器8237A §8.3 DMA技术在微机系统中的应用 直接存储器存取
§8.1 DMA技术概述 1.DMA(Direct Memory Access)的概念 • DMA方式不用处理器干预完成M与I/O间数据传送。 • DMA期间系统总线由其它主模块控制(驱动) • 控制总线的主模块要提供系统的地址及控制信号。 • DMA控制器与处理器配合可实现系统的DMA功能。
地址总线 HOLD HLDA 总线 请求 DMA 请求 I / O 设备 HRQ DREQ DMAC HLDA DACK 总线 响应 DMA 响应 CPU 控制总线 数据总线 2. DMA系统组成及工作过程․ DMA系统组成
DMAC的基本功能 • 接收接口往DMA控制器发出DMA请求信号后,DMA控制器能向CPU发出总线请求信号HOLD(高电平)。 • 当CPU向DMA发出响应信号HLDA(高电平)以后,DMA能接管对总线的控制,进入DMA方式。 • 能向地址总线发出内存地址信息,对其进行寻址及修改地址指针。
DMAC的基本功能 • 能向存储器或I/O接口发相应的读写控制信号。 • 能决定传送字节数,并判断DMA传送是否结束。 • DMA过程结束,能向CPU发出DMA结束信号,HOLD变低,将总线控制权还给CPU,CPU恢复正常工作。
․DMA传送方式 允许 DMA DMA 请求? N Y DMAC发BUS请求 CPU响应DMA 放弃BUS DMAC控制 传一个字节 DMA 放 总 线 N 块结束否? Y 放弃总线中断请求 字节传送
․DMA传送方式 允许 DMA DMA请求? DMAC发BUS请求 CPU 响应 DMA 放弃 BUS DMAC控制 传一个字节 Y N 块结束否? DMA请求? 块传送 N Y 放总线中断请求
․DMA传送方式 允许 DMA N DMA请求? Y DMAC发出BUS请求 CPU响应DMA放弃总线 DMAC 控制传一个字节 Y 块结束否? DMA请求? N Y 放总线 放总线中断请求 随机请求 DEMAND REQUEST
DMA传送的过程 I/O设备向DMAC发出DMA请求 完成设定的字节数据传送, CPU恢复对系统总线的控制 DMAC向CPU发出总线请求 DMAC进行一个字节的传送 • CPU在执行完当前指令的当前 • 的总线周期后,向DMAC发出 • 总线响应信号 DMAC向I/O设备发出 的DMA应答信号 CPU脱离对系统总线的控制, 由DMAC接管对系统总线的控制
§8.2 可编程DMA控制器8237A • §8.2.1 8237A的主要特性 • 1.具有四个独立的DMA通道,每个通道都具有64K的存贮器寻址能力,即一次传送的最大长度为64K字节。 • 2.可实现内存与外设之间的高速大批量数据传送,也可实现内存两个不同区域之间的高速数据传送。 • 3.每个通道的DMA请求均可分别允许或禁止,且四个通道的DMA请求的优先权可由软件设置为固定的或循环的。
8237A的主要特性 • 4.具有单字节传送、数据块传送、请求传送和级联传送四种工作方式。 • 5.可用级联方式扩展DMA通道数目。 • 6.DMA传送结束信号可由内部计数产生,也可由外部输入提供。 • 7.单一的+5V电源,40个引脚双列直插式封装。 • 8.采用5MHz时钟,传送速率可达1.6M字节/秒。
8.采用5MHz时钟,传送速率可达1.6M字节/秒。 • 8237进行一次DMA传送需要3个时钟周期(不包括插入的等待周期SW)。时钟周期为200 ns,则一次DMA传送需要200 ns×3+200 ns=700 ns(1.6 M字节/秒)。多加一个200 ns是考虑到人为插入一个SW的缘故。另外,8237为了提高传输速率,可以在压缩定时状态下工作。在此状态下,每一个DMA总线周期仅用两个时钟周期(200 ns×2=400ns )就可实现,这大大提高了传输速率。
§8.2.2 8237A的工作原理 • 1.8237A的编程结构 • 编程结构见下页图 • 内部有大量寄存器,内部寄存器的功能、端口地址等信息 参见下表.
基地址寄存器 ----放DMA传送RAM地址初值 • 地址寄存器2个16位 当前地址寄存器: ----DMA传送时内容变化,可读。 每个通道 基字节数寄存器: ----DMA传送的总字节数。 • 字节数寄存器2个16位 当前字节数寄存器: ----DMA传送时内容变化,可读。 • 模式REG, 1个8位 • 1个DMA请求触发器 • 1个DMA屏蔽触发器 1)8237A组成说明: • 8237A有四个独立通道:通道0~通道3。每个通道可独立响应外部DMA请求,完成DMA传送。 • 15
状态寄存器, 8位 • 屏蔽寄存器,8位。 • 请求标志寄存器, 8位 • 作从模块----接收CPU的信号和命令字,产生控制,读/写内部寄存器 • 暂存器, 8位 • 定时和控制逻辑 • 作主模块----控制总线,产生控制命令完成DMA传送 • 四个通道公用 • 优先级编码电路---优先级裁决 • 控制寄存器, 8位 • 16
8237的引脚功能 • 17
8237的引脚功能 • 请求/应答信号 • 外设接口电路向8237的请求信号:DREQ3~DREQ0 • 8237对外设接口电路的应答信号:DACK3~DACK0 • 8237向CPU申请总线的信号:HRQ(连至CPU的HOLD) • CPU向8237传送的允许使用总线信号:HLDA DREQ HRQ • 外设 • CPU • DMA HLDA DACK • 18
8237的引脚功能 • 地址信号 • :CPU初始化8237或读8237状态时所需的片选信号 • A7~A0(输出):8237访问存储器的地址信号的低8位。 • A3~A0(输入):CPU初始化8237或读8237状态时,用于寻址8237内部寄存器 • 19
8237的引脚功能 • 数据信号(双向): DB7~DB0 CPU为主控时,可以通过I/O读命令查询8237的状态寄存器的内容,或通过I/O写命令对8237的内部寄存器进行编程,数据传送通过DB7~DB0 8237为主控时, DB7~DB0输出要访问的内存地址的高8位,并通过ADSTB锁存到外部地址锁存器中,和A7~A0输出的低8位地址一起构成16位地址 • 20
8237的引脚功能 • 地址允许信号:AEN • 8237作为主控时(8237控制总线),输出AEN=1。 • 8237作为从控时(CPU控制总线),输出AEN=0。 • DMA传输结束信号: (双向) • 当DMAC内部任一通道传输结束,8237发出 • 若由外部给DMAC送入有效的 ,则强制DMAC内部 • 所有通道结束传输。 • 21
8237的引脚功能 MEMR/MEMW: 8237发出的存储器读/写信号 IOR/IOW: 8237作为主控时,输出的I/O读/写信号。 8237作为从控时,CPU发出的I/O读/写信号,用于读/写8237 • 22
8237的引脚功能 ADSTB:地址选通信号 用于启动地址锁存器 READY:存储器或I/O的就绪信号 • 23
DMA控制器8237 工作方式 1)从模块工作方式: 当CPU将数据送入或取出8237时,DMA完全象一个普通的I/O接口,此时它工作于从模块。 • 24
DMA控制器8237 2)主模块工作方式: 此时DMA已取代CPU控制系统。它 将提供系统正常工作的地址信息,控 制信息完成DMA方式的数据传送。 • 26
DMA控制器8237 • 8237A处于DMA方式时,全部地址均用来寻址存储器,无法同时提供I/O设备的端口地址.为了寻址外部设备,8237A提供DACK信号,作为对请求DMA方式的外部设备的应答,并指明该外部设备被认可,可以进行DMA传送.在整个传输过程中只要DACK信号,IOR,IOW同时有效,就能完成读外部设备的I/O读写操作.所以,在DMA方式下,I/O设备的地址无效.即:以DACK代替了片选和译码功能. 那对于20位地址线8237如何处理? 由上可见8237工作于模块方式,可取代CPU产生地址及控制信息。 • 在8086/88系统中,系统的寻址范围是1MB,地址线有20条,即A0~A19。为了能够在8086/88系统中使用8237来实现DMA,需要用硬件提供一组4位的页寄存器。 • 通道0、1、2、3各有一个4位的页寄存器。在进行DMA传送之前,这些页寄存器可利用I/O地址来装入和读出。当进行DMA传送时,DMAC将A0~A15放在系统总线上,同时页寄存器把A16~A19也放在系统总线上,形成A0~A19这20位地址信号实现DMA传送。其地址产生如图所示。 • 28
利用页寄存器产生存储器地址 • 29
8237A的工作方式 • DMA传送方式 ·单字节传送方式 ·数据块传送方式 ·请求传送方式 ·级连方式 • DMA传送类型 ·DMA读 ·DMA写 · DMA检验 • 存储器到存储器的传送
DMA传送方式 (1) DMA传送-单字节方式 • 每次DMA传送时仅传送一个字节 • 传送一个字节之后,字节数寄存器减1,地址寄存器加1或减1,HRQ变为无效 • 8237A释放系统总线,将控制权还给CPU • 若传送后使字节数从0减到FFFFH,则终结DMA传送或重新初始化 • 特点: • 一次传送一个字节,效率略低 • DMA传送之间CPU有机会重新获取总线控制权
(2) DMA传送-数据块方式 • 由DREQ启动就连续地传送数据,直到字节数寄存器从0减到FFFFH终止计数,或由外部输入有效信号终结DMA传送 • DREQ只需维持有效到DACK有效 • 特点: • 一次请求传送一个数据块,效率高 • 整个DMA传送期间CPU长时间无法控制总线(无法响应其他DMA请求、无法处理中断等)
(3) DMA传送-请求方式 • DREQ信号有效就连续传送数据 • DREQ信号无效,DMA传送被暂时中止,8237A释放总线,CPU可继续操作 • DMA通道的地址和字节数的中间值仍被保持 • DREQ信号再次有效,DMA传送就继续进行 • 如果字节数寄存器从0减到FFFFH,或者由外部送来一个有效的信号,将终止计数 • 特点: • DMA操作可由外设利用DREQ信号控制传送的过程
(4) DMA传送-级连方式 • 用于通过多个8237A级连以扩展通道 • 第二级的HRQ和HLDA信号连到第一级某个通道的DREQ和DACK上 • 第二级芯片的优先权等级与所连通道的优先权相对应 • 第一级只起优先权网络的作用,实际的操作由第二级芯片完成 • 还可由第二级扩展到第三级等
第二级 第一级 8237 | 微处理器 HRQ DREQ 0 | | HOLD HRQ DACK 0 HLDA ... ... | HLDA HLDA | HRQ DREQ 3 3 DACK | HLDA 8237 8237A的级联
DMA传送类型 • DMA读——把数据由存储器传送到外设 • 由MEMR*有效从存储器读出数据,由IOW*有效把这一数据写入外设 • DMA写——把外设输入的数据写入存储器 • 由IOR*有效从外设输入数据,由MEMW*有效把这一数据写入存储器。 • DMA检验——空操作 • 8237A不进行任何检验 • 外设可以进行DMA校验 • 存储器和I/O控制线保持无效,不进行传送
存储器到存储器的传送 • 固定使用通道0和通道1 • 通道0的地址寄存器存源区地址 • 通道1的地址寄存器存目的区地址,通道1的字节数寄存器存传送的字节数 • 传送由设置通道0的软件请求启动 • 每传送一字节需用8个时钟周期 • 前4个时钟周期用通道0地址寄存器的地址从源区读数据送入8237A的临时寄存器 • 后4个时钟周期用通道1地址寄存器的地址把临时寄存器中的数据写入目的区
8237A的工作方式由写模式寄存器决定 • 存放相应通道的方式控制字 • 选择某个DMA通道的工作方式 • 其中用最低2位选择哪个DMA通道 请看方式字的格式
方式字格式(写B号) 00 请求模式 01 单字节模式 10 数据块模式 11 级联模式 00 DMA校验 01 DMA写 10 DMA读 11 非法 ×× 若D7D6=11 0 地址增量(加1) 1 地址减量(减1) 0 禁止自动初始化 1 允许自动初始化 00 通道0 01 通道1 10 通道2 11 通道3
DMA控制器8237 • 自动预置功能: • D4:当设置为自动预置时,每当DMA过程结束信号EOP*产生时(不论是内部终止计数还是外部输入该信号)用基地址寄存器和基字节数寄存器的内容,使相应的现行寄存器恢复为初始值,包括恢复屏蔽位、允许DMA请求这样就作好了下一次DMA传送的准备 • 40
DMA控制器8237 D3 D2:传输方式设定 写输入: I/O设备往内存写入数据。 读输入; 将内存数据送往I/O设备。 校验传输:用于对读传输和写传输功能进行 校验,是虚拟传输,8237此时只产 生EOP信号和地址信号。 • 41
DMA控制器8237 存 储 器 8237 8237 A0~A7 存 储 器 A0~A15 MEMW MEMR D0~D7 I/O 设备 IOR I/O 设备 IOW 写传输读传输 • 42
8.4 827A的时序 当8237A没有被外围设备用来进行DMA操作时,此时它处于所谓空闲状态。在这种状态下,微处理器可以向这个DMA控制器输出命令以及读/写它的内部寄存器 。
DMA空闲周期SI • 过渡状态S0 • 有效周期(S1、S2、S3、S4) DMA控制器的工作时序 8237A内部状态变化流程
8237A的工作时序·空闲周期 • 8237A的任一通道都没有DMA请求时 • 8237A由微处理器控制作为一个接口芯片 • CPU可对8237A编程,或从8237A读取状态 • 8237A采样CS*选片信号,该信号有效,CPU就要对8237A进行读/写操作 • 8237A还采样通道的请求输入信号DREQ,该信号有效,就进入有效周期 进入有效周期
8237A的工作时序·有效周期 • 8237A采样到外设有DMA请求,就脱离空闲周期进入有效周期 • 8237A作为系统的主控芯片,控制DMA传送操作 • DMA传送借用系统总线完成,其控制信号以及工作时序类似CPU总线周期 进入DMA传送时序
Si Si S0 S0 S1 S2 S3 S4 S2 S3 S4 Si Si CLK DREQ HRQ HLDA AEN ADSTB DB0~DB7 A0~A7 DACK MEMR(IOR) IOW(MEMW) DMA传送时序
8237A的工作周期、时序与模式 a) S1 周期: DMAC在S1 状态发出地址允许AEN信号,通过数据总线DB0~DB7将高8位地址A8 ~A15锁存起来。多数情况下,这几位地址不需改变,故可直接进入S2周期。 b)S2周期:①修改存储单元的低8位地址,(高8位已锁存) ②向I/O发请求回答信号DACK,准备 传送数据。 c)S3周期:送高8位地址A8 ~A15到地址总线,发出MEMR或IOR读命令,从内存或I/O准备传送数据。 d)S4周期:发IOW或MEMR命令。 用普通时序时,每进行一次DMA传输,一般用3个时钟周期( S2 S3 S4);压缩时序,用两个时钟周期(S2S4),此时只更新低8位地址,不修改高8位地址 • 48
8237A的寄存器 • 8237A共有10种内部寄存器,对它们的操作有时需要配合3个软件命令 • 8237A的“软件命令” • 不需要通过数据总线写入控制字 • 直接由地址和控制信号译码实现 全部都用地址A0~A3区分
8.5 8237A 的控制寄存器和状态寄存器 1. 8237A 的控制寄存器 • 存放8237A的命令字 • 设置8237A芯片的操作方式 • 影响每个DMA通道 • 复位时使命令寄存器清零 • 设置D2=0才使8237A可以作为DMA控制器 请看命令字的格式
0 DACK低有效 1 DACK高有效 0 滞后写 1 扩展写 × 若D3=1 0 DREQ高有效 1 DREQ低有效 0 固定优先权 1 循环优先权 0 允许DMAC工作 1 禁止DMAC工作 0 禁止存储器之间传送 1 允许存储器之间传送 0 正常时序 1 压缩时序 × 若D0=1 0 允许通道0地址改变 1 禁止通道0地址改变 × 若D0=0 命令字格式 • 8237A 控制/命令寄存器格式(写8号):硬件设置与运行控制 • 8237A硬件设置:
DMA控制器8237 D7 D6 D5 D4 D3 D2 D1 D0 DO:为1则为内存到内存的传送。此时通道0用于存放源地址,通道1用于存放目的地址及计数值。 控制寄存器格式和有关问题: • 52