dma 外部ad
好的,我们来解释一下 DMA 和 外部 AD(外部 ADC) 的关系以及如何使用 DMA 来读取外部 ADC 的数据。
核心概念:
- 外部 AD:
- 指的是外部模数转换器(External Analog-to-Digital Converter)。通常是指一个位于主控芯片(如单片机 MCU、微处理器 MPU)外部的独立芯片。
- 功能: 负责将模拟信号(如电压、电流、温度、光照强度等)转换为数字信号(二进制数)。
- 接口: 外部 ADC 需要通过某种接口与主控芯片通信来传输转换结果,常见的接口有:SPI, I²C, UART,或者特定的并行数据总线接口。
- DMA:
- 全称是直接存储器访问(Direct Memory Access)。
- 功能: DMA 是一种允许硬件外设(如 UART, SPI, ADC, 定时器等)不经过 CPU 直接读取或写入内存(RAM)的技术。
- 目的: 解放 CPU。在没有 DMA 的情况下,CPU 必须亲自参与每一个字节或字的传输过程(例如,从外设寄存器读到 CPU 寄存器,再从 CPU 寄存器存到 RAM 里)。当有大量或高速数据需要传输时(如高速 ADC 采样、音频处理、网络通信),这会占用大量 CPU 时间,影响程序其他部分的执行效率。DMA 将 CPU 从这个繁重的搬砖工作中解脱出来,让 CPU 可以专注于更高级的任务(如数据处理、算法、逻辑判断)。
- 工作原理: CPU 只需要初始化 DMA 控制器,告诉它源地址(数据从哪来)、目标地址(数据存到哪里)、数据量、传输方向等参数。然后 CPU 就可以干别的去了。当 DMA 传输完成后(或完成部分数据块后),通常会通过中断通知 CPU。
为什么用 DMA 读取外部 ADC 的数据?
使用外部 ADC 往往是为了获得比芯片内部 ADC 更高速、更高精度或多通道的采样能力。高速采样会产生大量数据流。此时:
- 不用 DMA: CPU 需要不断轮询外部 ADC 的状态或通过中断,读取每一次采样结果(例如,每次 SPI/I²C 通信都由 CPU 驱动和读取数据)。对于高速 ADC,这会使 CPU 陷入繁忙等待或频繁中断,无法有效执行其他任务,系统性能严重下降。
- 用 DMA:
- CPU 只需要配置好 DMA(源地址:外部 ADC 接口的数据寄存器地址;目标地址:内存缓冲区地址;传输量:如 1000 个采样点;触发方式:如 SPI/I²C 传输完成触发)。
- CPU 配置外部 ADC 开始采样(或设置连续采样模式)。
- 启动 DMA 传输。
- CPU 可以立即去执行其他代码(处理之前的数据、运行其他任务等)。
- 外部 ADC 每完成一个采样点的转换并通过其接口(SPI/I²C 等)发送数据时:
- MCU 的外设接口会接收到数据。
- 该接口会自动触发配置好的 DMA 请求。
- DMA 控制器直接将接口接收到的数据寄存器中的值搬移到指定的内存缓冲区(RAM)。全程无需 CPU 干预。
- 当 DMA 搬移完预设数量的数据点(比如 1000 点)后,DMA 控制器可以产生一个传输完成中断(如果配置了)。
- CPU 响应这个中断,此时内存缓冲区中已经有了完整的 1000 个采样点数据等待处理。CPU 可以开始进行滤波、分析、存储或发送等操作。
- CPU 可以重新启动下一次 DMA 传输,开始填充下一个缓冲区(循环/乒乓缓冲常用)。
优点:
- CPU 利用率低: CPU 只在配置和响应完成中断时介入,传输过程中处于空闲状态,可以执行其他代码。
- 高数据率支持: DMA 的传输速度通常由硬件时钟驱动(接近总线速度),能轻松处理高速外部 ADC(如 1Msps 或更高)。
- 实时性好: 数据传输延迟确定,避免因 CPU 处理其他任务导致采样点丢失(在缓冲未满的前提下)。
- 低功耗: CPU 在传输期间可以进入睡眠模式(如果支持且程序允许)。
如何实现(概念性步骤,具体取决于硬件):
- 硬件连接: 将外部 ADC 通过其通信接口正确连接到 MCU/MPU。通常需要连接:
- 电源线(VCC, GND)
- 通信线(SPI: SCK, MOSI, MISO, CS; I²C: SCL, SDA)
- 模拟输入(AINx/VIN)
- 可能需要的时钟、参考电压等。
- 初始化外设:
- 初始化 MCU 上与外部 ADC 通信的接口(如 SPI 或 I²C),设置正确的时钟速度、模式、数据宽度等。
- 配置外部 ADC: 通过接口设置 ADC 的采样速率、增益、参考源、工作模式等。
- 配置 DMA 控制器:
- 选择用于传输的 DMA Channel/Stream。
- 设置 传输方向:
外设到内存。 - 设置 源地址: MCU SPI/I²C 数据接收寄存器的内存地址。
- 设置 目标地址: 内存中缓冲区的地址(如
uint16_t adcBuffer[1000])。 - 设置 数据宽度: 匹配 SPI/I²C 传输的数据大小(如 8bit 或 16bit)。
- 设置 传输数据量: 如缓冲区大小
1000。 - 设置 触发源: 选择 SPI/I²C 的接收完成事件作为触发 DMA 传输的硬件请求源。
- 设置 传输模式: 如
循环模式(Continuous/Circular):当缓冲区满后,从缓冲区开头重新开始传输,实现连续采样;或单次模式(Normal):传输一次后停止。 - 设置 内存地址是否递增: 目标地址(内存缓冲区)通常递增。
- 设置 外设地址是否递增: 源地址(外设寄存器)不递增。
- 配置 中断: 启用 DMA 传输完成中断(可选,或者用轮询状态)。
- 启动:
- 启动 DMA Channel。
- 启动 MCU 的 SPI/I²C 外设接收(通常由 SPI/I²C 的读写操作触发)。
- 触发外部 ADC 开始连续转换(或发送启动转换命令)。
- 数据处理:
- DMA 自动干活: 每次外部 ADC 送来一个数据点,SPI/I²C 接收完成,DMA 被触发,自动将数据点搬到内存缓冲区指定位置。
- 处理完整数据块:
- 使用传输完成中断:DMA 传输完指定数量数据后会中断 CPU,CPU 在中断服务程序 (ISR) 中处理
adcBuffer(复制到安全区、设置标志位、唤醒任务等)。 - 使用循环模式 + 半传输中断 / 指针比较:DMA 持续填缓冲区。CPU 轮询或设置额外的半传输中断来通知缓冲区前半/后半已满,便于处理。
- 使用传输完成中断:DMA 传输完指定数量数据后会中断 CPU,CPU 在中断服务程序 (ISR) 中处理
总结:
DMA 外部 AD 的核心是利用 DMA 控制器将外部 ADC 芯片高速采样产生的数据,通过它们之间的通信接口(如 SPI, I²C),自动传输到系统内存(RAM)中,从而极大程度上减轻 CPU 的负担,提高系统效率、实时性和处理高速数据流的能力。 这是嵌入式系统中处理模拟信号采集(尤其是高速或大量数据)的常见且高效的技术。具体实现需要查阅你所使用的 MCU/MPU 及外部 ADC 的数据手册和应用笔记。
什么是DMA?DMA究竟有多快!
直接内存访问(Direct Memory Access,DMA):在计算机体系结构中,DMA 是一种数据传输方式,允许外部设备直接访问计算机的内
2024-02-22 10:43:56
dma和通道技术的区别
。 DMA是一种通过绕过中央处理器(CPU)来直接访问内存的机制。它允许外部设备(如硬盘驱动器、网卡等)直接与内存进行数据传输,而无需通过CPU的干预。DMA
2024-01-04 14:31:33
EE-84:SHARC处理器的外部端口DMA工作模式
电子发烧友网站提供《EE-84:SHARC处理器的外部端口DMA工作模式.pdf》资料免费下载
资料下载
48674
2025-01-07 14:17:42
利用AXI-DMA批量发送数据到DMA
DMA中断实例化函数,将要配置的DMA信息先lookupConfig再进行CfgInitialize,DMA采用块模式(Block mode),
资料下载
久醉不醒
2021-01-26 09:38:40
使用串口应用DMA中的多帧详细说明
在实际通信应用中,一个突发之后,程序必须为下一个突发作准备。因此一般采用串口的DMA多帧方式但在串口以DMA方式传输数据时却有一些问题要讨论。首先DMA
资料下载
佚名
2019-08-20 16:45:39
求助,DMA是否可以在内存映射模式下访问外部FLASH?
我正在摆弄STM32WB5M 发现套件。该套件包括一个QuadSPI 外部 NOR FLASH 芯片,我需要了解这一点以便做出早期设计选择。 DMA 可以访问
Anton Paar安东帕DMA35N
1970-01-01 08:00:00 至 1970-01-01 08:00:00
如何解决PWM使用的DMA通道与串口接收的DMA通道撞车问题
项目做到一半,碰到个尴尬问题:PWM使用的DMA通道与串口接收的DMA通道撞车了,咋办?考虑一下,决定放弃idle中断+dma的串口不定长数据接
2022-02-16 11:35:02
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览