rffc frequency conversion bugfix

bug_fixes_integration_tx
David Michaeli 2023-06-06 10:33:26 +00:00
rodzic 5ff5f17f0b
commit c42552dfff
4 zmienionych plików z 28 dodań i 12 usunięć

Wyświetl plik

@ -551,6 +551,7 @@ int caribou_smi_init(caribou_smi_st* dev,
memset(&dev->debug_data, 0, sizeof(caribou_smi_debug_data_st));
dev->debug_mode = caribou_smi_none;
dev->invert_iq = false;
dev->initialized = 1;
return 0;
@ -573,6 +574,12 @@ void caribou_smi_set_debug_mode(caribou_smi_st* dev, caribou_smi_debug_mode_en m
dev->debug_mode = mode;
}
//=========================================================================
void caribou_smi_invert_iq(caribou_smi_st* dev, bool invert)
{
dev->invert_iq = invert;
}
//=========================================================================
int caribou_smi_read(caribou_smi_st* dev, caribou_smi_channel_en channel,
caribou_smi_sample_complex_int16* samples,

Wyświetl plik

@ -67,6 +67,8 @@ typedef struct
uint8_t *read_temp_buffer;
uint8_t *write_temp_buffer;
bool invert_iq;
// debugging
caribou_smi_debug_mode_en debug_mode;
@ -78,6 +80,8 @@ int caribou_smi_init(caribou_smi_st* dev,
int caribou_smi_close (caribou_smi_st* dev);
int caribou_smi_check_modules(bool reload);
void caribou_smi_invert_iq(caribou_smi_st* dev, bool invert);
void caribou_smi_set_debug_mode(caribou_smi_st* dev, caribou_smi_debug_mode_en mode);
int caribou_smi_set_driver_streaming_state(caribou_smi_st* dev, smi_stream_state_en state);
smi_stream_state_en caribou_smi_get_driver_streaming_state(caribou_smi_st* dev);

Wyświetl plik

@ -72,11 +72,13 @@ int cariboulite_radio_ext_ref ( sys_st *sys, cariboulite_ext_ref_freq_en ref)
ZF_LOGD("Setting ext_ref = 26MHz");
at86rf215_set_clock_output(&sys->modem, at86rf215_drive_current_8ma, at86rf215_clock_out_freq_26mhz);
rffc507x_setup_reference_freq(&sys->mixer, 26e6);
rffc507x_calibrate(&sys->mixer);
break;
case cariboulite_ext_ref_32mhz:
ZF_LOGD("Setting ext_ref = 32MHz");
at86rf215_set_clock_output(&sys->modem, at86rf215_drive_current_8ma, at86rf215_clock_out_freq_32mhz);
rffc507x_setup_reference_freq(&sys->mixer, 32e6);
rffc507x_calibrate(&sys->mixer);
break;
case cariboulite_ext_ref_off:
ZF_LOGD("Setting ext_ref = OFF");
@ -678,12 +680,13 @@ int cariboulite_radio_set_frequency(cariboulite_radio_state_st* radio,
at86rf215_rf_channel_2400mhz,
modem_freq);
// setup mixer LO according to the actual modem frequency
lo_act_freq = rffc507x_set_frequency(&radio->sys->mixer, modem_act_freq + f_rf);
act_freq = lo_act_freq - modem_act_freq;
// setup mixer LO according to the actual modem frequency
lo_act_freq = rffc507x_set_frequency(&radio->sys->mixer, modem_act_freq - f_rf);
act_freq = modem_act_freq - lo_act_freq;
// setup fpga RFFE <= upconvert (tx / rx)
conversion_direction = conversion_dir_up;
caribou_smi_invert_iq(&radio->sys->smi, true);
}
//-------------------------------------
else if ( f_rf >= CARIBOULITE_2G4_MIN &&
@ -698,6 +701,7 @@ int cariboulite_radio_set_frequency(cariboulite_radio_state_st* radio,
lo_act_freq = 0;
act_freq = modem_act_freq;
conversion_direction = conversion_dir_none;
caribou_smi_invert_iq(&radio->sys->smi, true);
}
//-------------------------------------
else if ( f_rf >= (CARIBOULITE_2G4_MAX) &&
@ -715,6 +719,7 @@ int cariboulite_radio_set_frequency(cariboulite_radio_state_st* radio,
// setup fpga RFFE <= downconvert (tx / rx)
conversion_direction = conversion_dir_down;
caribou_smi_invert_iq(&radio->sys->smi, true);
}
//-------------------------------------
else

Wyświetl plik

@ -148,14 +148,13 @@ int rffc507x_init( rffc507x_st* dev,
set_RFFC507X_MODE(dev, 1);
// put zeros in freq contol registers
//set_RFFC507X_P2VCOSEL(dev, 0);
//set_RFFC507X_CTMAX(dev, 127);
//set_RFFC507X_CTMIN(dev, 0);
//set_RFFC507X_P2CTV(dev, 12);
//set_RFFC507X_P1CTV(dev, 12);
set_RFFC507X_RGBYP(dev, 1);
//set_RFFC507X_P2MIXIDD(dev, 4);
//set_RFFC507X_P1MIXIDD(dev, 4);
set_RFFC507X_P2VCOSEL(dev, 0);
set_RFFC507X_CTMIN(dev, 0);
set_RFFC507X_CTMAX(dev, 127);
set_RFFC507X_P2CTV(dev, 12);
set_RFFC507X_RGBYP(dev, 1);
set_RFFC507X_FULLD(dev, 0);
set_RFFC507X_P2MIXIDD(dev, 4);
// Others
set_RFFC507X_LDEN(dev, 1);
@ -333,7 +332,8 @@ double rffc507x_set_frequency(rffc507x_st* dev, double lo_hz)
set_RFFC507X_P2LODIV(dev, n_lo);
set_RFFC507X_P2N(dev, n);
set_RFFC507X_P2PRESC(dev, fbkdiv >> 1);
set_RFFC507X_P2VCOSEL(dev, 2);
//set_RFFC507X_P2VCOSEL(dev, 0);
set_RFFC507X_AUTO(dev, 1);
set_RFFC507X_P2NMSB(dev, p1nmsb);
set_RFFC507X_P2NLSB(dev, p1nlsb);