diff options
Diffstat (limited to 'host/lib/usrp/usrp1')
-rw-r--r-- | host/lib/usrp/usrp1/clock_ctrl.cpp | 21 | ||||
-rw-r--r-- | host/lib/usrp/usrp1/clock_ctrl.hpp | 7 | ||||
-rw-r--r-- | host/lib/usrp/usrp1/mboard_impl.cpp | 8 | ||||
-rw-r--r-- | host/lib/usrp/usrp1/soft_time_ctrl.cpp | 3 |
4 files changed, 29 insertions, 10 deletions
diff --git a/host/lib/usrp/usrp1/clock_ctrl.cpp b/host/lib/usrp/usrp1/clock_ctrl.cpp index 68c5f5320..156f2b0c4 100644 --- a/host/lib/usrp/usrp1/clock_ctrl.cpp +++ b/host/lib/usrp/usrp1/clock_ctrl.cpp @@ -29,32 +29,33 @@ using namespace uhd; /*********************************************************************** * Constants **********************************************************************/ -static const double master_clock_rate = 64e6; +static const double default_master_clock_rate = 64e6; /*********************************************************************** * Clock Control Implementation **********************************************************************/ class usrp1_clock_ctrl_impl : public usrp1_clock_ctrl { public: - usrp1_clock_ctrl_impl(usrp1_iface::sptr iface) - { - _iface = iface; + usrp1_clock_ctrl_impl(usrp1_iface::sptr iface): _iface(iface){ + this->set_master_clock_freq(default_master_clock_rate); } - double get_master_clock_freq(void) - { - return master_clock_rate; + void set_master_clock_freq(double freq){ + _freq = freq; + } + + double get_master_clock_freq(void){ + return _freq; } private: usrp1_iface::sptr _iface; - + double _freq; }; /*********************************************************************** * Clock Control Make **********************************************************************/ -usrp1_clock_ctrl::sptr usrp1_clock_ctrl::make(usrp1_iface::sptr iface) -{ +usrp1_clock_ctrl::sptr usrp1_clock_ctrl::make(usrp1_iface::sptr iface){ return sptr(new usrp1_clock_ctrl_impl(iface)); } diff --git a/host/lib/usrp/usrp1/clock_ctrl.hpp b/host/lib/usrp/usrp1/clock_ctrl.hpp index 366869dab..645472f02 100644 --- a/host/lib/usrp/usrp1/clock_ctrl.hpp +++ b/host/lib/usrp/usrp1/clock_ctrl.hpp @@ -40,6 +40,13 @@ public: static sptr make(usrp1_iface::sptr iface); /*! + * Set the rate of the fpga clock line. + * Note: does not really set, its all software. + * \param freq the new clock rate in Hz + */ + virtual void set_master_clock_freq(double freq) = 0; + + /*! * Get the rate of the fpga clock line. * \return the fpga clock rate in Hz */ diff --git a/host/lib/usrp/usrp1/mboard_impl.cpp b/host/lib/usrp/usrp1/mboard_impl.cpp index 23c8f03c4..6d5bf466d 100644 --- a/host/lib/usrp/usrp1/mboard_impl.cpp +++ b/host/lib/usrp/usrp1/mboard_impl.cpp @@ -317,6 +317,10 @@ void usrp1_impl::mboard_get(const wax::obj &key_, wax::obj &val) val = _soft_time_ctrl->get_time(); return; + case MBOARD_PROP_CLOCK_RATE: + val = _clock_ctrl->get_master_clock_freq(); + return; + default: UHD_THROW_PROP_GET_ERROR(); } } @@ -379,6 +383,10 @@ void usrp1_impl::mboard_set(const wax::obj &key, const wax::obj &val) _soft_time_ctrl->set_time(val.as<time_spec_t>()); return; + case MBOARD_PROP_CLOCK_RATE: + _clock_ctrl->set_master_clock_freq(val.as<double>()); + return; + default: UHD_THROW_PROP_SET_ERROR(); } } diff --git a/host/lib/usrp/usrp1/soft_time_ctrl.cpp b/host/lib/usrp/usrp1/soft_time_ctrl.cpp index 856faf89d..c91ecc7ed 100644 --- a/host/lib/usrp/usrp1/soft_time_ctrl.cpp +++ b/host/lib/usrp/usrp1/soft_time_ctrl.cpp @@ -69,6 +69,9 @@ public: _thread_group.create_thread(boost::bind(&soft_time_ctrl_impl::recv_cmd_dispatcher, this)); _update_mutex.lock(); //lock blocks until spawned _update_mutex.unlock(); //unlock mutex before done + + //initialize the time to something + this->set_time(time_spec_t(0.0)); } ~soft_time_ctrl_impl(void){ |