aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/e100/dboard_iface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp/e100/dboard_iface.cpp')
-rw-r--r--host/lib/usrp/e100/dboard_iface.cpp71
1 files changed, 10 insertions, 61 deletions
diff --git a/host/lib/usrp/e100/dboard_iface.cpp b/host/lib/usrp/e100/dboard_iface.cpp
index d45577bd9..6afc7bc48 100644
--- a/host/lib/usrp/e100/dboard_iface.cpp
+++ b/host/lib/usrp/e100/dboard_iface.cpp
@@ -15,7 +15,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#include "wb_iface.hpp"
+#include "gpio_core_200.hpp"
#include <uhd/types/serial.hpp>
#include "e100_regs.hpp"
#include "clock_ctrl.hpp"
@@ -45,13 +45,11 @@ public:
_spi_iface = spi_iface;
_clock = clock;
_codec = codec;
+ _gpio = gpio_core_200::make(_wb_iface, E100_REG_SR_ADDR(UE_SR_GPIO), E100_REG_RB_GPIO);
//init the clock rate shadows
this->set_clock_rate(UNIT_RX, _clock->get_fpga_clock_rate());
this->set_clock_rate(UNIT_TX, _clock->get_fpga_clock_rate());
-
- _wb_iface->poke16(E100_REG_GPIO_RX_DBG, 0);
- _wb_iface->poke16(E100_REG_GPIO_TX_DBG, 0);
}
~e100_dboard_iface(void){
@@ -104,6 +102,7 @@ private:
spi_iface::sptr _spi_iface;
e100_clock_ctrl::sptr _clock;
e100_codec_ctrl::sptr _codec;
+ gpio_core_200::sptr _gpio;
};
/***********************************************************************
@@ -160,77 +159,27 @@ double e100_dboard_iface::get_codec_rate(unit_t){
* GPIO
**********************************************************************/
void e100_dboard_iface::_set_pin_ctrl(unit_t unit, boost::uint16_t value){
- UHD_ASSERT_THROW(GPIO_SEL_ATR == 1); //make this assumption
- switch(unit){
- case UNIT_RX: _wb_iface->poke16(E100_REG_GPIO_RX_SEL, value); return;
- case UNIT_TX: _wb_iface->poke16(E100_REG_GPIO_TX_SEL, value); return;
- }
+ return _gpio->set_pin_ctrl(unit, value);
}
void e100_dboard_iface::_set_gpio_ddr(unit_t unit, boost::uint16_t value){
- switch(unit){
- case UNIT_RX: _wb_iface->poke16(E100_REG_GPIO_RX_DDR, value); return;
- case UNIT_TX: _wb_iface->poke16(E100_REG_GPIO_TX_DDR, value); return;
- }
+ return _gpio->set_gpio_ddr(unit, value);
}
void e100_dboard_iface::_set_gpio_out(unit_t unit, boost::uint16_t value){
- switch(unit){
- case UNIT_RX: _wb_iface->poke16(E100_REG_GPIO_RX_IO, value); return;
- case UNIT_TX: _wb_iface->poke16(E100_REG_GPIO_TX_IO, value); return;
- }
+ return _gpio->set_gpio_out(unit, value);
}
boost::uint16_t e100_dboard_iface::read_gpio(unit_t unit){
- switch(unit){
- case UNIT_RX: return _wb_iface->peek16(E100_REG_GPIO_RX_IO);
- case UNIT_TX: return _wb_iface->peek16(E100_REG_GPIO_TX_IO);
- default: UHD_THROW_INVALID_CODE_PATH();
- }
+ return _gpio->read_gpio(unit);
}
void e100_dboard_iface::_set_atr_reg(unit_t unit, atr_reg_t atr, boost::uint16_t value){
- //define mapping of unit to atr regs to register address
- static const uhd::dict<
- unit_t, uhd::dict<atr_reg_t, boost::uint32_t>
- > unit_to_atr_to_addr = map_list_of
- (UNIT_RX, map_list_of
- (ATR_REG_IDLE, E100_REG_ATR_IDLE_RXSIDE)
- (ATR_REG_TX_ONLY, E100_REG_ATR_INTX_RXSIDE)
- (ATR_REG_RX_ONLY, E100_REG_ATR_INRX_RXSIDE)
- (ATR_REG_FULL_DUPLEX, E100_REG_ATR_FULL_RXSIDE)
- )
- (UNIT_TX, map_list_of
- (ATR_REG_IDLE, E100_REG_ATR_IDLE_TXSIDE)
- (ATR_REG_TX_ONLY, E100_REG_ATR_INTX_TXSIDE)
- (ATR_REG_RX_ONLY, E100_REG_ATR_INRX_TXSIDE)
- (ATR_REG_FULL_DUPLEX, E100_REG_ATR_FULL_TXSIDE)
- )
- ;
- _wb_iface->poke16(unit_to_atr_to_addr[unit][atr], value);
+ return _gpio->set_atr_reg(unit, atr, value);
}
-void e100_dboard_iface::set_gpio_debug(unit_t unit, int which){
- //set this unit to all outputs
- this->set_gpio_ddr(unit, 0xffff);
-
- //calculate the debug selections
- boost::uint32_t dbg_sels = 0x0;
- int sel = (which == 0)? GPIO_SEL_DEBUG_0 : GPIO_SEL_DEBUG_1;
- for(size_t i = 0; i < 16; i++) dbg_sels |= sel << i;
-
- //set the debug on and which debug selection
- switch(unit){
- case UNIT_RX:
- _wb_iface->poke16(E100_REG_GPIO_RX_DBG, 0xffff);
- _wb_iface->poke16(E100_REG_GPIO_RX_SEL, dbg_sels);
- return;
-
- case UNIT_TX:
- _wb_iface->poke16(E100_REG_GPIO_TX_DBG, 0xffff);
- _wb_iface->poke16(E100_REG_GPIO_TX_SEL, dbg_sels);
- return;
- }
+void e100_dboard_iface::set_gpio_debug(unit_t, int){
+ throw uhd::not_implemented_error("no set_gpio_debug implemented");
}
/***********************************************************************