历史上的今天
返回首页

历史上的今天

今天是:2025年03月08日(星期六)

2019年03月08日 | STM32之DMA原理

2019-03-08 来源:eefocus

一、DMA简介


1、DMA简介


  DMA(Direct Memory Access:直接内存存取)是一种可以大大减轻CPU工作量的数据转移方式。


  CPU有转移数据、计算、控制程序转移等很多功能,但其实转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,再加上一些控制转移的部件就可以完成数据的拷贝。


  DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作--计算、控制等。


2、DMA的工作原理 


  DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)。四种情况的数据传输如下:


外设到内存

内存到外设

内存到内存

外设到外设


  当用户将参数设置好,主要涉及源地址、目标地址、传输数据量这三个,DMA控制器就会启动数据传输,传输的终点就是剩余传输数据量为0(循环传输不是这样的)。换句话说只要剩余传输数据量不是0,而且DMA是启动状态,那么就会发生数据传输。  


3、DMA是否影响CPU的运行


  在X86架构系统中,当DMA运作时(假设我们从磁盘拷贝一个文件到U盘),DMA实际上会占用系统总线周期中的一部分时间。也就是说,在DMA未开启前,系统总线可能完全被CPU使用;当DMA开启后,系统总线要为DMA分配一定的时间,以保证DMA和CPU同时运作。那么显然,DMA会降低CPU的运行速度。


  在STM32控制器中,芯片采用Cortex-M3架构,总线结构有了很大的优化,DMA占用另外的总线,并不会与CPU的系统总线发生冲突。也就是说,DMA的使用不会影响CPU的运行速度。


二、STM32的DMA结构


1、DMA的主要特性


● 12个 独立的可配置的通道(请求)DMA1有7个通道,DMA2 有5个通道 

● 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置。 

● 在七个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),假如在相等优先权时由硬件决定(请求0优先于请求1,依此类推) 。 

● 独立的源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。 

● 支持循环的缓冲器管理 

● 每个通道都有3个事件标志(DMA 半传输,DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。 

● 存储器和存储器间的传输 

● 外设和存储器,存储器和外设的传输 

● 闪存、SRAM 、外设的SRAM 、APB1 APB2和AHB外设均可作为访问的源和目标。 

● 可编程的数据传输数目:最大为65536


下面为功能框图:


  


2、两个DMA控制器结构


① DMA1 controller



② DMA2 controller



3、DMA寄存器列表



① 中断类


DMA_ISR:   DMA中断状态寄存器


DMA_IFCR:  DMA中断标志位清除寄存器


说明:  DMA1、DMA2分别有一组寄存器。


② 控制传输类


DMA_CCRx:   DMA通道x配置寄存器 


DMA_CNDTRx:  DMA通道x数据数量寄存器


DMA_CPARx:   DMA通道x外设地址寄存器


DMA_CMARx:  DMA通道x内存地址寄存器


说明:    


1> 每一个通道都有一组寄存器。


2> DMA_CPARx、DMA_CMARx是没有差别的,它们都可以存放外设的地址、内存的地址。DMA_CPARx、DMA_CMARx只不过起得名字有差别而已。


4、STM32的DMA工作特点


① DMA进行数据传输的必要条件


剩余传输数据量大于0

DMA通道传输使能

通道上DMA数据传输有事件请求

  前两者都好理解,对于第三点确实需要详细的解释,请看下边的三条。


② 外设到XX方向的传输


  假设是ADC到存储器的数据传输,显然ADC的DMA传输的源地址是ADC的数据寄存器。并不是说只要DMA通道传输使能后,就立即进行数据传输。只有当一次ADC转化完成,ADC的DMA通道的传输事件有效,DMA才会从ADC的数据寄存器读出数据,写入目的地址。当DMA在读取ADC的数据寄存器时,同时使ADC的DMA通道传输事件无效。显然,要等到下一次ADC转换完成后,才能启动再一次的数据传输。


③存储器对XX的DMA传输


  因为数据是准备好的,不像ADC还需要等待数据到位。所以,不需要对应通道的事件。只要使能DMA数据传输就一直传输,直到达到设定的传输量。


example:


1.内存到内存


  DMA传输请求一直有效


2.内存到串口 


  DMA传输请求一直有效


一种解释:


  存储器对存储器的置位,就相当于相应通道的事件有效。 对应通道的事件有效和存储器对存储器的置位,就是传输的触发位。每次传输的事件置位一次,完成一次传输。如果是由外设引发的DMA传输,则传输完成后,相应传输事件会置为无效,而存储器对存储器的传输,则一次传输完成后,相应事件一直有效,直至完成设定的传输量。  


④外设以DMA方式工作时,能否再以软件方式进行操作?


  有一点是肯定的,当外设以DMA方式正在数据传输时,不可能再相应CPU的软件控制命令,否则这不符合逻辑。


  但是,倘若外设仅仅配置成DMA工作方式,但是DMA请求并未产生,数据传输并没有进行。此时,软件控制命令仍然能够对外设进行控制。这是笔者在串口以DMA方式发送数据情形下,所得到的测试结论。 


推荐阅读

史海拾趣

Andigilog公司的发展小趣事

Andigilog是一家专注于提供模拟和混合信号集成电路解决方案的公司,以下是该公司发展的相关故事:

  1. 公司成立与早期发展:Andigilog成立于2002年,总部位于美国加利福尼亚州的圣何塞。该公司成立之初,专注于设计和销售模拟和混合信号集成电路(IC),以满足各种市场的需求。最初,公司的产品主要应用于电源管理、温度监测和控制等领域。

  2. 技术创新与产品推出:Andigilog在成立初期就致力于技术创新和产品研发。随着市场需求的不断变化,公司不断推出新型的集成电路产品,包括温度传感器、电源监测芯片等。这些产品具有高精度、低功耗、高集成度等优点,受到了客户的青睐。

  3. 合作伙伴关系与市场拓展:为了扩大市场份额和提升品牌知名度,Andigilog与各种合作伙伴建立了紧密的合作关系。公司与全球各地的分销商、代理商、原始设备制造商(OEM)等进行合作,共同开拓市场,推广公司的产品。此外,Andigilog还与行业内的其他公司进行技术合作和产品整合,共同提供更完整的解决方案。

  4. 全球布局与生产基地:随着业务的不断扩展,Andigilog在全球建立了多个生产基地和销售办事处。除了在美国的总部外,公司还在亚洲、欧洲等地区设立了生产工厂和销售办事处,以更好地服务全球客户。这些生产基地拥有先进的制造设备和技术,能够满足客户对产品质量和交货周期的要求。

  5. 持续发展与未来展望:作为一家专注于模拟和混合信号集成电路的公司,Andigilog将继续致力于技术创新和产品发展。公司将不断推出适应市场需求的新产品,提升生产效率和产品质量,以满足客户不断变化的需求。同时,Andigilog也将继续关注行业的发展趋势和技术变革,不断调整战略,保持在行业内的竞争优势。

BNS Solutions公司的发展小趣事

随着电子行业的不断发展,新技术和新应用层出不穷。BNS Solutions公司紧跟时代步伐,不断加大研发投入,推动技术创新。公司团队不断探索新技术、新材料的应用,开发出了一系列具有创新性和前瞻性的电子产品。这些产品不仅提高了行业的整体技术水平,还引领了行业变革的潮流。通过持续创新,BNS Solutions公司在电子行业中保持了领先地位,成为了行业的佼佼者。

登丰微(GSTEK)公司的发展小趣事

歌普电子始终将产品质量视为企业的生命线。公司采用精细化管理模式,并严格执行ISO9001质量管理体系,确保每一件产品都达到高标准。同时,歌普的产品还通过了UL、CSA、TUV等国际安全认证及RoHS2.0、REACH欧盟绿色环保检测,进一步证明了其产品的可靠性和环保性。这些努力使得歌普在市场上获得了广泛的认可,与众多知名企业建立了长期稳定的合作关系。

昆泰(CHRONTEL)公司的发展小趣事

1987年,昆泰迈出了全球扩张的步伐,在伦敦开设了分支机构,开始服务于欧洲客户。此后,昆泰不断拓宽其业务领域,不仅局限于数据处理,还涉足药物研发、临床试验等多个领域。这一系列的举措使昆泰的业务范围迅速扩大,成为全球CRO行业的领军企业。

GradConn Ltd公司的发展小趣事

随着业务的不断扩展,GradConn意识到全球化布局的重要性。公司不仅在台湾设立总部,还在英国和美国建立了生产设施,并通过遍布160个国家的销售和分销网络,为客户提供全方位的支持。这种全球化布局不仅提升了GradConn的市场竞争力,还使其能够更好地服务全球客户,确保产品能够及时、准确地送达世界各地。

Dean Technology公司的发展小趣事

Dean Technology公司起源于上世纪80年代,当时电子行业正经历着飞速的发展。创始人凭借其深厚的电子技术背景和敏锐的市场洞察力,决定进入高压二极管领域。他带领研发团队不断攻克技术难题,成功推出了一系列性能稳定、品质可靠的高压二极管产品,奠定了公司在行业中的技术领先地位。

问答坊 | AI 解惑

wince6.0 通过USB连接打印机问题

wince6.0 通过USB连接打印机时,当打印机连接上怎么去自动识别连接状态呢?…

查看全部问答>

memset与 变量定义时初始化的 区别

unsigned char pDATA[8]; memset(pDATA,0 ,8); 如果直接在定义处初始化为0,与memset的区别是 什么?…

查看全部问答>

CE 下字符显示加速问题

请问: 在WINCE 下的驱动里,怎样加速显示字符。??????…

查看全部问答>

有没有人做过CAN的项目?比如CAN转换,混合

有没有人做过CAN的项目?比如CAN转换,混合…

查看全部问答>

利用SOCKET通讯到WINCE如何保存文件

我用EVC4写了个SOCKET通讯的程序,与计算机通讯,连接和接收都很正常,可能保存文件的路径不对,所以文件保存不了.所以请问大家,在WINCE下可用的路径是什么. 目前用的开发板是三星ARM2410,保存的路径是ResidentFlash…

查看全部问答>

求教一个关于mdk下载的问题!!很奇怪 的flash err

Contents missmatch at: 0000012FH  (Flash=40H  Required=47H) ! 程序在keil4下下载,编译与链接都没有问题,但是,下载到8962开发板过程中,出现了这个问题: 提示说是:flash err Contents missmatch at: 00000134H  ...…

查看全部问答>

430的位操作有什么简单方法?

我刚接触430单片机,总觉得位操作太麻烦,我要置位或清零,需要两种不同的头文件,且占用的程序空间比较大,在判断位时,也很麻烦,总要先读到CPU寄存器中,才能判断,否则就改变了该位所在的RAM的值。 其它单片机,如51,PIC都有专门的位操作,很 ...…

查看全部问答>

求教5509外扩SDRAM,谢谢

我使用的VC5509,硬件仿真器为XDS510,在做外扩SDRAM的时候,写不进去数据。请教各位帮忙解决,谢谢 报错如下: Trouble Reading Memory Block at 0x6005 on Page 1 of Length 0x1: Error 0x80000002/-1143 Fatal Error during: Memory, The ...…

查看全部问答>

如何生成一个集成库并且实现对库的管理

想要知道如何生成一个集成库并且实现对库的管理吗?请见 pdf …

查看全部问答>

15F104E应用之三:定时器产生延时通7秒断13秒程序

15F104E应用之三:定时器产生延时通7秒断13秒程序…

查看全部问答>