MiZ702学习笔记9——XADC采集片上数据PS版

这次借助zynq的内嵌的XADC来采集zynq内部的一些参数:

•VCCINT:内部PL核心电压

•VCCAUX:辅助PL电压

•VREFP:XADC正参考电压

•VREFN:XADC负参考电压

•VCCBram:PL BRAM电压

•VCCPInt:PS内部核心电压

•VCCPAux:PS辅助电压

•VCCDdr:DDR RAM的工作电压

这次这个程序的开发流程和之前讲的别无二致,希望大家能够完全的熟悉这个流程~~

还是和往常一样,新建一个Block Design,并且向其中添加zynq核以及XADC IP。

对XADC核进行设置

依次执行这两项:

执行之后如下图所示:

依次执行Generate Output Products 和 Create HDL Wrapper

最后编译,直到生成bit文件。

导出硬件,并通过vivado打开SDK。

进入SDK,如何新建工程,就不再次啰嗦了,请参考之前的章节。新建main.c之后为其添加代码如下~~(这段代码是参考国外的一个大神Adam写的,向大神致敬~~)

#include <stdio.h>
//#include "platform.h"
#include "xadcps.h"
#include "xil_types.h"
#define XPAR_AXI_XADC_0_DEVICE_ID 0

//void print(char *str);

static XAdcPs XADCMonInst;

int main()
{

  XAdcPs_Config *ConfigPtr;
  XAdcPs *XADCInstPtr = &XADCMonInst;

  //status of initialisation
  int Status_ADC;

  //temperature readings
  u32 TempRawData;
  float TempData;

  //Vcc Int readings
  u32 VccIntRawData;
  float VccIntData;

  //Vcc Aux readings
  u32 VccAuxRawData;
  float VccAuxData;

  //Vbram readings
  u32 VBramRawData;
  float VBramData;

  //VccPInt readings
  u32 VccPIntRawData;
  float VccPIntData;

  //VccPAux readings
  u32 VccPAuxRawData;
  float VccPAuxData;

  //Vddr readings
  u32 VDDRRawData;
  float VDDRData;

 // init_platform();

    //printf("Adam Edition MicroZed Using Vivado How To Printf \n\r");
    printf("新年快乐~~!!!2015-12-31 \n\r");
    //XADC initilization

     ConfigPtr = XAdcPs_LookupConfig(XPAR_AXI_XADC_0_DEVICE_ID);
       if (ConfigPtr == NULL) {
           return XST_FAILURE;
         }

       Status_ADC = XAdcPs_CfgInitialize(XADCInstPtr,ConfigPtr,ConfigPtr->BaseAddress);
       if(XST_SUCCESS != Status_ADC){
           print("ADC INIT FAILED\n\r");
           return XST_FAILURE;
        }

       //self test
       Status_ADC = XAdcPs_SelfTest(XADCInstPtr);
     if (Status_ADC != XST_SUCCESS) {
       return XST_FAILURE;
     }

        //stop sequencer
        XAdcPs_SetSequencerMode(XADCInstPtr,XADCPS_SEQ_MODE_SINGCHAN);

        //disable alarms
        XAdcPs_SetAlarmEnables(XADCInstPtr, 0x0);

        //configure sequencer to just sample internal on chip parameters
        XAdcPs_SetSeqInputMode(XADCInstPtr, XADCPS_SEQ_MODE_SAFE);

        //configure the channel enables we want to monitor

        XAdcPs_SetSeqChEnables(XADCInstPtr,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(XADCInstPtr, XADCPS_CH_TEMP);
            TempData = XAdcPs_RawToTemperature(TempRawData);
            printf("Raw Temp %lu Real Temp %f \n\r", TempRawData, TempData);

            VccIntRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCINT);
            VccIntData = XAdcPs_RawToVoltage(VccIntRawData);
            printf("Raw VccInt %lu Real VccInt %f \n\r", VccIntRawData,VccIntData);

            VccAuxRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCAUX);
            VccAuxData = XAdcPs_RawToVoltage(VccAuxRawData);
            printf("Raw VccAux %lu Real VccAux %f \n\r", VccAuxRawData,VccAuxData);

            VBramRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VBRAM);
            VBramData = XAdcPs_RawToVoltage(VBramRawData);
            printf("Raw VccBram %lu Real VccBram %f \n\r", VBramRawData, VBramData);

            VccPIntRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCPINT);
            VccPIntData = XAdcPs_RawToVoltage(VccPIntRawData);
            printf("Raw VccPInt %lu Real VccPInt %f \n\r", VccPIntRawData, VccPIntData);

            VccPAuxRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCPAUX);
            VccPAuxData = XAdcPs_RawToVoltage(VccPAuxRawData);
            printf("Raw VccPAux %lu Real VccPAux %f \n\r", VccPAuxRawData, VccPAuxData);

            VDDRRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_VCCPDRO);
            VDDRData = XAdcPs_RawToVoltage(VDDRRawData);
            printf("Raw VccDDR %lu Real VccDDR %f \n\r", VDDRRawData, VDDRData);
         }

        return 0;
}

1.  Use the "XAdcPs_SelfTest()"   这个自检就不用说了

2.  Use "XAdcPs_SetSequencerMode()"  这个是设置采样模式。

3.  Use "XAdcPs_SetAlarmEnables()"   这个是设置采样值报警的,直接关闭,不需要报警

4.  Use "XAdcPs_SetSeqInputMode()"   这个是设置输入模式的

5.  Use "XAdcPs_SetSeqChEnables()    这个是使能采样通道的

编译之后,记得先下载bit文件~~连上串口,然后就可以执行程序了:

于是乎,通过打开串口调试助手,便能看见打印出如下信息~~

新年新气象~~从这篇文章开始,vivado升级到2015.2版本~~如果你需要下载,网盘地址如下~~

vivado 2015.2 http://yunpan.cn/c3I7aVCGVneEh  访问密码 7d64

时间: 2024-10-27 08:11:00

MiZ702学习笔记9——XADC采集片上数据PS版的相关文章

MiZ702学习笔记13——ZYNQ通过AXI-Lite与PL交互

在<MiZ702学习笔记7——尝试自制带总线IP>,我曾提到了AXI4-Lite的简单用法,驱动了下流水灯,只涉及到了写总线.今天,我想利用之前的VGA模块,将AXI4-Lite的读写都应用上.这篇文章主要是思想的介绍,以及AXI4-Lite读的方法.一些细节请先阅读<MiZ702学习笔记7——尝试自制带总线IP>. 具体思路为如下框图所示: 所以这次,我们需要两条AXI4-Lite总线,一条负责给VGA模块提供RGB数据(写),一条读取VGA模块提供的扫描的坐标信息(读). 点击

linux学习笔记--服务器突然连不上。 要从哪些方面排查?

1.判断是不是大面积服务器问题.如果是就是机房问题. 2.如果只有这一台连不上,就ping下 如果不通的话.通过远程控制卡连到终端看屏幕提示.或者让机房人员接显示器 查看屏幕提示,如果能登陆就登陆进去看看 IP网卡情况. 3.根据预先灾备计划,如果长时间修复不了,可启动备机接管. 最重要的是: 不要拼死调节,业务持续服务更重要. linux学习笔记--服务器突然连不上. 要从哪些方面排查?,布布扣,bubuko.com

MiZ702学习笔记12&mdash;&mdash;封装一个普通的VGA IP

还记得<MiZ702学习笔记(番外篇)--纯PL VGA驱动>这篇文章中,用verilog写了一个VGA驱动.我们今天要介绍的就是将这个工程打包成一个普通的IP,目的是为后面的一篇文章做个铺垫. 打包成一个普通的IP的目的,可以直接将这个IP粘贴到Block文件中.(和用文本实例化是一个意思).应为我们调用zynq的核的时候一般是用Block的形式,为了zynq和我们的VGA模块更方便的组织起来,就需要这种IP打包方式. 为什么是强调是普通的IP,这个主意是区分带AXI接口的IP,这个在后面介

Android学习笔记进阶之在图片上涂鸦(能清屏)

Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java [java] view plaincopy package xiaosi.handWriting; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import andro

Wireshark学习笔记——如何快速抓取HTTP数据包

0.前言 在火狐浏览器和谷歌浏览器中可以非常方便的调试network(抓取HTTP数据包),但是在360系列浏览器(兼容模式或IE标准模式)中抓取HTTP数据包就不那么那么方便了.虽然也可使用HttpAnalyzer等工,但是毕竟都是收费软件.只需通过合适的过滤和操作,Wireshark也可抓取HTTP请求和响应.下面便说明具体操作. 假设在8080端口运行一个HTTP服务器,本例中使用Python Flask运行一个HTTP服务并侦听8080端口,实现一个简单的加法运算,网页中通过ajax提交

Citrix XenMobile学习笔记之六:XenMoble业务访问数据流程

总体访问流程图 终端设备注册流程 Android设备注册流程 到google Play或亚马逊应用商店或者豌豆荚.Citrix官网,下载思杰Worx Home应用.并在设备上安装. 当系统提示您安装该应用程序,单击下一步,然后单击安装. 安装Worx Home之后,点击启动. 输入您的认证信息,如设备管理器服务器名,用户主体名称(UPN),或电子邮件地址的名称,然后单击下一步. 在激活设备管理员屏幕上,点击激活. 输入您的账户密码,然后点击点登录. 根据XenMobile的配置方式,您可能会被要

APUE学习笔记:第六章 系统数据文件和信息

6.1 引言 UNIX系统的正常运行需要使用大量与系统有关的数据文件,针对这些数据文件的可移植接口是本章的主题.本章还介绍了系统标识函数.时间和日期函数 6.2 口令文件 UNIX系统的口令文件包含了下列各字段,这些字段包含在<pwd.h>中定义的passwd结构中 用户名 char *pw_name 加密口令 char *pw_passwd 数值用户ID uid_t pw_uid 数值组ID gid_t pw_gid 注释字段 char *pw_gecos 初始工作目录 char *pw_d

学习笔记:Oracle dul数据挖掘 导出Oracle11G数据文件坏块中表中

试验模拟导出Oracle 11G数据库中数据文件坏块中表中的数据 以前一直以为dul对应的版本只能恢复最高的数据库版本一致,今天测试发现dul 10可以恢复11g最新版的数据库.模拟环境 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition

C++学习笔记17,构造函数体内初始化数据成员与构造函数初始化器的区别(一)

在构造体内初始化数据成员是最常见的方法. 例如: #include <iostream> using namespace std; class A { private: int i; string s; public: A(int ii,string ss){ //在构造函数体内初始化数据成员 i=ii; s=ss; cout<<"ctor:i="<<i<<",s="<<s<<endl; } /