8 - PS XADC接口实验
文章目录
- 1 实验任务
- 2 系统框图
- 3 软件设计
1 实验任务
本实验任务是通过PS侧的XADC接口,读取PL侧的XADC硬核测量的芯片温度、供电电压等信息, 并通过串口打印出来。
2 系统框图
3 软件设计
注意事项:无。
/***************************** Include Files ********************************/
#include "stdio.h"
#include "xparameters.h"
#include "xadcps.h"
#include "xstatus.h"
#include "sleep.h"
/************************** Constant Definitions ****************************/
#define XADC_DEVICE_ID XPAR_XADCPS_0_DEVICE_ID
/**************************** Type Definitions ******************************/
/***************** Macros (Inline Functions) Definitions ********************/
/************************** Function Prototypes *****************************/
int XadcInit(XAdcPs* XadcInstPtr);
/************************** Variable Definitions ****************************/
XAdcPs XadcInst;
/****************************************************************************/
int XadcInit(XAdcPs* XadcInstPtr)
{
//
int Status;
XAdcPs_Config* XadcConfigPtr;
//
XadcConfigPtr = XAdcPs_LookupConfig(XPAR_XADCPS_0_DEVICE_ID);
if (XadcConfigPtr == NULL) {
return XST_FAILURE;
}
Status = XAdcPs_CfgInitialize(XadcInstPtr, XadcConfigPtr, XadcConfigPtr->BaseAddress);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
//
XAdcPs_SetSequencerMode(XadcInstPtr, XADCPS_SEQ_MODE_SAFE);
//
return XST_SUCCESS;
}
int main()
{
//
int Status;
u32 TempRawData; // 温度 原始数据
u32 VccPintRawData; // PS侧内核电压 原始数据
u32 VccPauxRawData; // PS侧辅助电压 原始数据
u32 VccoDdrRawData; // PS侧DDR电压 原始数据
u32 VccIntRawData; // PL侧内核电压 原始数据
u32 VccAuxRawData; // PL侧辅助电压 原始数据
u32 VccBramRawData; // PL侧BRAM电压 原始数据
float TempRealData; // 温度 真实数据
float VccPintRealData; // PS侧内核电压 真实数据
float VccPauxRealData; // PS侧辅助电压 真实数据
float VccoDdrRealData; // PS侧DDR电压 真实数据
float VccIntRealData; // PL侧内核电压 真实数据
float VccAuxRealData; // PL侧辅助电压 真实数据
float VccBramRealData; // PL侧BRAM电压 真实数据
//
printf("PS XADC Test\n");
//
Status = XadcInit(&XadcInst);
if (Status == XST_FAILURE) {
printf("PS XADC Initialization Failed.\n");
}
//
while(1) {
sleep(5);
//
printf("\n\n");
// 获取温度
TempRawData = XAdcPs_GetAdcData(&XadcInst, XADCPS_CH_TEMP);
TempRealData = XAdcPs_RawToTemperature(TempRawData);
printf("温度 = %f C.\n", TempRealData);
// 获取PS侧内核电压
VccPintRawData = XAdcPs_GetAdcData(&XadcInst, XADCPS_CH_VCCPINT);
VccPintRealData = XAdcPs_RawToVoltage(VccPintRawData);
printf("PS侧内核电压\t\t= %.3f V.\n", VccPintRealData);
// 获取PS侧辅助电压
VccPauxRawData = XAdcPs_GetAdcData(&XadcInst, XADCPS_CH_VCCPAUX);
VccPauxRealData = XAdcPs_RawToVoltage(VccPauxRawData);
printf("PS侧辅助电压\t\t= %.3f V.\n", VccPauxRealData);
// 获取PS侧DDR电压
VccoDdrRawData = XAdcPs_GetAdcData(&XadcInst, XADCPS_CH_VCCPDRO);
VccoDdrRealData = XAdcPs_RawToVoltage(VccoDdrRawData);
printf("PS侧DDR电压\t\t= %.3f V.\n", VccoDdrRealData);
// 获取PL侧内核电压
VccIntRawData = XAdcPs_GetAdcData(&XadcInst, XADCPS_CH_VCCINT);
VccIntRealData = XAdcPs_RawToVoltage(VccIntRawData);
printf("PL侧内核电压\t\t= %.3f V.\n", VccIntRealData);
// 获取PL侧辅助电压
VccAuxRawData = XAdcPs_GetAdcData(&XadcInst, XADCPS_CH_VCCAUX);
VccAuxRealData = XAdcPs_RawToVoltage(VccAuxRawData);
printf("PL侧辅助电压\t\t= %.3f V.\n", VccAuxRealData);
// 获取PL侧BRAM电压
VccBramRawData = XAdcPs_GetAdcData(&XadcInst, XADCPS_CH_VBRAM);
VccBramRealData = XAdcPs_RawToVoltage(VccBramRawData);
printf("PL侧BRAM电压\t= %.3f V.\n", VccBramRealData);
}
//
return 0;
}