登录/注册

dma 外部ad

更多

好的,我们来解释一下 DMA外部 AD(外部 ADC) 的关系以及如何使用 DMA 来读取外部 ADC 的数据。

核心概念:

  1. 外部 AD:
    • 指的是外部模数转换器(External Analog-to-Digital Converter)。通常是指一个位于主控芯片(如单片机 MCU、微处理器 MPU)外部的独立芯片。
    • 功能: 负责将模拟信号(如电压、电流、温度、光照强度等)转换为数字信号(二进制数)。
    • 接口: 外部 ADC 需要通过某种接口与主控芯片通信来传输转换结果,常见的接口有:SPI, I²C, UART,或者特定的并行数据总线接口。
  2. 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 更高速、更高精度或多通道的采样能力。高速采样会产生大量数据流。此时:

优点:

如何实现(概念性步骤,具体取决于硬件):

  1. 硬件连接: 将外部 ADC 通过其通信接口正确连接到 MCU/MPU。通常需要连接:
    • 电源线(VCC, GND)
    • 通信线(SPI: SCK, MOSI, MISO, CS; I²C: SCL, SDA)
    • 模拟输入(AINx/VIN)
    • 可能需要的时钟、参考电压等。
  2. 初始化外设:
    • 初始化 MCU 上与外部 ADC 通信的接口(如 SPI 或 I²C),设置正确的时钟速度、模式、数据宽度等。
    • 配置外部 ADC: 通过接口设置 ADC 的采样速率、增益、参考源、工作模式等。
  3. 配置 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 传输完成中断(可选,或者用轮询状态)。
  4. 启动:
    • 启动 DMA Channel。
    • 启动 MCU 的 SPI/I²C 外设接收(通常由 SPI/I²C 的读写操作触发)。
    • 触发外部 ADC 开始连续转换(或发送启动转换命令)。
  5. 数据处理:
    • DMA 自动干活: 每次外部 ADC 送来一个数据点,SPI/I²C 接收完成,DMA 被触发,自动将数据点搬到内存缓冲区指定位置。
    • 处理完整数据块:
      • 使用传输完成中断:DMA 传输完指定数量数据后会中断 CPU,CPU 在中断服务程序 (ISR) 中处理 adcBuffer(复制到安全区、设置标志位、唤醒任务等)。
      • 使用循环模式 + 半传输中断 / 指针比较:DMA 持续填缓冲区。CPU 轮询或设置额外的半传输中断来通知缓冲区前半/后半已满,便于处理。

总结:

DMA 外部 AD 的核心是利用 DMA 控制器将外部 ADC 芯片高速采样产生的数据,通过它们之间的通信接口(如 SPI, I²C),自动传输到系统内存(RAM)中,从而极大程度上减轻 CPU 的负担,提高系统效率、实时性和处理高速数据流的能力。 这是嵌入式系统中处理模拟信号采集(尤其是高速或大量数据)的常见且高效的技术。具体实现需要查阅你所使用的 MCU/MPU 及外部 ADC 的数据手册和应用笔记。

什么是DMADMA究竟有多快!

直接内存访问(Direct Memory Access,DMA):在计算机体系结构中,DMA 是一种数据传输方式,允许外部设备直接访问计算机的内

2024-02-22 10:43:56

dma和通道技术的区别

。 DMA是一种通过绕过中央处理器(CPU)来直接访问内存的机制。它允许外部设备(如硬盘驱动器、网卡等)直接与内存进行数据传输,而无需通过CPU的干预。DMA

2024-01-04 14:31:33

STM32F103单片机学习笔记(5):DMA

外部中断触发时,DMA向串口发送一次数据。

2023-07-21 15:46:39

EE-84:SHARC处理器的外部端口DMA工作模式

电子发烧友网站提供《EE-84:SHARC处理器的外部端口DMA工作模式.pdf》资料免费下载

资料下载 48674 2025-01-07 14:17:42

多个DMA通道和PCIe接口IP核资料下载

多个DMA通道和PCIe接口IP核资料下载

资料下载 jordenlu 2022-02-08 16:35:13

EE-84:SHARC处理器的外部端口DMA操作模式

EE-84:SHARC处理器的外部端口DMA操作模式

资料下载 佚名 2021-04-20 21:31:45

利用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-SG-E3-UT1

SITE LICENSE DMA ECP3 USER CONF

2023-03-30 12:02:36

DMA-SG-P2-UT1

SITE LICENSE DMA ECP2 USER CONF

2023-03-30 12:02:36

DMA-SG-X2-UT1

SITE LICENSE DMA XP2 USER CONF

2023-03-30 12:02:35

求助,DMA是否可以在内存映射模式下访问外部FLASH?

我正在摆弄STM32WB5M 发现套件。该套件包括一个QuadSPI 外部 NOR FLASH 芯片,我需要了解这一点以便做出早期设计选择。 DMA 可以访问

2023-02-01 08:20:09

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

7天热门专题 换一换
相关标签