当前位置: 首页 > news >正文

第8章 DMA控制器

  1. DMA的基本概念

DMA是用硬件实现不再通过CPU的,计算机内存储器与I/O设备之间的直接数据传送技术。该硬件称为DMA控制器(简称DMAC),用来控制数据的输入和输出,复杂性堪比CPU。

DMA方式可实现:

  1. 数据存储器RAM→I/O端口的DMA读传送
  2. I/O端口→数据存储器RAM的DMA写传送
  3. 数据存储器RAM→数据存储器RAM的存储单元传送
  1. 8237A主要特性

物理特性:使用单一的+5V电源,单相时钟,40条引脚,双列直插式封装。

具有4个独立的通道:每个通道都具有64K存储器寻址能力,一次传送的最大长度可达64K字节。可以在存储器和外设之间传送数据,也可以在存储器之间进行传送。

独立性:每一通道的DMA请求都可以分别允许和禁止。每一通道的DMA请求的优先权,可由编程规定为固定方式或旋转方式。

4种工作方式:单字节传送方式、数据块传送方式、请求传送方式、级联方式

级联能力:可以用级联的方式扩展通道数,最多可达16个DMA通道。

复位:有一条结束DMA传送的输入信号结束DMA传送或重新初始化:

  1. 8237A内部结构
  • 存储器地址寄存器
  • 传送字节数寄存器
  • 控制与状态寄存器
  • 数据缓冲寄存器
  1. 8237A初始化编程

  1. 输出主清除命令,使8237A处于复位状态,以接收新命令
  2. 写入工作方式寄存器,以确定8237A工作方式和传送类型;
  3. 写入命令寄存器,以控制8237A的工作;
  4. 根据所选通道,输入相应通道当前地址寄存器和基地址寄存器的初始值;
  5. 输入当前字节计数器和基字节数寄存器的初始值;
  6. 写入屏蔽寄存器
  7. 写入请求寄存器,便可由软件启动DMA传送。否则,经过(1)~(6)步编程后,由硬件控制通道DREQ启动DMA传送的过程

【例8-1】初始化8237A。对PC系列的DMA控制器8237A进行测试。测试程序对4个通道的8个16位寄存器先后写入全“1”和全“0”,再读出比较其是否一致。若不一致,则出错,停机。(设程序中的变量DMA地址是00H)

;检测前,禁止DMA控制器工作
MOV AL, 04H ;命令字,禁止8273A工作
OUT DMA+08, AL ;命令字送命令寄存器
OUT DMA+0D,AL ;命令字送清除屏蔽寄存器MOV AL, 0FFH ;全“1”检测
BEG:MOV BL, AL ;暂存AX到BX
MOV BH, AL ;
MOV CX, 8 ;循环测试8个寄存器
MOV DX, DMA ;FF写入0~3号通道的基地址或字节数寄存器
LP1:OUT DX, AL ;写入低8位
OUT DX, AL ;再写入高8位

  1. 8237A程序设计

目录

相关文章:

第8章 DMA控制器

DMA的基本概念 DMA是用硬件实现不再通过CPU的,计算机内存储器与I/O设备之间的直接数据传送技术。该硬件称为DMA控制器(简称DMAC),用来控制数据的输入和输出,复杂性堪比CPU。 DMA方式可实现: 数据存储器RAM→I/O端口的DMA读传送I/O…...

后端java开发路由接口并部署服务器(四)

一、安装IntelliJ IDEA,安装包下载 1、官网下载 2、网盘资源 安装包下载完成后进行傻瓜式下一步安装就可以了 打开IntelliJ IDEA,输入网盘资源文件内容 三、汉化处理 插件搜索chinese,就会找到相应的插件安装重启软件即可 四、新建后端j…...

检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?

论文地址:https://arxiv.org/pdf/2403.05313 Github地址:https://github.com/CraftJarvis/RAT 想象一下,一个人工智能助手可以像莎士比亚一样写作,像专家一样推理。这听起来很了不起,对吧?但是&#xff0…...

在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)

文章目录 1. 什么是聚合列?2. 什么是非聚合列?3. 在 GROUP BY 查询中的非聚合列问题示例解决方案 4. 为什么 only_full_group_by 要求非聚合列出现在 GROUP BY 中?5. 如何判断一个列是聚合列还是非聚合列?6. 总结 在 SQL 中&#…...

单元测试3.0+ @RunWith(JMockit.class)+mock+injectable+Expectations

Jmockit使用笔记_基本功能使用Tested_Injectable_Mocked_Expectations_jmockit.class-CSDN博客 静态变量直接赋值就好,没必要mock了 测试框架Jmockit集合junit使用 RunWith(JMockit.class) 写在测试案例类上的注解 Tested 在测试案例中,写在我们要测试的类上…...

STM32第十一课:STM32-基于标准库的42步进电机的简单IO控制(附电机教程,看到即赚到)

一:步进电机简介 步进电机又称为脉冲电机,简而言之,就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩,步进电机的角位移量与输入的脉冲个数严格成正…...

MotionCtrl: A Unified and Flexible Motion Controller for Video Generation 论文解读

目录 一、概述 二、相关工作 三、前置知识 1、LVDM Introduction 2、LVDM Method 3、LVDM for Short Video Generation 4、Hierarchical LVDM for Long Video Generation 5、训练细节 6、推理过程 四、MotionCtrl 1、CMCM 2、OMCM 3、训练策略 五、实验 一、概述…...

LINUX线程操作

文章目录 线程的定义LINUX中的线程模型一对一模型多对一模型多对多模型 线程实现原理线程的状态新建状态(New)就绪状态(Runnable)运行状态(Running)阻塞状态(Blocked)死亡状态&#…...

在Lua中,Metatable元表如何操作?

Lua中的Metatable(元表)是一个强大的特性,它允许我们改变表(table)的行为。下面是对Lua中的Metatable元表的详细介绍,包括语法规则和示例。 1.Metatable介绍 Metatable是一个普通的Lua表,它用于…...

4D LUT: Learnable Context-Aware 4D LookupTable for Image Enhancement

摘要:图像增强旨在通过修饰色彩和色调来提高照片的审美视觉质量,是专业数码摄影的必备技术。 近年来,基于深度学习的图像增强算法取得了可喜的性能并越来越受欢迎。 然而,典型的努力尝试为所有像素的颜色转换构建统一的增强器。 它…...

瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp)

瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp) RK3568及rkmpp介绍编译安装mpp获取源码交叉编译安装 libdrmlibdrm-2.4.89 make 方式编译(cannot find -lcairo, 不推荐)下载源码编译编译错误: multiple definition of `nouveau debug‘错误cannot find -lcairo:…...

使用SuperMap制作地形图的详细教程

一、数据准备 本示例以山东为例,演示如何通过SuperMap iDesktopX制作一个好看的地形图。所有数据均来源于互联网公开数据,如有自己项目真实数据,可直接跳过数据下载进入下一步。 本示例所需数据包括: 数据类别 数据类型 DEM数据…...

PHP Array:精通数组操作

PHP Array:精通数组操作 PHP,作为一门流行的服务器端编程语言,提供了强大的数组处理能力。数组是PHP中非常灵活和强大的数据结构,它可以存储多个相同类型的值。在PHP中,数组不仅可以存储数字,还可以存储字…...

【使用命令配置java环境变量永久生效与脚本切换jdk版本】

java配置环境变量命令与脚本切换jdk版本 新建用户环境变量永久生效 setx JAVA8_HOME "D:\Java\jdk8" setx JAVA17_HOME "d:\Java\jdk-17" setx JAVA_HOME %JAVA8_HOME% setx CLASSPATH ".;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;"…...

STM32-笔记32-ESP8266作为服务端

esp8266作为服务器的时候,这时候网络助手以客户端的模式连接到esp8266,其中IP地址写的是esp8266作为服务器时的IP地址,可以使用ATCIFSR查询esp8266的ip地址,端口号默认写333。 当esp8266作为服务器的时候,需要完成哪些…...

RAG(Retrieval-Augmented Generation,检索增强生成)流程

目录 一、知识文档的准备二、OCR转换三、分词处理四、创建向量数据库五、初始化语言聊天模型1.prompt2.检索链3.对话 完整代码 知识文档的准备:首先需要准备知识文档,这些文档可以是多种格式,如Word、TXT、PDF等。使用文档加载器或多模态模型…...

【Python学习(六)——While、for、循环控制、指数爆炸】

Python学习(六)——While、for、循环控制、指数爆炸 本文介绍了While、for、循环控制、指数爆炸,仅作为本人学习时记录,感兴趣的初学者可以一起看看,欢迎评论区讨论,一起加油鸭~~~ 心中默念:Py…...

解释一下:运放的输入失调电流

输入失调电流 首先看基础部分:这就是同相比例放大器 按照理论计算,输入VIN=0时,输出VOUT应为0,对吧 仿真与理论差距较大,有200多毫伏的偏差,这就是输入偏置电流IBIAS引起的,接着看它的定义 同向和反向输入电流的平均值,也就是Ib1、Ib2求平均,即(Ib1+Ib2)/2 按照下面…...

力扣hot100——二分查找

35. 搜索插入位置 class Solution { public:int searchInsert(vector<int>& a, int x) {if (a[0] > x) return 0;int l 0, r a.size() - 1;while (l < r) {int mid (l r 1) / 2;if (a[mid] < x) l mid;else r mid - 1;}if (a[l] x) return l;else …...

PHP 使用集合 处理复杂数据 提升开发效率

在 PHP 中&#xff0c;集合&#xff08;Collections&#xff09;通常是通过数组或专门的集合类来实现的。 集合&#xff08;Collection&#xff09;是一种高级的数据结构&#xff0c;可以提供比普通数组更强大的操作和功能&#xff0c;特别是当你需要更复杂的数据处理时。 La…...

Copilot 插入广告引担忧,AI 工具商业化边界受考

Copilot 拉取请求中惊现广告插入团队成员使用 Copilot 纠正拉取请求&#xff08;PR&#xff09;中的拼写错误时&#xff0c;出现了令人意想不到的情况。Copilot 不仅修改了 PR 描述&#xff0c;还插入了它自身以及 Raycast 的广告。这一行为引发了用户的强烈反应&#xff0c;有…...

Go Channel 缓冲区机制与性能影响

Go Channel 缓冲区机制与性能影响 在Go语言中&#xff0c;Channel是协程间通信的核心机制&#xff0c;而缓冲区的设置直接影响程序的并发性能和稳定性。理解缓冲区的运作原理及其对性能的影响&#xff0c;对于编写高效、可靠的并发程序至关重要。本文将从缓冲区的底层机制出发…...

实战指南:在CentOS 8上部署与配置BIND DNS权威服务器

1. 为什么要在CentOS 8上搭建DNS服务器&#xff1f; 想象一下这样的场景&#xff1a;公司内部有几十台服务器&#xff0c;每次新同事入职都要发一份IP地址对照表&#xff1b;开发团队每次联调测试都要反复确认服务地址&#xff1b;运维人员排查问题时要在记事本里翻找各种192.1…...

别再死记硬背了!用这5个真实运维脚本,搞定90%的Shell面试题

5个实战Shell脚本&#xff1a;从面试题到真实运维场景的蜕变 在技术面试中&#xff0c;Shell脚本能力往往是区分普通候选人和优秀候选人的关键指标。但死记硬背面试题答案的时代已经过去&#xff0c;现代企业更看重候选人解决实际问题的能力。本文将带你通过5个真实运维场景中的…...

创新实训第一周总结

第一周工作产出较少&#xff0c;作为患者端的开发者&#xff0c;为了保证数据库不出现重合或冲突等原因&#xff0c;我等待医生端和管理员端的开发初步完成后再进行的开发。第一篇博客的技术性会较低想到什么说什么本周的工作主要以分析为主首先分析了数据库的结构&#xff08;…...

Venera开源漫画阅读工具:构建个性化漫画内容生态系统指南

Venera开源漫画阅读工具&#xff1a;构建个性化漫画内容生态系统指南 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 副标题&#xff1a;如何通过模块化漫画源配置解决多平台阅读碎片化难题 价值定位&#xff1a;重新定义漫…...

Ruoyi-Vue3实战:10分钟搞定学生管理系统CRUD(附完整SQL)

Ruoyi-Vue3学生管理系统实战&#xff1a;从零到部署的完整指南 在当今快速迭代的开发环境中&#xff0c;选择高效的技术栈至关重要。Ruoyi-Vue3作为基于Spring Boot和Vue3的企业级开发框架&#xff0c;以其模块化设计和丰富的功能组件&#xff0c;成为快速构建管理系统的首选方…...

别再手动排版了!用LaTeX + TikZ 5分钟搞定高中数学试卷里的立体几何图

用LaTeXTikZ高效绘制数学试卷中的立体几何图形 数学试卷排版一直是教师们的痛点&#xff0c;尤其是立体几何图形的绘制。传统方法要么依赖专业绘图软件导出图片插入&#xff0c;要么直接在Word中用绘图工具勉强拼凑&#xff0c;不仅效率低下&#xff0c;修改起来更是噩梦。其实…...

linux-系统函数

Linux 系统函数详解 Linux 系统函数是用户程序与内核交互的底层接口&#xff0c;通过系统调用&#xff08;syscall&#xff09;实现。以下是核心分类及典型函数&#xff1a; 1. 文件操作函数 #include <fcntl.h> int open(const char *pathname, int flags, mode_t mode)…...

BURSTER 8645-5005 扭矩传感器

BURSTER 8645-5005&#xff08;德国波斯特&#xff09;是一款非接触式、磁致伸缩原理、高精度动态旋转扭矩传感器&#xff0c;量程 5 N・m&#xff0c;内置放大器&#xff0c;专为连续旋转工况下的动态扭矩测量设计一、型号与量程型号&#xff1a;BURSTER 8645-5005系列&#x…...