DMA方式具有如下特点:
  1、 外部设备的输入输出请求直接发给主储存器。
  主存储器既可以被CPU访问,也可以被外围设备访问。因此,在主存储器中通常要有一个存储管理部件来为各种访问主存储器的申请排队,一般计算机系统把外围设备的访问申请安排在最高优先级。
  2、 不需要做保存现场和恢复现场等工作,从而使DMA方式的工作速度大大加快。
  由于在外围设备与主存储器之间传送数据不需要执行程序,因此,也不动用CPU中的数据寄存器和指令计数器等。
  3、在DMA控制器中,除了需要设置数据缓冲寄存器、设备状态寄存器或控制寄存器之外,还要设置主存储器地址寄存器,设备地址寄存器和数据交换个数计数器。
  外围设备与主存储器之间的整个数据交换过程全部要在硬件控制下完成。另外,由于外围设备一般是以字节为单位传送的,而主存储器是以字为单位访问的,因此,在DMA控制器中还要有从字节装配成字和从字拆卸成字节的硬件。
  4、在DMA方式开始之前要对DMA控制器进行初始化,包括向DMA控制器传送主存缓冲区首地址、设备地址、交换的数据块的长度等,并启动设备开始工 作。在DMA方式结束之后,要向CPU申请中断,在中断服务程序中对主存储器中数据缓冲区进行后处理。如果需要继续传送数据的话,要再次对DMA控制器进 行初始化。
  5、在DMA方式中,CPU不仅能够与外围设备并行工作,而且整个数据的传送过程不需要CPU的干预。如果主存储器的频带宽度足够的话,外围设备的工作可以丝毫不影响CPU运行它自身的程序。
  DMA方式的工作流程如下:
  对于输入设备:
  从输入介质上读一个字节或字到DMA控制器中的数据缓冲寄存器BD中,如果输入设备是面向字符的,则要把读入的字符装配成字。
  若一个字还没有装配满,则返回到上面;若校验出错,则发中断申请;若一个字已经装配满,则将BD中的数据送入主存数据寄存器。
  把主存地址寄存器BA(在DMA控制器中)中的地址送入主存地址寄存器,并且将BA中的地址增值至下一个字地址。
  把DMA控制器内的数据交换个数计数器BC中的内容减"1"。
  若BC中的内容为"0",则整个DMA数据传送过程全部结束,否则返回到最上面继续进行。
  对于输出设备:
  把主存地址寄存器BA(在DMA控制器中)中的地址送入主存地址寄存器,并启动主存储器,同时将BA中的地址增值至下一个字地址。
  将主存储器数据寄存器中的数据送入DMA控制器的数据缓冲寄存器BD中。如果输出设备是面向字符的,则要把BD中的数据拆卸字符。
  把BD中数据逐个字符(对于面向字符的设备)或整个字写到输出介质上。
  把DMA控制器内的数据交换个数计数器BC中的内容减"1"。
  若BC中的内容为"0",则整个DMA数据传送过程全部结束,否则返回到最上面继续进行。
  目前使用的DMA方式实际上有如下三种:

  1、周期窃取方式
  在每一条指令执行结束时,CPU测试有没有DMA服务申请,如果有,则CPU进入一个DMA周期。在DMA周期中借用CPU完成上面所列出的DMA工作流程。包括数据和主存地址的传送,交换个数计数器中的内容减"1",主存地址的增值及一些测试判断等。
  采用周期窃取方式时,主存储器可以不与外围设备直接相连接,而只与CPU连接,即仍然可以采用如图4.4那样的连接方式,因为外围设备与主存储器的数据交换与程序控制输入输出方式和中断输入输出方式一样都是要经过CPU的。
  周期窃取方式与程序控制输入输出方式和中断输入输出方式的不同处主要在:它不需要使用程序来完成数据的输入或输出,只是借用了一个CPU的周期来完成DMA流程。因此,其工作速度是很快的。
  周期窃取方式的优点是硬件结构很简单,比较容易实现。缺点是在数据输入或输出过程种实际上占用了CPU的时间。

  2、直接存取方式
  这是一种真正的DMA方式。DMA控制器的数据传送申请不是发向CPU,而是直接发往主存储器。在得到主存储器的响应之后,整个DMA工作流程全部在DMA控制器中用硬件完成。
  直接存取方式的优点与缺点正好与周期窃取方式相反。
  目前的多数计算机系统均采用直接存取方式工作。

  3、数据块传送方式
  在设备控制器中设置一个比较大的数据缓冲存储器,一般要能够存放下一个数据块,如在软磁盘存储器中通常设置512个字节的数据缓冲存储器。与设备介质之间的数据交换在数据缓冲存储器中进行。设备控制器与主存储器之间的数据交换以数据块为单位,并采用程序中断方式进行。
  数据块传送方式实际上并不是DMA方式,只是它在每次中断输入输出过程中是以数据块为单位获得或发送数据的,这一点与上面两种DMA方式相同,因此,通常也把这种输入输出方式归入DMA方式。
  采用数据块传送方式的外围设备还有行式打印机,激光打印机,卡片阅读机,部分绘图仪等。

DMA方式的数据传送过程的更多相关文章

  1. 基于uFUN开发板的心率计(一)DMA方式获取传感器数据

    前言 从3月8号收到板子,到今天算起来,uFUN到手也有两周的时间了,最近利用下班后的时间,做了个心率计,从单片机程序到上位机开发,到现在为止完成的差不多了,实现很简单,uFUN开发板外加一个Puls ...

  2. 使用DMA方式发送串口数据

    一.初始化部分代码 //串口接收DMA缓存 uint8_t Uart_Rx[UART_RX_LEN] = {}; uint32_t Uart_Send_Buffer[] = {}; void USAR ...

  3. STM32 串口USART DMA方式发送接收数据

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 头文件 USART3_DR的地址 DMA的通道 DMA的中断 USART接收回调函数 头 ...

  4. STM32F0使用LL库实现DMA方式AD采集

    在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片.这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现.在本文中我们将介绍基于LL库的ADC的DM ...

  5. STM32 UART DMA实现未知数据长度接收

    串口通信是经常使用到的功能,在STM32中UART具有DMA功能,并且收发都可以使用DMA,使用DMA发送基本上大家不会遇到什么问题,因为发送的时候会告知DMA发送的数据长度,DMA按照发送的长度直接 ...

  6. Redis 通过 RDB 方式进行数据备份与还原

    Redis 通过 RDB 方式进行数据备份与还原 Intro 有的时候我们需要对 Redis 的数据进行迁移,今天介绍一下通过 RDB(快照)文件进行 Redis 数据的备份和还原 Redis 持久化 ...

  7. Intel汇编语言程序设计学习-第四章 数据传送、寻址和算术运算-下

    4.3  和数据相关的操作符和伪指令 操作符和伪指令并非机器可执行的指令,相反,它们是由汇编器进行解释的.开发者可以使用一系列的MASM操作符或伪指令获取数据的地址以及大小等特征信息: OFFSET操 ...

  8. GD32F330 | ADC实例 基于DMA方式

    GD32F330 | ADC实例 基于DMA方式 简单记录一下 ADC多通道转换 DMA搬运 的使用,以 GD32F330G8U6 为例: 一.ADC 基础知识 12位ADC是一种采用逐次逼近方式的模 ...

  9. STM32 串口DMA方式接收(转)

    STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M.最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USA ...

随机推荐

  1. [CSP-S模拟测试]:军训队列(DP+乱搞)

    题目描述 有$n$名学生参加军训,军训的一大重要内容就是走队列,而一个队列的不规整程度是该队中最高的学生的身高与最矮的学生的身高差值的平方.现在要将$n$名参加军训的学生重新分成$k$个队列,每个队列 ...

  2. 【机器学习速成宝典】模型篇05朴素贝叶斯【Naive Bayes】(Python版)

    目录 先验概率与后验概率 条件概率公式.全概率公式.贝叶斯公式 什么是朴素贝叶斯(Naive Bayes) 拉普拉斯平滑(Laplace Smoothing) 应用:遇到连续变量怎么办?(多项式分布, ...

  3. 1、VMware安装步骤

    最后重启电脑

  4. lua源码学习篇四:字节码指令

    在llimits.h文件中定义了指令的类型.其实就是32个字节. typedef lu_int32 Instruction; 上节说到变量最终会存入proto的数组k中,返回的索引放在expdesc ...

  5. Linux_指令杂烩

    目录 目录 指令集合 常用于脚本的指令 查看变量的指令 监控命令 除了root用户的其他用户不能login 重定向 grep 过滤文件内容 vim预设定 系统在启动时要依次运行4个脚本 归档压缩文件互 ...

  6. svn访问版本库时一直提示: please wait while the repository browser is initializing

    最近不知道做了什么操作,原来正常的SVN Check In/Out都无法正常操作. 正常Check In的动作,几秒钟就会操作完成,但是我却等了好久好久,然后提示Connection timed ou ...

  7. Delphi Tokyo 10.2.3发布了

    Delphi Tokyo 10.2.3发布了 http://blog.sina.com.cn/s/blog_44fa172f0102wwwg.html (2018-03-14 07:51:32) 转载 ...

  8. 嵌套的frame

    自动化的测试中,iframe的嵌套也是很常见的,对于嵌套的iframe,我们处理的方式是先进入到iframe的父节点, 再进入到子节点,然后可以对子节点里面的对象进行处理和操作.如下的html代码效果 ...

  9. Django 基于角色的权限控制

    有一种场景, 要求为用户赋予一个角色, 基于角色(比如后管理员,总编, 编辑), 用户拥有相应的权限(比如管理员拥有所有权限, 总编可以增删改查, 编辑只能增改, 有些页面的按钮也只有某些角色才能查看 ...

  10. 【MM系列】SAP 簇表 A017 物料信息记录 (指定工厂) 包含的透明表

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 簇表 A017 物料信息记录 ...