微机原理与接口技术:DMA传输 详细笔记

直接存储器传送DMA定义:外部设备的数据不经过CPU,直接送入内存储器或内存储器不经过CPU直接送往外部设备。

DMA周期

  • 一次DMA传送的时间称为DMA周期
  • DMA过程完全由硬件实现,因此速度很快,时间上大致相当于一个总线读写周期,因此能够满足高速外部设备数据传输的需要。

1.DMA传输原理

1.1.DMA控制器

DMA控制器的定义:用来协调外部设备接口和内存储器的数据传输的专门器件,简称为DMAC。

DMAC内部的寄存器

  • 地址寄存器:存放DMA传输时存放I/O数据的内存存储单元地址。
  • 字节计数器:存放DMA传输的字节数。
  • 控制寄存器:存放由CPU设定的DMA传输方式和控制命令。
  • 状态寄存器:存放DMAC当前的状态,包括有无DMA请求和是否结束等。

DMAC的功能分类

  • 总线从模块:CPU对DMAC进行预置操作,也就是向DMAC写入内存传送区的首地址、传送字节数和控制字时,DMAC相当于一个外设接口,称为总线从模块。
  • 总线主模块:进行DMA传输时,CPU暂停对系统总线的控制,DMAC获得了对总线的控制权,这时的DMAC称为总线主模块。

1.2.DMA传输过程

  1. 外部设备准备就绪,需要进行DMA操作时,向DMA控制器发出DMA请求信号。DMA控制器受到这个信号后,向CPU发出总线请求信号。
  2. CPU接到总线请求信号后,如果允许,会在当前总线周期结束后,发出总线应答信号,同时放弃对总线的控制。这时,DMA控制器开始实行对总线的控制。
  3. DMAC将内部地址寄存器的内容通过地址总线送往内存储器。对于数据输入过程,向外部设备发出外部设备读控制信号,同时向存储器发出存储器写信号。在这两个信号的作用下,一字节的数据从外设接口送往数据总线,而存储器的数据总线接受这个数据,写入由地址总线上的地址指定的内存单元。对于数据输出过程恰好相反。DMAC向存储器发出读命令,向外部设备发出写命令,一字节的数据从存储器传送到外部设备接口,完成一次输出的操作。
  4. 传送一个字节之后,DMAC自动对地址寄存器的内容进行修改,指向下一个要传送的字节。同时,将字节计数器减一,记录尚未完成的传输次数。
  5. 一次数据传输结束,DMA控制器向CPU撤销总线请求信号,CPU于是也撤销允许使用总线的总线应答信号,CPU收回对总线的控制权。

1.3.8086系统中的DMA信号

  • 最小模式:CPU通过HOLD引脚接收DMA控制器的总线请求;在HLDA引脚上发出对总线请求的允许信号。
  • 最大模式:通过RQ/GT0和RQ/GT1引脚接收DMA控制器的总线请求并在同一根线上发送对总线请求的允许信号。其中前者有更高的优先权。

2.8237A的内部结构和外部信号

8237A概述

  • Intel公司生产的一种40引脚双列直插式大规模集成电路。
  • 是一个可编程DMA控制器,可以提供四个通道的DMA传输控制。

2.1.8237A芯片的主要特点

  • 有4个完成独立的DMA通道,可分别进行编程,控制4台独立的外部设备。可以通过级联的方式进一步扩展DMA通道数。
  • 每个通道的DMA请求均可分别允许和禁止,并对各个通道进行优先级排队。
  • 数据块最大为64KB,每传送一个字节后使地址自动加1或减1。
  • DMA请求可以由外部输入,也可以由软件设置。
  • 可以进行从存储器到存储器的数据传输,用于对存储区域初始化。

2.2.8237A的工作方式

8237A共有四种工作方式可供选择。

2.2.1.单字节传输方式
  • 工作特点:每完成一个字节的数据传输就会释放系统总线,一次DMA传输过程结束。收到一个新的DMA请求则重新申请总线并重复上述过程。
  • 方式评价:这种方式不会对系统的运行产生大的影响。
2.2.2.块传输方式
  • 工作特点:DMA控制器获得总线控制权后,可以连续进入多个DMA周期,进行多个字节的传输(最多64KB)。当传输完成或收到外部的强制停止命令才会释放总线而结束传输。
  • 方式评价:这种方式会获得最高的数据传输速度,但是在数据传输期间CPU不能访问总线,因此如果传输的数据较多,这种方式会对系统工作产生一定的影响。
2.2.3.请求传输方式
  • 工作特点:申请一次总线可以连续进行多个数据的传输,但是每传输一个字节的数据都需要检查信号确定是否可以继续传输,如果信号无效则需要暂停传输,等到信号变为有效时继续传输。
  • 方式评价:这种方式允许外部设备由于发生某种原因的数据不连续,按照外部设备的最高速度进行数据传输,使用比较灵活。
2.2.4.级联传输方式
  • 结构组成:将几个8237A进行级联,其中一个作为主片,其余作为从片,构成主从式DMA系统。一个主片最多连接四个从片。
  • 工作方式:从片收到外部设备接口的DMA请求信号后,不是向CPU申请总线,而是向DMA控制器主片申请,再由主片向CPU申请。

2.3.8237A的传输类型

8237A可以进行四种类型的传输:

  • DMA写传输(I/O→存储器)
  • DMA读传输(存储器→I/O)
  • DMA检验(完成某种校验过程,测试DMA控制器的状态,不进行数据传送)
  • 存储器到存储器的传输

2.4.8237A的内部结构

8237A的内部结构分为两部分:4个DMA通道和一个公共控制部分。其中公共控制部分由读写逻辑和控制逻辑组成。

2.4.1.DMA通道
  • 每个通道的寄存器:16位地址寄存器、16位字节计数器、8位方式寄存器、1位DMA请求触发器、1位屏蔽触发器。
  • 共用的寄存器:4个通道共用一个控制寄存器和一个状态寄存器。
  • 使用要求:在使用DMA通道工作之前,必须对相应的寄存器进行初始化设置。
  • 地址寄存器:由基地址寄存器和当前地址寄存器组成。CPU编程时,将本通道DMA传输的地址初值写入基地址寄存器,再由8237A传送到当前地址寄存器。当前地址寄存器中的内容在每个字节的DMA传输后都会被修改。CPU可以通过两次输入指令读出当前地址寄存器中的内容(每一次读8位),但是基地址寄存器中的值不能被读出且一直保持初值。
  • 字节计数器:由基本字节计数器和当前字节计数器组成。编程时由指令把DMA传输的字节数写入基本字节计数器,继而传送到当前字节计数器。每一次DMA传输后当前字节计数器的值都会被修改。同样,只有当前计数器的值才能由CPU通过两次输入指令读出。
2.4.2.读写逻辑
  • 作为从模块时的读写逻辑:读写逻辑电路接收CPU的读(#IOR)写(#IOW)以及由地址译码电路产生的#CS信号,对地址总线低四位A3-A0进行译码。在#IOW有效时,把数据总线的内容写入所寻址的寄存器;在#IOR有效时,把被选择的寄存器的内容送到数据总线上。
  • 作为主模块时的读写逻辑:如果是DMA写周期,读写逻辑产生#IOR,控制逻辑产生存储器写信号,数据从外部设备接口传送到存储器单元;如果是DMA读周期,读写逻辑产生#IOW,控制逻辑产生存储器读信号,数据从存储器单元传送到外部设备接口。
2.4.3.控制逻辑
  • 初始化时,CPU通过对方式寄存器的设置,确定控制逻辑的操作方式。
  • DMA周期内,控制逻辑通过发出控制信号和16位要存取的存储单元地址来控制DMA过程。
2.4.4.锁存缓冲器(外接)
  • 使用8237A工作时,需要外接一个8位的地址锁存缓冲器。
  • DMA传送之前,8237A从DB7-DB0把存储器地址的A15-A8写入这个缓冲器。
  • DMA周期中,8237A通过引脚A7-A0发送存储器地址的低8位,同时将锁存器中的地址通过三态门送往系统地址总线的A15-A8。
2.4.5.页面地址寄存器(外接)
  • 8237A只控制了地址总线的16位,为了控制8086系统20位的地址,需要外接一个4位的页面地址寄存器,它的值由CPU写入。
  • 8237A发送低16位地址时,高4位的地址从页面地址寄存器发往地址总线A19-A16。

2.5.8237A的对外连接信号

2.5.1.8237A作为从模块时的引脚信号
  • RESET:复位输入端。复位时,屏蔽寄存器被置一,其他寄存器均清零。
  • #CS:片选输入端。由A15-A4译码得到。信号有效时CPU可以对8237A进行读写操作。
  • A3-A0:最低的四位地址线。DMAC作为从模块时作为输入端,用来选择DMAC内部的16个端口。
  • #IOR:外部设备读信号。DMAC作为从模块时作为输入控制信号,信号有效时CPU读取DMAC中内部寄存器的值。
  • #IOW:外部设备写信号。DMAC作为从模块时为输入控制信号,信号有效时CPU向DMAC的内部寄存器写入信息进行预置。
  • DB7-DB0:8位双向三态数据线。DMAC作为从模块时,CPU通过数据线对8237A进行读写。
2.5.2.8237A作为主模块时的引脚信号

地址信号

  • A3-A0:DMAC作为主模块时,这四个信号处于输出状态,提供存储器的最低四位地址。
  • A7-A4:这4位地址线引脚始终处于输出状态或浮空状态。它们在DMA传输时提供存储器的中间4位地址。
  • DB7-DB0:DMAC作为主模块时,DB7-DB0输出当前地址寄存器中的高8位地址,并通过信号ADSTB打入外部锁存器,和A7-A0输出的低8位地址构成16位地址。
  • ADSTB:地址选通输出信号。信号有效时,将DMAC当前地址寄存器中的高8位地址经过DB7-DB0送到外部锁存器。
  • AEN:地址允许输出信号。AEN使得地址锁存器中锁存的高8位地址以及页面地址寄存器的4位一起送到地址总线上,与芯片直接输出的8位地址共同构成内存储器的20位地址。AEN信号也保证了地址总线上的信号来自DMA控制器而不是CPU。

对存储器/外部设备接口的读写控制信号

  • #IOR:DMAC作为主模块时,#IOR输出外部设备接口的读控制信号。信号有效时,I/O接口部件中的数据被读出送往数据总线。
  • #IOW:DMAC作为主模块时,#IOW输出外部设备接口的写控制信号。信号有效时,存储器中读出的数据被写入I/O端口中。
  • READY:准备就绪输入信号。当所用的存储器或I/O接口的速度比较慢,需要延长传输时间时,READY信号无效,8237A就会自动插入等待周期;数据准备就绪时,信号变为高电平,表示可以进行数据传输。
  • #MEMR:存储器读输出信号。当信号有效时,所选中的存储器单元的内容被读出,发送到数据总线。
  • #MEMW:存储器写输出信号。当信号有效时,数据总线上的内容被写入选中的存储单元。

DMA联络信号

  • DREQ3-DREQ0:通道DMA请求输入信号,每个通道对应一个DREQ信号。外部设备要求进行DMA传输时需要使得DREQ处于有效电平,直到DMAC控制器送来DMA相应信号DACK后,I/O接口才撤除DREQ的有效电平。
  • DACK3-DACK0:通道DMA应答输出信号。这是DMAC送给I/O接口的回答信号,每个通道对应一个DACK信号。DMAC获得CPU送来的总线允许信号HLDA后,便产生DACK信号送到相应的外部设备接口。该信号相当于I/O接口的地址选择信号。
  • HRQ:总线请求输出信号。8237A在接收到外设接口发来的DREQ信号后,如果该通道的DMA请求没有被屏蔽,则DMA控制器的HRQ端输出有效电平,向CPU发出总线请求。
  • HLDA:总线响应输入信号。DMAC向CPU发总线请求信号HRQ后,CPU发回这个总线响应信号。8237A收到该信号后便获得了总线控制权。
  • #EOP:DMA传输过程结束双向信号。当DMAC任意通道计数结束时会从#EOP输出一个有效电平,作为DMA传输结束信号。可以用这个信号向CPU申请中断,以便及时处理这个事件。另一方面,如果从外部向DMAC发送一个#EOP信号,则DMA传输过程被强制性结束。

其他引脚信号

  • CLK:时钟输入端信号。
  • 电源和地:提供8237A工作所需的+5V电源。
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值