ZHCACB4 March   2023 MSPM0G1105 , MSPM0G1106 , MSPM0G1107 , MSPM0G1505 , MSPM0G1506 , MSPM0G1507 , MSPM0G3105 , MSPM0G3106 , MSPM0G3107 , MSPM0G3505 , MSPM0G3506 , MSPM0G3507 , MSPM0L1105 , MSPM0L1106 , MSPM0L1303 , MSPM0L1304 , MSPM0L1305 , MSPM0L1306 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346

 

  1.   1

说明

用于 ADC 的 DMA 乒乓示例演示了如何使用 DMA 在两个不同的缓冲区之间传输 ADC 数据,这也称为 DMA“乒乓”。DMA 乒乓通常用于将数据传输到一个缓冲器,同时 CPU 使用另一个缓冲器。如图 1 所示,蓝色路径显示 DMA 将数据传输到缓冲区 1,CPU 从缓冲区 2 获取数据。当路径切换时,DMA 将数据传输到缓冲区 2,CPU 从缓冲区 1 获取数据。这种技术的好处是整个应用程序的运行时更短,因为 CPU 在任何时候都可以自由地对一部分数据进行操作。在该示例中,ADC 配置为单次转换模式,DMA 和 CPU 将在每次转换后在缓冲区之间切换。下载 DMA 乒乓示例的代码

GUID-20230224-SS0I-W303-SPMF-FSCW7MCNWPLF-low.svg图 1 子系统功能方框图

所需外设

该应用需要集成式 ADC 和 DMA。如果需要不同的基准值,则内部 VREF 是 ADC 基准的附加选项。

表 1
子块功能 外设使用 说明
模拟信号捕获 ADC 在代码中称为 ADC12_0_INST
移动存储器 DMA 要使用 PREIRQ 功能,需要功能齐全的 DMA 通道。该示例可以更改为在没有 PREIRQ 的情况下工作。

兼容器件

根据表 1 中的要求,表 2 中列出了兼容器件。可以使用相应的 EVM 进行快速评估。

表 2
兼容器件 EVM
MSPM0Lx LP-MSPM0L1306
MSPM0Gx LP-MSPM0G3507

设计步骤

  1. 根据给定的模拟输入和设计要求确定 ADC 的配置,包括基准源、基准值、分辨率和采样率。
  2. 生成 2 个数组缓冲区来存储 ADC 数据并将缓冲区大小和 DMA 传输大小设置为相同,以便 DMA 填充整个缓冲区。
  3. 根据步骤 1 中的工程要求在 SysConfig 中配置 ADC。
  4. SysConfig 中,在 ADC 部分中配置 DMA。
  5. 编写应用程序代码以动态更改 DMA 的目标地址,从而在两个缓冲区之间交替。请参阅图 2 以了解概况或直接查看代码。

设计注意事项

  1. 最大采样速度:ADC 的采样速度基于输入信号频率、模拟前端、滤波器或任何其他影响采样的设计参数。
  2. ADC 基准:选择与预期最大输入保持一致的基准,以利用 ADC 的满量程范围。
  3. 点击“Settings”:时钟源决定了转换的总时间。时钟分频器与 SCOMP 设置一起决定总采样时间。SysConfig 根据采样时间设置来设置相应的 SCOMP。

软件流程图

GUID-20230224-SS0I-6MH2-4N6R-NP0HKVKBXDXD-low.svg图 2 应用软件流程图

设计结果

下面是代码执行的结果。图 3 显示了 ADC 读取完成后第一个缓冲区的结果。在这之后,代码会将 DMA 目标交换到第二个缓冲区,CPU 现在可以自由地处理第一个缓冲区。

GUID-20230224-SS0I-FRBP-CS4T-CDB3GLFCSTTW-low.png图 3 DMA 填充的第一个缓冲区

图 4 显示了 ADC 读取完成后第二个缓冲区的结果。代码将 DMA 目标交换回至第一个缓冲区,现在 CPU 可以对第二个缓冲区执行操作。

GUID-20230216-SS0I-NRV9-9B0G-VWRFKXVSCZ3T-low.png图 4 DMA 填充的第二个缓冲区