// // Copyright 2011,2014,2015 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 // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #ifndef INCLUDED_LIBUHD_USRP_GPIO_CORE_3000_HPP #define INCLUDED_LIBUHD_USRP_GPIO_CORE_3000_HPP #include #include #include #include #include namespace uhd { namespace usrp { namespace gpio_atr { class gpio_atr_3000 : boost::noncopyable { public: typedef boost::shared_ptr sptr; static const uint32_t MASK_SET_ALL = 0xFFFFFFFF; virtual ~gpio_atr_3000(void) {}; /*! * Create a read-write GPIO ATR interface object * * \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 */ 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); /*! * Create a write-only GPIO ATR interface object * * \param iface register iface to GPIO ATR registers * \param base base settings offset for GPIO ATR registers */ static sptr make_write_only( uhd::wb_iface::sptr iface, const uhd::wb_iface::wb_addr_type base); /*! * Select the ATR mode for all bits in the mask * * \param mode the mode to apply {ATR = outputs driven by ATR state machine, GPIO = outputs static} * \param mask apply the mode to all non-zero bits in the mask */ virtual void set_atr_mode(const gpio_atr_mode_t mode, const uint32_t mask) = 0; /*! * Select the data direction for all bits in the mask * * \param dir the direction {OUTPUT, INPUT} * \param mask apply the mode to all non-zero bits in the mask */ virtual void set_gpio_ddr(const gpio_ddr_t dir, const uint32_t mask) = 0; /*! * Write the specified (masked) value to the ATR register * * \param atr the type of ATR register to write to {IDLE, RX, TX, FDX} * \param value the value to write * \param mask only writes to the bits where mask is non-zero */ virtual void set_atr_reg(const gpio_atr_reg_t atr, const uint32_t value, const uint32_t mask = MASK_SET_ALL) = 0; /*! * Write to a static GPIO output * * \param value the value to write * \param mask only writes to the bits where mask is non-zero */ virtual void set_gpio_out(const uint32_t value, const uint32_t mask = MASK_SET_ALL) = 0; /*! * Read the state of the GPIO pins * If a pin is configured as an input, reads the actual value of the pin * If a pin is configured as an output, reads the last value written to the pin * * \return the value read back */ virtual uint32_t read_gpio() = 0; /*! * Set a GPIO attribute * * \param attr the attribute to set * \param value the value to write to the attribute */ virtual void set_gpio_attr(const gpio_attr_t attr, const uint32_t value) = 0; }; class db_gpio_atr_3000 { public: typedef boost::shared_ptr sptr; typedef uhd::usrp::dboard_iface::unit_t db_unit_t; virtual ~db_gpio_atr_3000(void) {}; /*! * Create a read-write 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 */ 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); /*! * Configure the GPIO mode for all pins in the daughterboard connector * * \param unit the side of the daughterboard interface to configure (TX or RX) * \param value if value[i] is 1, the i'th bit is in ATR mode otherwise it is in GPIO mode * \param mask mask */ virtual void set_pin_ctrl(const db_unit_t unit, const uint32_t value, const uint32_t mask) = 0; virtual uint32_t get_pin_ctrl(const db_unit_t unit) = 0; /*! * Configure the direction for all pins in the daughterboard connector * * \param unit the side of the daughterboard interface to configure (TX or RX) * \param value if value[i] is 1, the i'th bit is an output otherwise it is an input * \param mask mask */ virtual void set_gpio_ddr(const db_unit_t unit, const uint32_t value, const uint32_t mask) = 0; virtual uint32_t get_gpio_ddr(const db_unit_t unit) = 0; /*! * Write the specified value to the ATR register (all bits) * * \param unit the side of the daughterboard interface to configure (TX or RX) * \param atr the type of ATR register to write to {IDLE, RX, TX, FDX} * \param value the value to write * \param mask mask */ virtual void set_atr_reg(const db_unit_t unit, const gpio_atr_reg_t atr, const uint32_t value, const uint32_t mask) = 0; virtual uint32_t get_atr_reg(const db_unit_t unit, const gpio_atr_reg_t atr) = 0; /*! * Write the specified value to the GPIO register (all bits) * * \param unit the side of the daughterboard interface to configure (TX or RX) * \param value the value to write * \param mask mask */ virtual void set_gpio_out(const db_unit_t unit, const uint32_t value, const uint32_t mask) = 0; virtual uint32_t get_gpio_out(const db_unit_t unit) = 0; /*! * Read the state of the GPIO pins * If a pin is configured as an input, reads the actual value of the pin * If a pin is configured as an output, reads the last value written to the pin * * \param unit the side of the daughterboard interface to configure (TX or RX) * \return the value read back */ virtual uint32_t read_gpio(const db_unit_t unit) = 0; }; }}} //namespaces #endif /* INCLUDED_LIBUHD_USRP_GPIO_CORE_3000_HPP */