diff options
Diffstat (limited to 'host')
| -rw-r--r-- | host/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | host/docs/usrp_b200.rst | 4 | ||||
| -rw-r--r-- | host/examples/test_timed_commands.cpp | 50 | ||||
| -rw-r--r-- | host/lib/usrp/b200/b200_impl.cpp | 2 | 
4 files changed, 47 insertions, 15 deletions
| diff --git a/host/CMakeLists.txt b/host/CMakeLists.txt index d4d3591bc..ded4bb54c 100644 --- a/host/CMakeLists.txt +++ b/host/CMakeLists.txt @@ -1,5 +1,5 @@  # -# Copyright 2010-2013 Ettus Research LLC +# Copyright 2010-2014 Ettus Research LLC  #  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by @@ -213,8 +213,8 @@ UHD_INSTALL(FILES  # Images download directory for utils/uhd_images_downloader.py  ######################################################################## -SET(UHD_IMAGES_MD5SUM "35a522e2c57c61100027702a7d840060") -SET(UHD_IMAGES_DOWNLOAD_SRC "http://files.ettus.com/binaries/maint_images/archive/uhd-images_003.006.002-rc2.zip") +SET(UHD_IMAGES_MD5SUM "0bab468817baa28024c4bf966d923b31") +SET(UHD_IMAGES_DOWNLOAD_SRC "http://files.ettus.com/binaries/maint_images/archive/uhd-images_003.006.002-release.zip")  ########################################################################  # Register top level components diff --git a/host/docs/usrp_b200.rst b/host/docs/usrp_b200.rst index bb2a2876a..81e66684e 100644 --- a/host/docs/usrp_b200.rst +++ b/host/docs/usrp_b200.rst @@ -8,7 +8,7 @@ UHD - USRP-B2X0 Series Application Notes  Comparative features list - B200  ------------------------------------------------------------------------ -* integrated RF frontend +* integrated RF frontend (RF coverage from 70 MHz - 6 GHz)  * 1 RX DDC chain in FPGA  * 1 TX DUC chain in FPGA  * Timed commands in FPGA @@ -22,7 +22,7 @@ Comparative features list - B200  Comparative features list - B210  ------------------------------------------------------------------------ -* integrated MIMO frontend +* integrated MIMO frontend (RF coverage from 70 MHz - 6 GHz)  * 2 RX DDC chains in FPGA  * 2 TX DUC chains in FPGA  * Timed commands in FPGA diff --git a/host/examples/test_timed_commands.cpp b/host/examples/test_timed_commands.cpp index 224961d04..8c6011c68 100644 --- a/host/examples/test_timed_commands.cpp +++ b/host/examples/test_timed_commands.cpp @@ -78,27 +78,57 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){          total_time += (t1-t0);      }      std::cout << boost::format( -        "Difference between paired reads: %f us" +        " Difference between paired reads: %f us"      ) % (total_time.get_real_secs()/100*1e6) << std::endl; +    //test timed control command +    //issues get_time_now() command twice a fixed time apart +    //outputs difference for each response time vs. the expected time +    //and difference between actual and expected time deltas +    std::cout << std::endl; +    std::cout << "Testing control timed command:" << std::endl; +    const uhd::time_spec_t span = uhd::time_spec_t(0.1); +    const uhd::time_spec_t now = usrp->get_time_now(); +    const uhd::time_spec_t cmd_time1 = now + uhd::time_spec_t(0.1); +    const uhd::time_spec_t cmd_time2 = cmd_time1 + span; +    usrp->set_command_time(cmd_time1); +    uhd::time_spec_t response_time1 = usrp->get_time_now(); +    usrp->set_command_time(cmd_time2); +    uhd::time_spec_t response_time2 = usrp->get_time_now(); +    usrp->clear_command_time(); +    std::cout << boost::format( +        " Span      : %f us\n" +        " Now       : %f us\n" +        " Response 1: %f us\n" +        " Response 2: %f us" +    ) % (span.get_real_secs()*1e6) % (now.get_real_secs()*1e6) % (response_time1.get_real_secs()*1e6) % (response_time2.get_real_secs()*1e6) << std::endl; +    std::cout << boost::format( +        " Difference of response time 1: %f us" +    ) % ((response_time1 - cmd_time1).get_real_secs()*1e6) << std::endl; +    std::cout << boost::format( +        " Difference of response time 2: %f us" +    ) % ((response_time2 - cmd_time2).get_real_secs()*1e6) << std::endl; +    std::cout << boost::format( +        " Difference between actual and expected time delta: %f us" +    ) % ((response_time2 - response_time1 - span).get_real_secs()*1e6) << std::endl; +      //use a timed command to start a stream at a specific time      //this is not the right way start streaming at time x,      //but it should approximate it within control RTT/2      //setup streaming      std::cout << std::endl;      std::cout << "About to start streaming using timed command:" << std::endl; -     +      //create a receive streamer      uhd::stream_args_t stream_args("fc32"); //complex floats      uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args); -     +      uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE);      stream_cmd.num_samps = 100; -    stream_cmd.stream_now = true; +    stream_cmd.stream_now = false;      const uhd::time_spec_t stream_time = usrp->get_time_now() + uhd::time_spec_t(0.1); -    usrp->set_command_time(stream_time); +    stream_cmd.time_spec = stream_time;      rx_stream->issue_stream_cmd(stream_cmd); -    usrp->clear_command_time();      //meta-data will be filled in by recv()      uhd::rx_metadata_t md; @@ -113,14 +143,14 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){          ) % md.error_code));      }      std::cout << boost::format( -        "Received packet: %u samples, %u full secs, %f frac secs" +        " Received packet: %u samples, %u full secs, %f frac secs"      ) % num_rx_samps % md.time_spec.get_full_secs() % md.time_spec.get_frac_secs() << std::endl;      std::cout << boost::format( -        "Stream time was: %u full secs, %f frac secs" +        " Stream time was: %u full secs, %f frac secs"      ) % stream_time.get_full_secs() % stream_time.get_frac_secs() << std::endl;      std::cout << boost::format( -        "Difference between stream time and first packet: %f us" -    ) % ((md.time_spec-stream_time).get_real_secs()/100*1e6) << std::endl; +        " Difference between stream time and first packet: %f us" +    ) % ((md.time_spec-stream_time).get_real_secs()*1e6) << std::endl;      //finished      std::cout << std::endl << "Done!" << std::endl << std::endl; diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp index 132b1198d..ab437af6b 100644 --- a/host/lib/usrp/b200/b200_impl.cpp +++ b/host/lib/usrp/b200/b200_impl.cpp @@ -501,6 +501,8 @@ void b200_impl::setup_radio(const size_t dspno)      _async_task_data->radio_ctrl[dspno] = perif.ctrl; //weak      _tree->access<time_spec_t>(mb_path / "time" / "cmd")          .subscribe(boost::bind(&radio_ctrl_core_3000::set_time, perif.ctrl, _1)); +    _tree->access<double>(mb_path / "tick_rate") +        .subscribe(boost::bind(&radio_ctrl_core_3000::set_tick_rate, perif.ctrl, _1));      this->register_loopback_self_test(perif.ctrl);      perif.atr = gpio_core_200_32wo::make(perif.ctrl, TOREG(SR_ATR)); | 
