From 7aeb266783f3cda158762f8a8619fd512024acc4 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Fri, 11 Jun 2010 19:08:58 -0700 Subject: added set clock rate, and get clock rates to dboard iface, usrp2 needs clock ctrl implementation... --- host/lib/usrp/usrp2/clock_ctrl.cpp | 16 ++++++++++++++++ host/lib/usrp/usrp2/clock_ctrl.hpp | 27 +++++++++++++++++++++++++++ host/lib/usrp/usrp2/dboard_iface.cpp | 24 +++++++++++++++++++++--- 3 files changed, 64 insertions(+), 3 deletions(-) (limited to 'host/lib/usrp/usrp2') diff --git a/host/lib/usrp/usrp2/clock_ctrl.cpp b/host/lib/usrp/usrp2/clock_ctrl.cpp index d9baa66cf..783fb9b21 100644 --- a/host/lib/usrp/usrp2/clock_ctrl.cpp +++ b/host/lib/usrp/usrp2/clock_ctrl.cpp @@ -85,6 +85,14 @@ public: this->update_regs(); } + void set_rate_rx_dboard_clock(double rate){ + //TODO + } + + std::vector get_rates_rx_dboard_clock(void){ + //TODO + } + //uses output clock 6 (cmos) void enable_tx_dboard_clock(bool enb){ _ad9510_regs.power_down_lvds_cmos_out6 = enb? 0 : 1; @@ -96,6 +104,14 @@ public: this->update_regs(); } + void set_rate_tx_dboard_clock(double rate){ + //TODO + } + + std::vector get_rates_tx_dboard_clock(void){ + //TODO + } + /*! * If we are to use an external reference, enable the charge pump. * \param enb true to enable the CP diff --git a/host/lib/usrp/usrp2/clock_ctrl.hpp b/host/lib/usrp/usrp2/clock_ctrl.hpp index 0ad8d9532..70a104a81 100644 --- a/host/lib/usrp/usrp2/clock_ctrl.hpp +++ b/host/lib/usrp/usrp2/clock_ctrl.hpp @@ -21,6 +21,7 @@ #include "usrp2_iface.hpp" #include #include +#include class usrp2_clock_ctrl : boost::noncopyable{ public: @@ -45,12 +46,38 @@ public: */ virtual void enable_rx_dboard_clock(bool enb) = 0; + /*! + * Set the clock rate on the rx dboard clock. + * \param rate the new clock rate + * \throw exception when rate invalid + */ + virtual void set_rate_rx_dboard_clock(double rate) = 0; + + /*! + * Get a list of possible rx dboard clock rates. + * \return a list of clock rates in Hz + */ + virtual std::vector get_rates_rx_dboard_clock(void) = 0; + /*! * Enable/disable the tx dboard clock. * \param enb true to enable */ virtual void enable_tx_dboard_clock(bool enb) = 0; + /*! + * Set the clock rate on the tx dboard clock. + * \param rate the new clock rate + * \throw exception when rate invalid + */ + virtual void set_rate_tx_dboard_clock(double rate) = 0; + + /*! + * Get a list of possible tx dboard clock rates. + * \return a list of clock rates in Hz + */ + virtual std::vector get_rates_tx_dboard_clock(void) = 0; + /*! * Enable/disable external reference. * \param enb true to enable diff --git a/host/lib/usrp/usrp2/dboard_iface.cpp b/host/lib/usrp/usrp2/dboard_iface.cpp index 114f83f41..faebf698b 100644 --- a/host/lib/usrp/usrp2/dboard_iface.cpp +++ b/host/lib/usrp/usrp2/dboard_iface.cpp @@ -48,9 +48,10 @@ public: void write_i2c(boost::uint8_t, const byte_vector_t &); byte_vector_t read_i2c(boost::uint8_t, size_t); + void set_clock_rate(unit_t, double); double get_clock_rate(unit_t); + std::vector get_clock_rates(unit_t); void set_clock_enabled(unit_t, bool); - bool get_clock_enabled(unit_t); void write_spi( unit_t unit, @@ -73,6 +74,7 @@ private: boost::uint32_t _gpio_shadow; uhd::dict _dac_regs; + uhd::dict _clock_rates; void _write_aux_dac(unit_t); }; @@ -116,8 +118,24 @@ usrp2_dboard_iface::~usrp2_dboard_iface(void){ /*********************************************************************** * Clocks **********************************************************************/ -double usrp2_dboard_iface::get_clock_rate(unit_t){ - return _clock_ctrl->get_master_clock_rate(); +void usrp2_dboard_iface::set_clock_rate(unit_t unit, double rate){ + _clock_rates[unit] = rate; //set to shadow + switch(unit){ + case UNIT_RX: _clock_ctrl->set_rate_rx_dboard_clock(rate); return; + case UNIT_TX: _clock_ctrl->set_rate_tx_dboard_clock(rate); return; + } +} + +double usrp2_dboard_iface::get_clock_rate(unit_t unit){ + return _clock_rates[unit]; //get from shadow +} + +std::vector usrp2_dboard_iface::get_clock_rates(unit_t unit){ + switch(unit){ + case UNIT_RX: return _clock_ctrl->get_rates_rx_dboard_clock(); + case UNIT_TX: return _clock_ctrl->get_rates_tx_dboard_clock(); + default: UHD_THROW_INVALID_CODE_PATH(); + } } void usrp2_dboard_iface::set_clock_enabled(unit_t unit, bool enb){ -- cgit v1.2.3