initial LMS7002M register configuration. modifications for lte-ue and rf_device to use LimeSDR.

This commit is contained in:
Raymond Knopp
2017-01-28 17:32:16 -05:00
parent 2045a49313
commit afb60b8500
9 changed files with 4580 additions and 31 deletions
+7 -3
View File
@@ -136,7 +136,7 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
#ifdef DEBUG_OFDM_MOD
printf("[PHY] symbol %d/%d offset %d (%p,%p -> %p)\n",i,nb_symbols,i*fftsize+(i*nb_prefix_samples),input,&input[i*fftsize],&output[(i*fftsize) + ((i)*nb_prefix_samples)]);
#endif
/*
#ifndef __AVX2__
// handle 128-bit alignment for 128-bit SIMD (SSE4,NEON,AltiVEC)
idft((int16_t *)&input[i*fftsize],
@@ -149,7 +149,11 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
1);
#endif
*/
idft((int16_t *)&input[i*fftsize],
(int16_t *)temp,
1);
// Copy to frame buffer with Cyclic Extension
// Note: will have to adjust for synchronization offset!
@@ -160,12 +164,12 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
// msg("Doing cyclic prefix method\n");
/*
#ifndef __AVX2__
if (fftsize==128)
#else
if (fftsize<=512)
#endif
#endif*/
{
for (j=0; j<fftsize ; j++) {
output_ptr[j] = temp_ptr[j];
+3
View File
@@ -362,6 +362,9 @@ struct openair0_device_t {
*/
int (*trx_set_gains_func)(openair0_device* device, openair0_config_t *openair0_cfg);
/*! \brief Indicator that device is running
*/
int trx_started;
};
/* type of device init function, implemented in shared lib */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+40 -18
View File
@@ -132,26 +132,37 @@ void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) {
*/
int trx_lms_set_gains(openair0_device* device, openair0_config_t *openair0_cfg) {
int ret=0;
double rxg_ratio = openair0_cfg[0].rx_gain[0]/openair0_cfg[0].rx_gain_offset[0];
if (rxg_ratio > 1) {
printf("[LMS] Reduce RX Gain 0 by %f dB\n",openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0]);
ret = -1;
rxg_ratio = 1;
}
LMS_SetNormalizedGain(lms_device, LMS_CH_TX, 0, openair0_cfg[0].tx_gain[0]/100.0);
LMS_SetNormalizedGain(lms_device, LMS_CH_RX, 0, .8*rxg_ratio);
/*
// RX gains, use low-level setting
double gv = openair0_cfg[0].rx_gain[0] - openair0_cfg[0].rx_gain_offset[0];
if (gv > 31) {
printf("RX Gain 0 too high, reduce by %f dB\n",gv-31);
gv = 31;
gv = 31;
ret=-1;
}
if (gv < 0) {
printf("RX Gain 0 too low, increase by %f dB\n",-gv);
gv = 0;
gv = 0;
ret=-1;
}
printf("[LMS] Setting 7002M G_PGA_RBB to %d\n", (int16_t)gv);
LMS7002M lms7;
lms7.SetConnection(lms7.GetConnection());
lms7.Modify_SPI_Reg_bits(LMS7param(G_PGA_RBB),(int16_t)gv);
*/
return(0);
return(ret);
}
/*! \brief Start LMSSDR
@@ -163,7 +174,8 @@ int trx_lms_start(openair0_device *device){
lms_info_str_t list[16]={0};
int n= LMS_GetDeviceList(list);
int ret;
if (n <= 0) {
fprintf(stderr, "No LimeSDR board found: %s\n", n < 0?LMS_GetLastErrorMessage():"");
return -1;
@@ -212,9 +224,9 @@ int trx_lms_start(openair0_device *device){
}
printf("Set TX frequency %f MHz\n",device->openair0_cfg[0].tx_freq[0]/1e6);
printf("Override antenna settings to: RX1_H, TXA_2");
LMS_SetAntenna(lms_device, LMS_CH_RX, 0, 1);
LMS_SetAntenna(lms_device, LMS_CH_TX, 0, 2);
// printf("Override antenna settings to: RX1_H, TXA_2");
// LMS_SetAntenna(lms_device, LMS_CH_RX, 0, 1);
// LMS_SetAntenna(lms_device, LMS_CH_TX, 0, 2);
@@ -245,7 +257,7 @@ int trx_lms_start(openair0_device *device){
tx_stream.dataFmt = lms_stream_t::LMS_FMT_I12;
tx_stream.isTx = true;
trx_lms_set_gains(device, device->openair0_cfg);
if ((ret = trx_lms_set_gains(device, device->openair0_cfg))<0) return(-1);
if (LMS_SetupStream(lms_device, &tx_stream)!=0)
printf("TX stream setup failed %s\n",LMS_GetLastErrorMessage());
@@ -259,6 +271,7 @@ int trx_lms_start(openair0_device *device){
printf("Failed to start TX stream %s\n",LMS_GetLastErrorMessage());
if (LMS_StartStream(&tx_stream)!=0)
printf("Failed to start Rx stream %s\n",LMS_GetLastErrorMessage());
device->trx_started=1;
return 0;
}
@@ -272,6 +285,7 @@ int trx_lms_stop(openair0_device *device) {
LMS_DestroyStream(lms_device,&rx_stream);
LMS_DestroyStream(lms_device,&tx_stream);
LMS_Close(lms_device);
device->trx_started=0;
}
/*! \brief Set frequencies (TX/RX)
@@ -292,14 +306,22 @@ int trx_lms_set_freq(openair0_device* device, openair0_config_t *openair0_cfg,in
// 31 = 19 dB => 105 dB total gain @ 2.6 GHz
/*! \brief calibration table for LMSSDR */
// V1.2 board
rx_gain_calib_table_t calib_table_lmssdr_1v2[] = {
{3500000000.0,44.0}, // on L PAD
{2660000000.0,62.0}, // on L PAD
{2300000000.0,62.0}, // on L PAD
{1880000000.0,64.0}, // on L PAD
{816000000.0,79.0}, // on W PAD
{-1,0}};
// V1.4 board
rx_gain_calib_table_t calib_table_lmssdr[] = {
{3500000000.0,70.0},
{2660000000.0,80.0},
{2300000000.0,80.0},
{1880000000.0,74.0}, // on W PAD
{816000000.0,76.0}, // on W PAD
{3500000000.0,97.0}, // on H PAD
{2660000000.0,110.0}, // on H PAD
{2300000000.0,106.0}, // on H PAD
{1880000000.0,106.0}, // on H PAD
{816000000.0,102.0}, // on W PAD
{-1,0}};
@@ -332,7 +354,7 @@ int trx_lms_reset_stats(openair0_device* device) {
*/
void trx_lms_end(openair0_device *device) {
device->trx_started=0;
}
extern "C" {
+4 -1
View File
@@ -137,6 +137,8 @@ static int trx_usrp_start(openair0_device *device)
s->tx_count = 0;
s->rx_timestamp = 0;
device->trx_started=1;
return 0;
}
/*! \brief Terminate operation of the USRP transceiver -- free all associated resources
@@ -152,7 +154,7 @@ static void trx_usrp_end(openair0_device *device)
s->tx_md.end_of_burst = true;
s->tx_stream->send("", 0, s->tx_md);
s->tx_md.end_of_burst = false;
device->trx_started=0;
}
/*! \brief Called to send samples to the USRP RF target
@@ -453,6 +455,7 @@ int trx_usrp_set_gains(openair0_device* device,
* \param card refers to the hardware index to use
*/
int trx_usrp_stop(openair0_device* device) {
device->trx_started=0;
return(0);
}
+14 -9
View File
@@ -368,14 +368,15 @@ static void *UE_thread_synch(void *arg)
while (sync_var<0)
pthread_cond_wait(&sync_cond, &sync_mutex);
pthread_mutex_unlock(&sync_mutex);
printf("Started device, unlocked sync_mutex (UE_sync_thread)\n");
if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
LOG_E(HW,"Could not start the device\n");
oai_exit=1;
}
pthread_mutex_unlock(&sync_mutex);
printf("Started device, unlocked sync_mutex (UE_sync_thread)\n");
while (oai_exit==0) {
if (pthread_mutex_lock(&UE->proc.mutex_synch) != 0) {
@@ -485,13 +486,14 @@ static void *UE_thread_synch(void *arg)
UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0);
//UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]);
UE->rfdevice.trx_stop_func(&UE->rfdevice);
sleep(1);
init_frame_parms(&UE->frame_parms,1);
if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
LOG_E(HW,"Could not start the device\n");
oai_exit=1;
}
//UE->rfdevice.trx_stop_func(&UE->rfdevice);
// sleep(1);
// init_frame_parms(&UE->frame_parms,1);
// if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
// LOG_E(HW,"Could not start the device\n");
// oai_exit=1;
// }
}
else {
UE->is_synchronized = 1;
@@ -939,6 +941,9 @@ void *UE_thread(void *arg) {
itti_send_msg_to_task (TASK_NAS_UE, INSTANCE_DEFAULT, message_p);
#endif
while (UE->rfdevice.trx_started==0)
usleep(500);
while (!oai_exit) {
if (UE->is_synchronized == 0) {