https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-43-XADC-Alarms-and/ba-p/496468
にあるXADCのAlarm関連のコードを試してみた。
Vivado
- ZynqのIPを追加後、XADC WizardのIPを追加
- Run Block Automation, Run Connection Automationを実施
- HDL Wrapper追加後、bit stream作成まで実行
XSDK
blogにあるコードをそのままapplicationとして実装。
実行するとターミナルに以下のような表示が出てきた。
Xcell Daily blog XADC part 43
temp high alarm 42803 Real Temp 56.008606
temp low alarm 40785 Real Temp 40.490021
上記の表示関連のコードは以下の部分。
TempRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_TEMP);
TempRawData = TempRawData+0x03FF;
XAdcPs_SetAlarmThreshold(XADCInstPtr, XADCPS_ATR_TEMP_UPPER,(TempRawData));
TempData = XAdcPs_RawToTemperature(TempRawData);
printf("temp high alarm %lu Real Temp %f \n\r", TempRawData, TempData);
TempRawData = XAdcPs_GetAdcData(XADCInstPtr, XADCPS_CH_TEMP);
TempRawData = TempRawData-0x03FF;
XAdcPs_SetAlarmThreshold(XADCInstPtr, XADCPS_ATR_TEMP_LOWER,(TempRawData));
TempData = XAdcPs_RawToTemperature(TempRawData);
printf("temp low alarm %lu Real Temp %f \n\r", TempRawData, TempData);
blogには以下の記載がある。
It then assigns an upper and lower temperature alarm based upon the value it has just read.
その時点のADC読取りした値をhigh alarm, low alarmとして設定しているようだ。