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));
|
memset(&dev->debug_data, 0, sizeof(caribou_smi_debug_data_st));
|
||||||
|
|
||||||
dev->debug_mode = caribou_smi_none;
|
dev->debug_mode = caribou_smi_none;
|
||||||
|
dev->invert_iq = false;
|
||||||
dev->initialized = 1;
|
dev->initialized = 1;
|
||||||
|
|
||||||
return 0;
|
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;
|
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,
|
int caribou_smi_read(caribou_smi_st* dev, caribou_smi_channel_en channel,
|
||||||
caribou_smi_sample_complex_int16* samples,
|
caribou_smi_sample_complex_int16* samples,
|
||||||
|
|
|
@ -67,6 +67,8 @@ typedef struct
|
||||||
|
|
||||||
uint8_t *read_temp_buffer;
|
uint8_t *read_temp_buffer;
|
||||||
uint8_t *write_temp_buffer;
|
uint8_t *write_temp_buffer;
|
||||||
|
|
||||||
|
bool invert_iq;
|
||||||
|
|
||||||
// debugging
|
// debugging
|
||||||
caribou_smi_debug_mode_en debug_mode;
|
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_close (caribou_smi_st* dev);
|
||||||
int caribou_smi_check_modules(bool reload);
|
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);
|
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);
|
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);
|
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");
|
ZF_LOGD("Setting ext_ref = 26MHz");
|
||||||
at86rf215_set_clock_output(&sys->modem, at86rf215_drive_current_8ma, at86rf215_clock_out_freq_26mhz);
|
at86rf215_set_clock_output(&sys->modem, at86rf215_drive_current_8ma, at86rf215_clock_out_freq_26mhz);
|
||||||
rffc507x_setup_reference_freq(&sys->mixer, 26e6);
|
rffc507x_setup_reference_freq(&sys->mixer, 26e6);
|
||||||
|
rffc507x_calibrate(&sys->mixer);
|
||||||
break;
|
break;
|
||||||
case cariboulite_ext_ref_32mhz:
|
case cariboulite_ext_ref_32mhz:
|
||||||
ZF_LOGD("Setting ext_ref = 32MHz");
|
ZF_LOGD("Setting ext_ref = 32MHz");
|
||||||
at86rf215_set_clock_output(&sys->modem, at86rf215_drive_current_8ma, at86rf215_clock_out_freq_32mhz);
|
at86rf215_set_clock_output(&sys->modem, at86rf215_drive_current_8ma, at86rf215_clock_out_freq_32mhz);
|
||||||
rffc507x_setup_reference_freq(&sys->mixer, 32e6);
|
rffc507x_setup_reference_freq(&sys->mixer, 32e6);
|
||||||
|
rffc507x_calibrate(&sys->mixer);
|
||||||
break;
|
break;
|
||||||
case cariboulite_ext_ref_off:
|
case cariboulite_ext_ref_off:
|
||||||
ZF_LOGD("Setting 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,
|
at86rf215_rf_channel_2400mhz,
|
||||||
modem_freq);
|
modem_freq);
|
||||||
|
|
||||||
// setup mixer LO according to the actual modem frequency
|
// setup mixer LO according to the actual modem frequency
|
||||||
lo_act_freq = rffc507x_set_frequency(&radio->sys->mixer, modem_act_freq + f_rf);
|
lo_act_freq = rffc507x_set_frequency(&radio->sys->mixer, modem_act_freq - f_rf);
|
||||||
act_freq = lo_act_freq - modem_act_freq;
|
act_freq = modem_act_freq - lo_act_freq;
|
||||||
|
|
||||||
// setup fpga RFFE <= upconvert (tx / rx)
|
// setup fpga RFFE <= upconvert (tx / rx)
|
||||||
conversion_direction = conversion_dir_up;
|
conversion_direction = conversion_dir_up;
|
||||||
|
caribou_smi_invert_iq(&radio->sys->smi, true);
|
||||||
}
|
}
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
else if ( f_rf >= CARIBOULITE_2G4_MIN &&
|
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;
|
lo_act_freq = 0;
|
||||||
act_freq = modem_act_freq;
|
act_freq = modem_act_freq;
|
||||||
conversion_direction = conversion_dir_none;
|
conversion_direction = conversion_dir_none;
|
||||||
|
caribou_smi_invert_iq(&radio->sys->smi, true);
|
||||||
}
|
}
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
else if ( f_rf >= (CARIBOULITE_2G4_MAX) &&
|
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)
|
// setup fpga RFFE <= downconvert (tx / rx)
|
||||||
conversion_direction = conversion_dir_down;
|
conversion_direction = conversion_dir_down;
|
||||||
|
caribou_smi_invert_iq(&radio->sys->smi, true);
|
||||||
}
|
}
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
else
|
else
|
||||||
|
|
|
@ -148,14 +148,13 @@ int rffc507x_init( rffc507x_st* dev,
|
||||||
set_RFFC507X_MODE(dev, 1);
|
set_RFFC507X_MODE(dev, 1);
|
||||||
|
|
||||||
// put zeros in freq contol registers
|
// put zeros in freq contol registers
|
||||||
//set_RFFC507X_P2VCOSEL(dev, 0);
|
set_RFFC507X_P2VCOSEL(dev, 0);
|
||||||
//set_RFFC507X_CTMAX(dev, 127);
|
set_RFFC507X_CTMIN(dev, 0);
|
||||||
//set_RFFC507X_CTMIN(dev, 0);
|
set_RFFC507X_CTMAX(dev, 127);
|
||||||
//set_RFFC507X_P2CTV(dev, 12);
|
set_RFFC507X_P2CTV(dev, 12);
|
||||||
//set_RFFC507X_P1CTV(dev, 12);
|
set_RFFC507X_RGBYP(dev, 1);
|
||||||
set_RFFC507X_RGBYP(dev, 1);
|
set_RFFC507X_FULLD(dev, 0);
|
||||||
//set_RFFC507X_P2MIXIDD(dev, 4);
|
set_RFFC507X_P2MIXIDD(dev, 4);
|
||||||
//set_RFFC507X_P1MIXIDD(dev, 4);
|
|
||||||
|
|
||||||
// Others
|
// Others
|
||||||
set_RFFC507X_LDEN(dev, 1);
|
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_P2LODIV(dev, n_lo);
|
||||||
set_RFFC507X_P2N(dev, n);
|
set_RFFC507X_P2N(dev, n);
|
||||||
set_RFFC507X_P2PRESC(dev, fbkdiv >> 1);
|
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_P2NMSB(dev, p1nmsb);
|
||||||
set_RFFC507X_P2NLSB(dev, p1nlsb);
|
set_RFFC507X_P2NLSB(dev, p1nlsb);
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue