DMA初识

  • 功能

    DMA可以在CPU不干涉的情况下,进行数据的搬移。例如:通过DMA来获取摄像头输出的像素数据,而占用少量CPU资源。

 

  • DMAMUX

    DMAMUX负责数据的路由:将触发源绑定到特定的DMA通道,当有触发时就通过通道发送一次数据。例如:触发源可以是

  串口发送中断标志,DMA通道选择相应的串口通道。

 

                

 

 

  • 传输方式

    DMA支持多种传输方式,先谈一维传输:

    

    以上图为例,设置0x12345670为要发送的数据首地址,设置数据大小为4个字节,设置数据传输一次的地址偏移为4字节,设置传

  输循环次数为4次。第一次触发下,传输4个字节数据,发送指针指向0x12345674。四次触发完毕后,数据传输完成,DMA通道关闭。

  注意,这里设置的地址偏移不一定要等于4字节(也可以是8字节,但是这样0x12345674-0x12345677间的4字节数据就被忽略了)。

    

    在一维传输结束时,可以将地址回归到0x12345670,从而实现循环传输:

   

    除了一维传输,DMA还提供了二维传输模式,即主循环+子循环模式,在该模式中,每次触发会使Minor Loop循环一次,当Minor Loop

   循环结束时,等待下一个触发,Major Loop循环一次。因为主循环与子循环的偏移可以不相同,因此,可以通过二维传输实现隔行扫描。

 

 

  • 重要寄存器

    SADDR:源地址;

    DAADR:目的地址;

    SOFF:源地址偏移(一次数据传输后读取地址的偏移量);

    DOFF:目的地址偏移(一次数据传输后写入地址的偏移量);

    ATTR->SMOD:源地址循环/非循环模式;

    ATTR->DMOD:目标地址循环/非循环模式;

    ATTR->SSIZE:触发源发送一次的数据大小(4/2/1字节);

    ATTR->DSIZE:接收方接收一次的数据大小(4/2/1字节);

    BITER_ELINKNO:非级联模式下主循环计数初值(循环次数);

    CITER_ELINKNO:非级联模式下主循环计数当前值(剩余循环次数);

    CR->EMLM:子循环使能;

    ERQ:通道触发请求使能;

    SMLOE:源地址子循环地址偏移使能;

    DMLOE:目的地址子循环偏移使能;

    MLOFF:子循环地址偏移量;

    NBYTES:子循环计数(循环次数);

    CSR:带宽控制,传输结束后的操作;

    

    

    

    

  

    

 

  

    

 

 

  

  

 

  

posted @ 2019-07-23 19:52  KenSporger  阅读(1100)  评论(0编辑  收藏  举报