dma

Coherently understand the software-hardware interaction with regard to DMA and buses

百般思念 提交于 2020-01-13 06:37:06
问题 I've gathered some level of knowledge on several components (including software and hardware) which are involved in general DMA transactions in ARM based boards, but I don't understand how is it all perfectly integrated, I didn't find a full coherent description about this. I'll write down the high level of the knowledge I already have and I hope that someone could fix me where I'm wrong and complete the missing parts so the whole picture would be clear. My description starts with the

DMA

耗尽温柔 提交于 2020-01-12 04:28:07
DMA有3种实现方式:内存->内存;内存->外设;外设->内存 (外设->内存的DMA属于ADC) stm32有俩个DMA控制器: DMA1:7通道 DMA2:5通道,只存在于大容量(256K-512K)和互联型产品(f105和f107系列) rbt6开发板属于中容量,标准型,只有DMA1; 由图可知,内存->外设的方式,只能使用对应的通道,不能使用其他的。 而内存->内存的方式,可以使用所有的通道。 DMA一次可以传输2^16个字节的数据 那么,如果多个通道请求到来,应该怎么办? 这时,需要DMA的仲裁器进行仲裁: 1.首先,判断DMA通道x配置寄存器(DMA_CCRx)的PL位; 2.其次,如果PL位相同,判断通道的编号,编号越小,优先级越高。(同时,DMA1的优先级大于DMA2) typedef struct { uint32_t DMA_PeripheralBaseAddr;//外设地址 uint32_t DMA_MemoryBaseAddr; //存储器地址 uint32_t DMA_DIR; //传输方向 //这三个成员共同决定了内存->外设;外设->内存这俩种传输模式 uint32_t DMA_BufferSize; //传输的数量,单位由外设和存储器数据宽度决定 uint32_t DMA_PeripheralInc; //外设地址是否递增 uint32_t DMA

【STM32H7教程】第43章 STM32H7的DMA应用之双缓冲控制任意IO和脉冲数控制

旧时模样 提交于 2020-01-11 17:18:35
完整教程下载地址: http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第43章 STM32H7的DMA应用之双缓冲控制任意IO和脉冲数控制 本章教程为大家讲解定时器触发DMAMUX,控制DMA让GPIO输出PWM以及脉冲数的控制,实际项目中有一定的使用价值。 43.1 初学者重要提示 43.2 定时器触发DMA驱动设计 43.3 DMA板级支持包(bsp_tim_dma.c) 43.4 DMA驱动移植和使用 43.5 实验例程设计框架 43.6 实验例程说明(MDK) 43.7 实验例程说明(IAR) 43.8 总结 43.1 初学者重要提示 学习本章节前,务必优先学习第39章和42章,需要对DMAMUX,DMA的基础知识和HAL库的几个常用API有个认识。 相比定时器本身支持的PWM,这种方式更加灵活,可以让任意IO都可以输出PWM,而且方便运行中动态修改输出状态。 43.2 定时器触发DMA驱动设计 定时器触发DMAMUX,控制DMA让GPIO输出PWM的实现思路框图如下: 下面将程序设计中的相关问题逐一为大家做个说明。 43.2.1 定时器选择 使用DMA的话,请求信号都是来自DMAMUX2,而控制DMA做周期性传输的话,可以使用定时器触发,这样的话就可以使用DMAMUX的请求发生器功能,支持如下几种触发:

【STM32H7教程】第42章 STM32H7的DMA基础知识和HAL库API

邮差的信 提交于 2020-01-10 11:24:17
完整教程下载地址: http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第42章 STM32H7的DMA基础知识和HAL库API 本章节为大家讲解DMA1(Direct memory access controller,直接存储器访问控制器)和DMA2,相比前面章节的BDMA,功能要强些,属于通用型DMA。 42.1 初学者重要提示 42.2 DMA基础知识 42.3 DMA的HAL库用法 42.4 源文件stm32h7xx_hal_dma.c 42.5 总结 42.1 初学者重要提示 DMA1和DMA2均支持8路通道。虽然是8路,但这8路不是并行工作的,而是由DMA的仲裁器决定当前处理那一路。 DMA最大传输次数65535次,每次传输单位可以是字节、半字和字。 DMA的循环模式不可用于存储器到存储器模式。 DMA1和DMA2带的FIFO是4个32bit的空间,即16字节。 使用DMA的FIFO和突发需要注意的问题较多,详情可看本章2.7小节。 STM32H7的参数手册DMA章节对存储器到存储器,外设到存储器,外设到存储器模式的传输过程进行了讲解,推荐大家看完本章节后读一下。 42.2 DMA基础知识 DMA的几个关键知识点放在开头说: 由于总线矩阵的存在,各个主控的道路四通八达,从而可以让DMA和CPU同时开工

DMA原理

半腔热情 提交于 2020-01-07 08:44:07
1.DMA请求 CPU对DMA控制器初始化,并向 I/O接口 发出操作命令,I/O接口提出DMA请求。 2.DMA响应   DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。 3.DMA传输   DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。   在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。 4.DMA结束   当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。   由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。    DMA(Direct Memory Access

Master for Interrupt based UART IO

丶灬走出姿态 提交于 2020-01-07 00:35:30
问题 The interrupt based UART IO allows the data transfer to take place without intervention of CPU. Now the question is, if not CPU who controls this ? Is it the DMA controller or some external master who gets the control over memory bus from CPU. Didn't get a proper answer here . If it is the DMA controller then what makes DMA and interrupt based transfer different 回答1: Didn't get a proper answer here . If it is the DMA controller then what makes DMA and interrupt based transfer different That

EDMA - DMA QDMA 完美总结

本秂侑毒 提交于 2020-01-05 09:03:35
EDMA - DMA QDMA -------------------------------- 做个参考,和6487/8 的EDMA3的user guide有点区别. ------------------------------------ EDMA概要 ①EDMA数据传输有两种发起方式: ü CPU发起的EMDA数据传输(非同步方式):需要传输时,CPU设置ESR寄存器的相应位为1,从而触发一个EDMA事件的产生,事件对应的通道参数被送往地址硬件并且完成相应的处理,这种非同步方式的实时数据传输无需设定EER寄存器; ü 事件触发方式EDMA数据传输(同步方式):ER寄存器保存外设发送过来的事件,一旦CPU设置EER寄存器的相应位为1后,ER中的事件才会提交给事件编码器(Event Encoder),并且进一步引起相关的传输参数的发送给地址产生硬件;如果EER中对应于某事件的位没有置1,则ER寄存器中的事件将保留,一旦置1则触发EDMA的传输,这种特性可以应用到EDMA Chain传输,需要EER和CCER结合使用; ②EDMA每个通道是和特定的系统事件绑定的,如下表所示: ③EDMA Chain Transfer:一个通道传完继续传另一个通道; ④EDMA Link Tansfer:设定参数后,通道的数据传输传完,再载入这个通道的其他参数设定,再进行数据传输; (2

STM32F407之DMA-笔记

放肆的年华 提交于 2020-01-05 09:02:49
学习要点记录,并不全面,祥参 参考手册RM0090 简介: DMA用于外设-内存,内存-内存之间数据的快速传输 DMA控制器由双AHB 主总线架构和独立的FIFO组成,以此来优化系统带宽 两个DMA控制器一共含有16个数据流,每个控制器含有8个数据流;每个数据流有8个通道,每个数据流有一个优先级仲裁器。 主要特征: 双AHB总线架构,一个负责内存访问,另一个负责外设访问 AHB从机编程接口只支持32位访问 每个数据流拥有4个独立的32位FIFO,直接模式和FIFO模式都可以使用 --FIFO模式下,可以通过软件设置FIFO阈值为1/4,1/2,3/4 --直接模式下,每个DMA请求立即触发一次数据传输。当处于直接模式,从内存向外设传输数据时,DMA只从内存预装载一个数据到FIFO --每个数据流可以通过软件配置为: -------常规通道,支持 外设-内存 ;内存-外设 ;内存-内存 。 -------双缓冲通道,支持内存双缓冲 --数据流之间的优先级可以通过软件设置为:非常高 ;高 ;中等 ;低 ;如果优先级相等,那么数据流编号越小,优先级越高 --只有DMA2的每个数据流支持软件触发的数据传输,而且只有传输方向为: 内存-内存 --每个数据流请求是8个通道中的一个。选择可以通过软件设置,而且允许一些外设来触发DMA请求 --传输的数据量可以通过DMA控制器管理,或者通过外设管理

Linux Kernel: Is it OK to leave a streaming DMA mapping open indefinitely?

孤人 提交于 2020-01-03 15:16:08
问题 Many guides on device driver programming suggest that streaming DMA mappings (i.e. those created by dma_map_single() and friends), be held open for as short a time as possible, as they consume resources (i.e. IOMMU mapping resources if the platform has one, or a bounce buffer when required). In my case, I'm working with a PCIe device capable of 64-bit DMA, so a bounce buffer should be unnecessary (and it doesn't seem like special treatment from the IOMMU is required in this case either,

异步编程与多线程的联系与区别

旧街凉风 提交于 2020-01-03 06:59:30
浅谈异步与多线程的区别   C#中异步和多线程的区别是什么呢?异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为异步和多线程是等同的概念。但是,异步和多线程还是有一些区别的。而这些区别造成了使用异步和多线程的时机的区别。     异步操作的本质   所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘、光驱的技术规格中都有明确DMA的模式指标,其实网卡、声卡、显卡也是有DMA功能的。DMA就是直 接内存访问的意思,也就是说,拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源。只要CPU在发起数据传输时发送一个指令,硬件就开 始自己和内存交换数据,在传输完成之后硬件会触发一个中断来通知操作完成。这些无须消耗CPU时间的I/O操作正是异步操作的硬件基础。所以即使在DOS 这样的单进程(而且无线程概念)系统中也同样可以发起异步的DMA操作。   线程的本质   线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度。   异步操作的优缺点   因为异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下