• 【转】DMA(Direct Memory Access)的形象理解


    转自:https://blog.csdn.net/sun19910114/article/details/52995423

    DMA就是跳过CPU的操作来传输数据,为CPU节省时间。

    常见的数据流向:

    1:外设(如I/O,摄像头信号等)到存储器的传输;

    2:存储器到外设(如I/O,摄像头信号等)的传输;

    3:存储器到存储区的传输。

    单片机的DMA使用心得
    本人也是最近才深入了解一下DMA,前期使用单片机的时候基本上没有用到。一是不需要用到,二是心理上觉得DMA比较困难,所以不使用。在学习的过程中有一些心得体会,与大家分享一下。
    首先介绍一下啥子是DMA,说的通俗易懂一点就是一个搬运工。既然是搬运工,就有几个需要注意的问题。
    1.        从哪里搬运到哪里   一般是特殊寄存器到RAM(我们自己定义的数组里面),或者相反。
    2.        一次搬运多少  一般是一个字节或者两个字节。
    3.        搬多少的东西。
    4.        什么时候开始搬  即DMA的中断源,简单的就是说别人有东西来了,你才能搬。在单片机里面可以表现为,串口接收到数据了,就开始搬到RAM,或者AD采样结束了,就开始搬运。当然这里需要提前配置好对应模块的寄存器。
    5.        搬运结束了,DMA产生中断。就是搬运工把东西都搬完了,来找CPU结账来了,这时候CPU就要告诉他,要么你重新继续搬运,要么停止工作,等待新指令。
    DMA基本上就这些
       这里以AD采样,然后利用DMA把数据传输到指定的数组里面为例作个简单的说明

    1.        初始化DMA,说明从搬运从AD采样结果的寄存器开始,搬到我们自己定义的数组里面,每次搬一个字节的数据,每次搬完了目标地址+1,搬512次,在AD采样结束后才开始搬运。
    2.        初始化AD,这里不做介绍,和配置普通AD一样,采用软件触发方式,连续采样。
    3.        配置完了就在主函数里面开始了,先初始化DMA,在初始化AD,打开DMA,然后打开AD采样。这时候AD就开不断在采集数据。每次采样完成后,就会有一次AD中断,AD中断每次产生,DMA就会把数据搬到我们制定的数组里面。
    4.        当DMA搬了我们那么多的,这里是512个数据的时候,就会产生中断,我们在中断里面就要告诉DMA,搬的目标地址又变回去,搬的数目又变成512,然后又打开DMA,让他再次为我们工作。
    ————————————————
    版权声明:本文为CSDN博主「sun shang chao」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/sun19910114/article/details/52995423

  • 相关阅读:
    PHP 语法
    PHP 变量
    为什么说PHP是个集中营
    简单介绍ThinkPHP3.1.3使用笔记
    PHP实现提交表单及输出例子
    linux 用户组以及权限
    linux vim学习
    linux基础指令学习
    pycharm
    Codeforces Round #346 (Div. 2) C题
  • 原文地址:https://www.cnblogs.com/CCWangsj/p/12550549.html
Copyright © 2020-2023  润新知