ボードはArty Z7-20
Vaux◯とAD◯ピンの対応表
例えばA0ピンにはVaux1が対応する
Arty Z7-20 のA0-A5は0.0-3.3Vがシングル入力できるように
分圧抵抗が入れてある。したがって、3.3Vを入れると1.0Vが計測結果となる。
制約ファイル
set_property IOSTANDARD LVCMOS33 [get_ports vauxn0] set_property IOSTANDARD LVCMOS33 [get_ports vauxp0] set_property IOSTANDARD LVCMOS33 [get_ports vauxn1] set_property IOSTANDARD LVCMOS33 [get_ports vauxp1] set_property IOSTANDARD LVCMOS33 [get_ports vauxn8] set_property IOSTANDARD LVCMOS33 [get_ports vauxp8] set_property IOSTANDARD LVCMOS33 [get_ports vauxn9] set_property IOSTANDARD LVCMOS33 [get_ports vauxp9] set_property IOSTANDARD LVCMOS33 [get_ports vn_in] set_property IOSTANDARD LVCMOS33 [get_ports vp_in]
#include <stdio.h> #include "platform.h" #include "xsysmon.h" #define SYSMON_DEVICE_ID XPAR_SYSMON_0_DEVICE_ID //ID of xadc_wiz_0 #define XSysMon_RawToExtVoltage(AdcData) \ ((((float)(AdcData))*(1.0f))/65536.0f) //(ADC 16bit result)/16/4096 = (ADC 16bit result)/65536 // voltage value = (ADC 16bit result)/65536 * 1Volt static XSysMon SysMonInst; //a sysmon instance static int SysMonFractionToInt(float FloatNum); int main() { u8 SeqMode; u32 TempRawData,VccIntRawData,ExtVolRawData,i; float TempData,VccIntData,ExtVolData; int xStatus; XSysMon_Config *SysMonConfigPtr; XSysMon *SysMonInstPtr = &SysMonInst; init_platform(); print("Hello World\n\r"); //----------------------------------------------------------------------- SysMon Initialize SysMonConfigPtr = XSysMon_LookupConfig(SYSMON_DEVICE_ID); if(SysMonConfigPtr == NULL) printf("LookupConfig FAILURE\n\r"); xStatus = XSysMon_CfgInitialize(SysMonInstPtr, SysMonConfigPtr,SysMonConfigPtr->BaseAddress); if(XST_SUCCESS != xStatus) printf("CfgInitialize FAILED\r\n"); //----------------------------------------------------------------------------------------- XSysMon_GetStatus(SysMonInstPtr); // Clear the old status while(1) { //wait until EOS activated while ((XSysMon_GetStatus(SysMonInstPtr) & XSM_SR_EOS_MASK) != XSM_SR_EOS_MASK); TempRawData = XSysMon_GetAdcData(SysMonInstPtr, XSM_CH_TEMP);//Read the on-chip Temperature Data TempData = XSysMon_RawToTemperature(TempRawData); printf("Temperature: %0d.%03d Centigrades, ", (int)(TempData), SysMonFractionToInt(TempData)); VccIntRawData = XSysMon_GetAdcData(SysMonInstPtr, XSM_CH_VCCINT); //Read the on-chip Vccint Data VccIntData = XSysMon_RawToVoltage(VccIntRawData); printf("VCCINT: %0d.%03d V, ", (int)(VccIntData), SysMonFractionToInt(VccIntData)); // ExtVolRawData = XSysMon_GetAdcData(SysMonInstPtr,XSM_CH_VPVN); //Read the external Vpn Data // ExtVolData = XSysMon_RawToExtVoltage(ExtVolRawData); // printf("VpVn: %0d.%03d V, ",(int)(ExtVolData), SysMonFractionToInt(ExtVolData)); ExtVolRawData = XSysMon_GetAdcData(SysMonInstPtr,XSM_CH_AUX_MIN); //Read the external Vaux0 Data ExtVolData = XSysMon_RawToExtVoltage(ExtVolRawData); printf("Vaux0: %0d.%03d V, ",(int)(ExtVolData), SysMonFractionToInt(ExtVolData)); ExtVolRawData = XSysMon_GetAdcData(SysMonInstPtr,XSM_CH_AUX_MIN+1); //Read the external Vaux0 Data ExtVolData = XSysMon_RawToExtVoltage(ExtVolRawData); printf("Vaux1: %0d.%03d V, ",(int)(ExtVolData), SysMonFractionToInt(ExtVolData)); ExtVolRawData = XSysMon_GetAdcData(SysMonInstPtr,XSM_CH_AUX_MIN+8);//Read the external Vaux8 Data ExtVolData = XSysMon_RawToExtVoltage(ExtVolRawData); printf("Vaux8: %0d.%03d V, ",(int)(ExtVolData), SysMonFractionToInt(ExtVolData)); ExtVolRawData = XSysMon_GetAdcData(SysMonInstPtr,XSM_CH_AUX_MIN+9); //Read the external Vaux0 Data ExtVolData = XSysMon_RawToExtVoltage(ExtVolRawData); printf("Vaux9: %0d.%03d V\r\n",(int)(ExtVolData), SysMonFractionToInt(ExtVolData)); usleep(500000); //wait 500ms } return 0; } //---------------------------------------------------------------------------------------------- int SysMonFractionToInt(float FloatNum) { float Temp; Temp = FloatNum; if (FloatNum < 0) { Temp = -(FloatNum); } return( ((int)((Temp -(float)((int)Temp)) * (1000.0f)))); }