DMA工作原理

来源:互联网 发布:离婚率越来越高知乎 编辑:程序博客网 时间:2024/06/05 08:10
DMA控制方式
  当高速外设要与系统内存或者要在系统内存的不同区域之间,进行大量数据的快速传送时,查询方式和中断方式可能不能满足要求;直接存储器存取(DMA)就是为解决这个问题提出的;采用DMA方式,在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送。 
  DMA 的传送工作过程:
  1)DMAC 发出DMA 传送请求;
  2)DMAC 通过连接到CPU 的HOLD 信号向CPU 提出DMA 请求; 
  3)CPU 在完成当前总线操作后会立即对DMA 请求做出响应,CPU 的响应包括两个方面: 
  CPU 将控制总线、数据总线和地址总线浮空,即放弃对这些总线的控制权;
  CPU 将有效的HLDA 信号加到DMAC 上,以通知DMAC CPU 已经放弃了总线的控制权; 
  4)CPU 将总线浮空,即放弃了总线控制权后,由DMAC 接管系统总线的控制权,并向外设送出DMA 的应答信号。 
  5) DMAC 送出地址信号和控制信号,实现外设与内存或内存之间大量数据的快速传送。 
  6) DMAC 将规定的数据字节传送完之后,通过向CPU 发HOLD 信号,撤消对CPU的DMA 请求。CPU 收到此信号,一方面使HLDA 无效,另一方面又重新开始控制总线,实现正常取指令、分析指令、执行指令的操作。 
  DMA传输方式
  DMA 的传送方式分为:I/O 接口到存储器,存储器到I/O 接口和存储器到存储器三种模式。
  1) I/O 接口到存储器方式 
  当进行由I/O 接口到存储器的数据传送时,来自I/O 接口的数据利用DMAC 送出的控制信号,将数据输送到系统数据总线D0~D7 上,同时,DMAC 送出存储器单元地址及控制信号,将存在于D0~D7 上的数据写入所选中的存储单元中。这样就完成了由I/O 接口到存储器一个字节的传送。同时DMAC 修改内部地址及字节数寄存器的内容。
  2) 存储器到 I/O 接口 
  与前一种情况类似,在进行这种传送时,DMAC 送出存储器地址及控制信号,将选中的存储单元的内容读出放在数据总线D0~D7 上,接着,DMAC 送出控制信号,将数据写到规定的(预选中)端口中去,而后MDAC 自动修改内部的地址及字节数寄存器的内容。
  3) 存储器到存储器 

  存储器到存储器的DMA 数据传送采用数据块传送方式,首先送出内存源区域的地址和控制信号,将选中内存单元的的数据暂存,接着修改地址及字节数寄存器的值,然后输出内存目的区域的地址及控制信号,将暂存的数据,通过系统数据总线,写入到内存的目的区域中去,最后修改地址和字节数寄存器的内容,当字节计数器减到零或外部输入时可结束一次 DMA 传输过程。


DMA控制器逻辑结构主要由以下几部分组成:

    ①内存地址计数器

    ②字计数器

    ③数据缓冲寄存器

    ④“DMA请求”标志

    ⑤“控制/状态”逻辑

    ⑥中断机构

    2. DMA数据传送过程

  DMA的数据传送过程可分为三个阶段:传送前预处理、正式传送、传送后处理。