当前位置:   article > 正文

ZYNQ XADC外部模拟输入测试_zynq vaux

zynq vaux

ZYNQ XADC外部模拟输入测试

简介

ZYNQ7000 SoC 的 XADC 模块除了可以测试片内温度以及片内电压以外,通过 XADC 内部的模拟多路复用器,它还支持最多 17 路外部模拟输入信号的测量,且支持单极、双极和差分等信号类型。
 XADC系统框图
从上图可以看出运行在PS上的软件可以通过两种方式与XADC模块通讯。

  1. 通过PS-XADC接口:PS互联总线的一个32位的APB从接口。
  2. 通过AXI XADC Core Logic访问,需要在vivado工程中添加。

本文测试使用的是第二种方式。
测试板原理图
根据测试板原理图印出来的引脚,本测试将测试XADC_VP/VN、XADC_VAUX0、XADC_VAUX8三路差分模拟输入信号。

Vivado工程创建

工程创建可参考网络教程或者正点原子相关教程,本文只讲述XADC相关的配置
在这里插入图片描述
在这里插入图片描述
双击XADC Wizard根据需求配置XADC Wizard,如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置自动连线
在这里插入图片描述
点击Run Block Automation
在这里插入图片描述
完成后如下图
在这里插入图片描述
引出Vp_Vn、Vaux0、Vaux8引脚如下图:
在这里插入图片描述
在这里插入图片描述
完成后完整的设计如下图所示
在这里插入图片描述
生成顶层 HDL并创建HDL Wrapper
在这里插入图片描述
在左侧 Flow Navigator 导航栏中找到 RTL ANALYSIS,点击该选项中的“Open Elaborated Design”。然后在菜单栏中点击 Layout,在下拉列表中选择 I/O Planning 以打开 I/O Ports 窗口。我们将在 I/O Ports 窗口中对 XADC 引出的接口 VP_VN、VAUX0、VAUX8 进行管脚分配,如下图所示:
在这里插入图片描述
或者直接添加xdc约束文件:

set_property PACKAGE_PIN L14 [get_ports Vaux0_v_n]
set_property PACKAGE_PIN L15 [get_ports Vaux0_v_p]
set_property PACKAGE_PIN H13 [get_ports Vaux8_v_n]
set_property PACKAGE_PIN J13 [get_ports Vaux8_v_p]
set_property IOSTANDARD LVCMOS33 [get_ports Vp_Vn_v_n]
set_property IOSTANDARD LVCMOS33 [get_ports Vp_Vn_v_p]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最后在左侧 Flow Navigator 导航栏中找到 PROGRAM AND DEBUG,点击该选项中的“Generate Bitstream”,对设计进行综合、实现、并生成 Bitstream 文件。
在生成 Bitstream 之后,在菜单栏中选择 File > Export > Export hardware 导出硬件,并在弹出的对话框中,勾选“Include bitstream”。然后在菜单栏选择 File > Launch SDK,启动 SDK 软件。

创建SDK工程

创建一个Hello_world的工程后,替换helloworld.c中的内容为下面的代码。

#include "xsysmon.h"
#include "xparameters.h"
#include "xstatus.h"
#include "xil_exception.h"
#include "xil_printf.h"
#include "sleep.h"

#define VPVN
#define C_BASEADDR 0x43C00000			//Vivado AXI总线的地址

int main()
{
	u16 Vpvn,Vaux0,Vaux8;

	//采集通道选择,参考ug480以及pg091文档,0x300寄存器对应ug480中的0x40寄存器
#ifdef VPVN
	Xil_Out32(C_BASEADDR +  0x300 , 0x9103); //40 //0x9103:VPVN 0x9110:Vaux0 0x9118:Vaux8
#elif defined VAUX0
	Xil_Out32(C_BASEADDR +  0x300 , 0x9110);
#elif defined VAUX8
	Xil_Out32(C_BASEADDR +  0x300 , 0x9118);
#endif

	Xil_Out32(C_BASEADDR +  0x304 , 0x3F0F);//41
	Xil_Out32(C_BASEADDR +  0x308 , 0x0400);//42

#ifdef VPVN
	Xil_Out32(C_BASEADDR +  0x320 , 0x800); //48 //vpvn
#elif defined VAUX0
	Xil_Out32(C_BASEADDR +  0x324 , 0x01); //49 //Vaux0
#elif defined VAUX8
	Xil_Out32(C_BASEADDR +  0x324 , 0x100); //49 //Vaux8
#endif

	while(1)
	{
#ifdef VPVN
		Vpvn = Xil_In32(C_BASEADDR +  0x20C); //Vp Vn
		Vpvn = Vpvn >> 4;
		Vpvn = Vpvn*0.244;
		xil_printf("Vpvn = %03dmv\n\r",Vpvn);
#elif defined VAUX0
		Vaux0 = Xil_In32(C_BASEADDR +  0x240);//Vaux0
		Vaux0 = Vaux0 >> 4;
		Vaux0 = Vaux0*0.244;
		xil_printf("Vaux0 = %03dmv\n\r",Vaux0);
#elif defined VAUX8
		Vaux8 = Xil_In32(C_BASEADDR +  0x260);//Vaux8
		Vaux8 = Vaux8 >> 4;
		Vaux8 = Vaux8*0.244;
		xil_printf("Vaux8 = %03dmv\n\r",Vaux8);
#endif
		sleep(2);
	}

	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

代码中C_BASEADDR的地址为VIVADO工程中添加AXI总线的基地址,如下图,此处不用修改,保持默认就可以。
在这里插入图片描述
编译工程并调试,由于包含了PL端的配置所以需要在debug选项的时候勾选program fpga,如下图
在这里插入图片描述
接入模拟输入源至对应的管脚,通过log可以看到采集到的电压,我使用的是正点原子开发板提供的xadc测试模块,可以通过旋转旋钮改变电阻的方式,从而使模拟电压输入产生变化,调试log如下图
在这里插入图片描述

文档参考

1:领航者ZYNQ之嵌入式SDK开发指南_V2.0.pdf
2:ug585-zynq-7000-TRM.pdf
3:ug480_7Series_XADC.pdf
4:pg091-xadc-wiz.pdf

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/899010
推荐阅读
相关标签
  

闽ICP备14008679号