aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/include/uhdlib/usrp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/include/uhdlib/usrp')
-rw-r--r--host/lib/include/uhdlib/usrp/cores/gpio_atr_3000.hpp71
1 files changed, 47 insertions, 24 deletions
diff --git a/host/lib/include/uhdlib/usrp/cores/gpio_atr_3000.hpp b/host/lib/include/uhdlib/usrp/cores/gpio_atr_3000.hpp
index aa266cbcb..85f22d967 100644
--- a/host/lib/include/uhdlib/usrp/cores/gpio_atr_3000.hpp
+++ b/host/lib/include/uhdlib/usrp/cores/gpio_atr_3000.hpp
@@ -17,38 +17,66 @@
namespace uhd { namespace usrp { namespace gpio_atr {
-class gpio_atr_3000 : uhd::noncopyable
+struct gpio_atr_offsets
{
-public:
- typedef std::shared_ptr<gpio_atr_3000> sptr;
-
- static const uint32_t MASK_SET_ALL = 0xFFFFFFFF;
+ uhd::wb_iface::wb_addr_type idle;
+ uhd::wb_iface::wb_addr_type rx;
+ uhd::wb_iface::wb_addr_type tx;
+ uhd::wb_iface::wb_addr_type duplex;
+ uhd::wb_iface::wb_addr_type ddr;
+ uhd::wb_iface::wb_addr_type disable;
+ uhd::wb_iface::wb_addr_type readback;
- virtual ~gpio_atr_3000(void) {}
+ /*!
+ * Returns whether this GPIO regmap is write-only.
+ *
+ * \return whether the readback register is valid
+ */
+ bool is_writeonly() const;
/*!
- * Create a read-write GPIO ATR interface object
+ * Create a GPIO regmap according to the typical "defaults": Four
+ * sequential ATR registers followed immediately by, in order, duplex,
+ * direction, disable, and an explicitly specified readback address.
*
- * \param iface register iface to GPIO ATR registers
* \param base base settings offset for GPIO ATR registers
* \param rb_addr readback offset for GPIO ATR registers
- * \param reg_offset Delta between the register addresses
+ * \param stride Delta between the register addresses
*/
- static sptr make(uhd::wb_iface::sptr iface,
+ static gpio_atr_offsets make_default(
const uhd::wb_iface::wb_addr_type base,
const uhd::wb_iface::wb_addr_type rb_addr,
- const size_t reg_offset = 4);
+ const size_t stride = 4);
/*!
- * Create a write-only GPIO ATR interface object
+ * Create a GPIO regmap according to the typical "defaults" (see
+ * make_default), with the readback register disabled.
*
- * \param iface register iface to GPIO ATR registers
* \param base base settings offset for GPIO ATR registers
- * \param reg_offset Delta between the register addresses
+ * \param rb_addr readback offset for GPIO ATR registers
+ * \param stride Delta between the register addresses
*/
- static sptr make_write_only(uhd::wb_iface::sptr iface,
+ static gpio_atr_offsets make_write_only(
const uhd::wb_iface::wb_addr_type base,
- const size_t reg_offset = 4);
+ const size_t stride = 4);
+};
+
+class gpio_atr_3000 : uhd::noncopyable
+{
+public:
+ typedef std::shared_ptr<gpio_atr_3000> sptr;
+
+ static const uint32_t MASK_SET_ALL = 0xFFFFFFFF;
+
+ virtual ~gpio_atr_3000(void) {}
+
+ /*!
+ * Create a GPIO ATR interface object using the given registers
+ *
+ * \param iface register iface to GPIO ATR registers
+ * \param registers Register offsets
+ */
+ static sptr make(uhd::wb_iface::sptr iface, gpio_atr_offsets registers);
/*!
* Select the ATR mode for all bits in the mask
@@ -124,17 +152,12 @@ public:
virtual ~db_gpio_atr_3000(void) {}
/*!
- * Create a read-write GPIO ATR interface object for a daughterboard connector
+ * Create a GPIO ATR interface object for a daughterboard connector
*
* \param iface register iface to GPIO ATR registers
- * \param base base settings offset for GPIO ATR registers
- * \param rb_addr readback offset for GPIO ATR registers
- * \param reg_offset Delta between the register addresses
+ * \param registers Register offsets
*/
- static sptr make(uhd::wb_iface::sptr iface,
- const uhd::wb_iface::wb_addr_type base,
- const uhd::wb_iface::wb_addr_type rb_addr,
- const size_t reg_offset = 4);
+ static sptr make(uhd::wb_iface::sptr iface, gpio_atr_offsets registers);
/*!
* Configure the GPIO mode for all pins in the daughterboard connector