int SetADCMixer(int Tile_Id, int Block_Id, double freq, double phase) { XRFdc_Mixer_Settings SetMixerSettings = {0}; XRFdc_Mixer_Settings GetMixerSettings = {0}; int type = RFDC_ADC; int ret; XRFdc_GetMixerSettings(&RFdcInst, XRFDC_ADC_TILE, Tile_Id, Block_Id, &GetMixerSettings); printf("\n******** Tile %d / Block %d ",Tile_Id,Block_Id); printf("\n.CoarseMixFreq = %x ",GetMixerSettings.CoarseMixFreq); printf("\n.MixerType = %x ",GetMixerSettings.MixerType); printf("\n.MixerMode = %x ",GetMixerSettings.MixerMode); printf("\n.Freq = %f ",GetMixerSettings.Freq); printf("\n.PhaseOffset = %f ",GetMixerSettings.PhaseOffset); printf("\n.FineMixerScale = %x ",GetMixerSettings.FineMixerScale); printf("\n.EventSource = %x ",GetMixerSettings.EventSource); GetMixerSettings.EventSource=XRFDC_EVNT_SRC_TILE; // not sure ? //GetMixerSettings.EventSource=XRFDC_EVNT_SRC_SYSREF; // change on mix frequency (Hz) ?) int F1 = 1e6*GetMixerSettings.Freq; int F2 = 1e6*freq; printf("\nF1= %d, F2=%d ",F1,F2); if (F1!=F2) { if (freq==0.0) // mixer off { printf(" OFF"); GetMixerSettings.Freq = 0.0; // en MHz GetMixerSettings.PhaseOffset = 0.0; } else { printf(" ON %f MHz Phase=%f°",freq,phase); GetMixerSettings.Freq = freq; // en MHz GetMixerSettings.PhaseOffset = phase; } ret = XRFdc_SetMixerSettings(&RFdcInst, XRFDC_ADC_TILE, Tile_Id, Block_Id, &GetMixerSettings); if (ret != XRFDC_SUCCESS) { printf("\nXRFdc_XRFdc_SetMixerSettings failed %d\r\n",ret); return XRFDC_FAILURE; } XRFdc_ResetNCOPhase(&RFdcInst, XRFDC_ADC_TILE, Tile_Id, Block_Id); // DDC Block0 XRFdc_UpdateEvent(&RFdcInst, XRFDC_ADC_TILE, Tile_Id, Block_Id, XRFDC_EVENT_MIXER); } else { printf("\n>> Already configured @ %f MHz , nothing to do ! \n",freq); ret = SUCCESS; } return(ret); }