精华内容
下载资源
问答
  • DMA原理

    万次阅读 2016-03-16 16:55:24
    DMA原理:DMA 是所有现代电脑的重要特色,他允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量 中断 负载。否则,CPU 需要从 来源 把每一片段的资料复制到 暂存器,然后把他们再次写回到新的地方。在这个时间...

    本文来源:http://blog.csdn.net/wangyunqian6/article/details/6996721  有些图没有加载上,可以访问转载之处。

    DMA原理:DMA 是所有现代电脑的重要特色,他允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量 中断 负载。否则,CPU 需要从 来源 把每一片段的资料复制到 暂存器,然后把他们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。 DMA 传输重要地将一个内存区从一个装置复制到另外一个。当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存去。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统 算法和网络是很重要的。 
      在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。
    DMA - 街角的祝福 -  demo
    DMA
    一个完整的DMA传输过程必须经过下面的4个步骤。
    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传输。
    4.DMA结束
      当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。
      由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。

    DMA操作模式
        DMA用于无需CPU的介入而直接由专用控制器建立源与目的传输的应用,因此,在大量数据传输中解放了CPU。PIC32微控制器中的DMA可用于映射到内存空间中的不同外设,从存储区到SPI,UART或I2C等设备。DMA特性详见器件参考手册,这里仅对一些基本原理与功能做一个简析。
        PIC32中DMA的传输涉及到几个基本的术语
        Event:事件,触发控制器启动或停止DMA传输的操作;
        Transaction:事务,单字传输(最多可以到4个字节),由读/写组成;
        Cell transfer:元传输,单次共DCHXCSIZE个字节的数据传输。元传输由单个或多个事务组成。
        Block transfer:块传输,块传输总的字节数由DCHXSSIZ或DCHXDSIZ决定。块传输由单个或多个元传输组成。
        事件是触发DMA控制器产生动作的方式,分为,START EVENT->启动传输;ABORT EVENT->取消传输;STOP EVENT->停止传输;为了有一个完整的概念认识,可以把用户软件的操作,如置位启动传输位等也包含在事件范围内。由此,可以看出,任何一个DMA动作都是由事件触发完成的。用户在使用DMA控制器时只需设计好事件与DMA操作的关联即可。要充分的使用DMA控制器,熟悉DMA各种工作模式的原理是很有必要的。
             传输模式二:字符匹配终止模式
        字符匹配模式用于传输不定长字节,而又有传输终止标识字节的应用环境中,Uart是这种模式的应用案例

         DMA通道的自动使能模式
        DMA每个通道在正常的块传输、终结字符匹配后或者因异常ABORT后,通道自动禁能。如果该通道有多次的块传输,需要手动的使能通道;为了省却该操作,DCHXCON寄存器提供了允许自动使能通道的位CHAEN(channel auto enable)。通道使能位CHEN在取消传输或ABORT事件发生时会被置为0。
    注:
    1、通道起始/终止/停止中断事件独立于中断控制器,因此相应的中断无需使能,也无需在DMA传输后清除相应的位;
    2、通道优先级和选择
        DMA控制器每个通道有一个自然的优先级,CH0默认为最高,CH4默认为最低;通道寄存器DCHXCON中提供了修改优先级的控制位。优先级控制了通道的传输顺序。
     
    3、DMA传输中的字节对齐
        PIC32采用的数据总线是32位,4字节;无疑访问地址为4字节对齐的访问效率最高,但是,如果把所有的常量或变量存储地址都限制在4字节对齐显然是不可能的;DMA中在处理这个问题上采用的字节对齐方法(存储方式为LSB)。举例来说,如果当前物理地址与4的模为0,则取4字节;模为1,则取高3字节;模为2,则取高2字节;模为3,则取高1字节。
        物理地址为0x1230,模为0,则取从0x1230处4字节数据;
        物理地址为0x1231,模为1,则取从0x1231处3字节数据;
        物理地址为0x1232,模为2,则取从0x1232处2字节数据;
        物理地址为0x1233,模为3,则取从0x1233处1字节数据;
        读/写过程均采取相同的字节对齐机制。DMA传输中的字节对齐过程如图2.

         直接存储器存取(DMA)控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器。它之所以属于外设,是因为它是在处理器的编程控制下来执行传输的。值得注意的是,通常只有数据流量较大(kBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口

    一般而言,DMA控制器将包括一条地址总线、一条数据总线和控制寄存器。高效率的DMA控制器将具有访问其所需要的任意资源的能力,而无须处理器本身的介入,它必须能产生中断。最后,它必须能在控制器内部计算出地址。

    一个处理器可以包含多个DMA控制器。每个控制器有多个DMA通道,以及多条直接与存储器站(memory bank)和外设连接的总线如图1所示。在很多高性能处理器中集成了两种类型的DMA控制器。第一类通常称为“系统DMA控制器”,可以实现对任何资源(外设和存储器)的访问,对于这种类型的控制器来说,信号周期数是以系统时钟(SCLK)来计数的,以ADI的Blackfin处理器为例,频率最高可达133MHz。第二类称为内部存储器DMA控制器(IMDMA),专门用于内部存储器所处位置之间的相互存取操作。因为存取都发生在内部(L1-L1、L1-L2,或者L2-L2),周期数的计数则以内核时钟(CCLK)为基准来进行,该时钟的速度可以超过600MHz

    每个DMA控制器有一组FIFO,起到DMA子系统和外设或存储器之间的缓冲器的作用。对于MemDMA(Memory DMA)来说,传输的源端和目标端都有一组FIFO存在。当资源紧张而不能完成数据传输的话,则FIFO可以提供数据的暂存区,从而提高性能。

    因为通常会在代码初始化过程中对DMA控制器进行配置,内核就只需要在数据传输完成后对中断做出响应即可。你可以对DMA控制进行编程,让其与内核并行地移动数据,而同时让内核执行其基本的处理任务—那些应该让它专注完成的工作。

    图1:系统和存储器DMA架构.
    图1:系统和存储器DMA架构。

    在一个优化的应用中,内核永远不用参与任何数据的移动,而仅仅对L1存储器中的数据进行读写。于是,内核不需要等待数据的到来,因为DMA引擎会在内核准备读取数据之前将数据准备好。图2给出了处理器和DMA控制器间的交互关系。由处理器完成的操作步骤包括:建立传输,启用中断,生成中断时执行代码返回到处理器的中断输入可以用来指示“数据已经准备好,可进行处理”。

    图2:DMA控制器.
    图2:DMA控制器。

    数据除了往来外设之外,还需要从一个存储器空间转移到另一个空间中。例如,视频源可以从一个视频端口直接流入L3存储器,因为工作缓冲区规模太大,无法放入到存储器中。我们并不希望让处理器在每次需要执行计算时都从外部存储读取像素信息,因此为了提高存取的效率,可以用一个存储器到存储器的DMA(MemDMA)来将像素转移到L1或者L2存储器中。

    到目前为之,我们还仅专注于数据的移动,但是DMA的传送能力并不总是用来移动数据。  

     在最简单的MemDMA情况中,我们需要告诉DMA控制器源端地址、目标端地址和待传送的字的个数。每次传输的字的大小可以是8、16或者12位。  我们只需要改变数据传输每次的数据大小,就可以简单地增加DMA的灵活性。例如,采用非单一大小的传输方式时,我们以传输数据块的大小的倍数来作为地址增量。也就是说,若规定32位的传输和4个采样的跨度,则每次传输结束后,地址的增量为16字节(4个32位字)。

     

    DMA的设置

    目前有两类主要的DMA传输结构:寄存器模式和描述符模式。无论属于哪一类DMA,表1所描述的几类信息都会在DMA控制器中出现。当DMA以寄存器模式工作时,DMA控制器只是简单地利用寄存器中所存储的参数值。在描述符模式中,DMA控制器在存储器中查找自己的配置参数。

    表1:DMA寄存器
    表1:DMA寄存器

    基于寄存器的DMA

    在基于寄存器的DMA内部,处理器直接对DMA控制寄存器进行编程,来启动传输。基于寄存器的DMA提供了最佳的DMA控制器性能,因为寄存器并不需要不断地从存储器中的描述符上载入数据,而内核也不需要保持描述符。

    基于寄存器的DMA由两种子模式组成:自动缓冲(Autobuffer)模式和停止模式在自动缓冲DMA中,当一个传输块传输完毕,控制寄存器就自动重新载入其最初的设定值,同一个DMA进程重新启动,开销为零。

    正如我们在图3中所看到的那样,如果将一个自动缓冲DMA设定为从外设传输一定数量的字到L1数据存储器的缓冲器上,则DMA控制器将会在最后一个字传输完成的时刻就迅速重新载入初始的参数。这构成了一个“循环缓冲器”,因为当一个量值被写入到缓冲器的最后一个位置上时,下一个值将被写入到缓冲器的第一个位置上。

    图3:用DMA实现循环缓冲器.
    图3:用DMA实现循环缓冲器。

    自动缓冲DMA特别适合于对性能敏感的、存在持续数据流的应用。DMA控制器可以在独立于处理器其他活动的情况下读入数据流,然后在每次传输结束时,向内核发出中断。

    停止模式的工作方式与自动缓冲DMA类似,区别在于各寄存器在DMA结束后不会重新载入,因此整个DMA传输只发生一次。停止模式对于基于某种事件的一次性传输来说十分有用。例如,非定期地将数据块从一个位置转移到另一个位置。当你需要对事件进行同步时,这种模式也非常有用。例如,如果一个任务必须在下一次传输前完成的话,则停止模式可以确保各事件发生的先后顺序。此外,停止模式对于缓冲器的初始化来说非常有用。

    描述符模型

    基于描述符(descriptor)的DMA要求在存储器中存入一组参数,以启动DMA的系列操作。该描述符所包含的参数与那些通常通过编程写入DMA控制寄存器组的所有参数相同。不过,描述符还可以容许多个DMA操作序列串在一起。在基于描述符的DMA操作中,我们可以对一个DMA通道进行编程,在当前的操作序列完成后,自动设置并启动另一次DMA传输。基于描述符的方式为管理系统中的DMA传输提供了最大的灵活性。

    ADI 的Blackfin处理器上有两种主要的描述符方式—描述符阵列和描述符列表,这两种操作方式所要实现的目标是在灵活性和性能之间实现一种折中平衡。

     DMA 方式, 即外设在专用的接口电路DMA 控制器的控制下直接和存储器进行高速数据传送。采用DMA 方式时,如外设
    需要进行数据传输, 首先向DMA 控制器发出请求,DMA 再向CPU 发出总线请求,要求控制系统总线。CPU 响应DMA 控制器
    的总线请求并把总线控制权交给DMA, 然后在DMA 的控制下开始利用系统总线进行数据传输。数据传输结束后,DMA 并回
    总线控制权。
    DMA 操作步骤:
    (1) DMA 控制器的初始化
    (2) DMA 数据传送
    (3) DMA 结束
    DMA 初始化预置如下信息:一是指定I/O 设备对外设"读"还是"写",即指定其控制/状态寄存器中相应的控制位;二是数据应传送至何处,指定其地址的首地址;三是有多少数据字需要传送。

    展开全文
  • DMA原理分析,flash小视频,解析很好的。
  • 不好意思啦 ~我的分不多了 ,找了些资料跟大家分享~~
  • 原创 - DMA 原理 PPT

    2018-01-22 10:13:32
    详解DMA (Direct memory access )原理, DMA, pooling, interrupt原理;...xilinx axi-dma原理,axi4 interconnet bus, xilinx axi-dma原理 ; DMA实现fpga外设与ARM ddr3sdram 交互数据的原理流程、注意。
  • DMA原理与应用

    2021-05-21 08:49:12
    DMA原理 DMA控制器原理 DMA描述符图解

    DMA原理

    DMA控制器原理

    DMA描述符图解

    DMA在数据处理上的应用

    展开全文
  • DMA原理解析

    千次阅读 2017-05-23 09:01:09
    DMA原理解析

    DMA概念

    DMA(Direct Memory Access,直接内存存取) ,DMA 传输将数据从一个地址空间复制到另外一个地址空间。采用CPU来初始化这个传输动作,但是传输动作本身是由 DMA 控制器来实行和完成,不需要占用CPU。

    DMA控制器(以2440为例)

    2440芯片手册第8章为DMA控制器。
    2440的DMA控制器支持4个通道

    请求源:
    这里写图片描述
    上图是2440中DMA控制器支持的请求源。

    基本时序
    这里写图片描述
    在请求信号有效之后,经过2个周期DACK信号有效,再经过3个周期,DMA控制器才可获得总线的控制权,开始读写操作。

    工作模式
    Demond模式:
    如果DMA完成一次请求后如果Request仍然有效,那么DMA就认为这是下一次DMA请求,并立即开始下一次的传输。

    Handshake模式:
    DMA完成一次请求后等待Request信号无效,如果Request 无效,DMA会无效ACK两个时钟周期,再等待下一次Request。

    6410芯片的DMA控制器在芯片手册的第11章。

    DMA程序设计(2440芯片)

    char *buf = "Hello World!";
    
    #define DISRC0     (*(volatile unsigned long*)0x4B000000)
    #define DISRCC0    (*(volatile unsigned long*)0x4B000004)
    #define DIDST0     (*(volatile unsigned long*)0x4B000008)
    #define DIDSTC0    (*(volatile unsigned long*)0x4B00000C)
    #define DCON0      (*(volatile unsigned long*)0x4B000010)
    #define DMASKTRIG0 (*(volatile unsigned long*)0x4B000020)
    
    #define UTXH0 (volatile unsigned long*)0x50000020
    
    void dma_init()
    {   
        //初始化源地址
        DISRC0 = (unsigned int)buf; //向寄存器中填写源地址  
        DISRCC0 = (0<<1)| (0<<0);   //内存使用的是AHB总线,源地址需要增长
    
        //初始化目的地址
        DIDST0 = UTXH0;             //向串口中传送数据
        DIDSTC0 = (1<<1)| (1<<0);   //串口使用的是APB总线,目的地址总是一个寄存器不增长
        DCON0 = (1<<24)| (1<<23)| (1<<22)| (12<<0); 
        //控制寄存器,选择DMA源,硬件,是否多次发送,数据个数
    }
    
    void dma_start()
    {
        DMASKTRIG0 = (1<<1);//启动传输
    }

    DMA程序设计(6410芯片)

    /*
    S3C6410中DMA操作步骤:
    1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC);
    2、开启DMAC控制,设置DMAC_Configuration寄存器;
    3、清除传输结束中断寄存器和错误中断寄存器;
    4、选择合适的优先级通道;
    5、设置通道的源数据地址和目的数据地址(设置DMACC_SrcAddr和DMACC_DestAddr);
    6、设置通道控制寄存器0(设置DMACC_Control0);
    7、设置通道控制寄存器1,(传输大小,设置DMACC_Control1);
    8、设置通道配置寄存器;(设置DMACC_Configuration)
    9、使能相应通道(设置DMACC_Configuratoin);
    */
    
    #define SDMA_SEL            (*((volatile unsigned long *)0x7E00F110))
    #define DMACIntTCClear      (*((volatile unsigned long *)0x7DB00008))
    #define DMACIntErrClr       (*((volatile unsigned long *)0x7DB00010))
    #define DMACConfiguration   (*((volatile unsigned long *)0x7DB00030))
    #define DMACSync            (*((volatile unsigned long *)0x7DB00034))
    #define DMACC0SrcAddr       (*((volatile unsigned long *)0x7DB00100))
    #define DMACC0DestAddr      (*((volatile unsigned long *)0x7DB00104))
    #define DMACC0Control0      (*((volatile unsigned long *)0x7DB0010c))
    #define DMACC0Control1      (*((volatile unsigned long *)0x7DB00110))
    #define DMACC0Configuration (*((volatile unsigned long *)0x7DB00114))
    
    #define UTXH0           (volatile unsigned long *)0x7F005020
    
    char src[100] = "\n\rHello World-> This is a test!\n\r";
    
    void dma_init()
    {
        //DMA控制器的选择(SDMAC0)
        SDMA_SEL = 0;
    
        //DMA控制器使能
        DMACConfiguration = 1;
    
        //初始化源地址
        DMACC0SrcAddr = (unsigned int)src;
    
        //初始化目的地址
        DMACC0DestAddr = (unsigned int)UTXH0;
    
        //对控制寄存器进行配置
        /*
        源地址自增
        目的地址固定、
        目标主机选择AHB主机2
        源主机选择AHB主机1
        */
        DMACC0Control0 =(1<<25) | (1 << 26)| (1<<31);
        DMACC0Control1 = 0x64;     //传输的大小
    
        /*
        流控制和传输类型:MTP 为 001
        目标外设:DMA_UART0_1,源外设:DMA_MEM
        通道有效: 1
        */
        DMACC0Configuration = (1<<6) | (1<<11) | (1<<14) | (1<<15);             
    }
    
    void dma_start()
    {
        //开启channel0 DMA
        DMACC0Configuration  = 1;   
    }
    展开全文
  • MCU学习笔记_DMA原理

    2021-04-23 10:02:58
    DMA原理 1. DMA原理 2. DMA相关概念 3. DMA数据流配置过程 4. HAL库配置DMA 1. DMA原理 DMA, Direct Memory Access, 即直接存储器访问。无需CPU直接控制,通过硬件为RAM和IO设备开辟一条直接数据传输通道,将数据...

    MCU学习笔记

    DMA原理

    1. DMA原理
    2. DMA相关概念
    3. DMA数据流配置过程
    4. HAL库配置DMA
    

    1. DMA原理

    • DMA, Direct Memory Access, 即直接存储器访问。无需CPU直接控制,通过硬件为RAM和IO设备开辟一条直接数据传输通道,将数据直接从一个地址空间复制到另一个地址空间,传输动作本身由DMA控制器实现。

    • 作用:为CPU减负,提升CPU效率

    • STM32F4/F7: 2个DMA控制器,16个数据流。每个DMA控制器都用于管理一个或者多个外设的额存储器访问请求。每个数据流最多可以有多达8个通道(或请求),每个通道都有一个仲裁器,用于处理DMA请求间的优先级。

    • 框图在这里插入图片描述链接方式:1. 存储器2存储器,2. 存储器2外设,3. 外设2存储器

    • 特性

      1. 8个数据流,每个数据流有最多8个通道(或称请求)

      2. 每个数据流有单独的四级32位FIFO,可用于FIFO模式或直接模式:

        FIFO模式:可以通过软件将阈值级别选取位FIFO大小的1/4,1/2,3/4
        直接模式:每个DMA请求会立即启动对存储器的传输。

      3. 通过硬件可以将每个数据流配置为:1. 存储器2存储器,2. 存储器2外设,3. 外设2存储器,传输的常规通道;2. 也支持在存储器方双缓冲的双缓冲区通道

      4. 8个数据流中的每一个都连接到专用硬件DMA通道

      5. 数据流请求之间的优先级可用软件编程(4个级别:非常高,高,中,低),在软件优先级相同的情况下可以通过硬件决定优先级

      6. 每个数据流支持通过软件触发存储器2存储器的传输(仅限DMA2控制器)

      7. 软件配置每个数据流选择的通道请求,允许几个外设启动DMA请求

      8. 要传输的数据项的项目数由DMA控制器或外设管理:
        DMA流控制器:要传输的数据项的数:1~65535,可软件编程
        外设流控制器:要传输的数据项的数未知,由源或目标外设通过发出传输请求信号控制。

      9. 独立的源和目标传输宽度:(字节,半字,字),源于目标的数据宽度不相等时,DMA自动封装/解封必要的传输数据来优化带宽。(仅在FIFO模式下可用)

      10. 对源和目标的增量或非增量寻址

      11. 支持4,8,16个节拍的增量突发传输。突发增量的大小可由软件配置,通常为外设FIFO大小的一半

      12. 每个数据流都支持循环缓冲区管理

      13. 5个事件标志进行逻辑或运算,从而产生每个数据流的单个中断请求(DMA半传输,DMA传输完成,DMA传输错误,FIFO错误,直接模式错误)

    2. DMA相关概念

    • 通道选择
      每个DMA请求与一个数据流相关联,请求可以从8个可能的通道请求中被选出。此操作由DMA_SxCR寄存器中的CHSEL[2:0]位控制。在这里插入图片描述

    • DMA事务
      DMA事务由给定数目的数据传输序列组成。要传输的数据项的数目,宽度(字节,半字,字)由软件编程。
      DMA传输的操作:
      从外设数据寄存器或存储单元中加载数据:通过DMA_SxPAR(外设为源)或DMA_SxM0AR(存储器为源)寻址;
      将加载的数据存储到外设数据寄存器或存储单元中:通过DMA_SxPAR(外设为目的)或DMA_SxM0AR(存储器为目的)寻址;
      DMA_SxNDTR计数器在数据存储结束后递减,该计数器中包含仍需执行的事务数;
      传输方向配置:DMA_SxCR.DIR[1:0]位
      在这里插入图片描述

    • 仲裁器
      作用:为两个AHB主端口(存储器和外设端口)提供基于请求优先级的8个DMA数据流请求管理,并启动外设/存储器访问序列
      优先级管理:
      软件:每个数据流优先级可以在DMA_SxCR寄存器中配置。分为四个级别:非常高,高,中,低。
      硬件:两个请求的软件优先级相同,则编号低的数据流优先。

    • 指针递增
      由DMA_SxCR寄存器中的PINC, MINC位控制 ,外设和存储器指针在每次传输后可以自动递增或保持常量。

    • 循环模式
      由DMA_SxCR寄存器中的CIRC位控制,用于处理循环缓冲区和连续数据流(如ADC扫描模式)。激活循环模式时,要传输的数据项的数目在数据流配置阶段自动用设置的初始值进行加载,并继续响应DMA请求。

    • 单次传输和突发传输
      DMA控制器可以产生单次传输或者4,8,16个节拍的增量突发传输。
      突发大小:软件通过配置DMA_SxCR寄存器中的MBURST[1:0]和PBURST[1:0]位,独立配置两个AHB端口
      单次传输:根据DMA_SxCR寄存器PSIZE[1:0]位,每个DMA请求产生一次字节,半字,字的数据传输
      突发传输:根据DMA_SxCR寄存器PBURST[1:0], PSIZE[1:0]位的值,每个DMA请求相应的生成4,8,16个节拍的字节,半字,字的数据传输。

    • 双缓冲区模式
      通过DMA_SxCR寄存器中的DBM位配置。
      有两个存储器指针,工作方式与常规数据流相同。
      使能双缓冲区模式,将自动使能循环模式,每次事务结束时,交换存储器指针。这样软件再处理一个存储器区域的同事,DMA传输还可以填充/使用第二个粗初期区域。双缓冲区数据流可以双向工作(存储器既可以是源也可以是目标)。

    • DMA中断
      对于每个DMA数据流,可在以下事件时产生中断: 达到半传输,传输完成,传输错误,FIFO错误,直接模式错误在这里插入图片描述

    3. DMA数据流配置过程

    • 若数据流使能,则配置DMA_SxCR.EN将其禁止。然后读取此位,确认没有正在进行的数据流操作。若DMA_SxCR.EN=0,表示可以配置数据流。
    • 设置外设基地址:配置DMA_SxPAR寄存器来配置外设端口寄存器地址,、
    • 设置存储器基地址:配置DMA_SxMA0R寄存器
    • 配置数据的传输方向
    • 配置传输的数据项总数:配置DMA_SxNDTR寄存器
    • 选择DMA通道:配置DMA_SxCR中的CHSEL[2:0]
    • 配置数据流的优先级:配置DMA_SxCR寄存器中的PL[1:0]
    • 配置iFIFO
    • 激活DMA_SxCR.EN=1位,激活数据流.

    4. HAL库配置DMA

    • DMA初始化

      HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef*hdma);

    • 使能DMA传输

    HAL_DMA_Start(DMA_HandleTypeDef*hdma, uint32_t SrcAddress, unit32_t DstAddress, uint32_t Datalengh);

    HAL_DMA_Start_IT(DMA_HandleTypeDef*hdma, uint32_t SrcAddress, unit32_t DstAddress, uint32_t Datalengh);

    • 中断

    HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef*hdma);

    • 等待传输完成

    HAL_StatusTypeDef HAL_DMA_PollForeTransfer(DMA_HandleTypeDef*hdma, unit32_t Completelevel, unit32_t Timeout);

    • 通用处理函数

    void HAL_DMA_IRQHandler(DMA_HandleTypeDef*hdma);

    • HAL中DMA配置步骤
      1. 连接DMA和对应外设_HAL_LINKDMA(_HANDLE_,_PPP_DMA_FIELD_,_DMA_HANDLE_)
      2. 使能DMA时钟,复位DMA寄存器HAL_DMA_DeInit(&UART1TxDMA_Handler);
      3. 初始化DMA通道参数
      4. 使能外设DMA传输

    参考资料:正点原子视频 Thanks^^

    【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~


    展开全文
  • 学习DMA原理

    千次阅读 2015-11-03 16:20:39
    目的: 掌握DMA原理,在工作中能灵活应用。 概念: DMA原理:DMA(Direct Memory Access,直接内存存取) ,它可以让不同速度的硬件沟通, 不需要依赖CPU的大量中断负载。不然,CPU 需要从 来源 把每一片段的资料...
  • 【STM32】 DMA原理,步骤超细详解,一文看懂DMA

    万次阅读 多人点赞 2020-03-19 21:50:24
    DMA的基本介绍 什么是DMA (DMA的基本定义) DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 ...
  • DMA是什么DMA原理

    2011-12-17 09:26:49
    本文介绍了DMA
  • DMA原理理解

    2020-05-16 13:17:14
    编写MCU外设模块驱动时,经常会配置DMA的使用,之前在ADC采集,UART模块通信中都使用过,但是只知道使用,具体没细究过。 找了之前用过的几款MCU芯片(51&52系列,STM32F系列,MC9S12系列,S32K14系列等),也找了...
  • linux DMA原理

    千次阅读 2016-04-22 17:16:33
    DMA
  • 【计算机】DMA原理1

    2016-03-04 14:08:00
    DMA原理:DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们...
  • zynq axidma原理

    2021-02-18 19:48:11
    一、基本概念 AXIDMA:官方解释是为内存与AXI4-Stream外设之间提供高带宽的直接存储访问,其可选的scatter/gather功能可将CPU从...如图1所示,AXIDMA IP有6个接口,S_AXI_LITE是ARM配置dma寄存器的接口,M_AXI_SG是从.
  • DMA原理及驱动开发

    千次阅读 2012-05-16 00:03:15
    DMA原理:DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量 中断 负载。否则,CPU 需要从 来源 把每一片段的资料复制到 暂存器,然后...
  • DMA原理和实验

    千次阅读 2017-02-13 17:31:08
    一.DMA访问的原理  1.DMA(Driect Memory Access)访问的概述  当系统内存想要与高速外设或者内存的不同区域之间进行大数据的快速传送时,查询和中断这两种方式不能满足要求:DMA就是为解决这样的问题提出来的。 ...
  • STM32之DMA原理

    千次阅读 2017-12-26 23:01:03
    一、DMA简介 1、DMA简介  DMA(Direct Memory Access:直接内存存取)是一种可以大大减轻CPU工作量的数据转移方式。  CPU有转移数据、计算、控制程序转移等很多功能,但其实转移数据(尤其是转移大量数据)...
  • STM32_DMA原理特性

    2020-08-24 11:35:35
    DMA,直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。 STM32F4 最多有 2...
  • 如需转载请注明地址:https://blog.csdn.net/as480133937/article/details/104927922 DMA的基本介绍 什么是DMA (DMA的基本定义) DMA,全称Direct Memory Access,即直接存储器访问。 DM...
  • 一、DMA简介 ①DMA 全称Direct Memory Access,即直接存储器访问。 正常情况下(没用DMA),将数据从一个空间复制到另一个空间,需要将数据从一个空间读入CPU,然后写到另一个空间里。 ②DMA传输将数据从一个地址...
  • S3C2410 DMA原理与实例

    千次阅读 2008-08-01 17:28:00
    S3C2410 DMA原理与实例 1. DMA的含义:Direct Memory Acess ,可以不通过CPU而在DMA控制器的控制下,高速地和I/O设备和存储器之间交换数 据。2.S3C2410A支持4通道DMA,在以下四种情况可运行 ① 源设备和目标都在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,201
精华内容 480
关键字:

dma原理