XADC內(nèi)嵌在PS端,允許CPU或其他主機(jī)連接XADC,而不用使用PL端。XADC最大采樣率為1MSPS,精度為12bits,內(nèi)置電壓和溫度傳感器,可監(jiān)測(cè)芯片的電壓及溫度信息。電壓傳感器可監(jiān)測(cè)芯片的VCCINT,VCCAUX,VCCBRAM等,VP_0和VN_0為一對(duì)專用的ADC模擬輸入口。VAUXP[*]和VAUXN[*]也是ADC輸入口,但是不用作ADC輸入口時(shí),可用作普通IO使用。
intXAdcPolledPrintfExample(u16 XAdcDeviceId)
{
intStatus;
XAdcPs_Config *ConfigPtr;
u32 TempRawData;
u32 VccPintRawData;
u32 VccPauxRawData;
u32 VccPdroRawData;
floatTempData;
floatVccPintData;
floatVccPauxData;
floatMaxData;
floatMinData;
XAdcPs *XAdcInstPtr = &XAdcInst;
printf(" Entering the XAdc PolledExample. ");
/*
* Initialize the XAdc driver.
*/
ConfigPtr= XAdcPs_LookupConfig(XAdcDeviceId);
if(ConfigPtr == NULL) {
returnXST_FAILURE;
}
XAdcPs_CfgInitialize(XAdcInstPtr,ConfigPtr,
ConfigPtr->BaseAddress);
/*
* Self Test the XADC/ADC device
*/
Status= XAdcPs_SelfTest(XAdcInstPtr);
if(Status != XST_SUCCESS) {
returnXST_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. ");
returnXST_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.
*
*****************************************************************************/
intXAdcFractionToInt(floatFloatNum)
{
floatTemp;
Temp= FloatNum;
if(FloatNum < 0) {
Temp= -(FloatNum);
}
return( ((int)((Temp -(float)((int)Temp)) * (1000.0f))));
}
原文標(biāo)題:Zynq中PS端XADC
文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
cpu
+關(guān)注
關(guān)注
68文章
11281瀏覽量
225082 -
Zynq
+關(guān)注
關(guān)注
10文章
630瀏覽量
49466
原文標(biāo)題:Zynq中PS端XADC
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
DR1 系列評(píng)估板 PS 端裸機(jī)與 FreeRTOS 開發(fā)案例手冊(cè)
IGBT觸發(fā)波測(cè)量:示波器接地端連接規(guī)范
為什么會(huì)有小端字節(jié)序
如何訓(xùn)練好自動(dòng)駕駛端到端模型?
NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)44:工程設(shè)計(jì)考量?
電話光端機(jī)發(fā)射端和接收端怎么接
ZYNQ PS與PL數(shù)據(jù)交互方式
光纜怎么分ab端
Aurix Development Studio 中是否有允許在 SCR 端添加調(diào)試編譯器選項(xiàng)的功能?
cyw43907關(guān)于STA掉電后連接不上AP端怎么解決?
Nullmax端到端自動(dòng)駕駛最新研究成果入選ICCV 2025
NEXT(Near-End Crosstalk,近端串?dāng)_)
一文帶你厘清自動(dòng)駕駛端到端架構(gòu)差異
特征空間在端側(cè)的作用
小米汽車端到端智駕技術(shù)介紹
XADC內(nèi)嵌在PS端允許CPU或其他主機(jī)連接而不用使用PL端
評(píng)論