aboutsummaryrefslogtreecommitdiffstats
path: root/host
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2015-07-30 12:40:24 -0700
committerMartin Braun <martin.braun@ettus.com>2015-08-07 10:35:06 -0700
commitc2827e9a0bcfe9c2dd2e4dd5d68f895384564ec6 (patch)
tree2b097f3c838823241d72364a7dc665f9f65f90d8 /host
parent3a7420fc4ffc246616e53259a3c8d718f9fa7c54 (diff)
downloaduhd-c2827e9a0bcfe9c2dd2e4dd5d68f895384564ec6.tar.gz
uhd-c2827e9a0bcfe9c2dd2e4dd5d68f895384564ec6.tar.bz2
uhd-c2827e9a0bcfe9c2dd2e4dd5d68f895384564ec6.zip
x300, e300: Moved common register names to radio namespace
This preps the code for merging common registers altogether.
Diffstat (limited to 'host')
-rw-r--r--host/lib/usrp/e300/e300_impl.cpp30
-rw-r--r--host/lib/usrp/e300/e300_regs.hpp62
-rw-r--r--host/lib/usrp/x300/x300_adc_dac_utils.cpp6
-rw-r--r--host/lib/usrp/x300/x300_impl.cpp30
-rw-r--r--host/lib/usrp/x300/x300_impl.hpp4
-rw-r--r--host/lib/usrp/x300/x300_regs.hpp63
6 files changed, 107 insertions, 88 deletions
diff --git a/host/lib/usrp/e300/e300_impl.cpp b/host/lib/usrp/e300/e300_impl.cpp
index e3c2e19c1..06f8e9e58 100644
--- a/host/lib/usrp/e300/e300_impl.cpp
+++ b/host/lib/usrp/e300/e300_impl.cpp
@@ -505,14 +505,14 @@ e300_impl::e300_impl(const uhd::device_addr_t &device_addr)
this->_setup_radio(instance);
// Radio 0 loopback through AD9361
- _codec_mgr->loopback_self_test(_radio_perifs[0].ctrl, TOREG(SR_CODEC_IDLE), RB64_CODEC_READBACK);
+ _codec_mgr->loopback_self_test(_radio_perifs[0].ctrl, radio::sr_addr(radio::CODEC_IDLE), radio::RB64_CODEC_READBACK);
// Radio 1 loopback through AD9361
- _codec_mgr->loopback_self_test(_radio_perifs[1].ctrl, TOREG(SR_CODEC_IDLE), RB64_CODEC_READBACK);
+ _codec_mgr->loopback_self_test(_radio_perifs[1].ctrl, radio::sr_addr(radio::CODEC_IDLE), radio::RB64_CODEC_READBACK);
////////////////////////////////////////////////////////////////////
// internal gpios
////////////////////////////////////////////////////////////////////
- gpio_core_200::sptr fp_gpio = gpio_core_200::make(_radio_perifs[0].ctrl, TOREG(SR_FP_GPIO), RB32_FP_GPIO);
+ gpio_core_200::sptr fp_gpio = gpio_core_200::make(_radio_perifs[0].ctrl, radio::sr_addr(radio::GPIO), radio::RB32_FP_GPIO);
BOOST_FOREACH(const gpio_attr_map_t::value_type attr, gpio_attr_map)
{
_tree->create<boost::uint32_t>(mb_path / "gpio" / "INT0" / attr.second)
@@ -749,8 +749,8 @@ void e300_impl::_register_loopback_self_test(wb_iface::sptr iface)
for (size_t i = 0; i < 100; i++)
{
boost::hash_combine(hash, i);
- iface->poke32(TOREG(SR_TEST), boost::uint32_t(hash));
- test_fail = iface->peek32(RB32_TEST) != boost::uint32_t(hash);
+ iface->poke32(radio::sr_addr(radio::TEST), boost::uint32_t(hash));
+ test_fail = iface->peek32(radio::RB32_TEST) != boost::uint32_t(hash);
if (test_fail) break; //exit loop on any failure
}
UHD_MSG(status) << ((test_fail)? " fail" : "pass") << std::endl;
@@ -998,20 +998,20 @@ void e300_impl::_setup_radio(const size_t dspno)
////////////////////////////////////////////////////////////////////
// Set up peripherals
////////////////////////////////////////////////////////////////////
- perif.atr = gpio_core_200_32wo::make(perif.ctrl, TOREG(SR_GPIO));
- perif.rx_fe = rx_frontend_core_200::make(perif.ctrl, TOREG(SR_RX_FRONT));
+ perif.atr = gpio_core_200_32wo::make(perif.ctrl, radio::sr_addr(radio::GPIO));
+ perif.rx_fe = rx_frontend_core_200::make(perif.ctrl, radio::sr_addr(radio::RX_FRONT));
perif.rx_fe->set_dc_offset(rx_frontend_core_200::DEFAULT_DC_OFFSET_VALUE);
perif.rx_fe->set_dc_offset_auto(rx_frontend_core_200::DEFAULT_DC_OFFSET_ENABLE);
perif.rx_fe->set_iq_balance(rx_frontend_core_200::DEFAULT_IQ_BALANCE_VALUE);
- perif.tx_fe = tx_frontend_core_200::make(perif.ctrl, TOREG(SR_TX_FRONT));
+ perif.tx_fe = tx_frontend_core_200::make(perif.ctrl, radio::sr_addr(radio::TX_FRONT));
perif.tx_fe->set_dc_offset(tx_frontend_core_200::DEFAULT_DC_OFFSET_VALUE);
perif.tx_fe->set_iq_balance(tx_frontend_core_200::DEFAULT_IQ_BALANCE_VALUE);
- perif.framer = rx_vita_core_3000::make(perif.ctrl, TOREG(SR_RX_CTRL));
- perif.ddc = rx_dsp_core_3000::make(perif.ctrl, TOREG(SR_RX_DSP));
+ perif.framer = rx_vita_core_3000::make(perif.ctrl, radio::sr_addr(radio::RX_CTRL));
+ perif.ddc = rx_dsp_core_3000::make(perif.ctrl, radio::sr_addr(radio::RX_DSP));
perif.ddc->set_link_rate(10e9/8); //whatever
perif.ddc->set_freq(e300::DEFAULT_DDC_FREQ);
- perif.deframer = tx_vita_core_3000::make(perif.ctrl, TOREG(SR_TX_CTRL));
- perif.duc = tx_dsp_core_3000::make(perif.ctrl, TOREG(SR_TX_DSP));
+ perif.deframer = tx_vita_core_3000::make(perif.ctrl, radio::sr_addr(radio::TX_CTRL));
+ perif.duc = tx_dsp_core_3000::make(perif.ctrl, radio::sr_addr(radio::TX_DSP));
perif.duc->set_link_rate(10e9/8); //whatever
perif.duc->set_freq(e300::DEFAULT_DUC_FREQ);
@@ -1019,9 +1019,9 @@ void e300_impl::_setup_radio(const size_t dspno)
// create time control objects
////////////////////////////////////////////////////////////////////
time_core_3000::readback_bases_type time64_rb_bases;
- time64_rb_bases.rb_now = RB64_TIME_NOW;
- time64_rb_bases.rb_pps = RB64_TIME_PPS;
- perif.time64 = time_core_3000::make(perif.ctrl, TOREG(SR_TIME), time64_rb_bases);
+ time64_rb_bases.rb_now = radio::RB64_TIME_NOW;
+ time64_rb_bases.rb_pps = radio::RB64_TIME_PPS;
+ perif.time64 = time_core_3000::make(perif.ctrl, radio::sr_addr(radio::TIME), time64_rb_bases);
////////////////////////////////////////////////////////////////////
// front end corrections
diff --git a/host/lib/usrp/e300/e300_regs.hpp b/host/lib/usrp/e300/e300_regs.hpp
index 5736ebfd4..846c759a4 100644
--- a/host/lib/usrp/e300/e300_regs.hpp
+++ b/host/lib/usrp/e300/e300_regs.hpp
@@ -18,36 +18,48 @@
#ifndef INCLUDED_E300_REGS_HPP
#define INCLUDED_E300_REGS_HPP
-#include <boost/cstdint.hpp>
+#include <stdint.h>
+#include <uhd/config.hpp>
-#define TOREG(x) ((x)*4)
+namespace uhd { namespace usrp { namespace e300 { namespace radio {
-#define localparam static const int
+static UHD_INLINE uint32_t sr_addr(const uint32_t offset)
+{
+ return offset * 4;
+}
+
+static const uint32_t DACSYNC = 5;
+static const uint32_t LOOPBACK = 6;
+static const uint32_t TEST = 7;
+static const uint32_t SPI = 8;
+static const uint32_t GPIO = 16;
+static const uint32_t MISC_OUTS = 24;
+static const uint32_t READBACK = 32;
+static const uint32_t TX_CTRL = 64;
+static const uint32_t RX_CTRL = 96;
+static const uint32_t TIME = 128;
+static const uint32_t RX_DSP = 144;
+static const uint32_t TX_DSP = 184;
+static const uint32_t LEDS = 195;
+static const uint32_t FP_GPIO = 200;
+static const uint32_t RX_FRONT = 208;
+static const uint32_t TX_FRONT = 216;
+static const uint32_t CODEC_IDLE = 250;
-localparam SR_TEST = 7;
-localparam SR_SPI = 8;
-localparam SR_GPIO = 16;
-localparam SR_MISC_OUTS = 24;
-localparam SR_READBACK = 32;
-localparam SR_TX_CTRL = 64;
-localparam SR_RX_CTRL = 96;
-localparam SR_TIME = 128;
-localparam SR_RX_DSP = 144;
-localparam SR_TX_DSP = 184;
-localparam SR_LEDS = 195;
-localparam SR_FP_GPIO = 200;
-localparam SR_RX_FRONT = 208;
-localparam SR_TX_FRONT = 216;
-localparam SR_CODEC_IDLE = 250;
+static const uint32_t RB32_GPIO = 0;
+static const uint32_t RB32_SPI = 4;
+static const uint32_t RB64_TIME_NOW = 8;
+static const uint32_t RB64_TIME_PPS = 16;
+static const uint32_t RB32_TEST = 24;
+static const uint32_t RB32_RX = 28;
+static const uint32_t RB32_FP_GPIO = 32;
+static const uint32_t RB32_MISC_INS = 36;
+static const uint32_t RB64_CODEC_READBACK = 40;
+static const uint32_t RB32_RADIO_NUM = 48;
+}}}} // namespace
-localparam RB32_SPI = 4;
-localparam RB64_TIME_NOW = 8;
-localparam RB64_TIME_PPS = 16;
-localparam RB32_TEST = 24;
-localparam RB32_FP_GPIO = 32;
-localparam RB64_CODEC_READBACK = 40;
-localparam RB32_RADIO_NUM = 48;
+#define localparam static const int
localparam ST_RX_ENABLE = 20;
localparam ST_TX_ENABLE = 19;
diff --git a/host/lib/usrp/x300/x300_adc_dac_utils.cpp b/host/lib/usrp/x300/x300_adc_dac_utils.cpp
index 2dadea26e..efc2c8ed1 100644
--- a/host/lib/usrp/x300/x300_adc_dac_utils.cpp
+++ b/host/lib/usrp/x300/x300_adc_dac_utils.cpp
@@ -39,7 +39,7 @@ void x300_impl::synchronize_dacs(const std::vector<radio_perifs_t*>& radios)
//Get a rough estimate of the cumulative command latency
boost::posix_time::ptime t_start = boost::posix_time::microsec_clock::local_time();
for (size_t i = 0; i < radios.size(); i++) {
- radios[i]->ctrl->peek64(RB64_TIME_NOW); //Discard value. We are just timing the call
+ radios[i]->ctrl->peek64(uhd::usrp::radio::RB64_TIME_NOW); //Discard value. We are just timing the call
}
boost::posix_time::time_duration t_elapsed =
boost::posix_time::microsec_clock::local_time() - t_start;
@@ -54,7 +54,7 @@ void x300_impl::synchronize_dacs(const std::vector<radio_perifs_t*>& radios)
//Send the sync command
for (size_t i = 0; i < radios.size(); i++) {
radios[i]->ctrl->set_time(sync_time);
- radios[i]->ctrl->poke32(TOREG(SR_DACSYNC), 0x1); //Arm FRAMEP/N sync pulse
+ radios[i]->ctrl->poke32(uhd::usrp::radio::sr_addr(uhd::usrp::radio::DACSYNC), 0x1); //Arm FRAMEP/N sync pulse
radios[i]->ctrl->set_time(uhd::time_spec_t(0.0)); //Clear command time
}
@@ -71,7 +71,7 @@ void x300_impl::synchronize_dacs(const std::vector<radio_perifs_t*>& radios)
static void check_adc(uhd::wb_iface::sptr iface, const boost::uint32_t val, const boost::uint32_t i)
{
- boost::uint32_t adc_rb = iface->peek32(RB32_RX);
+ boost::uint32_t adc_rb = iface->peek32(uhd::usrp::radio::RB32_RX);
adc_rb ^= 0xfffc0000; //adapt for I inversion in FPGA
if (val != adc_rb) {
throw uhd::runtime_error(
diff --git a/host/lib/usrp/x300/x300_impl.cpp b/host/lib/usrp/x300/x300_impl.cpp
index c9cc0cabc..3a50f7ea0 100644
--- a/host/lib/usrp/x300/x300_impl.cpp
+++ b/host/lib/usrp/x300/x300_impl.cpp
@@ -745,7 +745,7 @@ void x300_impl::setup_mb(const size_t mb_i, const uhd::device_addr_t &dev_addr)
////////////////////////////////////////////////////////////////////
// front panel gpio
////////////////////////////////////////////////////////////////////
- mb.fp_gpio = gpio_core_200::make(mb.radio_perifs[0].ctrl, TOREG(SR_FP_GPIO), RB32_FP_GPIO);
+ mb.fp_gpio = gpio_core_200::make(mb.radio_perifs[0].ctrl, radio::sr_addr(radio::GPIO), radio::RB32_FP_GPIO);
BOOST_FOREACH(const gpio_attr_map_t::value_type attr, gpio_attr_map)
{
_tree->create<boost::uint32_t>(mb_path / "gpio" / "FP0" / attr.second)
@@ -934,30 +934,30 @@ void x300_impl::setup_radio(const size_t mb_i, const std::string &slot_name, con
////////////////////////////////////////////////////////////////
// Setup peripherals
////////////////////////////////////////////////////////////////
- perif.spi = spi_core_3000::make(perif.ctrl, TOREG(SR_SPI), RB32_SPI);
+ perif.spi = spi_core_3000::make(perif.ctrl, radio::sr_addr(radio::SPI), radio::RB32_SPI);
perif.adc = x300_adc_ctrl::make(perif.spi, DB_ADC_SEN);
perif.dac = x300_dac_ctrl::make(perif.spi, DB_DAC_SEN, mb.clock->get_master_clock_rate());
- perif.leds = gpio_core_200_32wo::make(perif.ctrl, TOREG(SR_LEDS));
- perif.rx_fe = rx_frontend_core_200::make(perif.ctrl, TOREG(SR_RX_FRONT));
+ perif.leds = gpio_core_200_32wo::make(perif.ctrl, radio::sr_addr(radio::LEDS));
+ perif.rx_fe = rx_frontend_core_200::make(perif.ctrl, radio::sr_addr(radio::RX_FRONT));
perif.rx_fe->set_dc_offset(rx_frontend_core_200::DEFAULT_DC_OFFSET_VALUE);
perif.rx_fe->set_dc_offset_auto(rx_frontend_core_200::DEFAULT_DC_OFFSET_ENABLE);
- perif.tx_fe = tx_frontend_core_200::make(perif.ctrl, TOREG(SR_TX_FRONT));
+ perif.tx_fe = tx_frontend_core_200::make(perif.ctrl, radio::sr_addr(radio::TX_FRONT));
perif.tx_fe->set_dc_offset(tx_frontend_core_200::DEFAULT_DC_OFFSET_VALUE);
perif.tx_fe->set_iq_balance(tx_frontend_core_200::DEFAULT_IQ_BALANCE_VALUE);
- perif.framer = rx_vita_core_3000::make(perif.ctrl, TOREG(SR_RX_CTRL));
- perif.ddc = rx_dsp_core_3000::make(perif.ctrl, TOREG(SR_RX_DSP));
+ perif.framer = rx_vita_core_3000::make(perif.ctrl, radio::sr_addr(radio::RX_CTRL));
+ perif.ddc = rx_dsp_core_3000::make(perif.ctrl, radio::sr_addr(radio::RX_DSP));
perif.ddc->set_link_rate(10e9/8); //whatever
- perif.deframer = tx_vita_core_3000::make(perif.ctrl, TOREG(SR_TX_CTRL));
- perif.duc = tx_dsp_core_3000::make(perif.ctrl, TOREG(SR_TX_DSP));
+ perif.deframer = tx_vita_core_3000::make(perif.ctrl, radio::sr_addr(radio::TX_CTRL));
+ perif.duc = tx_dsp_core_3000::make(perif.ctrl, radio::sr_addr(radio::TX_DSP));
perif.duc->set_link_rate(10e9/8); //whatever
////////////////////////////////////////////////////////////////////
// create time control objects
////////////////////////////////////////////////////////////////////
time_core_3000::readback_bases_type time64_rb_bases;
- time64_rb_bases.rb_now = RB64_TIME_NOW;
- time64_rb_bases.rb_pps = RB64_TIME_PPS;
- perif.time64 = time_core_3000::make(perif.ctrl, TOREG(SR_TIME), time64_rb_bases);
+ time64_rb_bases.rb_now = radio::RB64_TIME_NOW;
+ time64_rb_bases.rb_pps = radio::RB64_TIME_PPS;
+ perif.time64 = time_core_3000::make(perif.ctrl, radio::sr_addr(radio::TIME), time64_rb_bases);
//Capture delays are calibrated every time. The status is only printed is the user
//asks to run the xfer self cal using "self_cal_adc_delay"
@@ -1021,7 +1021,7 @@ void x300_impl::setup_radio(const size_t mb_i, const std::string &slot_name, con
//create a new dboard interface
x300_dboard_iface_config_t db_config;
- db_config.gpio = gpio_core_200::make(perif.ctrl, TOREG(SR_GPIO), RB32_GPIO);
+ db_config.gpio = gpio_core_200::make(perif.ctrl, radio::sr_addr(radio::GPIO), radio::RB32_GPIO);
db_config.spi = perif.spi;
db_config.rx_spi_slaveno = DB_RX_SEN;
db_config.tx_spi_slaveno = DB_TX_SEN;
@@ -1334,8 +1334,8 @@ void x300_impl::register_loopback_self_test(wb_iface::sptr iface)
for (size_t i = 0; i < 100; i++)
{
boost::hash_combine(hash, i);
- iface->poke32(TOREG(SR_TEST), boost::uint32_t(hash));
- test_fail = iface->peek32(RB32_TEST) != boost::uint32_t(hash);
+ iface->poke32(radio::sr_addr(radio::TEST), boost::uint32_t(hash));
+ test_fail = iface->peek32(radio::RB32_TEST) != boost::uint32_t(hash);
if (test_fail) break; //exit loop on any failure
}
UHD_MSG(status) << ((test_fail)? " fail" : "pass") << std::endl;
diff --git a/host/lib/usrp/x300/x300_impl.hpp b/host/lib/usrp/x300/x300_impl.hpp
index 20cd4d754..3cec7d5ce 100644
--- a/host/lib/usrp/x300/x300_impl.hpp
+++ b/host/lib/usrp/x300/x300_impl.hpp
@@ -182,7 +182,7 @@ private:
UHD_DEFINE_SOFT_REG_FIELD(ADC_DATA_DLY_VAL, /*width*/ 5, /*shift*/ 4); //[8:4]
UHD_DEFINE_SOFT_REG_FIELD(ADC_CHECKER_ENABLED, /*width*/ 1, /*shift*/ 9); //[9]
- radio_misc_outs_reg(): uhd::soft_reg32_wo_t(TOREG(SR_MISC_OUTS)) {
+ radio_misc_outs_reg(): uhd::soft_reg32_wo_t(uhd::usrp::radio::sr_addr(uhd::usrp::radio::MISC_OUTS)) {
//Initial values
set(DAC_ENABLED, 0);
set(DAC_RESET_N, 0);
@@ -203,7 +203,7 @@ private:
UHD_DEFINE_SOFT_REG_FIELD(ADC_CHECKER1_Q_ERROR, /*width*/ 1, /*shift*/ 6); //[6]
UHD_DEFINE_SOFT_REG_FIELD(ADC_CHECKER1_I_ERROR, /*width*/ 1, /*shift*/ 7); //[7]
- radio_misc_ins_reg(): uhd::soft_reg32_ro_t(RB32_MISC_INS) { }
+ radio_misc_ins_reg(): uhd::soft_reg32_ro_t(uhd::usrp::radio::RB32_MISC_INS) { }
};
//perifs in the radio core
diff --git a/host/lib/usrp/x300/x300_regs.hpp b/host/lib/usrp/x300/x300_regs.hpp
index 6e92a6dbc..ac2fcc31e 100644
--- a/host/lib/usrp/x300/x300_regs.hpp
+++ b/host/lib/usrp/x300/x300_regs.hpp
@@ -18,39 +18,46 @@
#ifndef INCLUDED_X300_REGS_HPP
#define INCLUDED_X300_REGS_HPP
+#include <uhd/config.hpp>
#include <stdint.h>
-#include <boost/cstdint.hpp>
-#define TOREG(x) ((x)*4)
+namespace uhd { namespace usrp { namespace radio {
+
+static UHD_INLINE uint32_t sr_addr(const uint32_t offset)
+{
+ return offset * 4;
+}
+
+static const uint32_t DACSYNC = 5;
+static const uint32_t LOOPBACK = 6;
+static const uint32_t TEST = 7;
+static const uint32_t SPI = 8;
+static const uint32_t GPIO = 16;
+static const uint32_t MISC_OUTS = 24;
+static const uint32_t READBACK = 32;
+static const uint32_t TX_CTRL = 64;
+static const uint32_t RX_CTRL = 96;
+static const uint32_t TIME = 128;
+static const uint32_t RX_DSP = 144;
+static const uint32_t TX_DSP = 184;
+static const uint32_t LEDS = 195;
+static const uint32_t FP_GPIO = 200;
+static const uint32_t RX_FRONT = 208;
+static const uint32_t TX_FRONT = 216;
+
+static const uint32_t RB32_GPIO = 0;
+static const uint32_t RB32_SPI = 4;
+static const uint32_t RB64_TIME_NOW = 8;
+static const uint32_t RB64_TIME_PPS = 16;
+static const uint32_t RB32_TEST = 24;
+static const uint32_t RB32_RX = 28;
+static const uint32_t RB32_FP_GPIO = 32;
+static const uint32_t RB32_MISC_INS = 36;
+
+}}} // namespace
#define localparam static const int
-localparam SR_DACSYNC = 5;
-localparam SR_LOOPBACK = 6;
-localparam SR_TEST = 7;
-localparam SR_SPI = 8;
-localparam SR_GPIO = 16;
-localparam SR_MISC_OUTS = 24;
-localparam SR_READBACK = 32;
-localparam SR_TX_CTRL = 64;
-localparam SR_RX_CTRL = 96;
-localparam SR_TIME = 128;
-localparam SR_RX_DSP = 144;
-localparam SR_TX_DSP = 184;
-localparam SR_LEDS = 195;
-localparam SR_FP_GPIO = 200;
-localparam SR_RX_FRONT = 208;
-localparam SR_TX_FRONT = 216;
-
-localparam RB32_GPIO = 0;
-localparam RB32_SPI = 4;
-localparam RB64_TIME_NOW = 8;
-localparam RB64_TIME_PPS = 16;
-localparam RB32_TEST = 24;
-localparam RB32_RX = 28;
-localparam RB32_FP_GPIO = 32;
-localparam RB32_MISC_INS = 36;
-
localparam BL_ADDRESS = 0;
localparam BL_DATA = 1;