9.0难度系数★☆☆☆☆☆☆

9.1实验概述

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

•VCCINT:内部PL核心电压

•VCCAUX:辅助PL电压

•VREFP:XADC正参考电压

•VREFN:XADC负参考电压

•VCCBram:PL BRAM电压

•VCCPInt:PS内部核心电压

•VCCPAux:PS辅助电压

•VCCDdr:DDR RAM的工作电压

9.2 新建一个VIVADO工程

Step1:新建一个名为为Miz701_sys的工程

Step2:选择RTL Project 勾选Do not specify source at this time

Step3:选择xc7z010clg400-1作为开发器件。

Step4:单击Finish

Step5:新建一个Block Design,并且向其中添加zynq核。

Step6:添加进来了zynq核,双击对其进行设置。

Step7: 修改时钟输入为50MHZ,修改PL端时钟频率FCLK_CLK0 为100MHZ.

Step8:修改MIO的配置, UART1接口,之后单机OK.

Step9:修改内存型号为MT41K256M16RE-125 M,单击OK完成修改。

Step10: 单击Run Block Automation 进行自动连线,VIVADO软件会根据信号的命名规则智能连线。

Step11: 勾选如下,直接单机OK.

Step12: 在你点击了OK后,你会发现DDR以及FICED_IO自动的延伸出来,然后把时钟FCLK_CLK0和M_AXI_GPI0_ACLK连接。方法:当把鼠标靠近的时候会自动连接。

Step13:添加XADC IP核。

Step14:双击对XADC核进行设置

Step15:执行Run connection Automation。

Step16:执行之后如下图所示

Step17:依次执行Generate Output Products 和 Create HDL Wrapper

9.3 产生bit文件

此时可以,开始生成bit文件了(这个过程会弹出保存对话框单击保存,然后弹出Implementation对话框单击OK,重新编译一次):

9.4 导出硬件和bit文件

编译成功之后,依然是导出硬件:

9.5 加载到SDK

9.5 .1编写代码

进入SDK,如何新建工程,就不再次啰嗦了,请参考之前的章节。新建main.c之后为其添加代码如下。

#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);

VccIntRawDat= 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;

}

9.5 .2函数介绍

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

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

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

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

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

9.5 .3测试结果

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

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

9.6 本章小结

本章讲解了如果采集片上电压以及温度的方法,这个实验在实际工程运用中可以通过测试自生的电压和稳定判断系统是否可以正常工作,是否要做出一些报警之类的行动。

淘宝店铺:https://osrc.taobao.com

官网论坛:www.osrc.cn

源码链接:http://pan.baidu.com/s/1pLaWlHh 密码:ny0k

第九章 ZYNQ-MIZ701 片上ADC的使用的更多相关文章

  1. DirectX12 3D 游戏开发与实战第九章内容(上)

    仅供个人学习使用,请勿转载. 9.纹理贴图 学习目标: 学习如何将局部纹理映射到网格三角形上 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次纹理贴图 ...

  2. 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...

  3. 第九章:四大组件之Broadcast Receiver

    第九章:四大组件之Broadcast Receiver   一.广播的功能和特征 广播的生命周期很短,经过调用对象-->实现onReceive-->结束,整个过程就结束了.从实现的复杂度和 ...

  4. [Effective Java]第九章 异常

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. 第九章 C语言在嵌入式中的应用

    上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...

  6. Laxcus大数据管理系统2.0(11)- 第九章 容错

    第九章 容错 在当前,由于集群庞大的组织体系和复杂性,以及用户普遍要求低成本硬件,使得集群在运行过程中发生的错误概率,远远高于单一且性能稳定的小型机服务器,并且集群在运行过程中几乎是不允许停止的,这就 ...

  7. Android群英传》读书笔记 (4) 第八章 Activity和Activity调用栈分析 + 第九章 系统信息与安全机制 + 第十章 性能优化

    第八章 Activity和Activity调用栈分析 1.Activity生命周期理解生命周期就是两张图:第一张图是回字型的生命周期图第二张图是金字塔型的生命周期图 注意点(1)从stopped状态重 ...

  8. [转]Windows Shell 编程 第九章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987969】

    第九章 图标与Windows任务条 如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标.无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去 ...

  9. perl5 第九章 关联数组/哈希表

    第九章 关联数组/哈希表 by flamephoenix 一.数组变量的限制二.定义三.访问关联数组的元素四.增加元素五.创建关联数组六.从数组变量复制到关联数组七.元素的增删八.列出数组的索引和值九 ...

  10. Knockout应用开发指南 第九章:高级应用举例

    原文:Knockout应用开发指南 第九章:高级应用举例 1   Contacts editor 这个例子和微软为演示jQuery Data Linking Proposal例子提供的例子一样的提供的 ...

随机推荐

  1. Egyptian Collegiate Programming Contest (ECPC 2015) C题 Connecting Graph

    这题上次用的是线性求LCA过的,数据比较水,当时没有被T掉(不过线性的做法是在线的).现在重新的分析一下这个问题.在所有的操作都进行完毕以后,这个图形肯定会变成一棵树,而我们的要求是在这棵树上的一条链 ...

  2. poj 1458 Common Subsequence ——(LCS)

    虽然以前可能接触过最长公共子序列,但是正规的写应该还是第一次吧. 直接贴代码就好了吧: #include <stdio.h> #include <algorithm> #inc ...

  3. redis几种模式的部署(Windows下实现)

    <参考>http://www.cnblogs.com/ruiati/p/6374152.html 1.   自行下载redis客户端.redis官方不支持Windows系统,所以官网上是下 ...

  4. COM组件双接口对象模型

    模型如下: 这里COM对象一共实现了三个接口,IUnknown,IDispatch, Ixxx. 每个COM都必须实现IUnknown,不考虑在内的话共实现了IDispatch和自定义接口Ixxx两个 ...

  5. the requested PHP extension dom is missing from your system

    composer  出错 the requested PHP extension dom is missing from your system 解决办法    yum install  php70w ...

  6. Winform中利用委托实现窗体之间的传值

    点击打开按扭,打开传输值窗体 public partial class Form1 : Form { public Form1() { InitializeComponent(); } public ...

  7. Linux下nginx配置https协议访问

    一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...

  8. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_06-新增页面-前端-新增页面

    新建一个添加的页面 复制page_list页面改改名字 page_add 一个标准的页面 <template> <div> 新增页面 </div> </tem ...

  9. subprocess以及常用的封装函数

    从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn.os.popen.popen2..commands. ...

  10. Response 与 Cookie

    Response 与 Cookie Web服务器要完成的任务的最后一步就是向客户端返回数据.如果客户端是浏览器,那么返回的数据通常是HTML.JS.CSS或者其他类型的代码. Cookie是保存在客户 ...