zynq 的内嵌了 XADC,可以用来采集电压;

Temp:芯片温度
VCCINT: 内部PL核心电压
VCCAUX: 辅助PL电压
VCCBram: PL BRAM电压
VCCPInt: PS内部核心电压
VCCPAux: PS辅助电压
VCCDDR: DDR RAM的工作电压
VREFP: XADC正参考电压
VREFN: XADC负参考电压

1、新建工程,添加block design。添加zynq7 processor和xadc模块。

2、Run Block Automation后会自动配置zynq7处理器;Run Connection Automation 会自动将模块进行连接,将xadc模块挂载在axi总线下,这样xadc的相关寄存器会映射到处理器的内存(DDR)上。自动添加的两个模块,一个用于管理全局复位,一个用于同步axi总线。

点击 自动重新对整个block design布局。

3、保存并生成顶层头文件。

4、生成比特流文件,等会儿就生成好了。

5、导出比特流,打开sdk。sdk下新建工程,输入如下代码:

/** main.c**  Created on: 2017年7月16日*      Author: XHB*/#include <stdio.h>
#include "xparameters.h"
#include "xadcps.h"
#include "xil_types.h"
#include "xadcps_hw.h"
#include "sleep.h"int main()
{static XAdcPs Adc_Struct;XAdcPs_Config *Adc_Config;int xStatus;//temperature readingsu32 TempRawData;float TempData;//Vcc Int readingsu32 VccIntRawData;float VccIntData;//Vcc Aux readingsu32 VccAuxRawData;float VccAuxData;//Vbram readingsu32 VBramRawData;float VBramData;//VccPInt readingsu32 VccPIntRawData;float VccPIntData;//VccPAux readingsu32 VccPAuxRawData;float VccPAuxData;//Vddr readingsu32 VDDRRawData;float VDDRData;Adc_Config = XAdcPs_LookupConfig(XPAR_PS7_XADC_0_DEVICE_ID);if(Adc_Config == NULL){print("error to look up config!!!\n");return XST_FAILURE;}xStatus = XAdcPs_CfgInitialize(&Adc_Struct, Adc_Config, Adc_Config->BaseAddress);if(xStatus != XST_SUCCESS){print("error to initialize!!!\n");return XST_FAILURE;}xStatus = XAdcPs_SelfTest(&Adc_Struct);if(xStatus != XST_SUCCESS){print("error to Self Test!!!\n");return XST_FAILURE;}//设置采样模式XAdcPs_SetSequencerMode(&Adc_Struct, XADCPS_SEQ_MODE_SINGCHAN);//设置报警使能,直接关闭掉XAdcPs_SetAlarmEnables(&Adc_Struct, 0x0);//设置使能采样通道XAdcPs_SetSeqChEnables(&Adc_Struct, XADCPS_CH_TEMP|XADCPS_CH_VCCINT|XADCPS_CH_VCCAUX|XADCPS_CH_VBRAM|XADCPS_CH_VCCPINT| XADCPS_CH_VCCPAUX|XADCPS_CH_VCCPDRO);while(1){TempRawData = XAdcPs_GetAdcData(&Adc_Struct, XADCPS_CH_TEMP);TempData = XAdcPs_RawToTemperature(TempRawData);printf("Raw Temp %lu Real Temp %f \n", TempRawData, TempData);VccIntRawData= XAdcPs_GetAdcData(&Adc_Struct, XADCPS_CH_VCCINT);VccIntData = XAdcPs_RawToVoltage(VccIntRawData);printf("Raw VccInt %lu Real VccInt %f \n", VccIntRawData,VccIntData);VccAuxRawData = XAdcPs_GetAdcData(&Adc_Struct, XADCPS_CH_VCCAUX);VccAuxData = XAdcPs_RawToVoltage(VccAuxRawData);printf("Raw VccAux %lu Real VccAux %f \n", VccAuxRawData,VccAuxData);VBramRawData = XAdcPs_GetAdcData(&Adc_Struct, XADCPS_CH_VBRAM);VBramData = XAdcPs_RawToVoltage(VBramRawData);printf("Raw VccBram %lu Real VccBram %f \n", VBramRawData, VBramData);VccPIntRawData = XAdcPs_GetAdcData(&Adc_Struct, XADCPS_CH_VCCPINT);VccPIntData = XAdcPs_RawToVoltage(VccPIntRawData);printf("Raw VccPInt %lu Real VccPInt %f \n", VccPIntRawData, VccPIntData);VccPAuxRawData = XAdcPs_GetAdcData(&Adc_Struct, XADCPS_CH_VCCPAUX);VccPAuxData = XAdcPs_RawToVoltage(VccPAuxRawData);printf("Raw VccPAux %lu Real VccPAux %f \n", VccPAuxRawData, VccPAuxData);VDDRRawData = XAdcPs_GetAdcData(&Adc_Struct, XADCPS_CH_VCCPDRO);VDDRData = XAdcPs_RawToVoltage(VDDRRawData);printf("Raw VccDDR %lu Real VccDDR %f \n", VDDRRawData, VDDRData);sleep(1);}return 0;
}

头文件:

#include "xparameters.h"//定义了相关的硬件设备的参数,如设备ID、基地址等
#include "xadcps.h"//定义了与操作xadc相关的库函数和结构体

结构体:
XAdcPs_Config结构体:存放与XADC/ADC有关的初始化信息。

typedef struct {u16  DeviceId;      /**< Unique ID of device */u32  BaseAddress;   /**< Device base address */
} XAdcPs_Config;

XAdcPs结构体:库函数在对ADC操作时所使用的结构体。

typedef struct {XAdcPs_Config Config;   /**< XAdcPs_Config of current device */u32  IsReady;       /**< Device is initialized and ready  */} XAdcPs;

库函数:
a、通过设备ID号,返回定义有相关信息的XAdcPs_Config结构体;

XAdcPs_Config *XAdcPs_LookupConfig(u16 DeviceId)

b、初始化ADC;

int XAdcPs_CfgInitialize(XAdcPs *InstancePtr, XAdcPs_Config *ConfigPtr,u32 EffectiveAddr)

c、自测,就是字面意思;

int XAdcPs_SelfTest(XAdcPs *InstancePtr)

d、设置采样模式;

void XAdcPs_SetSequencerMode(XAdcPs *InstancePtr, u8 SequencerMode)

采样模式有以下几种:

- Default safe mode (XADCPS_SEQ_MODE_SAFE)
- One pass through sequence (XADCPS_SEQ_MODE_ONEPASS)
- Continuous channel sequencing (XADCPS_SEQ_MODE_CONTINPASS)
- Single Channel/Sequencer off (XADCPS_SEQ_MODE_SINGCHAN)
- Simulataneous sampling mode (XADCPS_SEQ_MODE_SIMUL_SAMPLING)
- Independent mode (XADCPS_SEQ_MODE_INDEPENDENT)

e、设置报警模式,关掉就行了;

void XAdcPs_SetAlarmEnables(XAdcPs *InstancePtr, u16 AlmEnableMask)

掩码AlmEnableMask填0,屏蔽掉了所有位。

f、使能采样通道。

int XAdcPs_SetSeqChEnables(XAdcPs *InstancePtr, u32 ChEnableMask)

通道如下:

#define XADCPS_CH_TEMP      0x0  /**< On Chip Temperature */
#define XADCPS_CH_VCCINT    0x1  /**< VCCINT */
#define XADCPS_CH_VCCAUX    0x2  /**< VCCAUX */
#define XADCPS_CH_VPVN      0x3  /**< VP/VN Dedicated analog inputs */
#define XADCPS_CH_VREFP     0x4  /**< VREFP */
#define XADCPS_CH_VREFN     0x5  /**< VREFN */
#define XADCPS_CH_VBRAM     0x6  /**< On-chip VBRAM Data Reg, 7 series */
#define XADCPS_CH_SUPPLY_CALIB  0x07 /**< Supply Calib Data Reg */
#define XADCPS_CH_ADC_CALIB 0x08 /**< ADC Offset Channel Reg */
#define XADCPS_CH_GAINERR_CALIB 0x09 /**< Gain Error Channel Reg  */
#define XADCPS_CH_VCCPINT   0x0D /**< On-chip PS VCCPINT Channel , Zynq */
#define XADCPS_CH_VCCPAUX   0x0E /**< On-chip PS VCCPAUX Channel , Zynq */
#define XADCPS_CH_VCCPDRO   0x0F /**< On-chip PS VCCPDRO Channel , Zynq */
#define XADCPS_CH_AUX_MIN    16 /**< Channel number for 1st Aux Channel */
#define XADCPS_CH_AUX_MAX    31 /**< Channel number for Last Aux channel */

6、先下载比特流文件配置硬件,后在sdk中run程序。
运行结果:

Zedboard学习(六):XADC读取数据相关推荐

  1. 【深度学习】高效读取数据的方法(TFRecord)

    Record顾名思义主要是为了记录数据的. 使用TFRocord存储数据的好处: 为了更加方便的建图,原来使用placeholder的话,还要每次feed_dict一下,使用TFRecord+ Dat ...

  2. python如何读取tfrecord_tensorflow学习笔记——高效读取数据的方法(TFRecord)

    关于TensorFlow读取数据,官网给出了三种方法: 供给数据(Feeding):在TensorFlow程序运行的每一步,让python代码来供给数据. 从文件读取数据:在TensorFlow图的起 ...

  3. 使用Spark Streaming从kafka中读取数据把数据写入到mysql 实例

    文章目录 一. 题目 题目和数据 二. pom依赖 三.建表语句 四. 连接kafka配置类 五. 自定义分区类 六. 读取数据并发送数据 七. 消费数据,把数据存储到mysql 一. 题目 题目和数 ...

  4. 第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL

    第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL 文章目录 第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL 第一节 Fink SQL快速上手 1. ...

  5. R语言小白学习笔记3—R语言读取数据

    R语言小白学习笔记3-R语言读取数据 笔记链接 想说的话 学习笔记3-R语言读取数据 3.1 读取CSV文件 3.1.1 read_delim函数 3.1.2 fread函数 3.2 读取Excel数 ...

  6. pandas 按字符串肚脐眼 读取数据_十分钟学习pandas! pandas常用操作总结!

    学习Python, 当然少不了pandas,pandas是python数据科学中的必备工具,熟练使用pandas是从sql boy/girl 跨越到一名优秀的数据分析师傅的必备技能. 这篇pandas ...

  7. 【python量化交易学习】从tushare获取股票交易数据,存入后再从mysql或excel读取数据,筛选股票,用pyecharts画出K线图。

    选定日期,筛选涨幅达到10%的股票,并画出K线图.观察涨停后股票走势. 由于创业板涨停板为20%,科创板20%,北交所30%.因此筛选出的涨停股票不完全准确.考虑到目前市场打板主要集中在10%的主板股 ...

  8. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第六章:数据存储

    第 6 章 数据存储 本章介绍Android 4种存储方式的用法,包括共享参数SharedPreferences.数据库SQLite.存储卡文 件.App的全局内存,另外介绍Android重要组件-应 ...

  9. 安卓学习专栏——从文件中读取数据、openFileInput(图文+代码)

    步骤 系列文章 前言 1.实现效果 1.1启动时初始化填写读取的数据,或是点击读取显示数据 1.2保存新数据 1.3点击读取按钮读取数据 1.4重启查看效果 2.xml外观文件 3.java功能文件 ...

最新文章

  1. UI设计培训分享:平面广告设计中的文案表达技巧
  2. 常用免费精品Web应用列表(转)
  3. 好消息,Blackberry开发文档发布。
  4. Python TimedRotatingFileHandler 多进程环境下的问题和解决方法
  5. 吴恩达 coursera AI 第一课总结+作业答案
  6. iOS 修改项目名称
  7. AT2567-[ARC074C]RGB Sequence【dp】
  8. Python设置Tkinter窗口屏幕居中
  9. IMCASH:2019年区块链不会风平浪静,至少还有10件事值得期待
  10. java pingfang,PingFang sc字体的使用
  11. SpringBean生命周期详解
  12. Excel 日期时间格式讲解
  13. XGboost 出现UserWarning: Use subset (sliced data) of np.ndarray is not recommended
  14. edge打开pdf不显示印章_一旦碰到Edge浏览器打不开pdf文件,只需这样做就可完美解决!...
  15. 算法分析与设计第五章作业
  16. 全局vue中修改字体样式 苹方字体 微软雅黑 亲测可用
  17. 新浪cn邮箱设置收件和发件服务器信息,新浪cn邮箱如何设置
  18. 《A Survey on Transfer Learning》迁移学习研究综述 翻译
  19. 生活就是这样充满一些小插曲的2020.11.21日记
  20. pv vg lv 裸盘 裸设备 文件系统

热门文章

  1. 服务器运行环境怎么搭建,服务器运行环境怎么快速搭建?
  2. linux网络编程IPv6socket,简单的IPv6 UDP/TCP socket编程 -- 两台Linux实现简单的ipv6通信...
  3. openCV中的findHomography函数分析以及RANSAC算法的详解(源代码分析)
  4. CString截取字符串全攻略
  5. 今天开始学模式识别与机器学习Pattern Recognition and Machine Learning (PRML)书,章节1.2,Probability Theory (上)
  6. Java内部类(Inner Class)小记
  7. 深度学习概述:从感知机到深度网络
  8. 随机重命名MP3文件
  9. Zabbix中文乱码问题
  10. Unity3d XmlException: Text node cannot appear in this state的方案