查看: 1493|回复: 0

[经验] 米尔MYD-C7Z020开发板试用5---XADC使用

[复制链接]
  • TA的每日心情
    开心
    2020-7-25 10:37
  • 签到天数: 40 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2019-11-24 11:12:39 | 显示全部楼层 |阅读模式
    分享到:
       ZYNQ SoC 的 XADC 模块包括两个 12 位的模数转换器,转换速率可以达到 1MSPS(每秒一百万次采样)。它带有片上温度和电压传感器,可以测量芯片工作时的温度和供电电压。用户可以设置报警阈值,用来检测温度过高或者供电电压异常等事件。除此之外,通过 XADC 内部的模拟多路复用器,它还支持最多17 路外部模拟输入信号的测量,且支持单极、双极和差分等信号类型。 在 7 系列的 FPGA 中,XADC 提供了 JTAG 和 DRP(dynamic reconfiguration port)接口,用于访问其内部的状态和控制寄存器。在 ZYNQ-7000 SoC 器件中,XADC 增加了一个 PS-XADC 接口,用于 PS 中的软件控制 XADC 模块。
       XADC 模块的系统框图如下所示:
    1.JPG
       从上图可以看出FPGA访问XADC有多种方式:DRP、JTAG、AXI接口、PS-ADC接口,其中PS-ADC接口使用起来最为方便,这里我使用这个接口来测试一下XADC,通过XADC读出片内电压和温度。
       在《米尔MYD-C7Z020开发板试用2---helloworld》中说了如何建立一个基本工程,这次我再Helloworld工程的基础上建立XADC测试程序。在Vivado中我们不需要做任何变动,只需要在SDK中,重写编写程序即可.
       编写代码如下:
    • #include "xparameters.h"
    • #include "xadcps.h"
    • #include "stdio.h"
    • #include "xil_printf.h"
    • #include "sleep.h"
    • #define XADC_DEVICE_ID        XPAR_XADCPS_0_DEVICE_ID        //PS XADC 器件ID
    • static  XAdcPs                         xadc_inst;                      //XADC 驱动实例
    • int main(void)
    • {
    • XAdcPs_Config *ConfigPtr;        //XADC 配置指针
    • u32 temp_rawdata;                        //温度                原始数据
    • u32 vcc_pint_rawdata;                //PS 内核电压        原始数据
    • u32 vcc_paux_rawdata;                //PS 辅助电压        原始数据
    • u32 vcc_pddr_rawData;                //PS DDR电压        原始数据
    • u32 vcc_int_rawdata;                //PL 内核电压        原始数据
    • u32 vcc_aux_rawdata;                //PL 辅助电压        原始数据
    • u32 vcc_bram_rawData;                //PL BRAM电压        原始数据
    • float temp;                                        //温度
    • float vcc_pint;                                //PS 内核电压
    • float vcc_paux;                                //PS 辅助电压
    • float vcc_pddr;                                //PS DDR电压
    • float vcc_int;                                //PL 内核电压
    • float vcc_aux;                                //PL 辅助电压
    • float vcc_bram;                                //PL BRAM电压
    • //初始化XADC驱动
    • ConfigPtr = XAdcPs_LookupConfig(XADC_DEVICE_ID);
    • XAdcPs_CfgInitialize(&xadc_inst, ConfigPtr, ConfigPtr->BaseAddress);
    • //设置XADC操作模式为“默认安全模式”
    • XAdcPs_SetSequencerMode(&xadc_inst, XADCPS_SEQ_MODE_SAFE);
    • while(1){
    • //获取原始温度传感器数据
    • temp_rawdata = XAdcPs_GetAdcData(&xadc_inst, XADCPS_CH_TEMP);
    • //转换成温度信息
    • temp = XAdcPs_RawToTemperature(temp_rawdata);
    • //获取VCCPINT传感器数据,并转换成电压信息
    • vcc_pint_rawdata = XAdcPs_GetAdcData(&xadc_inst, XADCPS_CH_VCCPINT);
    • vcc_pint = XAdcPs_RawToVoltage(vcc_pint_rawdata);
    • //获取VCCPAUX传感器数据,并转换成电压信息
    • vcc_paux_rawdata = XAdcPs_GetAdcData(&xadc_inst, XADCPS_CH_VCCPAUX);
    • vcc_paux = XAdcPs_RawToVoltage(vcc_paux_rawdata);
    • //获取VCCPDRO传感器数据,并转换成电压信息
    • vcc_pddr_rawData = XAdcPs_GetAdcData(&xadc_inst, XADCPS_CH_VCCPDRO);
    • vcc_pddr = XAdcPs_RawToVoltage(vcc_pddr_rawData);
    • //获取VCCINT传感器数据,并转换成电压信息
    • vcc_int_rawdata = XAdcPs_GetAdcData(&xadc_inst, XADCPS_CH_VCCINT);
    • vcc_int = XAdcPs_RawToVoltage(vcc_int_rawdata);
    • //获取VCCAUX传感器数据,并转换成电压信息
    • vcc_aux_rawdata = XAdcPs_GetAdcData(&xadc_inst, XADCPS_CH_VCCAUX);
    • vcc_aux = XAdcPs_RawToVoltage(vcc_aux_rawdata);
    • //获取VBRAM传感器数据,并转换成电压信息
    • vcc_bram_rawData = XAdcPs_GetAdcData(&xadc_inst, XADCPS_CH_VBRAM);
    • vcc_bram = XAdcPs_RawToVoltage(vcc_bram_rawData);
    • //打印温度、电压信息
    • printf("Raw Temp    %lu, Real Temp    %fC \n", temp_rawdata,     temp);
    • printf("Raw VccPInt %lu, Real VccPInt %fV \n", vcc_pint_rawdata, vcc_pint);
    • printf("Raw VccPAux %lu, Real VccPAux %fV \n", vcc_paux_rawdata, vcc_paux);
    • printf("Raw VccPDDR %lu, Real VccPDDR %fV \n", vcc_pddr_rawData, vcc_pddr);
    • printf("Raw VccInt  %lu, Real VccInt  %fV \n", vcc_int_rawdata,  vcc_int);
    • printf("Raw VccAux  %lu, Real VccAux  %fV \n", vcc_aux_rawdata,  vcc_aux);
    • printf("Raw VccBram %lu, Real VccBram %fV \n\r", vcc_bram_rawData, vcc_bram);
    • //延时5s
    • sleep(5);
    • }
    • return 0;
    • }



       编译并下载后程序,实现现象如下:
    2.JPG
    3.JPG
    附上我的工程代码:
    MYiRtest1.zip (4.19 MB, 下载次数: 3, 售价: 1 与非币)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 19:43 , Processed in 0.110722 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.