1.DMA简介
DMA(Direct Memory Access,直接内存访问)是一种允许外设直接访问系统内存的技术,而无需CPU的干预。这种机制可以有效地提高系统的性能,特别是在需要大量数据传输的应用中。以下是DMA的几个关键点和基本概念:
1. DMA的工作原理
- 外设与内存的直接连接:DMA控制器负责管理外设和内存之间的数据传输,允许外设直接将数据读入内存或从内存写入外设。
- CPU的角色:在DMA传输过程中,CPU的主要任务是初始化DMA控制器,设置传输的源地址、目标地址和传输的数据量。之后,DMA控制器就可以独立于CPU进行数据传输。
- 中断机制:在DMA完成数据传输后,通常会产生一个中断信号,通知CPU传输已经完成。这使得CPU可以在不干扰DMA传输的情况下执行其他任务。
2. DMA的优点
- 减少CPU负担:DMA允许CPU在数据传输期间执行其他任务,提高了系统的整体效率。
- 提高数据传输速度:DMA可以在内存和外设之间进行高速数据传输,尤其适合于大块数据的传输,如音频、视频和网络数据。
- 降低延迟:通过使外设能够直接访问内存,DMA减少了数据传输的延迟。
3. DMA的类型
- 单通道DMA:只有一个DMA通道,适用于简单的应用。
- 多通道DMA:多个DMA通道可以同时进行数据传输,适用于复杂的应用。
- Burst Mode(突发模式):在一定时间内集中传输大量数据,适用于高带宽需求的情况。
- Cycle Stealing(循环窃取模式):DMA在每个CPU周期中传输一个数据字,这样可以在DMA和CPU之间进行时间共享。
- Transparent Mode(透明模式):DMA在CPU不使用总线时进行数据传输,确保CPU和DMA不会同时访问总线。
4. DMA的应用场景
- 音频和视频处理:在音频和视频流的处理过程中,DMA可以高效地传输大量数据。
- 网络数据传输:网络接口卡(NIC)通常使用DMA来接收和发送数据包。
- 传感器数据采集:在实时系统中,DMA可以用于快速采集传感器数据,减少延迟。
5. DMA的配置与管理
在嵌入式系统中,DMA的配置通常涉及以下几个步骤:
- 初始化DMA控制器:设置DMA控制器的参数,如传输方向、数据大小、源地址和目标地址等。
- 启动DMA传输:使能DMA传输,并开始数据传输。
- 处理DMA中断:在DMA完成传输后,处理相关的中断,以便进行后续操作。
2.DMA配置
- 可以看到在DMA配置中,有地址自增的选项,分别是:peripheral(外设)外设在传输过程中需不需要地址自增,以及memory(内存)是否需要地址自增(图中为串口发送给上位机dma配置,因此需要在内存地址自增)
- 何时开启内存地址自增:当你需要从内存中连续读取或写入多个数据项时,开启内存地址自增是合适的。例如,在处理**数组或缓冲区(例如串口)**时,DMA可以自动递增内存地址,从而简化数据传输的过程。
- 何时开启外设地址自增:当外设需要从内存中连续读取多个数据项时,开启外设地址自增是合适的。例如,在从传感器读取多个连续数据样本时,外设可以自动递增地址,从而简化数据读取过程。
ADC的DMA介绍
-
首先需要知道:adc的外设地址通常是adc的数据寄存器,该地址是固定的,所有数据都存储在同一个数据寄存器中,因此不需要自增。内存地址是指存储adc转换结果的数组的地址,因此需要开启内存地址自增
-
一般情况下,adc开启了dma 的循环模式后是 需要开启连续转换模式。
-
同时也可以配置,传输或接收数据的宽度,分别由byte(8位),half world(16位),world(32位)
-
当一个通道到被占用,就不能其他外设再利用(因此推荐只要不是大数据搬运就不要用DMA,防止真要使用时,通道被占用)