mirror of
https://github.com/saymrwulf/uhd.git
synced 2026-05-16 21:10:10 +00:00
Merge branch 'maint'
Conflicts: host/lib/usrp/b200/b200_impl.cpp
This commit is contained in:
commit
ef57ffcbbf
7 changed files with 47 additions and 6 deletions
|
|
@ -17,7 +17,7 @@ More information:
|
|||
- External PPS input & output
|
||||
- External 10 MHz input & output
|
||||
- Expandable via 2nd SFP+ interface
|
||||
- Supported master clock rates: 200 MHz, 184.32 MHz, 120 MHz
|
||||
- Supported master clock rates: 200 MHz and 184.32 MHz
|
||||
- External GPIO Connector with UHD API control
|
||||
- External USB Connection for built-in JTAG debugger
|
||||
- Internal GPSDO option
|
||||
|
|
|
|||
|
|
@ -74,6 +74,11 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){
|
|||
//Lock mboard clocks
|
||||
usrp->set_clock_source(ref);
|
||||
|
||||
//always select the subdevice first, the channel mapping affects the other settings
|
||||
if (vm.count("subdev")) {
|
||||
usrp->set_rx_subdev_spec(subdev);
|
||||
}
|
||||
|
||||
//set the rx sample rate
|
||||
std::cout << boost::format("Setting RX Rate: %f Msps...") % (rate/1e6) << std::endl;
|
||||
usrp->set_rx_rate(rate);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,11 @@ using namespace uhd::convert;
|
|||
|
||||
typedef boost::uint32_t (*towire32_type)(boost::uint32_t);
|
||||
|
||||
/* C language specification requires this to be packed
|
||||
* (i.e., line0, line1, line2 will be in adjacent memory locations).
|
||||
* If this was not true, we'd need compiler flags here to specify
|
||||
* alignment/packing.
|
||||
*/
|
||||
struct item32_sc12_3x
|
||||
{
|
||||
item32_t line0;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,11 @@ using namespace uhd::convert;
|
|||
|
||||
typedef boost::uint32_t (*tohost32_type)(boost::uint32_t);
|
||||
|
||||
/* C language specification requires this to be packed
|
||||
* (i.e., line0, line1, line2 will be in adjacent memory locations).
|
||||
* If this was not true, we'd need compiler flags here to specify
|
||||
* alignment/packing.
|
||||
*/
|
||||
struct item32_sc12_3x
|
||||
{
|
||||
item32_t line0;
|
||||
|
|
|
|||
|
|
@ -792,9 +792,6 @@ void b200_impl::setup_radio(const size_t dspno)
|
|||
////////////////////////////////////////////////////////////////////
|
||||
// connect rx dsp control objects
|
||||
////////////////////////////////////////////////////////////////////
|
||||
_tree->access<double>(mb_path / "tick_rate")
|
||||
.add_coerced_subscriber(boost::bind(&rx_vita_core_3000::set_tick_rate, perif.framer, _1))
|
||||
.add_coerced_subscriber(boost::bind(&rx_dsp_core_3000::set_tick_rate, perif.ddc, _1));
|
||||
const fs_path rx_dsp_path = mb_path / "rx_dsps" / dspno;
|
||||
perif.ddc->populate_subtree(_tree->subtree(rx_dsp_path));
|
||||
_tree->create<bool>(rx_dsp_path / "rate" / "set").set(false);
|
||||
|
|
@ -805,12 +802,14 @@ void b200_impl::setup_radio(const size_t dspno)
|
|||
;
|
||||
_tree->create<stream_cmd_t>(rx_dsp_path / "stream_cmd")
|
||||
.add_coerced_subscriber(boost::bind(&rx_vita_core_3000::issue_stream_command, perif.framer, _1));
|
||||
_tree->access<double>(mb_path / "tick_rate")
|
||||
.add_coerced_subscriber(boost::bind(&rx_vita_core_3000::set_tick_rate, perif.framer, _1))
|
||||
.add_coerced_subscriber(boost::bind(&b200_impl::update_rx_dsp_tick_rate, this, _1, perif.ddc, rx_dsp_path))
|
||||
;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// create tx dsp control objects
|
||||
////////////////////////////////////////////////////////////////////
|
||||
_tree->access<double>(mb_path / "tick_rate")
|
||||
.add_coerced_subscriber(boost::bind(&tx_dsp_core_3000::set_tick_rate, perif.duc, _1));
|
||||
const fs_path tx_dsp_path = mb_path / "tx_dsps" / dspno;
|
||||
perif.duc->populate_subtree(_tree->subtree(tx_dsp_path));
|
||||
_tree->create<bool>(tx_dsp_path / "rate" / "set").set(false);
|
||||
|
|
@ -819,6 +818,9 @@ void b200_impl::setup_radio(const size_t dspno)
|
|||
.add_coerced_subscriber(boost::bind(&lambda_set_bool_prop, boost::weak_ptr<property_tree>(_tree), tx_dsp_path / "rate" / "set", true, _1))
|
||||
.add_coerced_subscriber(boost::bind(&b200_impl::update_tx_samp_rate, this, dspno, _1))
|
||||
;
|
||||
_tree->access<double>(mb_path / "tick_rate")
|
||||
.add_coerced_subscriber(boost::bind(&b200_impl::update_tx_dsp_tick_rate, this, _1, perif.duc, tx_dsp_path))
|
||||
;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// create RF frontend interfacing
|
||||
|
|
|
|||
|
|
@ -259,6 +259,14 @@ private:
|
|||
|
||||
void update_tick_rate(const double);
|
||||
|
||||
/*! Subscriber to the tick_rate property, updates DDCs after tick rate change.
|
||||
*/
|
||||
void update_rx_dsp_tick_rate(const double, rx_dsp_core_3000::sptr, uhd::fs_path rx_dsp_path);
|
||||
|
||||
/*! Subscriber to the tick_rate property, updates DUCs after tick rate change.
|
||||
*/
|
||||
void update_tx_dsp_tick_rate(const double, tx_dsp_core_3000::sptr, uhd::fs_path tx_dsp_path);
|
||||
|
||||
/*! Check if \p tick_rate works with \p chan_count channels.
|
||||
*
|
||||
* Throws a uhd::value_error if not.
|
||||
|
|
|
|||
|
|
@ -161,6 +161,22 @@ void b200_impl::update_tick_rate(const double new_tick_rate)
|
|||
}
|
||||
}
|
||||
|
||||
void b200_impl::update_rx_dsp_tick_rate(const double tick_rate, rx_dsp_core_3000::sptr ddc, uhd::fs_path rx_dsp_path)
|
||||
{
|
||||
ddc->set_tick_rate(tick_rate);
|
||||
if (_tree->access<bool>(rx_dsp_path / "rate" / "set").get()) {
|
||||
ddc->set_host_rate(_tree->access<double>(rx_dsp_path / "rate" / "value").get());
|
||||
}
|
||||
}
|
||||
|
||||
void b200_impl::update_tx_dsp_tick_rate(const double tick_rate, tx_dsp_core_3000::sptr duc, uhd::fs_path tx_dsp_path)
|
||||
{
|
||||
duc->set_tick_rate(tick_rate);
|
||||
if (_tree->access<bool>(tx_dsp_path / "rate" / "set").get()) {
|
||||
duc->set_host_rate(_tree->access<double>(tx_dsp_path / "rate" / "value").get());
|
||||
}
|
||||
}
|
||||
|
||||
#define CHECK_RATE_AND_THROW(rate) \
|
||||
if (uhd::math::fp_compare::fp_compare_delta<double>(rate, uhd::math::FREQ_COMPARISON_DELTA_HZ) > \
|
||||
uhd::math::fp_compare::fp_compare_delta<double>(ad9361_device_t::AD9361_MAX_CLOCK_RATE, uhd::math::FREQ_COMPARISON_DELTA_HZ)) { \
|
||||
|
|
|
|||
Loading…
Reference in a new issue