diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-02-10 18:18:25 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2022-08-17 10:52:09 +0200 |
commit | f24a67182541b41ebf924e983660c9dc48c8bbd8 (patch) | |
tree | 041fb98170ee3e1ab21e482d52482a6c48ac7084 /host/lib/usrp/b200 | |
parent | 321295fba49fb66ede365afbd9ef62971cdfbfca (diff) | |
download | uhd-lea-m8f-v4.2.0.1.tar.gz uhd-lea-m8f-v4.2.0.1.tar.bz2 uhd-lea-m8f-v4.2.0.1.zip |
Add support for LEA-M8F GPSDO boardlea-m8f-v4.2.0.1
Diffstat (limited to 'host/lib/usrp/b200')
-rw-r--r-- | host/lib/usrp/b200/b200_cores.cpp | 8 | ||||
-rw-r--r-- | host/lib/usrp/b200/b200_cores.hpp | 1 | ||||
-rw-r--r-- | host/lib/usrp/b200/b200_impl.cpp | 16 |
3 files changed, 23 insertions, 2 deletions
diff --git a/host/lib/usrp/b200/b200_cores.cpp b/host/lib/usrp/b200/b200_cores.cpp index 3c55d3995..b076b9476 100644 --- a/host/lib/usrp/b200/b200_cores.cpp +++ b/host/lib/usrp/b200/b200_cores.cpp @@ -61,6 +61,14 @@ void b200_ref_pll_ctrl::set_lock_to_ext_ref(bool external) _spi->restore_perif(); } +bool b200_ref_pll_ctrl::set_refclk_frequency(int refclk_kHz) +{ + _spi->change_perif(b200_local_spi_core::PLL); + bool success = adf4001_ctrl::set_refclk_frequency(refclk_kHz); + _spi->restore_perif(); + return success; +} + b200_local_spi_core::sptr b200_local_spi_core::make( uhd::wb_iface::sptr iface, b200_local_spi_core::perif_t default_perif) diff --git a/host/lib/usrp/b200/b200_cores.hpp b/host/lib/usrp/b200/b200_cores.hpp index 1042cf422..a29e18796 100644 --- a/host/lib/usrp/b200/b200_cores.hpp +++ b/host/lib/usrp/b200/b200_cores.hpp @@ -49,6 +49,7 @@ public: b200_ref_pll_ctrl(b200_local_spi_core::sptr spi); void set_lock_to_ext_ref(bool external) override; + virtual bool set_refclk_frequency(int refclk_kHz); private: b200_local_spi_core::sptr _spi; diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp index 6de161e87..6b0960a62 100644 --- a/host/lib/usrp/b200/b200_impl.cpp +++ b/host/lib/usrp/b200/b200_impl.cpp @@ -518,8 +518,12 @@ b200_impl::b200_impl( //////////////////////////////////////////////////////////////////// // Create the GPSDO control //////////////////////////////////////////////////////////////////// - if (_gpsdo_capable) { - if ((_local_ctrl->peek32(RB32_CORE_STATUS) & 0xff) != B200_GPSDO_ST_NONE) { + if (_gpsdo_capable) + { + + // Do not check this flag, I don't see why it is needed + //if ((_local_ctrl->peek32(RB32_CORE_STATUS) & 0xff) != B200_GPSDO_ST_NONE) + { UHD_LOGGER_INFO("B200") << "Detecting internal GPSDO.... " << std::flush; try { _gps = gps_ctrl::make(_async_task_data->gpsdo_uart); @@ -838,6 +842,14 @@ b200_impl::b200_impl( _tree->access<std::string>(mb_path / "clock_source/value").set("internal"); _tree->access<std::string>(mb_path / "time_source/value").set("internal"); + //GPS installed: use external ref, time, and init time spec + if (_gps and _gps->gps_detected()) { + const int freq = _gps->gps_refclock_frequency(); + if (not _adf4001_iface->set_refclk_frequency(freq)) { + throw uhd::value_error("Could not set refclk frequency"); + } + } + // Set the DSP chains to some safe value for (size_t i = 0; i < _radio_perifs.size(); i++) { _radio_perifs[i].ddc->set_host_rate( |