DMA 相关的一些结构体

STM32 第21章 DMA--直接存储器访问 Data Memory Access,直接存储器访问。和GPIO、串口等一样都是外设。建立文件夹、头文件路径指定、头文件条件编译避免重复定义的问题。// 要发送的数据大小/* 定义aSRC_Const_Buffer数组作为DMA传输数据源* const关键字将aSRC_Const_Buffer数组变量定义为常量类型* 表示数据存储在内部的FLASH中*//* 定义DMA传输目标存储器* 存储在内部的SRAM中*///传多少个数据,通过宏定义BUFFER_SIZE来确定。 阅读详情

1. dma_chan : --- dma channel 的意思

/**
 * struct dma_chan - devices supply DMA channels, clients use them
 * @device: ptr to the dma device who supplies this channel, always !%NULL
 * @cookie: last cookie value returned to client
 * @chan_id: channel ID for sysfs
 * @dev: class device for sysfs
 * @device_node: used to add this to the device chan list
 * @local: per-cpu pointer to a struct dma_chan_percpu
 * @client-count: how many clients are using this channel
 * @table_count: number of appearances in the mem-to-mem allocation table
 * @private: private data for certain client-channel associations
 */
struct dma_chan {
	struct dma_device *device;
	dma_cookie_t cookie;

	/* sysfs */
	int chan_id;
	struct dma_chan_dev *dev;

	struct list_head device_node;
	struct dma_chan_percpu __percpu *local;
	int client_count;
	int table_count;
	void *private;
};
2. dma_chan_dev -- sysfs 相关

/**
 * struct dma_chan_dev - relate sysfs device node to backing channel device
 * @chan - driver channel device
 * @device - sysfs device
 * @dev_id - parent dma_device dev_id
 * @idr_ref - reference count to gate release of dma_device dev_id
 */
struct dma_chan_dev {
	struct dma_chan *chan;
	struct device device;
	int dev_id;
	atomic_t *idr_ref;
};
3. dmatest_chan ---dma测试使用的channel

struct dmatest_chan {
	struct list_head	node;
	struct dma_chan		*chan;
	struct list_head	threads;
};
4. dmatest_thread --- dmatest 的线程

struct dmatest_thread {
	struct list_head	node;
	struct task_struct	*task;
	struct dma_chan		*chan;
	u8			**srcs;
	u8			**dsts;
	enum dma_transaction_type type;
};
5. dma_device --- dma类型设备
/**
 * struct dma_device - info on the entity supplying DMA services
 * @chancnt: how many DMA channels are supported
 * @privatecnt: how many DMA channels are requested by dma_request_channel
 * @channels: the list of struct dma_chan
 * @global_node: list_head for global dma_device_list
 * @cap_mask: one or more dma_capability flags
 * @max_xor: maximum number of xor sources, 0 if no capability
 * @max_pq: maximum number of PQ sources and PQ-continue capability
 * @copy_align: alignment shift for memcpy operations
 * @xor_align: alignment shift for xor operations
 * @pq_align: alignment shift for pq operations
 * @fill_align: alignment shift for memset operations
 * @dev_id: unique device ID
 * @dev: struct device reference for dma mapping api
 * @device_alloc_chan_resources: allocate resources and return the
 *	number of allocated descriptors
 * @device_free_chan_resources: release DMA channel's resources
 * @device_prep_dma_memcpy: prepares a memcpy operation
 * @device_prep_dma_xor: prepares a xor operation
 * @device_prep_dma_xor_val: prepares a xor validation operation
 * @device_prep_dma_pq: prepares a pq operation
 * @device_prep_dma_pq_val: prepares a pqzero_sum operation
 * @device_prep_dma_memset: prepares a memset operation
 * @device_prep_dma_interrupt: prepares an end of chain interrupt operation
 * @device_prep_slave_sg: prepares a slave dma operation
 * @device_terminate_all: terminate all pending operations
 * @device_is_tx_complete: poll for transaction completion
 * @device_issue_pending: push pending transactions to hardware
 */
struct dma_device {

	unsigned int chancnt;
	unsigned int privatecnt;
	struct list_head channels;
	struct list_head global_node;
	dma_cap_mask_t  cap_mask;
	unsigned short max_xor;
	unsigned short max_pq;
	u8 copy_align;
	u8 xor_align;
	u8 pq_align;
	u8 fill_align;
	#define DMA_HAS_PQ_CONTINUE (1 << 15)

	int dev_id;
	struct device *dev;

	int (*device_alloc_chan_resources)(struct dma_chan *chan);
	void (*device_free_chan_resources)(struct dma_chan *chan);

	struct dma_async_tx_descriptor *(*device_prep_dma_memcpy)(
		struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
		size_t len, unsigned long flags);
	struct dma_async_tx_descriptor *(*device_prep_dma_xor)(
		struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
		unsigned int src_cnt, size_t len, unsigned long flags);
	struct dma_async_tx_descriptor *(*device_prep_dma_xor_val)(
		struct dma_chan *chan, dma_addr_t *src,	unsigned int src_cnt,
		size_t len, enum sum_check_flags *result, unsigned long flags);
	struct dma_async_tx_descriptor *(*device_prep_dma_pq)(
		struct dma_chan *chan, dma_addr_t *dst, dma_addr_t *src,
		unsigned int src_cnt, const unsigned char *scf,
		size_t len, unsigned long flags);
	struct dma_async_tx_descriptor *(*device_prep_dma_pq_val)(
		struct dma_chan *chan, dma_addr_t *pq, dma_addr_t *src,
		unsigned int src_cnt, const unsigned char *scf, size_t len,
		enum sum_check_flags *pqres, unsigned long flags);
	struct dma_async_tx_descriptor *(*device_prep_dma_memset)(
		struct dma_chan *chan, dma_addr_t dest, int value, size_t len,
		unsigned long flags);
	struct dma_async_tx_descriptor *(*device_prep_dma_interrupt)(
		struct dma_chan *chan, unsigned long flags);

	struct dma_async_tx_descriptor *(*device_prep_slave_sg)(
		struct dma_chan *chan, struct scatterlist *sgl,
		unsigned int sg_len, enum dma_data_direction direction,
		unsigned long flags);
	void (*device_terminate_all)(struct dma_chan *chan);

	enum dma_status (*device_is_tx_complete)(struct dma_chan *chan,
			dma_cookie_t cookie, dma_cookie_t *last,
			dma_cookie_t *used);
	void (*device_issue_pending)(struct dma_chan *chan);
};
6. dma_transaction_type --- dma 传输方式:

/**
 * enum dma_transaction_type - DMA transaction types/indexes
 *
 * Note: The DMA_ASYNC_TX capability is not to be set by drivers.  It is
 * automatically set as dma devices are registered.
 */
enum dma_transaction_type {
	DMA_MEMCPY,
	DMA_XOR,
	DMA_PQ,
	DMA_XOR_VAL,
	DMA_PQ_VAL,
	DMA_MEMSET,
	DMA_INTERRUPT,
	DMA_PRIVATE,
	DMA_ASYNC_TX,
	DMA_SLAVE,
};
7. dma_status --- DMA 传输状态

/**
 * enum dma_status - DMA transaction status
 * @DMA_SUCCESS: transaction completed successfully
 * @DMA_IN_PROGRESS: transaction not yet processed
 * @DMA_ERROR: transaction failed
 */
enum dma_status {
	DMA_SUCCESS,
	DMA_IN_PROGRESS,
	DMA_ERROR,
};
8. dma_ctrl_flags --- DMA 传输控制标志

/**
 * enum dma_ctrl_flags - DMA flags to augment operation preparation,
 *  control completion, and communicate status.
 * @DMA_PREP_INTERRUPT - trigger an interrupt (callback) upon completion of
 *  this transaction
 * @DMA_CTRL_ACK - if clear, the descriptor cannot be reused until the client
 *  acknowledges receipt, i.e. has has a chance to establish any dependency
 *  chains
 * @DMA_COMPL_SKIP_SRC_UNMAP - set to disable dma-unmapping the source buffer(s)
 * @DMA_COMPL_SKIP_DEST_UNMAP - set to disable dma-unmapping the destination(s)
 * @DMA_COMPL_SRC_UNMAP_SINGLE - set to do the source dma-unmapping as single
 * 	(if not set, do the source dma-unmapping as page)
 * @DMA_COMPL_DEST_UNMAP_SINGLE - set to do the destination dma-unmapping as single
 * 	(if not set, do the destination dma-unmapping as page)
 * @DMA_PREP_PQ_DISABLE_P - prevent generation of P while generating Q
 * @DMA_PREP_PQ_DISABLE_Q - prevent generation of Q while generating P
 * @DMA_PREP_CONTINUE - indicate to a driver that it is reusing buffers as
 *  sources that were the result of a previous operation, in the case of a PQ
 *  operation it continues the calculation with new sources
 * @DMA_PREP_FENCE - tell the driver that subsequent operations depend
 *  on the result of this operation
 */
enum dma_ctrl_flags {
	DMA_PREP_INTERRUPT = (1 << 0),
	DMA_CTRL_ACK = (1 << 1),
	DMA_COMPL_SKIP_SRC_UNMAP = (1 << 2),
	DMA_COMPL_SKIP_DEST_UNMAP = (1 << 3),
	DMA_COMPL_SRC_UNMAP_SINGLE = (1 << 4),
	DMA_COMPL_DEST_UNMAP_SINGLE = (1 << 5),
	DMA_PREP_PQ_DISABLE_P = (1 << 6),
	DMA_PREP_PQ_DISABLE_Q = (1 << 7),
	DMA_PREP_CONTINUE = (1 << 8),
	DMA_PREP_FENCE = (1 << 9),
};





保姆级教程:用安卓手机+IP摄像头App,5分钟搭建一个免费的RTSP监控测试环境 本文提供了一份详细的保姆级教程,教你如何利用安卓手机和IP摄像头App在5分钟内搭建免费的RTSP监控测试环境。通过零成本方案,开发者可以快速获取实时视频流,适用于计算机视觉、物联网开发等多种场景。教程涵盖工具选型、配置详解、电脑端测试及OpenCV集成,助你高效完成开发测试。 阅读详情

相关推荐

简易背单词系统C/C++

#include&lt;stdio.h&gt; #include&lt;string.h&gt; int F=20,N=100,k=0; int score[100]; int count=0; void hello(); void add(); void preview(); void mdelete(); void etc(); void cte(); void mscore(); void...

青木年华 9154

学习笔记—STM32之DMA简介及相关结构体概述

1.DMA功能讲解 关于DMA的功能手册上是这么说的。 说白了就是DMA可以把数据从一个地方传输到另一个地方,并且不占用CPU。举个例子,比如我们想通过串口发送数据,正常来讲是存放到Flash或SRAM的代码通过总线矩阵,由Cortex-M3的内核进行控制,再回到系统总线的外设当中。如果有DMA的话,Flash和SRAM中的数据可以直接通过总线矩阵访问到DMA可以直接和串口的外设发送数据,可以不用经过CPU。 DMA1有七个通道如下图所示: 并且DMA1支持P->P(内存到内存

aaaaaaaa123345的博客 3554

of_graph_get_remote_port

isp { compatible = "isp"; core@0 { id = <0>; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; ...

wmzjzwlzs的专栏 1165

【STM32-DMA简介】

STM32cubeMX DMA配置(LL库)

qq_39842609的博客 2623

SAP农产品增值税进项税解决方案

(三)购进农产品用于生产经营且不构成货物实体的(包括包装物、辅助材料、燃料、低值易耗品等),用于生产适用13%税率货物的扣除率为10%,用于生产适用9%税率货物的扣除率为9%。具体计算公式为: 当期允许抵扣农产品增值税进项税额=当期耗用农产品数量×农产品平均购买单价×扣除率/(1+9%)

weixin_44228539的博客 1196

Drools vs URule:5个真实项目场景告诉你如何选择开源规则引擎

本文通过电商风控、物流计费、会员体系、保险定价和物联网告警五个真实项目场景,深度对比了Drools与URule两款开源规则引擎。分析了两者在规则复杂度、性能表现、开发运维及适用场景上的核心差异,为技术选型提供基于实战的决策指南。

k6l7m8n9的博客 944

DMA映射 dma_addr_t

DMA映射 一个DMA映射是要分配的DMA缓冲区与为该缓冲区生成的、设备可访问地址的组合。 DMA映射建立了一个新的结构类型---dma_addr_t来表示总线地址。 dma_addr_t类型的变量对驱动程序是不透明的, 唯一允许的操作是将它们传递给DMA支持例程以及设备本身。 根据DMA缓冲区期望保留的时间长短,PCI代码有两种DMA映射: 1)一致性映射 2)流式

pursue的专栏 5768

Dify + mem0插件实战:如何让AI记住你的饮食习惯(附完整代码)

本文通过Dify平台与mem0插件实战,详细演示了如何为AI助手构建长期记忆系统,使其能记住并理解用户的复杂饮食习惯(如过敏源、饮食偏好)。文章提供了完整的工作流配置与Python代码示例,帮助开发者实现跨会话的个性化饮食建议,解决AI对话中的“健忘”问题。

lg888的博客 1095

Linux下DMA添加两个channel,Linux DMA框架简述

在Linux当中有一个专门处理DMA的框架,叫做dmaengine,它的代码实现在drivers/dma/dmaengine.c。这个文件主要是提供一套DMA使用的抽象层,但是封装的也比较简单。下面,我主要讲讲做一个Linux的dma驱动,在框架上应该注意的事项。从使用上来讲,通常我们让DMA工作,大概都是5步,我叫做DMA 5步曲。是哪5步呢?1、dma通道请求,对应Linux API , ch...

weixin_42525672的博客 894

TexGen模型导出到ABAQUS的inp文件:如何快速修改纱线材料属性(避坑指南)

本文针对TexGen模型导出到ABAQUS的inp文件后纱线材料属性缺失或错误的问题,提供了高效的解决方案。文章详细解析了inp文件结构,指导用户如何手动定位并修改纱线材料属性,并提供了可批量处理的Python脚本,帮助用户快速、精准地完成材料参数赋值,有效提升复合材料仿真工作效率。

ice55的博客 603

任务混部最少服务器数量计算问题

这里的并行度指的是该任务运行时会占用的服务器数量。要注意的是,一个服务器在每个时刻可以被任意任务使用,但同一时刻最多只能被一个任务占用,并且任务运行结束后会立即释放服务器(结束时刻不占用)。最后,我们从字典中找出服务器数量的最大值,这个最大值就是完成这批任务混部最少需要的服务器数量。对于每个任务,我们会遍历其对应的时间区间,将该任务的并行度累加到对应时刻的服务器数量上。任务混部的目标是让这批任务由同一批服务器承载运行,你需要计算完成这批任务混部最少需要多少服务器,以此来最大化控制资源成本。

m0_62153576的博客 108

mmap虚拟映射(DMA机制)

一:顺便看看mmap的映射程序:(吧物理内存映射到用户空间) 直接提供驱动程序,内存映射提供用户程序直接访问设备内存的能力:意味着用户程序的一段内存与设备内存关联起来, mmap的限制:必须以page_size为单位进行映射,内核只能在页表一级上对虚拟地址进行管理,直接访问内存数据的接口。 http://blog.youkuaiyun.com/zjujoe/archive/2009/05/15/4189...

zuodenghuakai的博客 3520

支付宝h5参数如何实现跳转?(包含相关Demo代码)

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 3250

DMA FENCE

调用函数__dma_fence_enable_sw_signaling,判断当前fence有没有被signaled,如果没有,调用用户自定义函数: ops->enable_signaling函数,如果使能失败,则signal当前fence。该函数会调用dma_fence_signal_locked,除此之外,还会调用dma_fence_begin/end_signalling和spin_lock/unlock_irqsave函数。fence的引用计数减1,当减到0时,调用release函数释放fence。

weixin_39592381的博客 765

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

STM32F4 DMA

STM32F4有2个DMA,每个DMA控制器有8个数据流,每个数据流有多达8个通道,但是DMA1 控制器 AHB 外设端口与 DMA2 控制器的情况不同,不连接到总线矩阵,因此,仅 DMA2 数据流能够执行存储器到存储器的传输。 typedef struct { uint32_t DMA_Channel; //选择通道 uint32_t...

qq_43400642的博客 7338

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【STM32F4】——DMA初始化结构体详解

STM32F4单片机标准库的DMA初始化结构体详解。

IT.小航的博客 2172

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【STM32】DMA相关函数和类型

00. 目录 文章目录00. 目录01. DMA简介02. 相关类型03. 相关函数04. 结构体封装05. 预留06. 附录07. 声明 01. DMA简介 DMA,全称为:Direct Memory Access,即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。 STM32F4 最多有 2 个 DMA 控制器(DMA1 和 DMA2),共 16 个数

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 2077

STM32之DMA结构体

weixin_45950842的博客 446

内存分配之DMA操作

DMA操作 DMA内存分配有两种方式,一致性DMA和流式DMA,在早期的内存区域中有一个DMA ZONE,占用内存地址0至16M的空间,供ISA设备的DMA内存,现在有的设备DMA操作时没有地址的限制,可以在全内存范围内分配内存来用于DMA操作,所以也就不需要DMA ZONE了。 \linux-4.12.4\include\linux static inline void *dma_alloc_coherent(struct device *dev, size_t size,dma_addr_t *d

lieye_leaves的专栏 3507

DMA

一.DMA 1.简介 DMA——Data Memory Access,直接存储器访问 属于Stm32的一个外设主要有两个(DMA1和DMA2) 功能是接到CPU命令进行数据的高速传输,传输时可以空出CPU干别的事 DMA1:从外设P( peripheral)将数据搬运到M(Memory,在此特指SRAM),也可以从M搬到P DMA2:从外设P( peripheral)将数据搬运到M(Memory,在此特指SRAM),也可以从M搬到P,还可以从M(在此指FLASH)到M(在此指SRAM)。 2.功能框图 (1

Kudo_chitose的博客 2654

DMA映射

dmesg | grep -i dma 命令可以查看内核中可以申请的一致性内存大小空间,这个大小和系统平台有关,下面是64位系统。一般支持多种类型的缓冲区,常见的有。存在内存的一致性问题。是使用专门的接口分配一块。对内存进行访问的,所以。

小伟的博客 1037

stm32之DMA

详细讲解关于stm32f103的DMA直接存储器存取,包括存储器映射、DMA框图、基本结构体介绍、DMA请求内容、数据宽度与对齐、DMA如何进行工作(数据转运和ADC扫描模式)。以及介绍DMA相关的结构体和api函数,包括DMA转运和AD多通道讲解。

caiji0169的博客 2185

C8T6超绝模块--DMA

对于DMA我们有三种模式:外设到寄存器寄存器到寄存器寄存器到外设。

2403_82385265的博客 923

DMA传输

DMA(Direct Memory Access,直接内存访问)是计算机系统中一种高效的数据传输方式。它允许外设(如硬盘、网络设备、FPGA等)直接与内存交换数据,而无需通过CPU的干预,从而极大提高了数据传输的效率,减少了CPU的负担。

LZL19980119的博客 404

Linux驱动框架之DMA(一)——dma_interleaved_template结构体介绍

linux内核代码结构体dma_interleaved_template介绍

weixin_38218267的博客 393

【STM32-学习笔记-6-】DMA

STM32DMA函数的介绍和配置

隼玉的博客 1686
上一篇: musb dma 部分
下一篇: dmatest.c
lamdoc
博客等级 码龄18年 155粉丝 655原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值