Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
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
lizhongxiao
OpenXG-RAN
Commits
03ba5582
Commit
03ba5582
authored
May 14, 2019
by
ivan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
successful testing of RX path of DL and SL reception with 2 B210
parent
01913855
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
51 additions
and
31 deletions
+51
-31
openair1/PHY/LTE_UE_TRANSPORT/sldch.c
openair1/PHY/LTE_UE_TRANSPORT/sldch.c
+1
-1
openair1/PHY/LTE_UE_TRANSPORT/slsch.c
openair1/PHY/LTE_UE_TRANSPORT/slsch.c
+2
-1
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+48
-29
No files found.
openair1/PHY/LTE_UE_TRANSPORT/sldch.c
View file @
03ba5582
...
...
@@ -96,7 +96,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
ru_tmp
.
common
.
rxdata
=
(
int32_t
**
)
malloc16
(
ue
->
frame_parms
.
nb_antennas_rx
*
sizeof
(
int32_t
*
));
for
(
int
aa
=
SLaoffset
;
aa
<
(
ue
->
frame_parms
.
nb_antennas_rx
<<
SLaoffset
);
aa
+=
(
1
<<
SLaoffset
))
{
ru_tmp
.
common
.
rxdata
[
aa
]
=
(
int32_t
*
)
&
ue
->
common_vars
.
rxdata
[
aa
][
0
];
ru_tmp
.
common
.
rxdata
[
aa
>>
1
]
=
(
int32_t
*
)
&
ue
->
common_vars
.
rxdata
[
aa
][
0
];
}
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
...
...
openair1/PHY/LTE_UE_TRANSPORT/slsch.c
View file @
03ba5582
...
...
@@ -885,8 +885,9 @@ void pscch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
memcpy
((
void
*
)
&
ru_tmp
.
frame_parms
,(
void
*
)
&
ue
->
frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
ru_tmp
.
N_TA_offset
=
0
;
// ru_tmp.common.rxdata = ue->common_vars.rxdata;
ru_tmp
.
common
.
rxdata
=
(
int32_t
**
)
malloc16
(
ue
->
frame_parms
.
nb_antennas_rx
*
sizeof
(
int32_t
*
));
for
(
int
aa
=
SLaoffset
;
aa
<
(
ue
->
frame_parms
.
nb_antennas_rx
<<
SLaoffset
);
aa
+=
(
1
<<
SLaoffset
))
{
ru_tmp
.
common
.
rxdata
[
aa
]
=
(
int32_t
*
)
&
ue
->
common_vars
.
rxdata
[
aa
][
0
];
ru_tmp
.
common
.
rxdata
[
aa
>>
1
]
=
(
int32_t
*
)
&
ue
->
common_vars
.
rxdata
[
aa
][
0
];
}
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
03ba5582
...
...
@@ -314,32 +314,53 @@ static int trx_usrp_start(openair0_device *device) {
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"CTRL"
,
0x1f
,
0x1f
);
//set ATR register
s
->
usrp
->
set_gpio_attr
(
"FP0"
,
"ATR_RX"
,
1
<<
4
,
0x1f
);
// init recv and send streaming
uhd
::
stream_cmd_t
cmd
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
LOG_I
(
PHY
,
"USRP %p: Time in secs now: %llu
\n
"
,
s
,
s
->
usrp
->
get_time_now
().
to_ticks
(
s
->
sample_rate
));
LOG_I
(
PHY
,
"USRP %p: Time in secs last pps: %llu
\n
"
,
s
,
s
->
usrp
->
get_time_last_pps
().
to_ticks
(
s
->
sample_rate
));
if
(
s
->
use_gps
==
1
||
s
->
external_time_source
==
1
)
{
s
->
wait_for_first_pps
=
1
;
cmd
.
time_spec
=
s
->
usrp
->
get_time_last_pps
()
+
uhd
::
time_spec_t
(
1.0
);
}
else
{
s
->
wait_for_first_pps
=
0
;
cmd
.
time_spec
=
s
->
usrp
->
get_time_now
()
+
uhd
::
time_spec_t
(
0.05
);
}
LOG_I
(
PHY
,
"USRP %p: Time to wakeups: %llu
\n
"
,
s
,
cmd
.
time_spec
.
to_ticks
(
s
->
sample_rate
));
cmd
.
stream_now
=
false
;
// start at constant delay
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
;
// init recv and send streaming
if
(
s
==
(
usrp_state_t
*
)
device
->
priv2
)
break
;
}
uhd
::
stream_cmd_t
cmd
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
cmd
.
stream_now
=
false
;
// start at constant delay
s
=
(
usrp_state_t
*
)
device
->
priv
;
if
(
s
->
use_gps
==
1
||
s
->
external_time_source
==
1
)
{
s
->
wait_for_first_pps
=
1
;
s
->
usrp
->
set_time_next_pps
(
uhd
::
time_spec_t
(
0.0
));
if
(
device
->
priv2
!=
NULL
)
{
usrp_state_t
*
s2
=
(
usrp_state_t
*
)
device
->
priv2
;
s2
->
wait_for_first_pps
=
1
;
s2
->
usrp
->
set_time_next_pps
(
uhd
::
time_spec_t
(
0.0
));
}
sleep
(
1
);
cmd
.
time_spec
=
s
->
usrp
->
get_time_last_pps
()
+
uhd
::
time_spec_t
(
1.0
);
s
->
tx_md
.
time_spec
=
cmd
.
time_spec
+
uhd
::
time_spec_t
(
1
-
(
double
)
s
->
tx_forward_nsamps
/
s
->
sample_rate
);
s
->
rx_stream
->
issue_stream_cmd
(
cmd
);
LOG_I
(
PHY
,
"USRP %p: Time to wakeups: %llu
\n
"
,
s
,
cmd
.
time_spec
.
to_ticks
(
s
->
sample_rate
));
if
(
device
->
priv2
!=
NULL
)
{
usrp_state_t
*
s2
=
(
usrp_state_t
*
)
device
->
priv2
;
uhd
::
stream_cmd_t
cmd2
(
uhd
::
stream_cmd_t
::
STREAM_MODE_START_CONTINUOUS
);
cmd2
.
stream_now
=
false
;
// start at constant delay
cmd2
.
time_spec
=
s2
->
usrp
->
get_time_last_pps
()
+
uhd
::
time_spec_t
(
1.0
);
s2
->
rx_stream
->
issue_stream_cmd
(
cmd2
);
LOG_I
(
PHY
,
"USRP %p: Time to wakeups: %llu
\n
"
,
s2
,
cmd
.
time_spec
.
to_ticks
(
s2
->
sample_rate
));
}
}
else
{
s
->
wait_for_first_pps
=
0
;
cmd
.
time_spec
=
s
->
usrp
->
get_time_now
()
+
uhd
::
time_spec_t
(
0.05
);
s
->
tx_md
.
time_spec
=
cmd
.
time_spec
+
uhd
::
time_spec_t
(
1
-
(
double
)
s
->
tx_forward_nsamps
/
s
->
sample_rate
);
s
->
rx_stream
->
issue_stream_cmd
(
cmd
);
}
#if defined(USRP_REC_PLAY)
}
#endif
...
...
@@ -582,11 +603,9 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
samples_received
=
0
;
while
(
samples_received
!=
nsamps
)
{
LOG_I
(
HW
,
"USRP %p: Receiving %d samples
\n
"
,
s
,
nsamps
);
samples_received
+=
s
->
rx_stream
->
recv
(
buff_tmp
[
board
]
+
samples_received
,
nsamps
-
samples_received
,
s
->
rx_md
);
LOG_I
(
HW
,
"USRP %p: Got %d samples @ %llu
\n
"
,
s
,
samples_received
,
s
->
rx_md
.
time_spec
.
to_ticks
(
s
->
sample_rate
));
if
((
s
->
wait_for_first_pps
==
0
)
&&
(
s
->
rx_md
.
error_code
!=
uhd
::
rx_metadata_t
::
ERROR_CODE_NONE
))
break
;
/*
...
...
@@ -1116,13 +1135,13 @@ extern "C" {
return
(
-
1
);
}
LOG_I
(
HW
,
"Found %lu USRP of type %s
\n
"
,
device_adds
.
size
(),
device_adds
[
0
].
get
(
"type"
).
c_str
());
for
(
int
i
=
0
;
i
<
device_adds
.
size
();
i
++
)
LOG_I
(
HW
,
"USRP %d: %s
\n
"
,
i
,
device_adds
[
i
].
get
(
"serial"
).
c_str
());
if
(
device_adds
[
0
].
get
(
"type"
)
==
"b200"
)
{
device
->
type
=
USRP_B200_DEV
;
usrp_master_clock
=
30.72e6
;
AssertFatal
(
device_adds
.
size
()
<
3
,
"Number of B2x0 USRP must be 1 or 2
\n
"
);
args
+=
boost
::
str
(
boost
::
format
(
",master_clock_rate=%f"
)
%
usrp_master_clock
);
args
+=
",num_send_frames=256,num_recv_frames=256, send_frame_size=7680, recv_frame_size=7680"
;
args
+=
",num_send_frames=256,num_recv_frames=256, send_frame_size=7680, recv_frame_size=7680
,serial=
"
;
}
if
(
device_adds
[
0
].
get
(
"type"
)
==
"n3xx"
)
{
...
...
@@ -1139,10 +1158,10 @@ extern "C" {
args
+=
boost
::
str
(
boost
::
format
(
",master_clock_rate=%f"
)
%
usrp_master_clock
);
}
s
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
);
s
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
+
device_adds
[
1
].
get
(
"serial"
).
c_str
()
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
{
//allow for second instance of UHD with B2x0
s2
=
(
usrp_state_t
*
)
calloc
(
sizeof
(
usrp_state_t
),
1
);
s2
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
);
s2
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
+
device_adds
[
0
].
get
(
"serial"
).
c_str
()
);
}
// lock mboard clocks
if
(
openair0_cfg
[
0
].
clock_source
==
internal
&&
device_adds
.
size
()
==
1
)
{
...
...
@@ -1151,7 +1170,7 @@ extern "C" {
}
else
{
// if we set to external or if we have more than 1 USRP
s
->
usrp
->
set_clock_source
(
"external"
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
usrp
->
set_clock_source
(
"
in
ternal"
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
usrp
->
set_clock_source
(
"
ex
ternal"
);
LOG_I
(
HW
,
"Setting clock source to external
\n
"
);
}
// if we have more than 1 USRP require PPS source
...
...
@@ -1244,7 +1263,7 @@ extern "C" {
switch
((
int
)
openair0_cfg
[
0
].
sample_rate
)
{
case
30720000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s
2
->
usrp
->
set_master_clock_rate
(
30.72e6
);
//openair0_cfg[0].samples_per_packet = 1024;
openair0_cfg
[
0
].
tx_sample_advance
=
115
;
openair0_cfg
[
0
].
tx_bw
=
20e6
;
...
...
@@ -1305,8 +1324,8 @@ extern "C" {
s
->
usrp
->
set_rx_rate
(
openair0_cfg
[
0
].
sample_rate
,
i
);
s
->
usrp
->
set_rx_freq
(
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
{
s
->
usrp
->
set_rx_rate
(
openair0_cfg
[
0
].
sample_rate
,
i
);
s
->
usrp
->
set_rx_freq
(
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
s
2
->
usrp
->
set_rx_rate
(
openair0_cfg
[
0
].
sample_rate
,
i
);
s
2
->
usrp
->
set_rx_freq
(
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
}
set_rx_gain_offset
(
&
openair0_cfg
[
0
],
i
,
bw_gain_adjust
);
::
uhd
::
gain_range_t
gain_range
=
s
->
usrp
->
get_rx_gain_range
(
i
);
...
...
@@ -1364,14 +1383,14 @@ extern "C" {
stream_args_rx
.
channels
.
push_back
(
i
);
s
->
rx_stream
=
s
->
usrp
->
get_rx_stream
(
stream_args_rx
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
rx_stream
=
s
->
usrp
->
get_rx_stream
(
stream_args_rx
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
rx_stream
=
s
2
->
usrp
->
get_rx_stream
(
stream_args_rx
);
uhd
::
stream_args_t
stream_args_tx
(
"sc16"
,
"sc16"
);
for
(
int
i
=
0
;
i
<
openair0_cfg
[
0
].
tx_num_channels
;
i
++
)
stream_args_tx
.
channels
.
push_back
(
i
);
s
->
tx_stream
=
s
->
usrp
->
get_tx_stream
(
stream_args_tx
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
tx_stream
=
s
->
usrp
->
get_tx_stream
(
stream_args_tx
);
if
(
device_adds
.
size
()
==
2
&&
device
->
type
==
USRP_B200_DEV
)
s2
->
tx_stream
=
s
2
->
usrp
->
get_tx_stream
(
stream_args_tx
);
/* Setting TX/RX BW after streamers are created due to USRP calibration issue */
for
(
int
i
=
0
;
i
<
s
->
usrp
->
get_tx_num_channels
()
&&
i
<
openair0_cfg
[
0
].
tx_num_channels
;
i
++
)
{
s
->
usrp
->
set_tx_bandwidth
(
openair0_cfg
[
0
].
tx_bw
,
i
);
...
...
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