DW_DMAC简介

基本概念:

DMA:全称direct memory access,即直接存储器访问。dma可以在中央处理器CPU不参与的情况下,实现外设和内存之间的数据直接传输,从而提高数据传输效率

0

外设与计算机内存之间的数据传输,一般可通过程序查询方式和中断方式进行

  1. 在程序查询方式时,CPU要反复测试外设状态,在外设未准备好的情况下,CPU就处于等待状态,直到外设准备好,才进行数据传送
  2. 中断方式下,每实现一次数据传送,CPU都要进入中断处理程序、保护断点、保护现场、恢复现场、返回主程序的操作

这两种方式都是在CPU的控制下,通过CPU执行指令来完成的。数据传送方向为外设->CPU->内存。这两种方式没传送一字节都需要耗用较长时间

使用CPU搬运外设数据的缺点:

  • CPU的工作速度与外设的工作速度相差很大,降低系统的效率
  • CPU操作一次总线只能进行一次存取
  • 搬运数据时需要先把数据放在寄存器,然后再从寄存器搬到另一个地址
  • 外设数据类型繁多,CPU无法直接存取,需要进行格式转换

使用DMA搬运数据的效果:

  • 多通道同时可以传输,提高搬运效率
  • 基于burst类型传输,操作一次总线可进行多个数据的读写
  • 搬运外设数据时,数据可先存放在通道内部的fifo,再转发
  • 可以根据外设的数据格式设置后进行读写搬运数据

DMA概念介绍:

1、源外设:DMA搬运数据的起点,读取数据的地方

2、目的外设:DMA搬运数据的终点,写入数据的地方

3、通道channel:DMA多个通道,每个通道配置后都可以进行数据的搬运。可理解为传输数据的管道

4、master接口:作为master访问读写数据的接口,一般使用AXI接口

5、slave接口:CPU读写配置DMA的接口,一般使用AHB或者APB

6、硬件握手:外设与DMA交互时的握手信号,例如dma_req、dma_single、dma_last等信号

7、流控:决定DMA传输中,传输的数据量、传输结束的控制信号等

数据流向简介:

下图展示的是源外设到目的外设的数据流向:

0

1、CPU通过APB/AHB总线将DMA具体的配置进行配置,上图选择channel0,通过AHB配置传输的源地址、目的地址、传输的数据量等

2、源外设,发送DMA握手信号之后,DMA才会启动传输,在此之前会等待硬件握手信号

传输层次

针对非内存外设的DMA传输层次结构:

0

DMA传输中,分为block为传输,对应的就是Block Transfer level,DMA Transaction Level的Burst Transaction指的是外设配置的channel CTL寄存器中的msize,会根据msize的设置进行burst/signal传输;AMBA Transfer Level相当于AXI总线传输层次上面的,这个跟arlen/awlen的设置相关。如果想自己设置可通过channel CTL寄存器中的awlen/arlen设置,如果没设置或者设置异常则会由dma随机设置。

针对内存外设的DMA传输层次结构:

0

传输类型:

DMA的作用就是实现数据的直接传输,主要涉及四种情况的数据传输。四种传输情况如下:

1、外设到内存

2、内存到外设

3、外设到外设

4、内存到内存

上面四种传输情况,可根据具体的使用情况分为两种流控方式:DMA流控、外设流控

DMA硬件握手信号:

1、dma_req:外设burst请求信号

2、dma_singal:外设single请求信号

3、dma_last:外设流控时信号有效,指示此次传输为最后一次burst/single传输

4、dma_ack:dma回应外设信号

5、dma_finish:dma传输完成信号

0

当DMA流控的时候,dma_last信号是会被忽略的,会根据block_ts传输完成之后,就会给外设发出dma_finish信号,表示传输完成

当外设流控的时候,当外设传输最后一块数据时,就发送dma_last信号给到DMA,DMA收到dma_last信号就知道传输的是最后一块数据,传输完成之后发送dma_finish信号给到外设,表示传输完成

0

DMA传输类型:

DMA single block:

contiguous:连续地址访问的方式,按照地址递增的方式传输数据

DMA multi blocks传输:

shadow register:阴影寄存器方式,block传输之前会将信息重新从寄存器中读取再进行传输

auto-reload:自动重载方式,每一个block传输开始前重新加载初始传输信息,重新传输

lllp:链表方式进行multi-block类型传输时,下一个block传输的信息会存储在链表指向的地址中

对DMA不同传输方式的理解:

1、contiguouts进行源地址、目的地址递增的数据传输,最常见的就是读写memory的方式

2、atuo-reload是传输完成之后又会回到起始状态,加载的数据量、源地址和目的地址都不变

3、shadow和llp都需要将传输block信息配置好,区别是llp要分配一块内存,但可以构造较多的即将传输的block信息,shadow不会用到系统内存,但只能提前构造下一块传输的block信息

4、llp模块可以静态创建一块链表,也可以动态扩展

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信号量基础入门:并发控制的核心概念

问题的复杂性产生的根本原因在于,如 2.2 节所述,共享变量的访问始终是“单向信息流”。也就是说,一个进程可以分配新值或检查当前值,但这种检查不会为其他进程留下任何痕迹。结果是,当一个进程想要对共享变量的当前值作…

(十九)Java集合框架深度解析:从基础到高级应用

一、集合框架概述 1.1 什么是集合框架 Java集合框架(Java Collections Framework, JCF)是Java语言中用于表示和操作集合的一套标准化体系结构。它提供了一组接口、实现类和算法,用于存储和操作对象组,解决了数组在存储对象时的诸多限制。 集合框架的主…

Blender cycles烘焙贴图笔记

下载了一些枪模型,一个模型有七八个材质,一个扳机、准星还有单独的材质,用的贴图只有一小部分有内容,对Draw Call非常不友好。不得不学一下怎么用Blender减材质。 找到了这个视频如何在Blender中将多种材料多张贴图烘焙成一张贴图…

mysql的高可用

1. 环境准备 2台MySQL服务器(node1: 192.168.1.101,node2: 192.168.1.102)2台HAProxy Keepalived服务器(haproxy1: 192.168.1.103,haproxy2: 192.168.1.104)虚拟IP(VIP: 192.168.1.100&#x…

鸿蒙 系统-安全-程序访问控制-应用权限管控

Ability Kit 提供了一种允许应用访问系统资源(如:通讯录等)和系统能力(如:访问摄像头、麦克风等)的通用权限访问方式,来保护系统数据(包括用户个人数据)或功能&#xff0…

算法-数对的使用

1、数对可用于数组排序中&#xff0c;并且可记忆化排序前的元素下标 #include<iostream> #include<string> #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10; pair<int, int> a[N]; void solve() {ll n;cin …

Linux基础第四天

系统之间文件共享 想要实现两个不同的系统之间实现文件共享&#xff0c;最简单的一种方案就是设置VMware软件的共享文件夹&#xff0c;利用共享文件夹可以实现linux系统和windows系统之间的文件共享&#xff0c;这样就可以实现在windows系统上编辑程序&#xff0c;然后在linux系…

Docker 核心原理详解:Namespaces 与 Cgroups 如何实现资源隔离与限制

#Docker疑难杂症解决指南# Docker 作为容器化技术的代名词,彻底改变了软件的开发、部署和管理方式。它凭借其轻量、快速、一致性强的特性,成为了现代云原生架构的基石。然而,Docker 容器的神奇之处并非“无中生有”,其背后是 Linux 内核的两大核心技术——Namespaces(命名…

GitHub 趋势日报 (2025年05月14日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1xming521/WeClone&#x1f680;从聊天记录创造数字分身的一站式解决方案&…

【Go】从0开始学习Go

文章目录 从0开始学习Go0 与C对比1 代码框架1.1 helloworld式代码示例1.2 主体代码元素&#xff08;核心三部分&#xff09;1.3 其他 2 与C/C区别3 有用的小工具4 注意事项 从0开始学习Go 0 与C对比 特性CGo编译型语言需要编译为机器码直接编译为二进制可执行文件静态类型类型…

简单说一下 Webpack分包

最近在看有关webpack分包的知识&#xff0c;搜索了很多资料&#xff0c;感觉这一块很是迷惑&#xff0c;网上的资料讲的也迷迷糊糊&#xff0c;这里简单总结分享一下&#xff0c;也当个笔记。 如有错误请指出。 为什么需要分包 我们知道&#xff0c;webpack的作用&#xff0c…

使用Python和FastAPI构建网站爬虫:Oncolo医疗文章抓取实战

使用Python和FastAPI构建网站爬虫&#xff1a;Oncolo医疗文章抓取实战 前言项目概述技术栈代码分析1. 导入必要的库2. 初始化FastAPI应用3. 定义请求模型4. 核心爬虫功能4.1 URL验证和准备4.2 设置HTTP请求4.3 发送请求和解析HTML4.4 提取文章内容4.5 保存结果和返回数据 5. AP…

YoloV8改进策略:卷积篇|风车卷积|即插即用

文章目录 论文信息论文翻译摘要引言相关研究红外搜索与跟踪检测和分割网络红外搜索与跟踪数据集的损失函数红外搜索与跟踪数据集方法风车形卷积(PConv)基于尺度的动态损失SIRST - UAVB数据集实验实验设置与其他方法的比较多模型上的消融实验结论致谢代码改进方法测试结果总结…

【NLP】36. 从指令微调到人类偏好:构建更有用的大语言模型

从指令微调到人类偏好&#xff1a;构建更有用的大语言模型 大语言模型&#xff08;LLMs&#xff09;已经成为现代自然语言处理系统的核心&#xff0c;但单纯依赖传统语言建模目标&#xff0c;往往难以满足实际应用的“人类意图”。从 Instruction Tuning&#xff08;指令微调&…

基于Transformers与深度学习的微博评论情感分析及AI自动回复系统

前言 这个项目存在cookie没有自动更新问题&#xff0c;后续可能会发出来解决教程&#xff0c;还有微博网页版的话最多看到300条评论&#xff0c;而且回复别人信息的话最多回复15条就要休息5分钟左右才能评论 1. 项目概述 本项目实现了一个微博评论自动化处理系统&#xff0c…

详解 Zephyr RTOS:架构、功能与开发指南

目录 Zephyr RTOS 的核心特性 1. 轻量级和可扩展性 2. 实时性能 3. 多平台支持 4. 安全性 5. 社区和生态系统 Zephyr 的架构 1. 内核 2. 驱动模型 3. 网络栈 4. 文件系统 开发环境和工具链 安装和配置 开发流程 1. 应用程序开发 2. 调试和测试 3. 部署 实际应…

人工智能重塑医疗健康:从辅助诊断到个性化治疗的全方位变革

人工智能正在以前所未有的速度改变着医疗健康领域&#xff0c;从影像诊断到药物研发&#xff0c;从医院管理到远程医疗&#xff0c;AI 技术已渗透到医疗服务的各个环节。本文将深入探讨人工智能如何赋能医疗健康产业&#xff0c;分析其在医学影像、临床决策、药物研发、个性化医…

Linux笔记---内核态与用户态

用户态&#xff08;User Mode&#xff09; 权限级别&#xff1a;较低&#xff0c;限制应用程序直接访问硬件或关键系统资源。 适用场景&#xff1a;普通应用程序的运行环境。 限制&#xff1a;无法执行特权指令&#xff08;如操作I/O端口、修改内存管理单元配置等&#xff09…

Spring 代理与 Redis 分布式锁冲突:一次锁释放异常的分析与解决

Spring 代理与 Redis 分布式锁冲突&#xff1a;一次锁释放异常的分析与解决 Spring 代理与 Redis 分布式锁冲突&#xff1a;一次锁释放异常的分析与解决1. 问题现象与初步分析2 . 原因探究&#xff1a;代理机制对分布式锁生命周期的干扰3. 问题复现伪代码4. 解决方案&#xff1…

SQL:多列匹配(Multiple-column Matching)

目录 基础概念 应用场景详解 1. 多列等值匹配 2. 多列 IN 匹配&#xff08;集合匹配&#xff09; 3. 多列 JOIN 匹配&#xff08;复合键连接&#xff09; 4. 多列匹配 子查询 5. 多列匹配 EXISTS 6. 多列匹配 UNION&#xff08;组合数据源&#xff09; 7. 多列匹配…