kopia lustrzana https://github.com/cariboulabs/cariboulite
rffc frequency conversion bugfix
rodzic
5ff5f17f0b
commit
c42552dfff
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue