基于DMA的ADC波形显示(AN706)#
例程相关文件夹:an706_wave
Vivado工程在vivado.zip压缩包中:an706_wave
在SDK裸机例程里我们用DMA将ADC模块AN706的数据采集到ddr中然后显示出波形,在上面的例程用我们也学习了DMA的读写测试,我们再这个读写测试的基础上写了一个ADC驱动,所以请大家在学习本章内容时请熟练掌握前面的例程。
例程资料中给出了vivado工程,petalinux工程,以及波形显示app。
本例程和前面例程非常相似,区别在于只使用一个DMA传输8个通道的ADC数据,在应用层将8个通道的数据分离。
ADC驱动#
ADC驱动是内核drivers/dma/xilinx目录中的axi_adc_dma.c,驱动编写时参考了同目录下的axidmatest.c文件和Xilinx官方例程“xapp1183”。
内核驱动配置#
内核驱动中涉及到drm显示的部分请参考第八章HDMI显示的内核配置,可以在HDMI显示的工程基础上添加下列配置,也可以用BSP包重新生成工程。
和前面的例程一样要配置一些外设的驱动,这里不再复述,主要是配置ADC的驱动,在Device Drivers > DMA Engine support > Xilinx DMA Engines选项中选择<*> ALINX ADC DMA Test client for AXI DMA
设备树配置#
这里是修改了驱动的匹配选项,compatible = “alinx,axi-adc-dma”;用于匹配驱动程序。详细设备树可以参考例程petalinux工程目录下project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi文件
设备树修改技巧,先编译一次,然后到components/plnx_workspace/device-tree/device-tree-generation目录下找到pl.dtsi这里包含了所有PL端外设的设备树信息,最好不要直接修改这个文件,plnx_arm-system.dts是最后生成的文件,也是非常重要的信息,开发者可以自己好好研究一下这些文件。
应用程序#
应用程序采用Vitis编写,Vitis建立Linux应用程序的方法在前面的教程中讲到。
程序没有使用QT,而是直接绘制framebuffer,frame_buffer.c文件为Linux的fb操作。
adc_capture.c为波形采集模块,主要是打开ADC驱动
波形绘制函数完全来自裸机Vitis
运行结果#
资料包中给出了编译好的程序在sd_boot目录,所有文件复制到sd卡根目录运行即可。
给AN706第一通道输入峰峰值为5V,频率1khz的正弦波,波形显示如下。
AX7021硬件连接图(J15扩展口)
AX7020/AX7010硬件连接图(J11扩展口)