Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
0509123d
Commit
0509123d
authored
5 years ago
by
Florian Kaltenberger
Committed by
Florian Kaltenberger
4 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixing adc inpput shift and gain table for N310. adding pps sync.
parent
f4313dbc
master
develop_arm_ue
No related merge requests found
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
203 additions
and
224 deletions
+203
-224
targets/ARCH/COMMON/common_lib.h
targets/ARCH/COMMON/common_lib.h
+3
-1
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+44
-40
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpb210.conf
.../GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpb210.conf
+156
-183
No files found.
targets/ARCH/COMMON/common_lib.h
View file @
0509123d
...
@@ -90,6 +90,8 @@ typedef enum {
...
@@ -90,6 +90,8 @@ typedef enum {
USRP_B200_DEV
,
USRP_B200_DEV
,
/*!\brief device is USRP X300/X310*/
/*!\brief device is USRP X300/X310*/
USRP_X300_DEV
,
USRP_X300_DEV
,
/*!\brief device is USRP N300/N310*/
USRP_N300_DEV
,
/*!\brief device is BLADE RF*/
/*!\brief device is BLADE RF*/
BLADERF_DEV
,
BLADERF_DEV
,
/*!\brief device is LMSSDR (SoDeRa)*/
/*!\brief device is LMSSDR (SoDeRa)*/
...
@@ -104,7 +106,7 @@ typedef enum {
...
@@ -104,7 +106,7 @@ typedef enum {
UEDv2_DEV
,
UEDv2_DEV
,
MAX_RF_DEV_TYPE
MAX_RF_DEV_TYPE
}
dev_type_t
;
}
dev_type_t
;
#define DEVTYPE_NAMES {"","EXMIMO","USRP B200","USRP X300","BLADERF","LMSSDR","IRIS","No HW","ADRV9371_ZC706","UEDv2"}
#define DEVTYPE_NAMES {"","EXMIMO","USRP B200","USRP X300","
USRP N300","
BLADERF","LMSSDR","IRIS","No HW","ADRV9371_ZC706","UEDv2"}
/*!\brief transport protocol types
/*!\brief transport protocol types
*/
*/
typedef
enum
{
typedef
enum
{
...
...
This diff is collapsed.
Click to expand it.
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
0509123d
...
@@ -108,7 +108,8 @@ typedef struct {
...
@@ -108,7 +108,8 @@ typedef struct {
int64_t
rx_count
;
int64_t
rx_count
;
int
wait_for_first_pps
;
int
wait_for_first_pps
;
int
use_gps
;
int
use_gps
;
int
first_tx
;
//int first_tx;
//int first_rx;
//! timestamp of RX packet
//! timestamp of RX packet
openair0_timestamp
rx_timestamp
;
openair0_timestamp
rx_timestamp
;
}
usrp_state_t
;
}
usrp_state_t
;
...
@@ -282,31 +283,28 @@ static int trx_usrp_start(openair0_device *device) {
...
@@ -282,31 +283,28 @@ static int trx_usrp_start(openair0_device *device) {
// set pin 5 (Shutdown LNA) to 1 when the radio is transmitting and receiveing (ATR_XX)
// set pin 5 (Shutdown LNA) to 1 when the radio is transmitting and receiveing (ATR_XX)
// (we use full duplex here, because our RX is on all the time - this might need to change later)
// (we use full duplex here, because our RX is on all the time - this might need to change later)
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"ATR_XX"
,
(
1
<<
5
),
0x7f
);
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"ATR_XX"
,
(
1
<<
5
),
0x7f
);
// set the output pins to
0
// set the output pins to
1
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"OUT"
,
7
<<
7
,
0xf80
);
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"OUT"
,
7
<<
7
,
0xf80
);
// init recv and send streaming
s
->
wait_for_first_pps
=
1
;
uhd
::
stream_cmd_t
cmd
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
s
->
rx_count
=
0
;
LOG_I
(
HW
,
"Time in secs now: %llu
\n
"
,
s
->
usrp
->
get_time_now
().
to_ticks
(
s
->
sample_rate
));
s
->
tx_count
=
0
;
LOG_I
(
HW
,
"Time in secs last pps: %llu
\n
"
,
s
->
usrp
->
get_time_last_pps
().
to_ticks
(
s
->
sample_rate
));
//s->first_tx = 1;
//s->first_rx = 1;
if
(
s
->
use_gps
==
1
||
device
->
openair0_cfg
[
0
].
time_source
==
external
)
{
s
->
rx_timestamp
=
0
;
s
->
wait_for_first_pps
=
1
;
cmd
.
time_spec
=
s
->
usrp
->
get_time_last_pps
()
+
uhd
::
time_spec_t
(
1.0
);
s
->
usrp
->
set_time_next_pps
(
uhd
::
time_spec_t
(
0.0
));
}
else
{
// wait for the pps to change
s
->
wait_for_first_pps
=
0
;
uhd
::
time_spec_t
time_last_pps
=
s
->
usrp
->
get_time_last_pps
();
cmd
.
time_spec
=
s
->
usrp
->
get_time_now
()
+
uhd
::
time_spec_t
(
0.005
);
while
(
time_last_pps
==
s
->
usrp
->
get_time_last_pps
())
{
boost
::
this_thread
::
sleep
(
boost
::
posix_time
::
milliseconds
(
1
));
}
}
uhd
::
stream_cmd_t
cmd
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
cmd
.
time_spec
=
uhd
::
time_spec_t
(
1.0
);
cmd
.
stream_now
=
false
;
// start at constant delay
cmd
.
stream_now
=
false
;
// start at constant delay
s
->
rx_stream
->
issue_stream_cmd
(
cmd
);
s
->
rx_stream
->
issue_stream_cmd
(
cmd
);
/*s->tx_md.time_spec = cmd.time_spec + uhd::time_spec_t(1-(double)s->tx_forward_nsamps/s->sample_rate);
s->tx_md.has_time_spec = true;
s->tx_md.start_of_burst = true;
s->tx_md.end_of_burst = false;*/
s
->
rx_count
=
0
;
s
->
tx_count
=
0
;
s
->
rx_timestamp
=
0
;
return
0
;
return
0
;
}
}
/*! \brief Terminate operation of the USRP transceiver -- free all associated resources
/*! \brief Terminate operation of the USRP transceiver -- free all associated resources
...
@@ -635,7 +633,6 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
...
@@ -635,7 +633,6 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
int16x8_t
buff_tmp
[
2
][
nsamps2
];
int16x8_t
buff_tmp
[
2
][
nsamps2
];
#endif
#endif
if
(
device
->
type
==
USRP_B200_DEV
)
{
if
(
cc
>
1
)
{
if
(
cc
>
1
)
{
// receive multiple channels (e.g. RF A and RF B)
// receive multiple channels (e.g. RF A and RF B)
std
::
vector
<
void
*>
buff_ptrs
;
std
::
vector
<
void
*>
buff_ptrs
;
...
@@ -648,7 +645,7 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
...
@@ -648,7 +645,7 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
samples_received
=
0
;
samples_received
=
0
;
while
(
samples_received
!=
nsamps
)
{
while
(
samples_received
!=
nsamps
)
{
samples_received
+=
s
->
rx_stream
->
recv
(
buff_tmp
[
0
]
+
samples_received
,
samples_received
+=
s
->
rx_stream
->
recv
(
(
void
*
)((
int32_t
*
)
buff_tmp
[
0
]
+
samples_received
)
,
nsamps
-
samples_received
,
s
->
rx_md
);
nsamps
-
samples_received
,
s
->
rx_md
);
if
((
s
->
wait_for_first_pps
==
0
)
&&
(
s
->
rx_md
.
error_code
!=
uhd
::
rx_metadata_t
::
ERROR_CODE_NONE
))
if
((
s
->
wait_for_first_pps
==
0
)
&&
(
s
->
rx_md
.
error_code
!=
uhd
::
rx_metadata_t
::
ERROR_CODE_NONE
))
...
@@ -658,7 +655,6 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
...
@@ -658,7 +655,6 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
printf
(
"sleep...
\n
"
);
//usleep(100);
printf
(
"sleep...
\n
"
);
//usleep(100);
}
}
}
}
if
(
samples_received
==
nsamps
)
s
->
wait_for_first_pps
=
0
;
if
(
samples_received
==
nsamps
)
s
->
wait_for_first_pps
=
0
;
}
}
...
@@ -684,22 +680,10 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
...
@@ -684,22 +680,10 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
#endif
#endif
}
}
}
}
}
else
if
(
device
->
type
==
USRP_X300_DEV
)
{
if
(
cc
>
1
)
{
// receive multiple channels (e.g. RF A and RF B)
std
::
vector
<
void
*>
buff_ptrs
;
for
(
int
i
=
0
;
i
<
cc
;
i
++
)
buff_ptrs
.
push_back
(
buff
[
i
]);
if
(
samples_received
<
nsamps
)
{
LOG_E
(
HW
,
"[recv] received %d samples out of %d
\n
"
,
samples_received
,
nsamps
);
samples_received
=
s
->
rx_stream
->
recv
(
buff_ptrs
,
nsamps
,
s
->
rx_md
,
1.0
);
}
else
{
// receive a single channel (e.g. from connector RF A)
samples_received
=
s
->
rx_stream
->
recv
(
buff
[
0
],
nsamps
,
s
->
rx_md
,
1.0
);
}
}
}
if
(
samples_received
<
nsamps
)
LOG_E
(
HW
,
"[recv] received %d samples out of %d
\n
"
,
samples_received
,
nsamps
);
if
(
s
->
rx_md
.
error_code
!=
uhd
::
rx_metadata_t
::
ERROR_CODE_NONE
)
if
(
s
->
rx_md
.
error_code
!=
uhd
::
rx_metadata_t
::
ERROR_CODE_NONE
)
LOG_E
(
HW
,
"%s
\n
"
,
s
->
rx_md
.
to_pp_string
(
true
).
c_str
());
LOG_E
(
HW
,
"%s
\n
"
,
s
->
rx_md
.
to_pp_string
(
true
).
c_str
());
...
@@ -835,6 +819,17 @@ rx_gain_calib_table_t calib_table_x310[] = {
...
@@ -835,6 +819,17 @@ rx_gain_calib_table_t calib_table_x310[] = {
{
-
1
,
0
}
{
-
1
,
0
}
};
};
/*! \brief USRPB210 RX calibration table */
rx_gain_calib_table_t
calib_table_n310
[]
=
{
{
3500000000.0
,
0.0
},
{
2660000000.0
,
0.0
},
{
2300000000.0
,
0.0
},
{
1880000000.0
,
0.0
},
{
816000000.0
,
0.0
},
{
-
1
,
0
}
};
/*! \brief Set RX gain offset
/*! \brief Set RX gain offset
* \param openair0_cfg RF frontend parameters set by application
* \param openair0_cfg RF frontend parameters set by application
* \param chain_index RF chain to apply settings to
* \param chain_index RF chain to apply settings to
...
@@ -984,7 +979,7 @@ extern "C" {
...
@@ -984,7 +979,7 @@ extern "C" {
if
(
device_adds
[
0
].
get
(
"type"
)
==
"n3xx"
)
{
if
(
device_adds
[
0
].
get
(
"type"
)
==
"n3xx"
)
{
printf
(
"Found USRP n300
\n
"
);
printf
(
"Found USRP n300
\n
"
);
device
->
type
=
USRP_
X300_DEV
;
//treat it as X300 for now
device
->
type
=
USRP_
N300_DEV
;
usrp_master_clock
=
122.88e6
;
usrp_master_clock
=
122.88e6
;
args
+=
boost
::
str
(
boost
::
format
(
",master_clock_rate=%f"
)
%
usrp_master_clock
);
args
+=
boost
::
str
(
boost
::
format
(
",master_clock_rate=%f"
)
%
usrp_master_clock
);
//args += ", send_buff_size=33554432";
//args += ", send_buff_size=33554432";
...
@@ -1070,9 +1065,18 @@ extern "C" {
...
@@ -1070,9 +1065,18 @@ extern "C" {
if
(
device
->
type
==
USRP_X300_DEV
)
{
if
(
device
->
type
==
USRP_X300_DEV
)
{
openair0_cfg
[
0
].
rx_gain_calib_table
=
calib_table_x310
;
openair0_cfg
[
0
].
rx_gain_calib_table
=
calib_table_x310
;
std
::
cerr
<<
"-- Using calibration table: calib_table_x310"
<<
std
::
endl
;
// Bell Labs info
std
::
cerr
<<
"-- Using calibration table: calib_table_x310"
<<
std
::
endl
;
}
if
(
device
->
type
==
USRP_N300_DEV
)
{
openair0_cfg
[
0
].
rx_gain_calib_table
=
calib_table_n310
;
std
::
cerr
<<
"-- Using calibration table: calib_table_n310"
<<
std
::
endl
;
}
if
(
device
->
type
==
USRP_N300_DEV
||
device
->
type
==
USRP_X300_DEV
)
{
LOG_I
(
HW
,
"%s() sample_rate:%u
\n
"
,
__FUNCTION__
,
(
int
)
openair0_cfg
[
0
].
sample_rate
);
LOG_I
(
HW
,
"%s() sample_rate:%u
\n
"
,
__FUNCTION__
,
(
int
)
openair0_cfg
[
0
].
sample_rate
);
switch
((
int
)
openair0_cfg
[
0
].
sample_rate
)
{
switch
((
int
)
openair0_cfg
[
0
].
sample_rate
)
{
case
122880000
:
case
122880000
:
// from usrp_time_offset
// from usrp_time_offset
...
...
This diff is collapsed.
Click to expand it.
targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpb210.conf
View file @
0509123d
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment