diff options
author | Josh Blum <josh@joshknows.com> | 2010-04-12 19:37:38 -0700 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2010-04-12 19:37:38 -0700 |
commit | cbf2109e7ea123870988aae852b0b1af1b2ab222 (patch) | |
tree | f1a20a7ee6b9b5b8a696790836d301c7f892556d /host/lib/usrp/usrp2 | |
parent | 7da6f4e3e3f41d12f68bd618390b9eae12e902e9 (diff) | |
download | uhd-cbf2109e7ea123870988aae852b0b1af1b2ab222.tar.gz uhd-cbf2109e7ea123870988aae852b0b1af1b2ab222.tar.bz2 uhd-cbf2109e7ea123870988aae852b0b1af1b2ab222.zip |
controlling dboard clock enables from host
Diffstat (limited to 'host/lib/usrp/usrp2')
-rw-r--r-- | host/lib/usrp/usrp2/dboard_interface.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/host/lib/usrp/usrp2/dboard_interface.cpp b/host/lib/usrp/usrp2/dboard_interface.cpp index db8679b9b..8a3df08cb 100644 --- a/host/lib/usrp/usrp2/dboard_interface.cpp +++ b/host/lib/usrp/usrp2/dboard_interface.cpp @@ -17,6 +17,7 @@ #include "usrp2_impl.hpp" #include "usrp2_regs.hpp" +#include "ad9510_regs.hpp" #include <uhd/types/dict.hpp> #include <uhd/utils/assert.hpp> #include <boost/assign/list_of.hpp> @@ -60,6 +61,8 @@ public: private: usrp2_impl *_impl; boost::uint32_t _ddr_shadow; + ad9510_regs_t _ad9510_regs; + uhd::dict<unit_t, bool> _clock_enb_shadow; }; /*********************************************************************** @@ -96,12 +99,31 @@ double usrp2_dboard_interface::get_clock_rate(unit_t){ return _impl->get_master_clock_freq(); } -void usrp2_dboard_interface::set_clock_enabled(unit_t, bool){ - //TODO +void usrp2_dboard_interface::set_clock_enabled(unit_t unit, bool enb){ + uint16_t data = 0; + switch(unit){ + case UNIT_RX: + _ad9510_regs.power_down_lvds_cmos_out7 = enb? 0 : 1; + _ad9510_regs.lvds_cmos_select_out7 = ad9510_regs_t::LVDS_CMOS_SELECT_OUT7_CMOS; + _ad9510_regs.output_level_lvds_out7 = ad9510_regs_t::OUTPUT_LEVEL_LVDS_OUT7_1_75MA; + data = _ad9510_regs.get_write_reg(0x43); + break; + case UNIT_TX: + _ad9510_regs.power_down_lvds_cmos_out6 = enb? 0 : 1; + _ad9510_regs.lvds_cmos_select_out6 = ad9510_regs_t::LVDS_CMOS_SELECT_OUT6_CMOS; + _ad9510_regs.output_level_lvds_out6 = ad9510_regs_t::OUTPUT_LEVEL_LVDS_OUT6_1_75MA; + data = _ad9510_regs.get_write_reg(0x42); + break; + } + _impl->transact_spi(SPI_SS_AD9510, spi_config_t::EDGE_RISE, data, 24, false /*no rb*/); + + _ad9510_regs.update_registers = 1; + _impl->transact_spi(SPI_SS_AD9510, spi_config_t::EDGE_RISE, _ad9510_regs.get_write_reg(0x5a), 24, false /*no rb*/); + _clock_enb_shadow[unit] = unit; } -bool usrp2_dboard_interface::get_clock_enabled(unit_t){ - return false; //TODO +bool usrp2_dboard_interface::get_clock_enabled(unit_t unit){ + return _clock_enb_shadow[unit]; } /*********************************************************************** |