XADC內(nèi)嵌在PS端,允許CPU或其他主機連接XADC,而不用使用PL端。XADC最大采樣率為1MSPS,精度為12bits,內(nèi)置電壓和溫度傳感器,可監(jiān)測芯片的電壓及溫度信息。電壓傳感器可監(jiān)測芯片的VCCINT,VCCAUX,VCCBRAM等,VP_0和VN_0為一對專用的ADC模擬輸入口。VAUXP[*]和VAUXN[*]也是ADC輸入口,但是不用作ADC輸入口時,可用作普通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))));
}
原文標題:Zynq中PS端XADC
文章出處:【微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
cpu
+關(guān)注
關(guān)注
68文章
10918瀏覽量
213164 -
Zynq
+關(guān)注
關(guān)注
10文章
610瀏覽量
47328
原文標題:Zynq中PS端XADC
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
端到端在自動泊車的應(yīng)用
![<b class='flag-5'>端</b>到<b class='flag-5'>端</b><b class='flag-5'>在</b>自動泊車的應(yīng)用](https://file1.elecfans.com/web3/M00/02/E2/wKgZO2diRF-AYT7oAAA_cU63t7w438.png)
連接視覺語言大模型與端到端自動駕駛
![<b class='flag-5'>連接</b>視覺語言大模型與<b class='flag-5'>端</b>到<b class='flag-5'>端</b>自動駕駛](https://file1.elecfans.com/web1/M00/F4/82/wKgaoWcsaSCAanLQAAJKOrcQaug740.png)
復(fù)旦微PS+PL異構(gòu)多核開發(fā)案例分享,基于FMQL20SM國產(chǎn)處理器平臺
四端電阻的電流端和電壓端是如何區(qū)分的
單端輸入和雙端輸入的區(qū)別是什么
被測低電阻為何具有四個端連接
FM20S用戶手冊-PS + PL異構(gòu)多核案例開發(fā)手冊
FM20S用戶手冊-PL端案例開發(fā)手冊
esp_iot_sdk_v0.9.6_b1客戶端斷開連接導(dǎo)致WDT重置怎么解決?
ESP32做為主機連接多個從設(shè)備時,主機端如何修改默認的連接參數(shù)?
使用USBUART組件與主機PC通信,如果在串行端口打開的情況下終止固件,主機端為什么會報錯?
有關(guān)PL端利用AXI總線控制PS端DDR進行讀寫(從機wready信號一直不拉高)
如何使用Vitis自帶的LWIP模板進行PS端千兆以太網(wǎng)TCP通信?
![如何使用Vitis自帶的LWIP模板進行<b class='flag-5'>PS</b><b class='flag-5'>端</b>千兆以太網(wǎng)TCP通信?](https://file1.elecfans.com/web2/M00/DE/26/wKgZomYtuKiABLnnAAA3l3ALMRU080.png)
評論