aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/usrp1
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp/usrp1')
-rw-r--r--host/lib/usrp/usrp1/clock_ctrl.cpp21
-rw-r--r--host/lib/usrp/usrp1/clock_ctrl.hpp7
-rw-r--r--host/lib/usrp/usrp1/mboard_impl.cpp8
-rw-r--r--host/lib/usrp/usrp1/soft_time_ctrl.cpp3
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){