|
|
|
@ -312,7 +312,7 @@ void ADF4351_Setup(void)
|
|
|
|
#ifdef __SI5351__
|
|
|
|
#ifdef __SI5351__
|
|
|
|
si5351_available = si5351_init();
|
|
|
|
si5351_available = si5351_init();
|
|
|
|
if (si5351_available)
|
|
|
|
if (si5351_available)
|
|
|
|
si5351_set_frequency(0, 29999000, 0);
|
|
|
|
si5351_set_frequency(0, 30000000, 0);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
// SPI3_CLK_HIGH;
|
|
|
|
// SPI3_CLK_HIGH;
|
|
|
|
@ -444,24 +444,30 @@ void ADF4351_R_counter(int R)
|
|
|
|
void ADF4351_recalculate_PFDRFout(void){
|
|
|
|
void ADF4351_recalculate_PFDRFout(void){
|
|
|
|
int local_r = old_R;
|
|
|
|
int local_r = old_R;
|
|
|
|
old_R = -1;
|
|
|
|
old_R = -1;
|
|
|
|
#ifdef __SI5351__
|
|
|
|
|
|
|
|
if (si5351_available)
|
|
|
|
|
|
|
|
si5351_set_frequency(0, local_setting_frequency_30mhz_x100/100, 0);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
ADF4351_R_counter(local_r);
|
|
|
|
ADF4351_R_counter(local_r);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __SI5351__
|
|
|
|
#ifdef __SI5351__
|
|
|
|
static int shifted = -2;
|
|
|
|
static int shifted = -2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define SHIFT_MUL 31
|
|
|
|
|
|
|
|
#define SHIFT_DIV 29
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define SHIFT_FACTOR 100000
|
|
|
|
void ADF4350_shift_ref(int f) {
|
|
|
|
void ADF4350_shift_ref(int f) {
|
|
|
|
if (f == shifted)
|
|
|
|
if (f == shifted)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
shifted = f;
|
|
|
|
shifted = false;
|
|
|
|
if (f)
|
|
|
|
|
|
|
|
local_setting_frequency_30mhz_x100 = 2999000000;
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
local_setting_frequency_30mhz_x100 = 3000000000;
|
|
|
|
local_setting_frequency_30mhz_x100 = 3000000000;
|
|
|
|
|
|
|
|
if (shifted) {
|
|
|
|
|
|
|
|
local_setting_frequency_30mhz_x100 = (local_setting_frequency_30mhz_x100 * SHIFT_MUL) / SHIFT_DIV;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (si5351_available && shifted)
|
|
|
|
|
|
|
|
si5351_set_int_mul_div(0, SHIFT_MUL, SHIFT_DIV, 0);
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
si5351_set_int_mul_div(0, 30, 30, 0);
|
|
|
|
ADF4351_recalculate_PFDRFout();
|
|
|
|
ADF4351_recalculate_PFDRFout();
|
|
|
|
|
|
|
|
shifted = f;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
@ -1735,10 +1741,10 @@ freq_t SI4463_set_freq(freq_t freq)
|
|
|
|
si_set_offset(0);
|
|
|
|
si_set_offset(0);
|
|
|
|
SI4463_offset_active = false;
|
|
|
|
SI4463_offset_active = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uint32_t R = (freq * output_divider) / (Npresc ? 2*local_setting_frequency_30mhz_x100 : 4*local_setting_frequency_30mhz_x100) - 1; // R between 0x00 and 0x7f (127)
|
|
|
|
uint32_t R = (freq * output_divider) / (Npresc ? 2*config.setting_frequency_30mhz : 4*config.setting_frequency_30mhz) - 1; // R between 0x00 and 0x7f (127)
|
|
|
|
uint64_t MOD = 524288; // = 2^19
|
|
|
|
uint64_t MOD = 524288; // = 2^19
|
|
|
|
uint32_t F = ((freq * output_divider*MOD) / (Npresc ? 2*local_setting_frequency_30mhz_x100 : 4*local_setting_frequency_30mhz_x100)) - R*MOD;
|
|
|
|
uint32_t F = ((freq * output_divider*MOD) / (Npresc ? 2*config.setting_frequency_30mhz : 4*config.setting_frequency_30mhz)) - R*MOD;
|
|
|
|
freq_t actual_freq = (R*MOD + F) * (Npresc ? 2*local_setting_frequency_30mhz_x100 : 4*local_setting_frequency_30mhz_x100)/ output_divider/MOD;
|
|
|
|
freq_t actual_freq = (R*MOD + F) * (Npresc ? 2*config.setting_frequency_30mhz : 4*config.setting_frequency_30mhz)/ output_divider/MOD;
|
|
|
|
#if 0 // Only for debugging
|
|
|
|
#if 0 // Only for debugging
|
|
|
|
int delta = freq - actual_freq;
|
|
|
|
int delta = freq - actual_freq;
|
|
|
|
if (delta < -100 || delta > 100 ){
|
|
|
|
if (delta < -100 || delta > 100 ){
|
|
|
|
|