使用 DAC 和 DMA 的任意波形发生器.pdf
(1.56 MB)
本应用笔记介绍了如何使用直接存储器访问(Direct Memory Access,DMA)和 8 位缓冲数模转换器(Digital-toAnalog Converter,DAC)来实现任意波形发生器(Arbitrary Waveform Generator,AWG)。此应用可生成最长 255个采样的波形,波形使用 RAM 中的查找表(Look-up Table,LUT)来创建,数据来自于加载到 SD 卡上的用户生成文件。从 SD 卡读取波形后,AWG 将独立于内核运行,无需额外的 CPU 干预。波形的生成方法如下:使用 DMA 以定时器决定的间隔将来自 RAM 中 LUT 的值自动加载到 DAC 输出寄存器中。
波形生成
任意波形发生器是能够生成模拟波形的系统,可提供任意波形。这种发生器通常用作测试设备,用于测试电路对特定输入的响应。通过连续调整数模转换器(DAC)的输出,可生成由一组离散步阶构成的模拟信号,进而生成波形。这些值可通过编程方式实时生成,也可以从查询表中加载。任意波形发生器的限制在于输入电压范围、用于生成信号的 DAC 的特性以及将数据馈送到 DAC 的器件的性能特性。所生成波形的质量与所用 DAC 模块的采样率和分辨率直接相关。
DMA直接存储器访问(DMA)是一个无需 CPU 干预即可在不同存储区(包括寄存器存储器)之间传输数据的子系统。与不使用 DMA 传输数据相比,此功能允许以较低的 CPU 开销在外设之间传输数据。如果应用要求传输数据的速率必须接近器件时钟的频率(例如此任意波形发生器应用),则使用 DMA 会有很好的效果。DMA 模块由 DMA 控制器和多个接口通道组成,允许在器件存储区之间进行数据传输。系统仲裁器用于为不同的系统事件分配优先级,并且可用于为 DMA 提供比主代码执行甚至是 ISR 执行更高的优先级。DMA 子系统基于独立的数据和地址总线运行,能够在不影响 CPU 运行的情况下传输数据(前提是通过系统仲裁器使 DMA 的优先级低于 CPU)。可以将传输过程配置为由各种系统事件触发。例如,可以将 DMA 配置为在触发 UART 接收中断时将 UART 接收到的消息自动传输给用户定义的存储缓冲区。每个 DMA 通道都有其自己的可配置优先级,可以使用系统仲裁器设置该优先级。默认情况下,DMA 的优先级低于CPU 的最低优先级,并且由于双周期指令(例如 GOTO),DMA 将仅在 CPU 执行期间出现的间隙内执行。DMA 可配置为在触发时暂停 CPU 执行,甚至暂停中断执行,具体取决于使用系统仲裁器设置的优先级。
|