summaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/dboard
diff options
context:
space:
mode:
authorJason Abele <jason@ettus.com>2010-05-04 14:19:04 -0700
committerJason Abele <jason@ettus.com>2010-05-04 14:19:04 -0700
commit6be1996856ff0a00dc14fcff554a52bae72b3340 (patch)
tree94017bd31faa5b23a4036f1f738bb9e5c6b69c10 /host/lib/usrp/dboard
parent0e34dd98c90160f6ff2905007efbc1e7a76e6928 (diff)
downloaduhd-6be1996856ff0a00dc14fcff554a52bae72b3340.tar.gz
uhd-6be1996856ff0a00dc14fcff554a52bae72b3340.tar.bz2
uhd-6be1996856ff0a00dc14fcff554a52bae72b3340.zip
First working RX/TX WBX in UHD
Diffstat (limited to 'host/lib/usrp/dboard')
-rw-r--r--host/lib/usrp/dboard/db_wbx.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/host/lib/usrp/dboard/db_wbx.cpp b/host/lib/usrp/dboard/db_wbx.cpp
index 16bbf7719..788099a90 100644
--- a/host/lib/usrp/dboard/db_wbx.cpp
+++ b/host/lib/usrp/dboard/db_wbx.cpp
@@ -15,7 +15,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-static const bool wbx_debug = true;
+static const bool wbx_debug = false;
// Common IO Pins
#define ANTSW_IO ((1 << 5)|(1 << 15)) // on UNIT_TX, 0 = TX, 1 = RX, on UNIT_RX 0 = main ant, 1 = RX2
@@ -264,6 +264,10 @@ void wbx_xcvr::set_tx_pga0_gain(float gain){
//calculate the voltage for the aux dac
float dac_volts = gain*slope + min_volts;
+ if (wbx_debug) std::cerr << boost::format(
+ "WBX TX Gain: %f dB, dac_volts: %f V"
+ ) % gain % dac_volts << std::endl;
+
//write the new voltage to the aux dac
this->get_iface()->write_aux_dac(dboard_iface::UNIT_TX, 0, dac_volts);
@@ -344,7 +348,7 @@ double wbx_xcvr::set_lo_freq(
if (pfd_freq > 25e6) continue;
//ignore fractional part of tuning
- N = int(std::ceil(vco_freq/pfd_freq));
+ N = int(std::floor(vco_freq/pfd_freq));
//keep N > minimum int divider requirement
if (N < prescaler_to_min_int_div[prescaler]) continue;
@@ -359,7 +363,7 @@ double wbx_xcvr::set_lo_freq(
//Fractional-N calculation
MOD = 4095; //max fractional accuracy
- FRAC = int((N - vco_freq/pfd_freq)*MOD);
+ FRAC = int((vco_freq/pfd_freq - N)*MOD);
//Reference divide-by-2 for 50% duty cycle
// if R even, move one divide by 2 to to regs.reference_divide_by_2
@@ -369,9 +373,9 @@ double wbx_xcvr::set_lo_freq(
}
//actual frequency calculation
- actual_freq = double((N - (double(FRAC)/double(MOD)))*ref_freq*(1+int(D))/(R*(1+int(T)))/RFdiv/2);
+ actual_freq = double((N + (double(FRAC)/double(MOD)))*ref_freq*(1+int(D))/(R*(1+int(T)))/RFdiv/2);
- std::cerr << boost::format("WBX Intermediates: ref=%0.2f, outdiv=%f, fbdiv=%f") % (ref_freq*(1+int(D))/(R*(1+int(T)))) % double(RFdiv*2) % (double(FRAC)/double(MOD)) << std::endl;
+ std::cerr << boost::format("WBX Intermediates: ref=%0.2f, outdiv=%f, fbdiv=%f") % (ref_freq*(1+int(D))/(R*(1+int(T)))) % double(RFdiv*2) % double(N + double(FRAC)/double(MOD)) << std::endl;
if (wbx_debug) std::cerr
<< boost::format("WBX tune: R=%d, BS=%d, N=%d, FRAC=%d, MOD=%d, T=%d, D=%d, RFdiv=%d, LD=%d"
@@ -467,7 +471,7 @@ void wbx_xcvr::rx_get(const wax::obj &key_, wax::obj &val){
return;
case SUBDEV_PROP_IQ_SWAPPED:
- val = true;
+ val = false;
return;
case SUBDEV_PROP_SPECTRUM_INVERTED:
@@ -570,7 +574,7 @@ void wbx_xcvr::tx_get(const wax::obj &key_, wax::obj &val){
return;
case SUBDEV_PROP_USE_LO_OFFSET:
- val = true;
+ val = false;
return;
case SUBDEV_PROP_LO_LOCKED: