关于DMA】的更多相关文章

通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或等于DMA中断优先级,则SDIO中断永远不能抢占DMA中断,DMA处于持续等待中,解决办法由两种,一种是直接提高SDIO中断优先级到比DMA中断优先级高,第二种是直接在HAL库中卡住的中断等待函数中注释掉while等待. 另外还有一点就是在SDIO数据读写的时候需要注意的两点,一个是读写数据最好四字…
1.从ZMain里面的main函数开始分析 2.进入int main( void ); HalDriverInit();   //硬件相关初始化,有DMA初始化和UART初始化 3.进入HalDriverInit(); /* DMA */#if (defined HAL_DMA) && (HAL_DMA == TRUE)    // Must be called before the init call to any module that uses DMA. HalDmaInit();#…
借用小甲鱼的经典:各位互联网的广大网友们.大家早上中午晚上好..(打下小广告,因为小甲鱼的视频真的很不错).每次看小甲鱼的视频自学都是比较轻松愉快的..我在想,如果小甲鱼出STM32的视频,我会一集不漏的听的.哈.好了..学习到了STM32的DMA模块..琢磨了一下中文参考手册,官方是这样描述的: 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作. 是的,无需CPU干预,可以想…
一.背景: 需要使用STM32的DAC,例程代码中用了DMA,对DMA之前没有实际操作过,也很早就想知道DMA到底是什么,因此,看了一下午手册,代码和网上的资料,便有了此篇文章,做个记录. 二.正文: DMA(Direct Memory Access),直接翻译为"直接存储器存取",数据手册对其定义为:提供在"外设和存储器之间"或者"存储器和存储器之间"的高速数据传输,无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操…
说实话越计卷作者用了16页(我还是删过的),来讲怎么控制声卡,其实真正归纳起来就那么几点. ★PART1:直接存储访问 1. 总线控制设备(bus master) 在硬件技术不发达的早期,处理器是最重要的总线主控制设备,它有权决定谁参与总线数据传输.考虑代码片断:mov [0x2000],dx,在执行这条指令时,处理器不但发出地址信号,也发出控制信号,控制信号用来表明该地址是发给内存的,还是发给外部设备的.所有设备都有译码电路,这些译码电路的输入就是地址和控制信号.以上指令执行的时候,内存的译码…
三種將資料在I/O間傳送的方法有 1. Polling2. Interrupt-driven I/O3. DMA(Direct Memory Access) Polling:最簡單的方式讓I/O device與CPU溝通.I/O device只要將information放進status register,CPU會周期性的檢查並取得information來得知需要服務的device. Interrupt-driven I/O:利用interrupt的機制,當一個I/O device需要服務時,會發…
[基础知识]什么叫做DMA?DMA=Direct Memory Access.这是一种通过硬件实现的数据传输机制.简单的说,就是不在CPU的参与下完成数据的传输.[/基础知识]不太明白?我举个简单的例子:比如有个数组a,我希望把这个数组中的内容传输到另一个数组b中.我们假设这两个数组都是一样大.比如int a[10000];int b[10000];.那么我可以这样做:[code=c]for(int x=0;x<sizeof(a)/sizeof(int);x++){    b[x]=a[x];}…
最近写程序,需要一段一段数据的接收,再通过其他串口发送出去. 老司机们建议用DMA通信,以节约CPU资源.然后,我听了,发现挺好用的.特此,把自己写的代码贴上了. DMA发送接收的步骤如下: 1.初始化. a.IO时钟+串口时钟+DMA时钟使能. b.IO初始化 c.串口初始化 d.DMA初始化 e.中断向量设置 2.串口中断服务函数 3.DMA中断服务函数 具体实现如下: 一.初始化 //bound:波特率 /******************************************…
/* $Id: dma.h,v 1.7 1992/12/14 00:29:34 root Exp root $ * linux/include/asm/dma.h: Defines for using and allocating dma channels. * Written by Hennus Bergman, 1992. * High DMA channel support & info by Hannu Savolainen * and John Boyd, Nov. 1992. */…
DMA控制器依赖于平台硬件,这里只对i386的8237 DMA控制器做简单的说明,它有两个控制器,8个通道,具体说明如下: 控制器1: 通道0-3,字节操作, 端口为 00-1F 控制器2: 通道 4-7, 字操作, 端口咪 C0-DF - 所有寄存器是8 bit,与传输大小无关. - 通道 4 被用来将控制器1与控制器2级联起来. - 通道 0-3 是字节操作,地址/计数都是字节的. - 通道 5-7 是字操作,地址/计数都是以字为单位的. - 传输器对于(0-3通道)必须不超过64K的物理边…
/* $Id: dma.c,v 1.5 1992/11/18 02:49:05 root Exp root $ * linux/kernel/dma.c: A DMA channel allocator. Inspired by linux/kernel/irq.c. * Written by Hennus Bergman, 1992.  */ #include <linux/kernel.h>#include <linux/errno.h>#include <asm/dma…
1.DMA产生的背景 在许多需要使用DSP 的场合,一般都需要大量的数据搬移工作,而如果每次数据搬移都由DSP 内核来参与完成,将大大占用DSP 内核的处理时间,从而严重影响其信号处理能力.因此,Blackfin DSP 集成了直接访问(DMA)控制器来完成数据搬移这种简单却耗时的工作.它可以直接进行数据搬移而不需要内核的参与. 说说我对DMA的理解:其实我觉得DMA不算难,反而十分便利,将它想象成城市供水局,为了给城市中不同的小区供水,最原始的办法就是挨家挨户的去送,这就耗费了大量的供水局(D…
1.S3C6410中DMA操作步骤 S3C6410中DMA操作步骤:1.决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC):2.开始相应DMAC的系统时钟,并关闭另外一组的时钟(系统默认开启SDMA时钟):3.开启DMAC控制,设置DMAC_Configuration寄存器:4.清除传输结束中断寄存器和错误中断寄存器:5.选择合适的优先级通道:6.设置通道的源数据地址和目的数据地址(设置DMACCxSrcAddr和DMACCxDestAddr):7.设置通道控制寄存器0(设置DMAC…
交换芯片支持:报文.计数.表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DMA用来从片上获取统计计数,表项DMA功能分为SLAM DMA(系统内存DMA到片上交换芯片表项内)和TABLE DMA(从芯片的表项内获取内容DMA到系统内存),是ram和交换芯片之间的两个方向上的操作. 交换芯片包含的每一个CMIC控制器都有4个DMA通道,其中CMIC1和2控制器只在内部使用,只有CMIC0控制器的4个DMA通道可以被用来收发报文,CMIC0内的3个DMA通道用于…
使用iperf对zynq进行单socket tcp传输速率测试: 无网络损伤时,单向网络带宽约为600Mbps,双向网络带宽相加约400Mbps: 50ms延时,1ms抖动,无丢包时,单向网络带宽约为155Mbps,双向网络带宽相加约40Mbps: 和内核版本无关,经技术支持确定为PS GEM DMA的双向传输存在缺陷.…
之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾: DMA:我的理解就是一个通道,或者是一座桥梁.在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道.建立这个通道的好处是:可以抛开CPU,不占用CPU的资源,直接使用这块内存的内容,速度也会加快. DAC:STM32F103中有两个DAC,可以同时使用.DAC的作用就是将数字量转化为模拟量(电压),在这就不作太多的讲解. TIMER:定时器.不作讲解. 那么对于使用DMA+DAC+TIMER产生正弦波的原理或过程,…
DMA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.无须CPU的干预,通过DMA数据可以快速地移动.这就节省了CPU的资源来做其他操作. 有多少个DMA资源? 有两个DMA控制器,DMA1有7个通道,DMA2有5个通道. 数据从什么地方送到什么地方? 外设到SRAM(I2C/UART等获取数据并送入SRAM): SRAM的两个区域之间: 外设到外设(ADC读取数据后送到TIM1控制其产生不同的PWM占空比): SRAM到外设(SRAM中预先保存的数据送…
什么是DMA?其全称是:Direct Memory Access:根据ST公司提供的相关信息,DMA是STM32中一个独立与Cortex-M3内核的模块,有点类似与ADC.PWM.TIMER等模块:主要功能是通信“桥梁”的作用,可以将所有外设映射的寄存器“连接”起来,这样就可以高速问各寄存器,其传输不受CPU的支配,传输还是双向的:例如,从“表面”上看,它可以将flash中的数据与储存器中变量建立通讯,还可以将一外设的积存器或缓冲器与另外设的寄存器或缓冲器建立双向通讯,有点像把外设硬件之间用“导…
DMA部分我用到的相对简单,当然,可能这是新东西,我暂时还用不到它的复杂功能吧.下面用问答的形式表达我的思路. DMA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.无须CPU的干预,通过DMA数据可以快速地移动.这就节省了CPU的资源来做其他操作. 有多少个DMA资源? 有两个DMA控制器,DMA1有7个通道,DMA2有5个通道. 数据从什么地方送到什么地方? 外设到SRAM(I2C/UART等获取数据并送入SRAM): SRAM的两个区域之间: 外设…
问题描述通过 uint16_t ConvData[8]保存DMA搬运的ADC转换数值,但是这个数组数值的顺序总是和ADC不是顺序对应的.比如用7个通道的ADC,当设置ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Backward,是对应顺序是:0->0,1->7,2->6…7->1 : 当设置ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward,…
转载自:http://www.cnblogs.com/UQYT/articles/2949794.html 这是一个综合的例子,演示了ADC模块.DMA模块和USART模块的基本使用. 我们在这里设置ADC为连续转换模式,常规转换序列中有两路转换通道,分别是ADC_CH10(PC0)和ADC_CH16(片内温度传感器).因为 使用了自动多通道转换,数据的取出工作最适合使用DMA方式取出,so,我们在内存里开辟了一个u16 AD_Value[2]数组,并设置了相应的DMA模块,使ADC在每个通道转…
DMA: 一是 动态内存分配:dynamic memory allocate. 就是程序在执行过程中分配内存. 这就是我们在c/c++中经常用到的new, delete, alloc(函数)等等. [[ memory::[ˈmɛməri] 发音中是e, 不是en. 有多种意思: 一是记忆, 记忆力, 记性: his phone number has slipped(滑动, 滑走了)my memory. 二是存储器(外部存储器和内部存储器都可以), 内存.]] 另外一种意思是: 直接存储器存取.…
嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节要讲诉的模块,ADC模数转换外设.下面从最简单的实验说起,逐渐深入了解这个外设. 本次ADC模数转换设计实现并不复杂,步骤可简化为以下三步: 1. 接收板上电位器的输入电压 2. 经过A/D转换获得数字量,并传送给cpu 3. 通过串口在PC机上输出. 解析上面三个步骤,分析要求,就会发现ADC.G…
一.硬件布局每个网卡(MAC)都有自己的专用DMA Engine,如上图的 TSEC 和 e1000 网卡intel82546.上图中的红色线就是以太网数据流,DMA与DDR打交道需要其他模块的协助,如TSEC,PCI controller以太网数据在 TSEC<-->DDR  PCI_Controller<-->DDR 之间的流动,CPU的core是不需要介入的只有在数据流动结束时(接收完.发送完),DMA Engine才会以外部中断的方式告诉CPU的core 二.DMA Eng…
#include <cdefBF533.h> #include <sys\exception.h> #define POLC 0x00004000 #define PORT_CFG_2_3_EXT_FS 0x00000020 #define XFR_TYPE_NON_ITU656 0x0000000C #define SLEN_32 0x001f #define FLOW_1 0x1000 unsigned ]; unsigned ]; EX_INTERRUPT_HANDLER(S…
一是想总结一下SPI总线的特点与注意点,二是总结一下SPI DMA的使用 一.SPI信号线说明 通常SPI通过4个引脚与外部器件相连: MISO:主设备输入/从设备输出引脚.该引脚在从模式下发送数据,在主模式下接收数据. MOSI:主设备输出/从设备输入引脚.该引脚在主模式下发送数据,在从模式下接收数据. SCK:串口时钟,作为主设备的输出,从设备的输入 NSS:从设备选择.这是一个可选的引脚,用来选择主/从设备.它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的…
转自:http://blog.chinaunix.net/uid-7374279-id-4413316.html 介绍Linux内存管理和内存映射的奥秘.同时讲述设备驱动程序是如何使用“直接内存访问”(DMA)的.尽管你可能反对,认为DMA更属于硬件处理而不是软件接口,但我觉得与硬件控制比起来,它与内存管理更相关.这一章比较高级:大多数驱动程序的作者并不需要太深入到系统内部.不过理解内存如何工作可以帮助你在设计驱动程序时有效地利用系统的能力.       共 享内存可以说是最有用的进程间通信方式…
转自:http://blog.csdn.net/lihaoweiv/article/details/6275241 第 13 章  mmap 和 DMA 本章将深入探讨 Linux 内存管理部分,并强调了对设备驱动程序编写者非常有帮助的技术重点.这一章内容属于高级主题,不需要所有人都掌握它,虽然如此,很多任务只能通过更深入地研究内存管理子系统而做到,同时本章也帮助读者了解内核重要组成部分的工作方式. 本章内容分为三节.第一节讲述了 mmap 系统调用的实现,mmap允许直接将设备内存映射到用户进…
转自:http://blog.csdn.net/zhoudengqing/article/details/41654293 版权声明:本文为博主原创文章,未经博主允许不得转载. 这一章介绍Linux内存管理和内存映射的奥秘.同时讲述设备驱动程序是如何使用“直接内存访问”(DMA)的.尽管你可能反对,认为DMA更属于硬件处理而不是软件接口,但我觉得与硬件控制比起来,它与内存管理更相关. 这一章比较高级:大多数驱动程序的作者并不需要太深入到系统内部.不过理解内存如何工作可以帮助你在设计驱动程序时有效…
DMA的基本概念 直接内存访问(DMA)是一种完全由硬件执行I/O交换的工作方式.在这种方式中,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和I/O设备之间进行 .DMA方式一般用于高速传送成组数据.DMA控制器将向内存发出地址和控制信号,修改地址,对传送的字的个数计数,并且以中断方式向CPU报告传送操作的结束. DMA方式的主要优点是速度快.由于CPU根本不参加传送操作,因此就省去了CPU取指令.取数.送数等操作.在数据传送过程中,没有保存现场.恢复现场之类的…