diff options
| author | Ben Hilburn <ben@ettus.com> | 2012-11-05 11:45:07 -0800 | 
|---|---|---|
| committer | Josh Blum <josh@joshknows.com> | 2012-11-06 16:49:05 -0800 | 
| commit | 246be4752d4ad0cda7dc8f8869c04ecfe3f46e76 (patch) | |
| tree | 97be9d50271caad04024b8f312076e3b42737174 | |
| parent | e3452bf969552abf2497dbd7ac8ed093a3f36de3 (diff) | |
| download | uhd-246be4752d4ad0cda7dc8f8869c04ecfe3f46e76.tar.gz uhd-246be4752d4ad0cda7dc8f8869c04ecfe3f46e76.tar.bz2 uhd-246be4752d4ad0cda7dc8f8869c04ecfe3f46e76.zip | |
wbx v4: fixing the drivers for the new rev of the WBX board
| -rwxr-xr-x | host/lib/ic_reg_maps/gen_adf4351_regs.py | 20 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_wbx_version4.cpp | 53 | 
2 files changed, 41 insertions, 32 deletions
| diff --git a/host/lib/ic_reg_maps/gen_adf4351_regs.py b/host/lib/ic_reg_maps/gen_adf4351_regs.py index 607b2979d..4b0ef788c 100755 --- a/host/lib/ic_reg_maps/gen_adf4351_regs.py +++ b/host/lib/ic_reg_maps/gen_adf4351_regs.py @@ -57,7 +57,7 @@ low_noise_and_spur      2[29:30]    3       low_noise, reserved0, reserved1, low  ## address 3  ########################################################################  clock_divider_12_bit    3[3:14]     0 -clock_div_mode          3[15:16]    0       clock_divider_off, fast_lock, resync_enable, reserved +clock_div_mode          3[15:16]    1       clock_divider_off, fast_lock, resync_enable, reserved  ##reserved              3[17]       0  cycle_slip_reduction    3[18]       0       disabled, enabled  ##reserved              3[19:20]    0 @@ -76,7 +76,7 @@ aux_output_select       4[9]        1       divided, fundamental  mute_till_lock_detect   4[10]       0       mute_disabled, mute_enabled  vco_power_down          4[11]       0       vco_powered_up, vco_powered_down  band_select_clock_div   4[12:19]    0 -rf_divider_select       4[20:22]    5       div1, div2, div4, div8, div16, div32, div64 +rf_divider_select       4[20:22]    0       div1, div2, div4, div8, div16, div32, div64  feedback_select         4[23]       1       divided, fundamental  ##reserved              4[24:31]    0  ######################################################################## @@ -103,9 +103,9 @@ enum addr_t{  };  boost::uint32_t get_reg(boost::uint8_t addr){ -    boost::uint32_t reg = 0; +    boost::uint32_t reg = addr & 0x7;      switch(addr){ -    #for $addr in sorted(set(map(lambda r: r.get_addr(), $regs))) +    #for $addr in range(5+1)      case $addr:          #for $reg in filter(lambda r: r.get_addr() == addr, $regs)          reg |= (boost::uint32_t($reg.get_name()) & $reg.get_mask()) << $reg.get_shift(); @@ -115,18 +115,6 @@ boost::uint32_t get_reg(boost::uint8_t addr){      }      return reg;  } - -void set_reg(boost::uint8_t addr, boost::uint32_t reg){ -    switch(addr){ -    #for $addr in sorted(set(map(lambda r: r.get_addr(), $regs))) -    case $addr: -        #for $reg in filter(lambda r: r.get_addr() == addr, $regs) -        $reg.get_name() = $(reg.get_type())((reg >> $reg.get_shift()) & $reg.get_mask()); -        #end for -        break; -    #end for -    } -}  """  if __name__ == '__main__': diff --git a/host/lib/usrp/dboard/db_wbx_version4.cpp b/host/lib/usrp/dboard/db_wbx_version4.cpp index 58a5e5f3e..9796d222f 100644 --- a/host/lib/usrp/dboard/db_wbx_version4.cpp +++ b/host/lib/usrp/dboard/db_wbx_version4.cpp @@ -115,22 +115,43 @@ wbx_base::wbx_version4::wbx_version4(wbx_base *_self_wbx_base) {      int v4_tx_mod = ADF4351_PDBRF;      //set the gpio directions and atr controls -    self_base->get_iface()->set_pin_ctrl(dboard_iface::UNIT_TX, v4_tx_mod|v4_iobits); -    self_base->get_iface()->set_pin_ctrl(dboard_iface::UNIT_RX, RXBB_PDB|ADF4351_PDBRF); -    self_base->get_iface()->set_gpio_ddr(dboard_iface::UNIT_TX, TX_PUP_5V|TX_PUP_3V|v4_tx_mod|v4_iobits); -    self_base->get_iface()->set_gpio_ddr(dboard_iface::UNIT_RX, RX_PUP_5V|RX_PUP_3V|ADF4351_CE|RXBB_PDB|ADF4351_PDBRF|RX_ATTN_MASK); - -    //setup ATR for the mixer enables (always enabled to prevent phase slip between bursts) -    //set TX gain iobits to min gain (max attenuation) when RX_ONLY or IDLE to suppress LO leakage -    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_TX, dboard_iface::ATR_REG_IDLE,        v4_tx_mod, TX_ATTN_MASK | TX_MIXER_DIS | v4_tx_mod); -    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_TX, dboard_iface::ATR_REG_RX_ONLY,     v4_tx_mod, TX_ATTN_MASK | TX_MIXER_DIS | v4_tx_mod); -    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_TX, dboard_iface::ATR_REG_TX_ONLY,     v4_tx_mod, TX_ATTN_MASK | TX_MIXER_DIS | v4_tx_mod); -    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_TX, dboard_iface::ATR_REG_FULL_DUPLEX, v4_tx_mod, TX_ATTN_MASK | TX_MIXER_DIS | v4_tx_mod); - -    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_RX, dboard_iface::ATR_REG_IDLE,        RX_MIXER_ENB, RX_MIXER_DIS | RX_MIXER_ENB); -    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_RX, dboard_iface::ATR_REG_TX_ONLY,     RX_MIXER_ENB, RX_MIXER_DIS | RX_MIXER_ENB); -    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_RX, dboard_iface::ATR_REG_RX_ONLY,     RX_MIXER_ENB, RX_MIXER_DIS | RX_MIXER_ENB); -    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_RX, dboard_iface::ATR_REG_FULL_DUPLEX, RX_MIXER_ENB, RX_MIXER_DIS | RX_MIXER_ENB); +    self_base->get_iface()->set_pin_ctrl(dboard_iface::UNIT_TX, \ +            v4_tx_mod|v4_iobits); +    self_base->get_iface()->set_pin_ctrl(dboard_iface::UNIT_RX, \ +            RXBB_PDB|ADF4351_PDBRF); +    self_base->get_iface()->set_gpio_ddr(dboard_iface::UNIT_TX, \ +            TX_PUP_5V|TX_PUP_3V|v4_tx_mod|v4_iobits); +    self_base->get_iface()->set_gpio_ddr(dboard_iface::UNIT_RX, \ +            RX_PUP_5V|RX_PUP_3V|ADF4351_CE|RXBB_PDB|ADF4351_PDBRF|RX_ATTN_MASK); + +    //setup ATR for the mixer enables (always enabled to prevent phase slip +    //between bursts) set TX gain iobits to min gain (max attenuation) when +    //RX_ONLY or IDLE to suppress LO leakage +    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_TX, \ +            dboard_iface::ATR_REG_IDLE, v4_tx_mod, \ +            TX_ATTN_MASK | TX_MIXER_DIS | v4_tx_mod); +    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_TX, \ +            dboard_iface::ATR_REG_RX_ONLY, v4_tx_mod, \ +            TX_ATTN_MASK | TX_MIXER_DIS | v4_tx_mod); +    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_TX, \ +            dboard_iface::ATR_REG_TX_ONLY, v4_tx_mod, \ +            TX_ATTN_MASK | TX_MIXER_DIS | v4_tx_mod); +    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_TX, \ +            dboard_iface::ATR_REG_FULL_DUPLEX, v4_tx_mod, \ +            TX_ATTN_MASK | TX_MIXER_DIS | v4_tx_mod); + +    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_RX, \ +            dboard_iface::ATR_REG_IDLE, \ +            RX_MIXER_ENB, RX_MIXER_DIS | RX_MIXER_ENB); +    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_RX, \ +            dboard_iface::ATR_REG_TX_ONLY, \ +            RX_MIXER_ENB, RX_MIXER_DIS | RX_MIXER_ENB); +    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_RX, \ +            dboard_iface::ATR_REG_RX_ONLY, \ +            RX_MIXER_ENB, RX_MIXER_DIS | RX_MIXER_ENB); +    self_base->get_iface()->set_atr_reg(dboard_iface::UNIT_RX, \ +            dboard_iface::ATR_REG_FULL_DUPLEX, \ +            RX_MIXER_ENB, RX_MIXER_DIS | RX_MIXER_ENB);  }  wbx_base::wbx_version4::~wbx_version4(void){ | 
