fix: 调整跳频逻辑,增加nco update req持续时间;调整频点生成方式
This commit is contained in:
@@ -94,15 +94,15 @@
|
||||
#endif
|
||||
|
||||
#define LMK04828
|
||||
#define LMX2594_ADC
|
||||
#define LMX2594_DAC
|
||||
#define AD9528
|
||||
//#define LMX2594_ADC
|
||||
//#define LMX2594_DAC
|
||||
//#define AD9528
|
||||
|
||||
#define AD9361_REG
|
||||
#define AD9361_API
|
||||
//#define AD9361_REG
|
||||
//#define AD9361_API
|
||||
|
||||
#define AD9653
|
||||
#define AD9694
|
||||
//#define AD9653
|
||||
//#define AD9694
|
||||
|
||||
// AD9361 Configuration
|
||||
#define SPI_INTERFACE_SPI_ENGINE
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
// Standard
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <math.h>
|
||||
// Xilinx
|
||||
#include "xgpiops.h"
|
||||
#include "drivers/axi_core/spi_engine/spi_engine.h"
|
||||
@@ -839,9 +840,9 @@ int32_t Hardware_Init(void)
|
||||
int32_t Status;
|
||||
|
||||
// gpio initialization
|
||||
Status = Hardware_GpioInit(&Gpio, AD9361_GPIO_DEVICE_ID);
|
||||
Status = Hardware_GpioInit(&Gpio, AD9361_GPIO_DEVICE_ID);
|
||||
|
||||
#ifdef RFSOC
|
||||
#ifdef RFSOC
|
||||
// rf data converter initialization
|
||||
Status |= Hardware_RFdcInit(&RFdc, RFDC_DEVICE_ID);
|
||||
#endif
|
||||
@@ -882,36 +883,6 @@ int32_t Hardware_Init(void)
|
||||
#ifdef AD9694
|
||||
Status |= Hardware_AD9694Init(ad9694_inst, &ad9694_default_init_param);
|
||||
#endif
|
||||
XBram freqHopBram;
|
||||
XBram_Config *xbramConfigPtr;
|
||||
xbramConfigPtr = XBram_LookupConfig(HOP_DEVICE_ID);
|
||||
Status = XBram_CfgInitialize(&freqHopBram, xbramConfigPtr,
|
||||
xbramConfigPtr->CtrlBaseAddress);
|
||||
if(Status != SUCCESS) {
|
||||
DBG_ERROR("");
|
||||
}
|
||||
Status = XBram_SelfTest(&freqHopBram, 0x00);
|
||||
if(Status != SUCCESS) {
|
||||
DBG_ERROR("");
|
||||
}
|
||||
uint64_t array[128];
|
||||
|
||||
uint64_t min_freq = 2800;
|
||||
uint64_t max_freq = 4400;
|
||||
uint64_t freq_num = 201;
|
||||
uint64_t freq_step = (max_freq-min_freq)/(freq_num-1);
|
||||
|
||||
array[0] = freq_num;
|
||||
|
||||
for (int ii = 1; ii < freq_num; ii++)
|
||||
{
|
||||
array[ii] = min_freq + ii*freq_step;
|
||||
}
|
||||
|
||||
size_t word_len = freqHopBram.Config.DataWidth/sizeof(uint64_t);
|
||||
size_t array_len = sizeof(array);
|
||||
size_t array_len_aligned = (array_len + word_len - 1) / word_len * word_len;
|
||||
memcpy(freqHopBram.Config.MemBaseAddress, array, array_len_aligned);
|
||||
|
||||
#ifdef RFSOC
|
||||
/*
|
||||
@@ -928,31 +899,31 @@ int32_t Hardware_Init(void)
|
||||
*
|
||||
*/
|
||||
|
||||
// // get & set mixer settings
|
||||
// XRFdc_Mixer_Settings Mixer_Settings_DAC;
|
||||
//
|
||||
// // 3th channel
|
||||
// Status = XRFdc_GetMixerSettings(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
|
||||
// XRFDC_BLK_ID0, &Mixer_Settings_DAC);
|
||||
// if (Status != XST_SUCCESS) {
|
||||
// return XST_FAILURE;
|
||||
// }
|
||||
//
|
||||
// Mixer_Settings_DAC.Freq = 1500;
|
||||
//
|
||||
// Status = XRFdc_SetMixerSettings(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
|
||||
// XRFDC_BLK_ID0, &Mixer_Settings_DAC);
|
||||
// if (Status != XST_SUCCESS) {
|
||||
// return XST_FAILURE;
|
||||
// }
|
||||
//
|
||||
// mdelay(100);
|
||||
//
|
||||
// Status = XRFdc_UpdateEvent(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
|
||||
// XRFDC_BLK_ID0, XRFDC_EVENT_MIXER);
|
||||
// if (Status != XST_SUCCESS) {
|
||||
// return XST_FAILURE;
|
||||
// }
|
||||
// get & set mixer settings
|
||||
XRFdc_Mixer_Settings Mixer_Settings_DAC;
|
||||
|
||||
// 3rd channel
|
||||
Status = XRFdc_GetMixerSettings(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
|
||||
XRFDC_BLK_ID0, &Mixer_Settings_DAC);
|
||||
if (Status != XST_SUCCESS) {
|
||||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
Mixer_Settings_DAC.Freq = 500;
|
||||
|
||||
Status = XRFdc_SetMixerSettings(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
|
||||
XRFDC_BLK_ID0, &Mixer_Settings_DAC);
|
||||
if (Status != XST_SUCCESS) {
|
||||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
mdelay(100);
|
||||
|
||||
Status = XRFdc_UpdateEvent(&RFdc, XRFDC_DAC_TILE, XRFDC_TILE_ID1,
|
||||
XRFDC_BLK_ID0, XRFDC_EVENT_MIXER);
|
||||
if (Status != XST_SUCCESS) {
|
||||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
/*
|
||||
* ADC Mapping:
|
||||
@@ -962,38 +933,74 @@ int32_t Hardware_Init(void)
|
||||
* 3 (VIN1_01) 225 (XRFDC_TILE_ID1) ADC 0 (XRFDC_BLK_ID0)
|
||||
* 4 (VIN1_23) 225 (XRFDC_TILE_ID1) ADC 1 (XRFDC_BLK_ID1)
|
||||
* 5 (VIN2_01) 226 (XRFDC_TILE_ID2) ADC 0 (XRFDC_BLK_ID0)
|
||||
* 6 (VIN2_23) 227 (XRFDC_TILE_ID2) ADC 1 (XRFDC_BLK_ID1)
|
||||
* 7 (VIN3_01) 224 (XRFDC_TILE_ID0) ADC 0 (XRFDC_BLK_ID0)
|
||||
* 6 (VIN2_23) 226 (XRFDC_TILE_ID2) ADC 1 (XRFDC_BLK_ID1)
|
||||
* 7 (VIN3_01) 227 (XRFDC_TILE_ID3) ADC 0 (XRFDC_BLK_ID0)
|
||||
* 8 (VIN3_23) 227 (XRFDC_TILE_ID3) ADC 1 (XRFDC_BLK_ID1)
|
||||
*
|
||||
*/
|
||||
|
||||
// // get & set mixer settings
|
||||
// XRFdc_Mixer_Settings Mixer_Settings_ADC;
|
||||
//
|
||||
// // 3rd channel
|
||||
// Status = XRFdc_GetMixerSettings(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID1,
|
||||
// XRFDC_BLK_ID0, &Mixer_Settings_ADC);
|
||||
// if (Status != XST_SUCCESS) {
|
||||
// return XST_FAILURE;
|
||||
// }
|
||||
//
|
||||
// Mixer_Settings_ADC.Freq = 1500;
|
||||
// Mixer_Settings_ADC.EventSource = XRFDC_EVNT_SRC_TILE;
|
||||
//
|
||||
// Status = XRFdc_SetMixerSettings(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID1,
|
||||
// XRFDC_BLK_ID0, &Mixer_Settings_ADC);
|
||||
// if (Status != XST_SUCCESS) {
|
||||
// return XST_FAILURE;
|
||||
// }
|
||||
//
|
||||
// mdelay(100);
|
||||
//
|
||||
// Status = XRFdc_UpdateEvent(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID1,
|
||||
// XRFDC_BLK_ID0, XRFDC_EVENT_MIXER);
|
||||
// if (Status != XST_SUCCESS) {
|
||||
// return XST_FAILURE;
|
||||
// }
|
||||
// get & set mixer settings
|
||||
XRFdc_Mixer_Settings Mixer_Settings_ADC;
|
||||
|
||||
// 7th channel
|
||||
Status = XRFdc_GetMixerSettings(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID3,
|
||||
XRFDC_BLK_ID0, &Mixer_Settings_ADC);
|
||||
if (Status != XST_SUCCESS) {
|
||||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
Mixer_Settings_ADC.Freq = 500;
|
||||
Mixer_Settings_ADC.EventSource = XRFDC_EVNT_SRC_TILE;
|
||||
|
||||
Status = XRFdc_SetMixerSettings(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID3,
|
||||
XRFDC_BLK_ID0, &Mixer_Settings_ADC);
|
||||
if (Status != XST_SUCCESS) {
|
||||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
mdelay(100);
|
||||
|
||||
Status = XRFdc_UpdateEvent(&RFdc, XRFDC_ADC_TILE, XRFDC_TILE_ID3,
|
||||
XRFDC_BLK_ID0, XRFDC_EVENT_MIXER);
|
||||
if (Status != XST_SUCCESS) {
|
||||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
// hop ram
|
||||
XBram freqHopBram;
|
||||
XBram_Config *xbramConfigPtr;
|
||||
xbramConfigPtr = XBram_LookupConfig(HOP_DEVICE_ID);
|
||||
Status = XBram_CfgInitialize(&freqHopBram, xbramConfigPtr,
|
||||
xbramConfigPtr->CtrlBaseAddress);
|
||||
if(Status != SUCCESS) {
|
||||
DBG_ERROR("");
|
||||
}
|
||||
Status = XBram_SelfTest(&freqHopBram, 0x00);
|
||||
if(Status != SUCCESS) {
|
||||
DBG_ERROR("");
|
||||
}
|
||||
|
||||
uint64_t array[1024];
|
||||
|
||||
double min_freq = 500;
|
||||
double max_freq = 2100;
|
||||
double freq_step = 50;
|
||||
uint64_t total_freq_num = (uint64_t)(floor((max_freq-min_freq)/freq_step)+1);
|
||||
uint64_t hop_freq_num = (uint64_t)(floor((total_freq_num-1)/2)*3);
|
||||
|
||||
array[0] = hop_freq_num;
|
||||
|
||||
for (int ii = 0; ii < hop_freq_num/3; ii++)
|
||||
{
|
||||
array[3*ii + 1] = (uint64_t)(min_freq/4800*pow(2,48));
|
||||
array[3*ii + 2] = (uint64_t)((min_freq + (2*ii+1)*freq_step)/4800*pow(2,48));
|
||||
array[3*ii + 3] = (uint64_t)((min_freq + (2*ii+2)*freq_step)/4800*pow(2,48));
|
||||
}
|
||||
|
||||
size_t word_len = freqHopBram.Config.DataWidth/sizeof(uint64_t);
|
||||
size_t array_len = sizeof(array);
|
||||
size_t array_len_aligned = (array_len + word_len - 1) / word_len * word_len;
|
||||
memcpy(freqHopBram.Config.MemBaseAddress, array, array_len_aligned);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user