嵌入式_DMA传送

DMA传送

一、控制方式

主机与外设之间数据传送的控制方式有以下四种:
• 无条件传送
• 查询式传送
• 中断方式传送
• 直接存储器存取(DMA, Direct Memory Access)

(一)、无条件传送方式

适用于总是处于准备好状态的外设
• 直接对IO口寄存器进行读写(如GPIO读写)
• 以下外设可采用无条件传送方式:
• 开关
• 发光器件(如发光二极管、7段数码管、灯泡等)
• 继电器
• 步进电机
• 优点:软件及接口硬件简单
• 缺点:只适用于简单外设,适应范围较窄

(二)、查询方式传送

• 适用于外设并不总是准备好,而且对传送速率、传送效率要求不高的场合。
• CPU在与外设交换数据前必须询问外设状态——“你准备好没有?”
• 对外设的要求:应提供设备状态信息
• 对接口的要求:需要提供状态端口
• 优点:软件比较简单
• 缺点:CPU效率低,数据传送的实时性差,速度较慢

(三)、中断方式传送

CPU无需循环查询外设状态,而是外部设备在需要进行数据传送时才中断CPU正在进行的工作,让CPU来为其服务。即CPU在没有外设请求时可以去做更重要的事情,有请求时才去传输数据,从而大大提高了CPU的利用率。
• 优点:CPU效率高,实时性好,速度快。
• 缺点:程序编制较为复杂,如果需要进行大量数据传输,频繁响应中断,由于每次都需要保存现场,导致CPU执行效率底下。

二、传输原理

  1. DMA设置 ⑦
    CPU通过写入控制器的
    相应寄存器设置源、目
    标地址及传输数等信息。
  2. DMA传输
    ① 外设发出DMA请求
    ② DMAC向CPU申请总线
    ③ CPU完成当前总线周期后响应,并释放总线控制权
    ④ DMAC得到总线控制权,并发出DMA响应信号
    ⑤ 由DMAC发出各种控制信号,控制外设与存储器之间的数据传送
    ⑥ 数据传送完后,DMAC撤销HOLD信号
    ⑦ CPU释放HLDA信号,并重新控制总线

三、DMA控制器

使用DMA方式传输时,需要一个专门的器件来协调外设接口和内存储器的数据传输,该器件称为DMA控制器。一个DMAC可以有多个通道连接到不同外设。
DMAC内部的主要寄存器:
• 地址寄存器:存放DMA传输时存储单元地址和外设数据寄存器地址;
• 字节计数器:存放DMA传输的字节数;
• 控制寄存器:存放由CPU设定的DMA传输方式,控制命令等;
• 状态寄存器:存放DMAC当前的状态,包括有无DMA请求,是否结束等。
• DMAC在系统中的二种不同角色:
• 总线从模块:
CPU对DMAC进行预置操作,也就是向DMAC写入内存传送区的首地址、传送字节数和控制字时,DMAC相当于一个外设接口,称为总线从模块。
• 总线主模块:
进行DMA传输时,CPU暂停对系统总线的控制,DMAC取得了对总线的控制权,这时的DMAC称为总线主模块。
DMA控制器的工作过程
① 当外设准备好,可以进行DMA传送时,外设向DMA控制器发出“DMA传送请求”信号(DRQ);
② DMA控制器收到请求后,向CPU发出“总线请求”信号HOLD,表示希望占用线;
③ CPU在完成当前总线周期后会立即对HOLD信号进行响应。响应包括两个动作:一是CPU将数据总线、地址总线和相应的控制信号线均置为高阻态,由此放弃对总线的控制权。另一方面,CPU向DMA控制器发出“总线响应”信号(HLDA)。
④ DMA控制器收到HLDA信号后,就开始控制总线,并向外设发出DMA响应信号DACK;
⑤ DMA控制器送出地址信号和相应的控制信号,实现外设与内存或内存与内存之间的直接数据传送;例如,向I/O接口发出读信号,同时往地址总线上发出存储器的地址和存储器写信号和AEN信号,即可从外设向内存传送一个字节。
⑥ DMA控制器自动修改地址和字节计数器,并判断是否需要重复传送操作。
⑦ 结束:当规定的数据传送完后,DMA控制器就撤销发往CPU的HOLD信号。CPU检测到HOLD失效后,紧接着撤销HLDA信号,并在下一时钟周期重新开始控制总线。

四、传输方式

• DMA的三种传输方式:
• 连续传送(块传送)
• DMAC申请到总线后,将一块数据传送完后才释放总线,而不管中间DREQ是否有效。
• 单次传送(每次传送一个字节)
• 每个DMA周期只传送一个字节就立即释放总线。
• 按需传送(猝发传送)
• 只要I/O接口的数据缓冲可用(非空或未满),就进行传送。
(注:I/O接口需要有一定大小的FIFO缓冲)

在这里插入图片描述

五、DMA与主存交换数据的方法

• 当CPU需要访问DMA的外设时:当前外设访问不可,其他外设访问可能(如通过总线矩阵)
• 当CPU与DMA同时访问内存时有3种处理方式:
1、停止CPU访问主存
2、周期挪用(周期窃取,DMA窃取CPU总线周期)
3、DMA与CPU交替访问

1、停止CPU访问主存
• 当外围设备要求传送一批数据时,由DMA控制器发一个停止信号给CPU,要求CPU放弃对地址总线、数据总线和有关控制总线的使用权。DMA控制器获得总线控制权以后,开始进行数据传送。在一批数据传送完毕后,DMA控制器通知CPU可以使用内存,并把总线控制权交还给CPU。在这种DMA传送过程 中,CPU基本处于不工作状态或者说保持状态。
• 优点:控制简单,它适用于数据传输率很高的设备进行成组传送。
• 缺点:在DMA控制器访内阶段,内存的效能没有充分发挥,相当一部分内存工作周
期是空闲的。这是因为,外围设备传送两个数据之间的间隔一般总是大于内存存储周
期,即使高速I/O设备也是如此。

2、周期挪用(周期窃取)
• 当I/O设备没有DMA请求时,CPU按程序要求访问内存;一旦I/O设备有DMA请求,则由I/O设备挪用一个或几个内存周期。
• I/O设备请求DMA传送有三种情况:

  1. CPU此时不需要访问主存(I/O设备与CPU无冲突)
  2. CPU此时正在访问主存(必须等待存取周期结束,CPU才能将总线控制权让出)
  3. I/O设备与CPU都要求访问主存(在CPU执行访问主存指令的过程中插入DMA请求,并挪用了一二个内存周期)

• 优点:既实现了I/O传送,又较好地发挥了内存和CPU的效率,是一种广泛采用的方法。
• 缺点:I/O设备每一次周期挪用都有申请总线控制权、建立总线控制权和归还总线控制权的过程,所以传送一个字对内存来说要占用一个周期,但对DMA控制器来说一般要2—5个 内存周期(视逻辑线路的延迟而定)。因此,周期挪用的方法适用于I/O设备读写周期大于内存存储周期的情况。

3、DMA与CPU交替访问
• DMA与CPU相互配合,交替执行,时分复用。这种DMA传送对CPU来说,如同透
明的玻璃一般,没有任何感觉或影响。在透明的DMA方式下工作,CPU既不停止
主程序的运行,也不进入等待状态,是一种高效率的工作方式。当然,相应的硬件
逻辑也就更加复杂。
• 优点:不需要总线使用权的申请、建立和归还过程,总线使用权是通过DMA访存
和CPU访存分时进行的。CPU既不停止主程序的运行,也不进入等待状态,是一种
高效率的工作方式
• 缺点:相应的硬件逻辑更加复杂。

猜你喜欢

转载自blog.csdn.net/Kattlin_gsc/article/details/106857572