DMA概述

article/2025/11/5 10:35:03

目录

  • 传送原理
  • 工作方式

DMA即直接存储器存取(Direct Memory Access).用DMA传输数据时,在高速I/O设备与存储器之间直接开辟数据传输通道,此时CPU不再直接参与数据交换,而是通过DMA控制器来管理。
DMA数据传输示意如下:
在这里插入图片描述

传送原理

DMA传输的过程为:

  1. 首先由CPU向DMA控制器布置数据传输任务,并启动外设,外设准备好数据后通过I/O接口向DMA控制器发送DRQ信号,表示外设已经准备好数据,请求进行数据传输。
  2. DMA控制器收到DRQ信号后进行优先级的判别和屏蔽位的检测,若外设的DRQ请求获得允许,DMA控制器向CPU发送HRQ信号,请求使用总线。
  3. CPU在当前指令执行完后向DMA控制器发送HLDA信号,同时CPU让出总线。
  4. DMA控制器收到HLDA信号后通过接口向发送DRQ请求信号的外设发送DACK信号,表示其DMA请求已经获得允许。
  5. 外设收到DACK信号后,开始数据的传输,并以中断的方式通知CPU,传输结果由CPU负责处理。
    传输示意图如下:

在这里插入图片描述

工作方式

根据DMA控制器对总线的控制方式不同,其数据传送一般有以下四种方式:

  • 单字节传送:每次DMA请求只传送一个字节数据,每传送完一个字节,DMA控制器中的字节计数寄存器的值减1,当前地址寄存器加1或减1,然后撤除DMA控制器对CPU的请求信号,释放总线返回给CPU,这样CPU至少可以获得一个总线周期。
  • 数据块传送:每次DMA请求获得CPU响应后,DMA控制器就连续占用多个总线周期,传送一个数据块,等到规定长度的数据块传完后或外部作用要求强行结束DMA传送时,才撤除DMA请求信号,释放总线。
  • 请求传送:请求传送方式和数据块传送方式类似,每次传送也可以传送多个字节,但是在每传送完一个字节后,DMA控制器都要检测由I/O接口发出的DMA请求信号是否有效,一旦DMA请求无效就释放总线;如果一组数据没传送完毕,释放总线后,DMA控制器仍然继续检测DMA请求端,一旦DMA请求有效,马上恢复DMA传送。
  • 级联传送:从片DMA控制器的总线请求信号与主片的DMA请求信号DREQ相连,从片的总线请求允许信号HLDA与主片的DMA请求允许信号DACK相连,主片的总线请求信号与CPU的HOLD相连,主片总线请求允许信号HLDA与CPU的HLDA相连。

DMA控制器的功能如下:

  1. 响应外设的请求,向CPU发出总线请求信号。
  2. CPU放弃对总线的控制时,DMA控制器应能接管总线控制权。
  3. 获得总线控制权后,要往地址总线发送地址信号。
  4. DMA期间,应能发出读写控制信号。
  5. 决定本次传送的字节数,判断本次DMA传送是否结束。
  6. DMA过程结束时,将总线控制权归还给CPU。

其结构如下:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/PEsly3Ys.shtml

相关文章

10、Random

利用Random类来产生5个20~ 50之间的随机整数。 提示: Random.nextInt(方法的作用是生成一个随机的int值 ,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。 方法1:int nextInt(int n) import java. util. Rand…

让 RadAsm + masm32 环境支持 Irvine32.lib

学习《汇编语言:基于X86处理器》这本书(或者该书更早版本)的朋友都知道,Irvine32.lib 是该书作者 Kip Irvine 为了汇编初学者而自行设计的一个链接库,它提供了在控制台下简单的输入输出接口。但作者在该书中使用的学习…

RA-Depth

一、论文贡献 1、提出了一种任意尺度的数据增强方法,以促进模型从具有不同尺度的图像中学习深度尺度。 2、开发了一种双高分辨率网络,具有多尺度特征融合,使用新的跨尺度深度一致性损失训练。 二、相关工作 三、方法 3.1参照monodepth2 …

DMA简介

为什么要有 DMA 技术? dma主要是用于读写数据用的 在没有 DMA 技术前,I/O 的过程是这样的: CPU 发出对应的指令给磁盘控制器,然后返回;磁盘控制器收到指令后,于是就开始准备数据,会把数据放入到磁盘控制…

利用RadASM 写汇编程序

本文介绍利用RedASM写一个messageBox “hello world”. RadAsm 是我用过最爽的一个汇编Ide了, 代码高亮,智能提示…… RadASM支持多种不同的汇编编译器,这里我们选择MASM.既然是IDE了,创建工程就很简单了, 文件->Win32 App(no …

srand和rand详细讲解

srand 使用srand引用头文件#include<stdlib.h> 在rand调用之前设置srand&#xff0c;若不设置当rand调用时随机数种子默认为1&#xff0c;随机数种子一样则每次打印出来的值也是一样的。 设置srand srand( (unsigned int )time(NULL) ) 如上所示&#xff0c;我们给一个持…

RadASM with Masm32

1.下载RadASM 从http://www.oby.ro/rad_asm/ 处下载 或http://www.assembly.com.br/ //这个是官网 1.RadASM 2.2.1.6 (09-April-2009) 2.RadASM Assembly programming (07-08-2008) 第一个是编译器 第二个是官网自带的编译配置辅助文件 2.下载MASM 从…

windows10_64位环境下RadAsm的8086汇编语言程序

前言&#xff1a; 当我们在win10环境下使用RadAsm编写汇编时&#xff0c;发现并不能够运行&#xff0c;因为Win64已经废弃了对16位程序的支持&#xff0c;甚至连debug都废除了。而且使用虚拟机太麻烦&#xff0c;有两种解决方案: 方法一&#xff1a;第一种是linux环境下使用命…

在64位系统下,使用 RadASM IDE 写 32 位及 16 位的汇编程序

一&#xff0e; 解压压缩包 二&#xff0e; 打开解压出的文件夹 三&#xff0e; 解压下图两个文件 四&#xff0e; 移动下图的文件夹&#xff08;DOSBox-0.74&#xff09;到你想放置的位置 五&#xff0e; 运行下图程序 下一步 我同意 下一步&#x…

汇编工具安装二:RadASM的安装!

已经配置好的汇编工具下载地址&#xff1a;http://download.csdn.net/detail/sunylat/9189543 RadASM也是一款汇编开发工具&#xff0c;网址&#xff1a;http://www.oby.ro/rad_asm/ 这个工具我也是偶然知道的&#xff0c;今天简单试用了一下&#xff0c;我觉得不错&#xff01…

图解RadASM使用初步

RadASM是一个主要用于Win32汇编的开发工具&#xff0c;也有对其他语言的支持&#xff1b; 此工具提供的方便相当多&#xff1b; 1 安装 2 自带例程 3 部分自带工具 ascii码表 颜色工具&#xff1b; 自带教程&#xff1b; 工具栏制作器&#xff1b; 自带代码片段&#xff1b;…

【汇编语言】汇编实验IDE(集成开发环境):RadASM的安装和使用说明

0 前言 本文适合8086CPU的指令集。 对于重要的专业基础课程&#xff0c;汇编语言&#xff0c;做实验是必不可少的&#xff0c;但是由于汇编语言本身的缺陷&#xff0c;现代计算机并不能直接运行汇编语言程序&#xff0c;因此&#xff0c;一般老师会要求我们 使用虚拟机&…

32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式

32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式 一丶RadAsm的配置和使用 用了怎么长时间的命令行方式,我们发现了几个问题 1.没有代码提醒功能 2.编写代码很慢,记不住各种声明 那么现在有大神,已经帮我们做了一个IDE环境,就是RadAsm,首先简单介绍一下界面 (对于这…

python3——写文件默认的编码格式 GBK~cp936

用python3写文件的时候没有指定编码模式&#xff0c;其默认使用的是encoding‘cp936’ 微软的CP936通常被视为等同GBK&#xff0c;连 IANA 也以“CP936”为“GBK”之别名。不过实际上 GBK 定义的字符比 CP936 多出95个字&#xff0c;其中包括了15个非汉字及80个汉字。 所以小…

Configuration file contains invalid cp936 characters in C:\Users\xxx\pip\pip.ini.

在按照网上的教程配置过pip.ini之后&#xff0c;使用install命名进行导包&#xff0c;导包不成功&#xff0c;提示这个&#xff1a; Configuration file contains invalid cp936 characters in C:\Users\wangli66\pip\pip.ini. 这是我配置的文件&#xff1a; [global] index…

PL3369CE

PL3369CE是一款原边控制&#xff0c;用于反激式开关电源的恒流/恒压调节器。PL3369CE高度集成了功率开关&#xff0c;并通过去除光耦以及次级控制电路&#xff0c;在简化充电器/适配器等传统的恒流/恒压设计的同时实现了精确的电流和电压调节。PL3369CE的复合模式的应用使芯片能…

TexLive安装报错does not map to cp936

TexLive解压后安装&#xff0c;如果存放在有中文名的文件夹中&#xff0c;就会出现如下报错&#xff1a;xxx does not map to cp936 at xxx/install-menu-extl.pl line 111. in vars section 解决方法&#xff1a;直接将解压好的文件剪切到不含中文的文件夹中&#xff08;比如直…

Configuration file contains invalid cp936 characters in C:\Users\YWX\pip\pip.ini. 已解决!

项目场景&#xff1a; python pip安装国内镜像源报错问题&#xff01; 问题描述 在C:\Users\YWX\pip 配置好镜像源后 在cmd安装出现&#xff1a; 原因分析&#xff1a; 在pip.ini 配置文件里存在注释符号 解决方案&#xff1a; 把注释去掉&#xff0c;保存&#xff01; &g…

ubuntu 截图快捷键设置

转载于:https://www.cnblogs.com/WhiteHorseIsNotHorse/p/8554312.html

ubuntu-ubuntu16.04截屏

默认&#xff1a; 对整个屏幕截图&#xff1a; PrintScreen 对活动窗口截图&#xff1a; AltPrintScreen 对任意矩形截图&#xff1a; ShiftPrintScreen 以上三个快捷键再加上Ctrl&#xff0c;就会默认复制截图到粘贴板 在系统设置里可以更改快捷键设置&#xff1a; 系统设置-硬…