diff options
| -rw-r--r-- | firmware/microblaze/apps/txrx_uhd.c | 2 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/io_impl.cpp | 8 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/mboard_impl.cpp | 8 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_impl.hpp | 3 | 
4 files changed, 19 insertions, 2 deletions
| diff --git a/firmware/microblaze/apps/txrx_uhd.c b/firmware/microblaze/apps/txrx_uhd.c index e38eb621d..4765fa006 100644 --- a/firmware/microblaze/apps/txrx_uhd.c +++ b/firmware/microblaze/apps/txrx_uhd.c @@ -536,7 +536,7 @@ main(void)      }      if (pending & PIC_OVERRUN_INT){ -      dbsm_handle_rx_overrun(&dsp_rx_sm); +      //dbsm_handle_rx_overrun(&dsp_rx_sm);        pic_regs->pending = PIC_OVERRUN_INT;	// clear pending interrupt        // FIXME Figure out how to handle this robustly. diff --git a/host/lib/usrp/usrp2/io_impl.cpp b/host/lib/usrp/usrp2/io_impl.cpp index f25b73f80..39e6c167f 100644 --- a/host/lib/usrp/usrp2/io_impl.cpp +++ b/host/lib/usrp/usrp2/io_impl.cpp @@ -339,6 +339,11 @@ size_t usrp2_impl::get_max_recv_samps_per_packet(void) const{      return bpp/_rx_otw_type.get_sample_size();  } +static void handle_overflow(std::vector<usrp2_mboard_impl::sptr> &mboards, size_t chan){ +    std::cerr << "O" << std::flush; +    mboards.at(chan/mboards.size())->handle_overflow(); +} +  size_t usrp2_impl::recv(      const std::vector<void *> &buffs, size_t num_samps,      rx_metadata_t &metadata, const io_type_t &io_type, @@ -351,6 +356,7 @@ size_t usrp2_impl::recv(          io_type, _rx_otw_type,                     //input and output types to convert          _mboards.front()->get_master_clock_freq(), //master clock tick rate          uhd::transport::vrt::if_hdr_unpack_be, -        boost::bind(&usrp2_impl::io_impl::get_recv_buffs, _io_impl.get(), _1, timeout) +        boost::bind(&usrp2_impl::io_impl::get_recv_buffs, _io_impl.get(), _1, timeout), +        boost::bind(&handle_overflow, _mboards, _1)      );  } diff --git a/host/lib/usrp/usrp2/mboard_impl.cpp b/host/lib/usrp/usrp2/mboard_impl.cpp index 8f3ae5c1b..44f7c1130 100644 --- a/host/lib/usrp/usrp2/mboard_impl.cpp +++ b/host/lib/usrp/usrp2/mboard_impl.cpp @@ -196,7 +196,15 @@ void usrp2_mboard_impl::set_time_spec(const time_spec_t &time_spec, bool now){      _iface->poke32(U2_REG_TIME64_SECS, boost::uint32_t(time_spec.get_full_secs()));  } +void usrp2_mboard_impl::handle_overflow(void){ +    _iface->poke32(U2_REG_RX_CTRL_CLEAR_OVERRUN, 1); +    if (_continuous_streaming){ //re-issue the stream command if already continuous +        this->issue_ddc_stream_cmd(stream_cmd_t::STREAM_MODE_START_CONTINUOUS); +    } +} +  void usrp2_mboard_impl::issue_ddc_stream_cmd(const stream_cmd_t &stream_cmd){ +    _continuous_streaming = stream_cmd.stream_mode == stream_cmd_t::STREAM_MODE_START_CONTINUOUS;      _iface->poke32(U2_REG_RX_CTRL_STREAM_CMD, dsp_type1::calc_stream_cmd_word(          stream_cmd, _recv_samps_per_packet      )); diff --git a/host/lib/usrp/usrp2/usrp2_impl.hpp b/host/lib/usrp/usrp2/usrp2_impl.hpp index 2531bd6cb..62aeddbd3 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.hpp +++ b/host/lib/usrp/usrp2/usrp2_impl.hpp @@ -94,10 +94,13 @@ public:          return _clock_ctrl->get_master_clock_rate();      } +    void handle_overflow(void); +  private:      size_t _index;      int _rev_hi, _rev_lo;      const size_t _recv_samps_per_packet; +    bool _continuous_streaming;      //properties for this mboard      void get(const wax::obj &, wax::obj &); | 
