/**************************************************************************//** * @brief Initializes the Tx path * * @param pDefInit - pointer to initialization structure * * @return If success, return 0 * if error, return -1 ******************************************************************************/ int32_t XCOMM_InitTx(XCOMM_DefaultInit* pDefInit) { /* Power up all the Tx clocks */ if(ad9523_out_altvoltage_DAC_CLK_raw(1) < 0) return -1; if(ad9523_out_altvoltage_DAC_DCO_CLK_raw(1) < 0) return -1; if(ad9523_out_altvoltage_DAC_REF_CLK_raw(1) < 0) return -1; if(ad9523_out_altvoltage_TX_LO_REF_CLK_raw(1) < 0) return -1; /* Power Up the Tx ADF4351 */ if(adf4351_out_altvoltage0_powerdown(0, ADF4351_TX_CHANNEL) < 0) return -1; /* Set the default Tx frequency */ if(XCOMM_SetTxFrequency(pDefInit->txFrequency) < 0) return -1; /* Initialize the AD9122 */ DAC_Core_Init(pDefInit->fmcPort); if(ad9122_setup(ad9523_out_altvoltage_DAC_DCO_CLK_frequency, ad9523_out_altvoltage_DAC_CLK_frequency, ad9523_clk_round_rate_DAC_DCO_CLK, ad9523_clk_round_rate_DAC_CLK) < 0) return -1; /* Set the AD9122 sampling rate */ if(XCOMM_SetDacSamplingRate(pDefInit->dacSamplingRate) < 0) return -1; return 0; }
int main() { int ret; int mode = 0; XCOMM_DefaultInit defInit = {100000000, //adcSamplingRate 100000000, //dacSamplingRate 20000, //rxGain1000 2400000000ull, //rxFrequency 2400000000ull};//rxFrequency float retGain; uint64_t retFreqRx; uint64_t retFreqTx; init_platform(); xil_printf("Running XCOMM Test Program\n\r"); xil_printf("\n\rInitializing XCOMM Components...\n\r"); ret = XCOMM_Init(&defInit); if(ret < 0) { xil_printf("XCOMM Init Failed!\n\r"); return 0; } else { xil_printf("XCOMM Init OK!\n\r"); } xil_printf("\n\rTesting the ADC communication... \n\r"); XCOMM_SetAdcTestMode(0x01, XCOMM_AdcChannel_All); adc_capture(IICSEL_B0LPC, 1024, DDR_BASEADDR); for (mode = 0x1; mode <= 0x7; mode++) { XCOMM_SetAdcTestMode(mode, XCOMM_AdcChannel_All); adc_test(IICSEL_B0LPC, mode, 0x1); } xil_printf("ADC test complete.\n\r"); xil_printf("\n\rTesting the DAC communication... \n\r"); dac_test(IICSEL_B0LPC); xil_printf("DAC test complete.\n\r"); xil_printf("\n\rSetting the VGA gain to: %d.%d dB\n\r", (int)defInit.rxGain1000/1000, (int)((defInit.rxGain1000 - (int)(defInit.rxGain1000/1000)*1000))); retGain = (float)XCOMM_SetRxGain(defInit.rxGain1000) / 1000.0f; xil_printf("Actual set VGA gain: %d.%d dB\n\r", (int)retGain, (int)((retGain - (int)retGain) * 1000)); xil_printf("\n\rSetting the Rx frequency to: %lld%06lld\n\r", defInit.rxFrequency/(uint64_t)1e6, defInit.rxFrequency%(uint64_t)1e6); retFreqRx = XCOMM_SetRxFrequency(defInit.rxFrequency); xil_printf("Actual set Rx frequency: %lld%06lld\n\r", retFreqRx/(uint64_t)1e6, retFreqRx%(uint64_t)1e6); xil_printf("\n\rSetting the Tx frequency to: %lld%06lld\n\r", defInit.txFrequency/(uint64_t)1e6, defInit.txFrequency%(uint64_t)1e6); retFreqTx = XCOMM_SetTxFrequency(defInit.txFrequency); xil_printf("Actual set Tx frequency: %lld%06lld\n\r", retFreqTx/(uint64_t)1e6, retFreqTx%(uint64_t)1e6); xil_printf("\n\rSetting up the DDS... \n\r"); dds_setup(IICSEL_B0LPC, 45, 45); xil_printf("DDS setup complete.\n\r"); xil_printf("\n\rReading data from air... \n\r"); XCOMM_SetAdcTestMode(XCOMM_AdcTestMode_Off, XCOMM_AdcChannel_All); while(1) { adc_capture(IICSEL_B0LPC, 1024, DDR_BASEADDR); } xil_printf("Read data from air complete. \n\r"); xil_printf("\n\rFinished XCOMM Test Program\n\r"); cleanup_platform(); return 0; }
/* Program main loop. */ int main() { int32_t ret; int32_t mode = 0; float retGain; uint64_t retFreqRx; uint64_t retFreqTx; int32_t fmcSel; int32_t i; int32_t valArray[17]; XCOMM_Version boardVersion; XCOMM_DefaultInit defInit = {FMC_LPC, //fmcPort XILINX_ML605, //carrierBoard 100000000, //adcSamplingRate 122880000, //dacSamplingRate 10000, //rxGain1000 2400000000ull, //rxFrequency 2400000000ull};//txFrequency Xil_ICacheEnable(); Xil_DCacheEnable(); xil_printf("Running XCOMM Test Program\n\r"); if(defInit.carrierBoard == XILINX_ZC702) { fmcSel = (defInit.fmcPort == FMC_LPC ? IICSEL_B0LPC_PS7 : IICSEL_B1HPC_PS7); } else { if(defInit.carrierBoard == XILINX_ZC706) { fmcSel = (defInit.fmcPort == FMC_LPC ? IICSEL_B0LPC_PS7_ZC706 : IICSEL_B1HPC_PS7_ZC706); } else { fmcSel = (defInit.fmcPort == FMC_LPC ? IICSEL_B0LPC_AXI : IICSEL_B1HPC_AXI); } } xil_printf("\n\rInitializing XCOMM I2C...\n\r"); ret = XCOMM_InitI2C(&defInit); if(ret < 0) { xil_printf("XCOMM Init I2C Failed!\n\r"); return 0; } else { xil_printf("XCOMM Init I2C OK!\n\r"); } xil_printf("\n\rGetting XCOMM Revision...\n\r"); boardVersion = XCOMM_GetBoardVersion(XCOMM_ReadMode_FromHW); if(boardVersion.error == -1) { xil_printf("\n\rGetting XCOMM Revision Failed!\n\r"); } else { xil_printf("Board Version: %s\n\r", boardVersion.value); } xil_printf("\n\rInitializing XCOMM Components...\n\r"); ret = XCOMM_Init(&defInit); if(ret < 0) { xil_printf("XCOMM Init Failed!\n\r"); return 0; } else { xil_printf("XCOMM Init OK!\n\r"); } xil_printf("\n\rInitializing the Rx path...\n\r"); ret = XCOMM_InitRx(&defInit); if(ret < 0) { xil_printf("XCOMM Rx Init Failed!\n\r"); return 0; } else { xil_printf("XCOMM Rx Init OK!\n\r"); } xil_printf("\n\rInitializing the Tx path...\n\r"); ret = XCOMM_InitTx(&defInit); if(ret < 0) { xil_printf("XCOMM Tx Init Failed!\n\r"); return 0; } else { xil_printf("XCOMM Tx Init OK!\n\r"); } xil_printf("\n\rADC sampling rate [Hz]: "); ret = XCOMM_GetAdcSamplingRate(XCOMM_ReadMode_FromHW); xil_printf("%d \n\r", ret); xil_printf("\n\rDAC sampling rate [Hz]: "); ret = XCOMM_GetDacSamplingRate(XCOMM_ReadMode_FromHW); xil_printf("%d \n\r", ret); xil_printf("\n\rDAC available interpolation frequencies [Hz]: "); XCOMM_GetDacAvailableInterpolationFreq(valArray); i = 0; while((valArray[i] != 0) && (i < 5)) { xil_printf("%d ", valArray[i]); i++; } xil_printf("\n\r"); xil_printf("\n\rDAC available center shift frequencies [Hz]: "); XCOMM_GetDacAvailableCenterShiftFreq(valArray); i = 0; while((valArray[i] != -1) && (i < 17)) { xil_printf("%d ", valArray[i]); i++; } xil_printf("\n\r"); xil_printf("\n\rTesting the ADC communication... \n\r"); XCOMM_SetAdcTestMode(0x01, XCOMM_AdcChannel_All); adc_capture(fmcSel, 1024, DDR_BASEADDR); for (mode = 0x1; mode <= 0x7; mode++) { XCOMM_SetAdcTestMode(mode, XCOMM_AdcChannel_All); adc_test(fmcSel, mode, 0x1); } xil_printf("ADC test complete.\n\r"); xil_printf("\n\rTesting the DAC communication... \n\r"); dac_test(fmcSel); xil_printf("DAC test complete.\n\r"); xil_printf("\n\rSetting the VGA gain to: %d.%d dB\n\r", (int)defInit.rxGain1000/1000, (int)((defInit.rxGain1000 - (int)(defInit.rxGain1000/1000)*1000))); retGain = (float)XCOMM_SetRxGain(defInit.rxGain1000) / 1000.0f; xil_printf("Actual set VGA gain: %d.%d dB\n\r", (int)retGain, (int)((retGain - (int)retGain) * 1000)); xil_printf("\n\rSetting the Rx frequency to: %lld%06lld\n\r", defInit.rxFrequency/(uint64_t)1e6, defInit.rxFrequency%(uint64_t)1e6); retFreqRx = XCOMM_SetRxFrequency(defInit.rxFrequency); xil_printf("Actual set Rx frequency: %lld%06lld\n\r", retFreqRx/(uint64_t)1e6, retFreqRx%(uint64_t)1e6); xil_printf("\n\rSetting the Tx frequency to: %lld%06lld\n\r", defInit.txFrequency/(uint64_t)1e6, defInit.txFrequency%(uint64_t)1e6); retFreqTx = XCOMM_SetTxFrequency(defInit.txFrequency); xil_printf("Actual set Tx frequency: %lld%06lld\n\r", retFreqTx/(uint64_t)1e6, retFreqTx%(uint64_t)1e6); xil_printf("\n\rSetting up the DDS... \n\r"); dds_setup(fmcSel, 5, 5); xil_printf("DDS setup complete.\n\r"); xil_printf("\n\rReading data from air... \n\r"); XCOMM_SetAdcTestMode(XCOMM_AdcTestMode_Off, XCOMM_AdcChannel_All); while(1) { adc_capture(fmcSel, 1024, DDR_BASEADDR); } xil_printf("Read data from air complete. \n\r"); xil_printf("\n\rFinished XCOMM Test Program\n\r"); Xil_DCacheDisable(); Xil_ICacheDisable(); return 0; }
/**************************************************************************//** * @brief Initializes the XCOMM board * * @param pDefInit - pointer to initialization structure * * @return If success, return 0 * if error, return -1 ******************************************************************************/ int32_t XCOMM_Init(XCOMM_DefaultInit* pDefInit) { /* Local variables */ uint32_t enableCommMux; /* Reset the XCOMM state variables */ int32_t i = 0; int8_t* pData = (int8_t*)&XCOMM_State; for(i = 0; i < sizeof(XCOMM_State); i++) { pData[i] = 0; } /* Initialize the SPI communication */ switch(pDefInit->carrierBoard) { case XILINX_KC705: case XILINX_VC707: case XILINX_ZC702: enableCommMux = 1; break; case DIGILENT_ZED: pDefInit->fmcPort = FMC_HPC; case XILINX_ML605: default: enableCommMux = 0; break; } XCOMM_boardFmcPort = enableCommMux ? FMC_HPC : pDefInit->fmcPort; if(SPI_Init(pDefInit->fmcPort, enableCommMux) < 0) return -1; /* Initialize the AD9548 */ if(ad9548_setup() < 0) return -1; /* Initialize the AD9523 */ if(ad9523_setup() < 0) return -1; if(XCOMM_SetAdcSamplingRate(pDefInit->adcSamplingRate) < 0) return -1; if(XCOMM_SetDacSamplingRate(pDefInit->dacSamplingRate) < 0) return -1; /* Initialize the Rx ADF4351 */ if(adf4351_setup(ADF4351_RX_CHANNEL) < 0) return -1; if(XCOMM_SetRxFrequency(pDefInit->rxFrequency) < 0) return -1; /* Initialize the Tx ADF4351 */ if(adf4351_setup(ADF4351_TX_CHANNEL) < 0) return -1; if(XCOMM_SetTxFrequency(pDefInit->txFrequency) < 0) return -1; /* Initialize the AD9122 */ DAC_Core_Init(pDefInit->fmcPort); if(ad9122_setup() < 0) return -1; /* Initialize the AD9643 */ ADC_Core_Init(pDefInit->fmcPort); if(ad9643_setup() < 0) return -1; /* Initialize the AD8366 */ if(ad8366_setup() < 0) return -1; if(XCOMM_SetRxGain(pDefInit->rxGain1000) < 0) return -1; /* Read the calibration data from the EEPROM */ if(EEPROM_GetCalData((uint8_t*)XCOMM_calData, &XCOMM_calDataSize, XCOMM_boardFmcPort) < 0) return -1; return 0; }