diff options
| -rw-r--r-- | host/include/uhd/rfnoc/blocks/radio_eiscat.xml | 4 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.cpp | 21 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.hpp | 2 | ||||
| -rw-r--r-- | mpm/python/usrp_mpm/dboard_manager/eiscat.py | 7 | ||||
| -rw-r--r-- | mpm/python/usrp_mpm/periph_manager/n310.py | 14 | 
5 files changed, 30 insertions, 18 deletions
| diff --git a/host/include/uhd/rfnoc/blocks/radio_eiscat.xml b/host/include/uhd/rfnoc/blocks/radio_eiscat.xml index a7077d503..69f7ffc50 100644 --- a/host/include/uhd/rfnoc/blocks/radio_eiscat.xml +++ b/host/include/uhd/rfnoc/blocks/radio_eiscat.xml @@ -48,6 +48,10 @@        <address>201</address>      </setreg>      <setreg> +      <name>SR_SYSREF</name> +      <address>221</address> +    </setreg> +    <setreg>        <name>SR_CHANNEL_GAIN_0</name>        <address>204</address>      </setreg> diff --git a/host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.cpp b/host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.cpp index ce5c4ca26..d948a89c0 100644 --- a/host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.cpp +++ b/host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.cpp @@ -35,7 +35,6 @@ namespace {      const size_t SR_ANTENNA_SELECT_BASE   = 192; // Note: On other dboards, 192 is DB_GPIO address space      const size_t RB_CHOOSE_BEAMS          = 10; -      const double EISCAT_TICK_RATE         = 208e6; // Hz      const double EISCAT_RADIO_RATE        = 104e6; // Hz      const double EISCAT_CENTER_FREQ       = 104e6; // Hz @@ -394,9 +393,27 @@ bool eiscat_radio_ctrl_impl::check_radio_config()  void eiscat_radio_ctrl_impl::set_rpc_client(      uhd::rpc_client::sptr rpcc, -    const uhd::device_addr_t & /* block_args */ +    const uhd::device_addr_t &block_args  ) {      _rpcc = rpcc; +    std::function<void()> send_sysref; +    if (block_args.has_key("use_mpm_sysref")) { +        send_sysref = [rpcc](){ rpcc->call<void>("db_0_send_sysref"); }; +    } else { +        send_sysref = [this](){ this->sr_write("SR_SYSREF", 1); }; +    } + +    UHD_LOG_INFO( +        "EISCAT", +        "Finalizing dboard initialization using internal PPS" +    ); +    send_sysref(); +    rpcc->call_with_token<void>("db_0_init_adcs_and_deframers"); +    rpcc->call_with_token<void>("db_1_init_adcs_and_deframers"); +    send_sysref(); +    std::this_thread::sleep_for(std::chrono::milliseconds(500)); +    rpcc->call_with_token<void>("db_0_check_deframer_status"); +    rpcc->call_with_token<void>("db_1_check_deframer_status");  }  /**************************************************************************** diff --git a/host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.hpp b/host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.hpp index edc44631e..33708f3b3 100644 --- a/host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.hpp +++ b/host/lib/usrp/dboard/eiscat/eiscat_radio_ctrl_impl.hpp @@ -87,6 +87,8 @@ public:  protected:      virtual bool check_radio_config(); +    /*! Finalize initialization sequence +     */      void set_rpc_client(          uhd::rpc_client::sptr rpcc,          const uhd::device_addr_t &block_args diff --git a/mpm/python/usrp_mpm/dboard_manager/eiscat.py b/mpm/python/usrp_mpm/dboard_manager/eiscat.py index 14b0acd49..0b76c88ee 100644 --- a/mpm/python/usrp_mpm/dboard_manager/eiscat.py +++ b/mpm/python/usrp_mpm/dboard_manager/eiscat.py @@ -60,6 +60,9 @@ def create_spidev_iface_phasedac(dev_node):  class ADS54J56(object):      """      Controls for ADS54J56 ADC + +    These commands are very specific to the EISCAT daughterboard, so they stay +    here.      """      def __init__(self, regs, log):          self.log = log @@ -533,8 +536,8 @@ class EISCAT(DboardManagerBase):      def send_sysref(self):          """ -        TODO this is a temp way of sending sysref -        need to replace with timed command +        Send a SYSREF from MPM. This is not possible to do in a timed +        fashion though.          """          self.log.trace("Sending SYSREF via MPM...")          self.radio_regs.poke32(self.SYSREF_CONTROL, 0x0) diff --git a/mpm/python/usrp_mpm/periph_manager/n310.py b/mpm/python/usrp_mpm/periph_manager/n310.py index b1c4840d7..a5036121a 100644 --- a/mpm/python/usrp_mpm/periph_manager/n310.py +++ b/mpm/python/usrp_mpm/periph_manager/n310.py @@ -148,20 +148,6 @@ class n310(PeriphManagerBase):          }          for ifname, table in iteritems(self._eth_dispatchers):              table.set_ipv4_addr(self._chdr_interfaces[ifname]['ip_addr']) -        self.log.warning("Running a custom EISCAT-specific sequence to bring " \ -                         "up 2 daughterboards without requiring UHD support. " \ -                         "This effectively disables Magnesium and must be " \ -                         "replaced before merging back into n3xx-master." -                        ) -        self.dboards[0].send_sysref() -        for dboard in self.dboards: -            dboard.init_adcs_and_deframers() -        self.dboards[0].send_sysref() -        time.sleep(0.5) -        for dboard in self.dboards: -            dboard.check_deframer_status() -            assert dboard.initialized -      def _allocate_sid(self, sender_addr, port, sid, xbar_src_addr, xbar_src_port):          """ | 
