0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

XADC内嵌在PS端的使用

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-04-12 19:37 次阅读

XADC内嵌在PS端的使用

XADC内嵌在PS端,允许CPU或其他主机连接XADC,而不用使用PL端。XADC最大采样率为1MSPS,精度为12bits,内置电压和温度传感器,可监测芯片的电压及温度信息。如图所示电压传感器可监测芯片的VCCINT,VCCAUX,VCCBRAM等,VP_0和VN_0为一对专用的ADC模拟输入口。VAUXP[*]和VAUXN[*]也是ADC输入口,但是不用作ADC输入口时,可用作普通IO使用。

XADC内嵌在PS端的使用

int XAdcPolledPrintfExample(u16 XAdcDeviceId)

{

int Status;

XAdcPs_Config *ConfigPtr;

u32 TempRawData;

u32 VccPintRawData;

u32 VccPauxRawData;

u32 VccPdroRawData;

float TempData;

float VccPintData;

float VccPauxData;

float MaxData;

float MinData;

XAdcPs *XAdcInstPtr = &XAdcInst;

printf(" Entering the XAdc PolledExample. ");

/*

* Initialize the XAdc driver.

*/

ConfigPtr= XAdcPs_LookupConfig(XAdcDeviceId);

if (ConfigPtr == NULL) {

return XST_FAILURE;

}

XAdcPs_CfgInitialize(XAdcInstPtr,ConfigPtr,

ConfigPtr->BaseAddress);

/*

* Self Test the XADC/ADC device

*/

Status= XAdcPs_SelfTest(XAdcInstPtr);

if (Status != XST_SUCCESS) {

return XST_FAILURE;

}

/*

* Disable the Channel Sequencer beforeconfiguring the Sequence

* registers.

*/

XAdcPs_SetSequencerMode(XAdcInstPtr,XADCPS_SEQ_MODE_SAFE);

/*

* Read the on-chip Temperature Data(Current/Maximum/Minimum)

* from the ADC data registers.

*/

TempRawData= XAdcPs_GetAdcData(XAdcInstPtr, XADCPS_CH_TEMP);

TempData= XAdcPs_RawToTemperature(TempRawData);

printf(" The Current Temperature is%0d.%03d Centigrades. ",

(int)(TempData), XAdcFractionToInt(TempData));

TempRawData= XAdcPs_GetMinMaxMeasurement(XAdcInstPtr, XADCPS_MAX_TEMP);

MaxData= XAdcPs_RawToTemperature(TempRawData);

printf("The Maximum Temperature is%0d.%03d Centigrades. ",

(int)(MaxData), XAdcFractionToInt(MaxData));

TempRawData= XAdcPs_GetMinMaxMeasurement(XAdcInstPtr, XADCPS_MIN_TEMP);

MinData= XAdcPs_RawToTemperature(TempRawData & 0xFFF0);

printf("The Minimum Temperature is%0d.%03d Centigrades. ",

(int)(MinData), XAdcFractionToInt(MinData));

/*

* Read the VccPint Votage Data(Current/Maximum/Minimum) from the

* ADC data registers.

*/

VccPintRawData= XAdcPs_GetAdcData(XAdcInstPtr, XADCPS_CH_VCCPINT);

VccPintData= XAdcPs_RawToVoltage(VccPintRawData);

printf(" The Current VCCPINT is%0d.%03d Volts. ",

(int)(VccPintData),XAdcFractionToInt(VccPintData));

VccPintRawData= XAdcPs_GetMinMaxMeasurement(XAdcInstPtr,

XADCPS_MAX_VCCPINT);

MaxData= XAdcPs_RawToVoltage(VccPintRawData);

printf("The Maximum VCCPINT is %0d.%03dVolts. ",

(int)(MaxData), XAdcFractionToInt(MaxData));

VccPintRawData= XAdcPs_GetMinMaxMeasurement(XAdcInstPtr,

XADCPS_MIN_VCCPINT);

MinData= XAdcPs_RawToVoltage(VccPintRawData);

printf("The Minimum VCCPINT is %0d.%03dVolts. ",

(int)(MinData), XAdcFractionToInt(MinData));

/*

* Read the VccPaux Votage Data(Current/Maximum/Minimum) from the

* ADC data registers.

*/

VccPauxRawData= XAdcPs_GetAdcData(XAdcInstPtr, XADCPS_CH_VCCPAUX);

VccPauxData= XAdcPs_RawToVoltage(VccPauxRawData);

printf(" The Current VCCPAUX is%0d.%03d Volts. ",

(int)(VccPauxData),XAdcFractionToInt(VccPauxData));

VccPauxRawData= XAdcPs_GetMinMaxMeasurement(XAdcInstPtr,

XADCPS_MAX_VCCPAUX);

MaxData= XAdcPs_RawToVoltage(VccPauxRawData);

printf("The Maximum VCCPAUX is %0d.%03dVolts. ",

(int)(MaxData), XAdcFractionToInt(MaxData));

VccPauxRawData= XAdcPs_GetMinMaxMeasurement(XAdcInstPtr,

XADCPS_MIN_VCCPAUX);

MinData= XAdcPs_RawToVoltage(VccPauxRawData);

printf("The Minimum VCCPAUX is %0d.%03dVolts. ",

(int)(MinData), XAdcFractionToInt(MinData));

/*

* Read the VccPdro Votage Data(Current/Maximum/Minimum) from the

* ADC data registers.

*/

VccPdroRawData= XAdcPs_GetAdcData(XAdcInstPtr, XADCPS_CH_VCCPDRO);

VccPintData= XAdcPs_RawToVoltage(VccPdroRawData);

printf(" The Current VCCPDDRO is%0d.%03d Volts. ",

(int)(VccPintData), XAdcFractionToInt(VccPintData));

VccPdroRawData= XAdcPs_GetMinMaxMeasurement(XAdcInstPtr,

XADCPS_MAX_VCCPDRO);

MaxData= XAdcPs_RawToVoltage(VccPdroRawData);

printf("The Maximum VCCPDDRO is %0d.%03dVolts. ",

(int)(MaxData), XAdcFractionToInt(MaxData));

VccPdroRawData= XAdcPs_GetMinMaxMeasurement(XAdcInstPtr,

XADCPS_MIN_VCCPDRO);

MinData= XAdcPs_RawToVoltage(VccPdroRawData);

printf("The Minimum VCCPDDRO is %0d.%03dVolts. ",

(int)(MinData), XAdcFractionToInt(MinData));

printf("Exiting the XAdc Polled Example. ");

return XST_SUCCESS;

}

/****************************************************************************/

/**

*

* This function converts the fractionpart of the given floating point number

* (after the decimal point)to aninteger.

*

* @param FloatNum is the floating point number.

*

* @return Integer number to a precision of 3 digits.

*

* @note

* This function is used in the printingof floating point data to a STDIO device

* using the xil_printf function. Thexil_printf is a very small foot-print

* printf function and does notsupport the printing of floating point numbers.

*

*****************************************************************************/

int XAdcFractionToInt(float FloatNum)

{

float Temp;

Temp= FloatNum;

if (FloatNum < 0) {

Temp= -(FloatNum);

}

return( ((int)((Temp -(float)((int)Temp)) * (1000.0f))));

}

XADC内嵌在PS端的使用

原文标题:Zynq中PS端XADC

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2525

    文章

    48129

    浏览量

    740179
  • Zynq
    +关注

    关注

    9

    文章

    600

    浏览量

    46643
  • XADC
    +关注

    关注

    0

    文章

    8

    浏览量

    3351

原文标题:Zynq中PS端XADC

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【Z-turn Board试用体验】+XADC应用

    本帖最后由 yintengfei 于 2015-6-10 09:14 编辑 拿到板子一段时间 但是实在太忙,前几天搞个helloworld整的我感觉也立马不好了。今天主要XADCZYNQ
    发表于 06-09 01:20

    玩转Zynq连载39——[ex58] 基于Zynq的XADC采集控制实例

    实现模拟电压采集方式的设置,并读取转换后的模拟电压数据。XADC内部寄存器的映射如图所示。图 XADC内部寄存器映射关系截图Zynq中,XADC模块通过AXI GP总线连接到
    发表于 12-03 11:17

    请问在哪里连接XADC的外部端口?

    _0_MUXADDR_pin = axi_xadc_0_MUXADDR,DIR = O,VEC = [4:0]我在哪里连接这些外部端口?我的设计基地Vivado。XDC文件中,应该为哪些引脚分配?谢谢您的帮助!
    发表于 07-14 16:30

    XADC温度报警滞后的原因?

    大家好!我们开始Zynq(XC7Z020)中使用XADC,SW人员想知道温度报警中断是否有滞后现象?特别是有两个位似乎很有用,cource的bit 0(OT)和bit 8(OT Deactive
    发表于 07-15 08:37

    纯粹PL上使用XADC能实现吗?

    嗨,我想纯粹PL上使用XADC(convst + data)我似乎需要使用DRP来获取转换后的值,对吧?或者他们能以某种方式接受并行格式?如果没有,是否有一些DRP的VHDL示例?还有一个问题:我
    发表于 08-10 06:43

    为什么XADC没有转换温度结果?

    嗨,我正在使用kintex 7设备并且使用XADC时遇到了一些麻烦。我附上了从Vivado ILA拍摄的图像,显​​示了convst_in和busy信号变高但测量温度始终为0。开发板上,x
    发表于 08-24 09:01

    【正点原子FPGA连载】第十章PS XADC接口实验--摘自【正点原子】领航者 ZYNQ 之嵌入式开发指南

    原子公众号,获取最新资料第十章PS XADC接口实验ZYNQ的PL有一个数模混合模块——XADC,它是一个硬核。
    发表于 09-01 17:35

    ZYNQ PSIIC接口怎么使用?

    ZYNQ PSIIC接口使用笔记
    发表于 02-23 06:23

    PS实现FreeRTOS嵌入式系统

    ZYNQ进阶之路9--PS实现FreeRTOS嵌入式系统导论FreeRTOS简介实现步骤导论之前的章节中我们我们完成了PS、PL
    发表于 12-22 08:29

    如何在PS中调用Zynq内部的XADC模块进行片内温度和电源电压测量

    应该是“Xilinx模拟混合信号模块”,是FPGA中的一个硬核。7系列FPGA中,XADC提供了DRP和JTAG接口,用于访问XADC的状态和控制寄存器。Zynq中添加了第三个接口,称作PS
    发表于 12-27 06:18

    Adam Taylor玩转MicroZed系列62:对Zynq XADC问题的回答

    讨论,这个问题解决之后我们将回来继续学习PicoBlaze。 前面的博客中提到,有多种方式可以实现XADC与Zynq之间的交互,除了JTAG接口: 1.我们可以借助DevC接口实现XADCPS(处理器系统)之间的直接交互,使用
    发表于 02-08 10:04 245次阅读

    基于Linux的XADC控制器模块的两种形式配置

    1、 简介 XADC是zynq芯片内部进行温度和电压检测的模块,通过(Xilinx Wiki - xadc.html)这篇wiki可以知道,XADC控制器有两种表现形式,一种是位于PS
    发表于 06-30 14:24 2802次阅读
    基于Linux的<b class='flag-5'>XADC</b>控制器模块的两种形式配置

    XADC内嵌PS端允许CPU或其他主机连接而不用使用PL端

    XADC内嵌PS端,允许CPU或其他主机连接XADC,而不用使用PL端。XADC最大采样率为1MSPS,精度为12bits,内置电压和温度
    的头像 发表于 05-27 11:30 2102次阅读

    Zynq片内XADC应用笔记

    .pdf xapp1183:zynq-xadc-axi.pdf xapp1182:zynq_axi_xadc_mon.pdf  xapp1172:zynq_ps_xadc.pdf pg019:axi_
    发表于 09-22 18:36 14次下载
    Zynq片内<b class='flag-5'>XADC</b>应用笔记

    学会Zynq(22)XADC测量片内温度与电源电压

    本文将介绍如何在PS中调用Zynq内部的XADC模块进行片内温度和电源电压测量。先了解XADC的相关知识,再通过实例体会XADC的用法,学习XADC
    发表于 01-05 14:26 10次下载
    学会Zynq(22)<b class='flag-5'>XADC</b>测量片内温度与电源电压