Zedboard学习(六):XADC读取数据
来源:互联网 发布:mac安装win10时蓝屏 编辑:程序博客网 时间:2024/06/15 10:08
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 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; 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读取数据
- XADC
- xADC
- Zedboard学习(八):zedboard移植opencv
- ZedBoard学习手记(六)最后一步?通过上层应用程序调用驱动
- zedboard--zedboard学习小结
- zedboard--zedboard学习小结
- ZedBoard学习(5)-ZedBoard和System Generator
- ZedBoard学习手记(十) 图形界面控制ZedBoard硬件
- zedboard学习
- zedboard--ps工程helloworld的建立(六)
- ZedBoard学习(3)U盘读写
- ZedBoard学习(2)-FTP文件传输
- Zedboard学习(七):VGA显示
- Zedboard---实验六秒计数
- 学习ZedBoard的问题1(根据玩转赛灵思Zedboard开发板)
- ZedBoard学习手记(九) 在ZedBoard上运行QT图形软件
- Zedboard学习(二):zedboard的Linux下交叉编译环境搭建
- Flask生成验证码(中英文都存在)
- Big Integer Addition
- TFS更换本地映射路径
- 安装XAMPP登陆localhost出现的问题
- MySQL数据去重--distinct的使用
- Zedboard学习(六):XADC读取数据
- 个人计划整理
- Kotlin 设计模式-工厂
- lintcode--翻转链表
- 机器学习笔记--GMM模型
- 逃离迷宫
- Android实现模拟表单上传
- APP开发步骤
- gradle providedCompile、compile与runtime的使用