zoukankan      html  css  js  c++  java
  • 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:带宽控制,传输结束后的操作;

        

        

        

        

      

        

      

        

      

      

      

  • 相关阅读:
    Socket网络编程
    android开发常用颜色
    eclipse使用技巧以及开发安卓程序过程中遇到的问题
    XML文件中的常用属性
    将博客园的文本编辑栏属性变成可以粘贴
    显示单位px、dip、pt以及sp
    WIN32 API IP地址转换
    常用win32api函数
    win32—GrafMenu的CreateBitmapIndirect创建失败的问题
    #pragam 使用方法
  • 原文地址:https://www.cnblogs.com/kensporger/p/11234034.html
Copyright © 2011-2022 走看看