当前位置: 首页 > article >正文

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;
}

http://www.kler.cn/a/567395.html

相关文章:

  • 1-kafka单机环境搭建
  • 【Linux】Linux的基本指令(3)
  • React创建项目实用教程
  • c#实现modbus rtu定时采集数据
  • 基于SSM实现的bbs论坛系统功能实现八
  • VSCode 中使用 GitHub Copilot最新版本详解
  • 数据结构课程设计(java实现)---九宫格游戏,也称幻方
  • MCU的GPIO 八种模式
  • java使用word模板填充内容,再生成pdf
  • 低空经济火热,校企合作无人机低空产业技术详解
  • huffman压缩
  • 在idea中使用spring boot devtools开发工具的问题
  • 智能图像处理平台:图像处理配置类
  • 基于机器学习的结构MRI分析:预测轻度认知障碍向阿尔茨海默病的转化
  • 易错点abc
  • 分享一套适合做课设的SpringBoot商城系统
  • Kotlin协变与逆变区别
  • yolov12 部署瑞芯微 rk3588、RKNN 部署工程难度小、模型推理速度快
  • 大模型应用案例 | 大模型+金融运维,擎创携手某证券创新运维能力新范式
  • Proser:新增CRC计算辅助功能