【原创】DMA

什么是DMA

    DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。在DMA模式下,CPU只需要向DMA控制器下达指令,传输数据由DMA来完成,数据传送完再把信息反馈给CPU,这样能够减少CPU的资源占有率。DMA由硬件实现,从共用系统数据总线的角度看,DMA和CPU是竞争对手的关系,当完成一批数据的传输工作之后,快速设备可以向CPU发出中断请求,报告本次传输结束的同时,请示下一步的操作要求。
 
应用场合
    DMA应用于快速设备和主存储器成批交换数据的场合,DMA应用在数据交换,既能够保证数据传输的准确性,即不丢失快速设备提供出来的数据,也能够进一步减少快速设备读写操作对CPU的干扰。
 
DMA中断和普通中断的区别
    两者最大的不同表现为对CPU的干扰程度不同:DMA 传送方式的优先级高于程序中断,两者的区别主要表现在对CPU的干扰程度不同。中断请求不但使CPU停下来,而且要CPU执行中断服务程序为中断请求服务,这个请求包括了对断点和现场的处理以及CPU与外设的传送,所以CPU付出了很多的代价;DMA请求仅仅使CPU暂停一下,不需要对断点和现场的处理,并且是由DMA控制外设与主存之间的数据传送,无需CPU的干预,DMA只是借用了一点CPU的时间而已。还有一个区别就是,CPU对这两个请求的响应时间不同,对中断请求一般都在执行完一条指令的时钟周期末尾响应,而对DMA的请求,由于考虑它的高效性,CPU在每条指令执行的各个阶段之中都可以让给DMA使用,是立即响应。 DMA主要由硬件来实现,此时高速外设和内存之间进行数据交换不通过CPU的控制,而是利用系统总线。DMA方式是I/O系统与主机交换数据的主要方式之一,另外还有程序查询方式和中断方式。
DMA特性
● 12个 独立的可配置的通道(请求)DMA1 有7个通道DMA2有5个通道
● 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置。
● 在七个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),假如在相等优先权时由硬件决定(请求0优先于请求1 ,依此类推) 。
● 独立的源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐
● 支持循环的缓冲器管理
● 每个通道都有3个事件标志(DMA 半传输, DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。
存储器和存储器间的传输
外设和存储器,存储器和外设的传输
● 闪存、 SRAM、外设的SRAM、 APB1 APB2和AHB外设均可作为访问的源和目标
可编程的数据传输数目:最大为65536
 
DMA配置过程
(1)外设寄存器地址;DMA_CPARx(x=1-7),DMA1和DMA2共享用7个,DMA2没有6和7
(2)存储器地址;DMA_CMARx(x=1-7),DMA1和DMA2共享用7个99,DMA2没有6和7
(3)传输量,DMA_CNDTRx,只用bit0-15,0-65535,只在DMA_CCRx的EN为0时,可写,减为0时,不会发生任何数据传输,除非使用循环模式;传输数据宽度,传输方向,DMA_CCRx
(4)循环/正常模式,地址增量模式(包括外设和存储器的地址),DMA_CCRx
(5)通道优先级,DMA_CCRx
(6)中断请求标志,DMA_ISR和DMA_IFCR
 
DMA的工作过程及循环模式、存储器到存储器模式
    配置DMA完后,并且使能了DMA,当发生外设数据传输请求时,如果传输量不为0,在DMA的控制下,数据以指定的方向,以传输数据宽度,从源地址传输到目标地址,一次传输完成,传输量减1,此时如果开启了地址增量模式,那么下一个源地址、目标地址将会是前一个地址加上增量值,增量值取决于所选的数据宽度(8位+1,16位+2,32位+4),当源地址设定的数据宽度小于目标地址的数据宽度,那么源数据全部写入目标地址后,目标地址剩下的位置将写0,当大于时,目标地址将全被写满,源数据未写部分将被舍弃。如果开启了循环模式,数据传输量变为0时,将会自动恢复成配置通道时设置的初值,DMA操作继续执行。
    如果开启了中断(传输错误中断、传输完成中断、半传输中断),将会产生相应的中断事件。三种不同中断共用一个中断函数,但可以通过中断标志区分。
    当设置了DMA_CCRx的MEM2MEM位,在软件设置了DMA_CCRx的EN位启动DMA传输,DMA传输立即开始,当传输量减为0,传输结束。注意存储器到存储器模式不能和循环模式共同使用。
 
DMA的DMA_ISR和DMA_IFCR的区别
    DMA_ISR,存储中断标志位,由硬件置位,使用了前28位,共7个通道,每个通道使用4位,分别是GIFx(全局中断)、TCIFx(传输完成)、HTIFx(半传输)、TEIFx;特别地,GIFx 置1时,表示有中断发生。
    DMA_IFCR,中断标志清除寄存器,由软件置位, 使用了前28位,共7个通道,每个通道使用4位,分别是CGIFx(全局中断)、CTCIFx(传输完成)、CHTIFx(半传输)、CTEIFx;写入0不起作用,写入1清除DMA_ISR相应的标志位。
 
错误管理
   读写一个保留的地址区域,将会产生DMA传输错误。当在DMA读写操作时发生DMA传输错误时,硬件会自动地清除发生错误的通道所对应的通道配置寄存器(DMA_CCRx)的EN位,该通道操作被停止。此时,在DMA_IFT寄存器中对应该通道的传输错误中断标志位(TEIF)将被置位,如果在DMA_CCRx寄存器中设置了传输错误中断允许位,则将产生中断。
 
操作一个不支持字节或半字写的AHB设备
   当DMA模块开始一个AHB的字节或半字写操作时,数据将在HWDATA[31:0]总线中未使用的部分重复。因此,如果DMA以字节或半字写入不支持字节或半字写操作的AHB设备时(即HSIZE不适于该模块),不会发生错误, DMA将按照下面两个例子写入32位HWDATA数据:
● 当HSIZE=半字时,写入半字’0xABCD’, DMA将设置HWDATA总线为’0xABCDABCD’。
● 当HSIZE=字节时,写入字节’0xAB’, DMA将设置HWDATA总线为’0xABABABAB’。
假定AHB/APB桥是一个AHB的32位从设备,它不处理HSIZE参数,它将按照下述方式把任何AHB上的字节或半字按32位传送到APB上:
● 一个AHB上对地址0x0(或0x1 、 0x2或0x3)的写字节数据’0xB0’操作,将转换到APB上对地址0x0的写字据’0xB0B0B0B0’操作。
● 一个AHB上对地址0x0(或0x2)的写半字数据’0xB1B0’操作,将转换到APB上对地址0x0的写字数据’0xB1B0B1B0’操作。
例如,如果要写入APB后备寄存器(与32位地址对齐的16位寄存器),需要配置存储器数据源宽度(MSIZE)为’16位’,外设目标数据宽度(PSIZE)为’32位’。  
注意:
(1)存储器到存储器模式下,可以使用任意DMA通道;
(2)开启DMA数据传输模式,除了存储器到存储器的数据传输,其他外设的DMA传输,不仅要支持DMA,还要在使用的时候,自己开启DMA功能,比如USART1的DMA开启为,USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);
(3)外设的DMA,还要注意选择的通道是否正确。
 
 
(0)

相关推荐

  • 【STM32】DMA基本原理、寄存器、库函数

    DMA的基本介绍 1 DMA的基本定义 DMA,全称Direct Memory Access,即直接存储器访问. DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和 ...

  • 视频号“云旅游”直播大热,观看人数超千万,涨粉带货两不误原创

    今年五一假期,大家是出门人挤人,还是在家"云旅游"看people mountain people sea? 据文化和旅游部数据中心测算显示,2021年"五一"假 ...

  • 领导口中的“协调能力”到底怎么提高?【原创】

    石头说 协调就是不断达成目标的过程. 在工作中我们常听领导说"这项工作中X单位组织协调不力""这个年轻人协调能力还要提高"等等,话从耳畔过,意在心中留. 究竟什 ...

  • 红樱花(原创)

    如火熊熊映天青,繁花朵朵照眼明. 何惧二月霜风寒,樱花娇艳秀春情. 春暖花开,樱花也是一道最美的风景.樱花品种很多,开花的时间也有早迟.从2月到4月,都可看到它的靓影.多数在四月盛开,但也曾经在1月上 ...

  • 孙浩:双方均不申请笔迹鉴定的举证责任分配探讨 | 君安原创

    原创 孙浩 浙江君安世纪律师事务所 今天 作者 孙浩 浙江君安世纪律师事务所专职律师 专业领域:民商事诉讼.婚姻家庭 在笔者代理案件的过程中,常常碰到被告提出原告提交的合同.借条.授权委托书等材料上的 ...

  • 生活的空余,与我一起重逢文字【客都原创】

    --我喜欢品味自己的文字,在品味中找回从前的样子,倾听自己从前的心声,在品味中找回了真实的自我.  人淡如菊,淡泊心境,安静自己,安心文字. 说不清在什么时候就对文字有了这种独特的感觉,喜欢用文字随心 ...

  • 唯有文学和爱不可辜负,168篇客都原创文章你关注了吗

    "人民需要什么,我们就生产什么",客都原创公众号自发布以来,到2020年2月23日,已发表原创文章556篇,现将其中部分文章整理以下,以飨爱我们和关心我们的读者,同时感谢所有作者的 ...

  • 梦游中国‖穿梭在热带雨林【客都原创】

    穿梭在热带雨林 文/梦游中国 无论在小说里还是在电影里都常常出现热带雨林神秘而又奇妙的画面,所以一直很想找个机会去揭开热带雨林的神秘面纱! 2002年7月,终于有机会从广州乘火车去昆明,然后从昆明乘大 ...

  • 廖是添‖重九梦游王寿山【客都原创】

    重九梦游王寿山 文/廖是添   那排排常绿乔木都是开明绅士 分列于进山的道路两旁 挺得笔直的身板硬朗如前 有人点赞不墨也成千秋画的远山 有人沉浸无弦竟成万古琴的飞流   我却俨然成了那只展翅翱翔的苍鹰 ...

  • 腐竹,客乡的美味【客都原创】

    腐竹,客乡的美味 文/半佛闲人 中国人是世界上最勤劳的民族. 也是最会吃.最懂得吃的民族.他们在劳动中创造财富,也在生活中创造美食和快乐,就连对食物的名字总是富于美好的寓意和期盼,在中国有一种十分受欢 ...