I am trying to set "spp" parameter for rx stream to match some time period
but attached test program fails as following:
$ sudo ./test1
linux; GNU C++ version 4.8.4; Boost_105400; UHD_003.010.002.000-5-g4bbf0c20
-- X300 initialization sequence...
-- Connecting to niusrpriorpc at localhost:5444...
-- Using LVBITX bitfile
/usr/local/share/uhd/images/usrp_x310_fpga_HG.lvbitx...
-- Setup basic communication...
-- Loading values from EEPROM...
-- Setup RF frontend clocking...
-- Radio 1x clock:184.32
-- [DMA FIFO] Running BIST for FIFO 0... pass (Throughput: 1297.2MB/s)
-- [DMA FIFO] Running BIST for FIFO 1... pass (Throughput: 1302.0MB/s)
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- Performing timer loopback test... pass
-- Performing timer loopback test... pass
Receive frequency: 2630MHz
Streaming...
100us = 1536
Max samples per packet = 1020
UHD Error:
The receive packet handler caught a value exception.
ValueError: Bad CHDR or packet fragment
I use X310 device connected through PCIe.
If I do not set "spp" the program runs as expected.
thanks,
Dmitry
#include <iostream>
#include <fstream>
#include <csignal>
#include <complex>
#include <uhd/usrp/multi_usrp.hpp>
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
const double SR = 30.72e6/2;
std::string args = "type=x300,master_clock_rate=184.32e6";
uhd::device_addrs_t device_adds = uhd::device::find(args);
if(device_adds.size() == 0) {
std::cerr<<"No USRP Device Found. " << std::endl;
return -1;
}
uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(args);
usrp->set_clock_source("internal");
usrp->set_rx_rate(SR, 0);
usrp->set_rx_gain(0., 0);
usrp->set_rx_freq(2.63e9);
std::cout << "Receive frequency: " << usrp->get_rx_freq()/1e6 << "MHz" << std::endl;
std::cout << "Streaming..." << std::endl;
uhd::stream_args_t stream_args("sc16", "sc16");
int samples = SR/10000;
std::cout << std::dec << "100us = " << samples << std::endl;
stream_args.args["spp"] = str(boost::format("%d") % samples );
uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args);
std::cout << std::dec << "Max samples per packet = " << rx_stream->get_max_num_samps() << std::endl;
uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE);
stream_cmd.num_samps = 20000;
stream_cmd.stream_now = true;
rx_stream->issue_stream_cmd(stream_cmd);
std::vector<std::complex<short>> buff(100);
uhd::rx_metadata_t md;
while (1) {
size_t num_rx_samps = rx_stream->recv(&buff.front(), buff.size(), md);
if (md.has_time_spec)
std::cout << md.time_spec.get_tick_count(SR) << std::endl;
if (!num_rx_samps)
break;
}
return 0;
}
_______________________________________________
USRP-users mailing list
[email protected]
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com