mirror of
https://github.com/fairwaves/UHD-Fairwaves.git
synced 2025-11-02 13:03:13 +00:00
umtrx: fix, dsp rate is half of the vita rate
This commit is contained in:
@@ -63,6 +63,7 @@ public:
|
||||
{
|
||||
// previously uninitialized - assuming zero for all
|
||||
_tick_rate = _link_rate = _host_extra_scaling = _fxpt_scalar_correction = 0.0;
|
||||
_vita_rate = _tick_rate;
|
||||
|
||||
//init to something so update method has reasonable defaults
|
||||
_scaling_adjustment = 1.0;
|
||||
@@ -132,7 +133,7 @@ public:
|
||||
|
||||
//issue the stream command
|
||||
_iface->poke32(REG_RX_CTRL_STREAM_CMD, cmd_word);
|
||||
const boost::uint64_t ticks = (stream_cmd.stream_now)? 0 : stream_cmd.time_spec.to_ticks(_tick_rate);
|
||||
const boost::uint64_t ticks = (stream_cmd.stream_now)? 0 : stream_cmd.time_spec.to_ticks(_vita_rate);
|
||||
_iface->poke32(REG_RX_CTRL_TIME_HI, boost::uint32_t(ticks >> 32));
|
||||
_iface->poke32(REG_RX_CTRL_TIME_LO, boost::uint32_t(ticks >> 0)); //latches the command
|
||||
}
|
||||
@@ -151,6 +152,10 @@ public:
|
||||
_tick_rate = rate;
|
||||
}
|
||||
|
||||
void set_vita_rate(const double rate){
|
||||
_vita_rate = rate;
|
||||
}
|
||||
|
||||
void set_link_rate(const double rate){
|
||||
//_link_rate = rate/sizeof(boost::uint32_t); //in samps/s
|
||||
_link_rate = rate/sizeof(boost::uint16_t); //in samps/s (allows for 8sc)
|
||||
@@ -272,7 +277,7 @@ public:
|
||||
private:
|
||||
wb_iface::sptr _iface;
|
||||
const size_t _dsp_base, _ctrl_base;
|
||||
double _tick_rate, _link_rate;
|
||||
double _tick_rate, _vita_rate, _link_rate;
|
||||
bool _continuous_streaming;
|
||||
double _scaling_adjustment, _dsp_extra_scaling, _host_extra_scaling, _fxpt_scalar_correction;
|
||||
const boost::uint32_t _sid;
|
||||
|
@@ -47,6 +47,8 @@ public:
|
||||
|
||||
virtual void set_tick_rate(const double rate) = 0;
|
||||
|
||||
virtual void set_vita_rate(const double rate) = 0;
|
||||
|
||||
virtual void set_link_rate(const double rate) = 0;
|
||||
|
||||
virtual double set_host_rate(const double rate) = 0;
|
||||
|
@@ -186,6 +186,8 @@ umtrx_impl::umtrx_impl(const device_addr_t &device_addr)
|
||||
_tree->access<double>(mb_path / "tick_rate")
|
||||
.publish(boost::bind(&umtrx_impl::get_master_clock_rate, this))
|
||||
.subscribe(boost::bind(&umtrx_impl::update_tick_rate, this, _1));
|
||||
_tree->access<double>(mb_path / "dsp_rate")
|
||||
.publish(boost::bind(&umtrx_impl::get_master_dsp_rate, this));
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
// reset LMS chips
|
||||
@@ -262,8 +264,10 @@ umtrx_impl::umtrx_impl(const device_addr_t &device_addr)
|
||||
|
||||
for (size_t dspno = 0; dspno < _rx_dsps.size(); dspno++){
|
||||
_rx_dsps[dspno]->set_link_rate(UMTRX_LINK_RATE_BPS);
|
||||
_tree->access<double>(mb_path / "tick_rate")
|
||||
_tree->access<double>(mb_path / "dsp_rate")
|
||||
.subscribe(boost::bind(&rx_dsp_core_200::set_tick_rate, _rx_dsps[dspno], _1));
|
||||
_tree->access<double>(mb_path / "vita_rate")
|
||||
.subscribe(boost::bind(&rx_dsp_core_200::set_vita_rate, _rx_dsps[dspno], _1));
|
||||
fs_path rx_dsp_path = mb_path / str(boost::format("rx_dsps/%u") % dspno);
|
||||
_tree->create<meta_range_t>(rx_dsp_path / "rate/range")
|
||||
.publish(boost::bind(&rx_dsp_core_200::get_host_rates, _rx_dsps[dspno]));
|
||||
@@ -288,7 +292,7 @@ umtrx_impl::umtrx_impl(const device_addr_t &device_addr)
|
||||
|
||||
for (size_t dspno = 0; dspno < _tx_dsps.size(); dspno++){
|
||||
_tx_dsps[dspno]->set_link_rate(UMTRX_LINK_RATE_BPS);
|
||||
_tree->access<double>(mb_path / "tick_rate")
|
||||
_tree->access<double>(mb_path / "dsp_rate")
|
||||
.subscribe(boost::bind(&tx_dsp_core_200::set_tick_rate, _tx_dsps[dspno], _1));
|
||||
fs_path tx_dsp_path = mb_path / str(boost::format("tx_dsps/%u") % dspno);
|
||||
_tree->create<meta_range_t>(tx_dsp_path / "rate/range")
|
||||
@@ -480,6 +484,8 @@ umtrx_impl::umtrx_impl(const device_addr_t &device_addr)
|
||||
////////////////////////////////////////////////////////////////////
|
||||
_tree->access<double>(mb_path / "tick_rate")
|
||||
.set(this->get_master_clock_rate());
|
||||
_tree->access<double>(mb_path / "dsp_rate")
|
||||
.set(this->get_master_dsp_rate());
|
||||
this->time64_self_test();
|
||||
_rx_streamers.resize(_rx_dsps.size());
|
||||
_tx_streamers.resize(_tx_dsps.size());
|
||||
|
@@ -118,6 +118,7 @@ private:
|
||||
//helper routines
|
||||
void set_mb_eeprom(const uhd::i2c_iface::sptr &, const uhd::usrp::mboard_eeprom_t &);
|
||||
double get_master_clock_rate(void) const { return 26e6; }
|
||||
double get_master_dsp_rate(void) const { return get_master_clock_rate()/2; }
|
||||
void update_tick_rate(const double rate);
|
||||
void update_rx_subdev_spec(const uhd::usrp::subdev_spec_t &);
|
||||
void update_tx_subdev_spec(const uhd::usrp::subdev_spec_t &);
|
||||
|
Reference in New Issue
Block a user