aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2013-09-04 11:11:50 -0700
committerJosh Blum <josh@joshknows.com>2013-09-04 11:11:50 -0700
commit8c1b63e1949134ec476b5b43e1caca42ffe017d5 (patch)
treed708fd27588ae35c77d8edad1d9a1df81264d31c /host/lib
parent0284b5fb03608202f02897bf1a86307cb4a4f69b (diff)
downloaduhd-8c1b63e1949134ec476b5b43e1caca42ffe017d5.tar.gz
uhd-8c1b63e1949134ec476b5b43e1caca42ffe017d5.tar.bz2
uhd-8c1b63e1949134ec476b5b43e1caca42ffe017d5.zip
b200: integrate support for new converters
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/usrp/b200/b200_io_impl.cpp22
-rw-r--r--host/lib/usrp/b200/b200_regs.hpp2
-rw-r--r--host/lib/usrp/cores/rx_dsp_core_3000.cpp17
-rw-r--r--host/lib/usrp/cores/tx_dsp_core_3000.cpp15
4 files changed, 34 insertions, 22 deletions
diff --git a/host/lib/usrp/b200/b200_io_impl.cpp b/host/lib/usrp/b200/b200_io_impl.cpp
index 5a588f902..d643ef855 100644
--- a/host/lib/usrp/b200/b200_io_impl.cpp
+++ b/host/lib/usrp/b200/b200_io_impl.cpp
@@ -214,11 +214,7 @@ rx_streamer::sptr b200_impl::get_rx_stream(const uhd::stream_args_t &args_)
stream_args_t args = args_;
//setup defaults for unspecified values
- if (not args.otw_format.empty() and args.otw_format != "sc16")
- {
- throw uhd::value_error("b200_impl::get_rx_stream only supports otw_format sc16");
- }
- args.otw_format = "sc16";
+ if (args.otw_format.empty()) args.otw_format = "sc16";
args.channels = args.channels.empty()? std::vector<size_t>(1, 0) : args.channels;
boost::shared_ptr<sph::recv_packet_streamer> my_streamer;
@@ -226,6 +222,10 @@ rx_streamer::sptr b200_impl::get_rx_stream(const uhd::stream_args_t &args_)
{
const size_t chan = args.channels[stream_i];
radio_perifs_t &perif = _radio_perifs[chan];
+ if (args.otw_format == "sc16") perif.ctrl->poke32(TOREG(SR_RX_FMT), 0);
+ if (args.otw_format == "sc12") perif.ctrl->poke32(TOREG(SR_RX_FMT), 1);
+ if (args.otw_format == "fc32") perif.ctrl->poke32(TOREG(SR_RX_FMT), 2);
+ if (args.otw_format == "sc8") perif.ctrl->poke32(TOREG(SR_RX_FMT), 3);
const boost::uint32_t sid = chan?B200_RX_DATA1_SID:B200_RX_DATA0_SID;
//calculate packet size
@@ -238,7 +238,7 @@ rx_streamer::sptr b200_impl::get_rx_stream(const uhd::stream_args_t &args_)
const size_t bpp = _data_transport->get_recv_frame_size() - hdr_size;
const size_t bpi = convert::get_bytes_per_item(args.otw_format);
size_t spp = unsigned(args.args.cast<double>("spp", bpp/bpi));
- spp = std::min<size_t>(2041, spp); //magic maximum for framing at full rate
+ spp = std::min<size_t>(2000, spp); //magic maximum for framing at full rate
//make the new streamer given the samples per packet
if (not my_streamer) my_streamer = boost::make_shared<sph::recv_packet_streamer>(spp);
@@ -316,11 +316,7 @@ tx_streamer::sptr b200_impl::get_tx_stream(const uhd::stream_args_t &args_)
stream_args_t args = args_;
//setup defaults for unspecified values
- if (not args.otw_format.empty() and args.otw_format != "sc16")
- {
- throw uhd::value_error("b200_impl::get_rx_stream only supports otw_format sc16");
- }
- args.otw_format = "sc16";
+ if (args.otw_format.empty()) args.otw_format = "sc16";
args.channels = args.channels.empty()? std::vector<size_t>(1, 0) : args.channels;
boost::shared_ptr<sph::send_packet_streamer> my_streamer;
@@ -328,6 +324,10 @@ tx_streamer::sptr b200_impl::get_tx_stream(const uhd::stream_args_t &args_)
{
const size_t chan = args.channels[stream_i];
radio_perifs_t &perif = _radio_perifs[chan];
+ if (args.otw_format == "sc16") perif.ctrl->poke32(TOREG(SR_TX_FMT), 0);
+ if (args.otw_format == "sc12") perif.ctrl->poke32(TOREG(SR_TX_FMT), 1);
+ if (args.otw_format == "fc32") perif.ctrl->poke32(TOREG(SR_TX_FMT), 2);
+ if (args.otw_format == "sc8") perif.ctrl->poke32(TOREG(SR_TX_FMT), 3);
//calculate packet size
static const size_t hdr_size = 0
diff --git a/host/lib/usrp/b200/b200_regs.hpp b/host/lib/usrp/b200/b200_regs.hpp
index ae39b95b2..c64066b27 100644
--- a/host/lib/usrp/b200/b200_regs.hpp
+++ b/host/lib/usrp/b200/b200_regs.hpp
@@ -43,6 +43,8 @@ localparam SR_RX_CTRL = 96;
localparam SR_RX_DSP = 144;
localparam SR_TX_DSP = 184;
localparam SR_TIME = 128;
+localparam SR_RX_FMT = 136;
+localparam SR_TX_FMT = 138;
localparam RB32_TEST = 0;
localparam RB64_TIME_NOW = 8;
diff --git a/host/lib/usrp/cores/rx_dsp_core_3000.cpp b/host/lib/usrp/cores/rx_dsp_core_3000.cpp
index 36d9af5bc..7b3324f74 100644
--- a/host/lib/usrp/cores/rx_dsp_core_3000.cpp
+++ b/host/lib/usrp/cores/rx_dsp_core_3000.cpp
@@ -169,21 +169,26 @@ public:
void setup(const uhd::stream_args_t &stream_args){
- //unsigned format_word = 0;
if (stream_args.otw_format == "sc16"){
- //format_word = 0;
_dsp_extra_scaling = 1.0;
_host_extra_scaling = 1.0;
}
- /*
else if (stream_args.otw_format == "sc8"){
- format_word = (1 << 0);
double peak = stream_args.args.cast<double>("peak", 1.0);
peak = std::max(peak, 1.0/256);
_host_extra_scaling = peak*256;
- _dsp_extra_scaling = peak*256;
+ _dsp_extra_scaling = peak;
+ }
+ else if (stream_args.otw_format == "sc12"){
+ double peak = stream_args.args.cast<double>("peak", 1.0);
+ peak = std::max(peak, 1.0/16);
+ _host_extra_scaling = peak*16;
+ _dsp_extra_scaling = peak;
+ }
+ else if (stream_args.otw_format == "fc32"){
+ _host_extra_scaling = 1.0;
+ _dsp_extra_scaling = 1.0;
}
- */
else throw uhd::value_error("USRP RX cannot handle requested wire format: " + stream_args.otw_format);
_host_extra_scaling *= stream_args.args.cast<double>("fullscale", 1.0);
diff --git a/host/lib/usrp/cores/tx_dsp_core_3000.cpp b/host/lib/usrp/cores/tx_dsp_core_3000.cpp
index ff4392a13..feb749cd9 100644
--- a/host/lib/usrp/cores/tx_dsp_core_3000.cpp
+++ b/host/lib/usrp/cores/tx_dsp_core_3000.cpp
@@ -146,22 +146,27 @@ public:
void setup(const uhd::stream_args_t &stream_args){
- //unsigned format_word = 0;
if (stream_args.otw_format == "sc16"){
- //format_word = 0;
_dsp_extra_scaling = 1.0;
_host_extra_scaling = 1.0;
}
- /*
else if (stream_args.otw_format == "sc8"){
- format_word = (1 << 0);
double peak = stream_args.args.cast<double>("peak", 1.0);
peak = std::max(peak, 1.0/256);
_host_extra_scaling = 1.0/peak/256;
_dsp_extra_scaling = 1.0/peak;
}
+ else if (stream_args.otw_format == "sc12"){
+ double peak = stream_args.args.cast<double>("peak", 1.0);
+ peak = std::max(peak, 1.0/16);
+ _host_extra_scaling = 1.0/peak/16;
+ _dsp_extra_scaling = 1.0/peak;
+ }
+ else if (stream_args.otw_format == "fc32"){
+ _host_extra_scaling = 1.0;
+ _dsp_extra_scaling = 1.0;
+ }
else throw uhd::value_error("USRP TX cannot handle requested wire format: " + stream_args.otw_format);
- */
_host_extra_scaling /= stream_args.args.cast<double>("fullscale", 1.0);