aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-12-10 14:04:07 -0800
committerJosh Blum <josh@joshknows.com>2010-12-11 18:43:10 -0800
commit9e75fadc0476b93ea73a7cab905d0fcbbc74d2df (patch)
treef648472d218eb00caf9e3605622d8a97db1dda2f
parent1bf0619c9ed076bfc85856138309e2fa9be8e371 (diff)
downloaduhd-9e75fadc0476b93ea73a7cab905d0fcbbc74d2df.tar.gz
uhd-9e75fadc0476b93ea73a7cab905d0fcbbc74d2df.tar.bz2
uhd-9e75fadc0476b93ea73a7cab905d0fcbbc74d2df.zip
usrp2: set time over serdes when slave, added constants to top of cpp file
-rw-r--r--host/lib/usrp/usrp2/mboard_impl.cpp19
-rw-r--r--host/lib/usrp/usrp2/usrp2_regs.cpp1
-rw-r--r--host/lib/usrp/usrp2/usrp2_regs.hpp1
3 files changed, 15 insertions, 6 deletions
diff --git a/host/lib/usrp/usrp2/mboard_impl.cpp b/host/lib/usrp/usrp2/mboard_impl.cpp
index 29867cf9d..ac447d209 100644
--- a/host/lib/usrp/usrp2/mboard_impl.cpp
+++ b/host/lib/usrp/usrp2/mboard_impl.cpp
@@ -27,6 +27,10 @@
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
+static const double mimo_clock_delay_usrp2_rev4 = 4.18e-9;
+static const double mimo_clock_delay_usrp_n2xx = 0; //TODO
+static const int mimo_clock_sync_delay_cycles = 134;
+
using namespace uhd;
using namespace uhd::usrp;
using namespace boost::posix_time;
@@ -196,27 +200,30 @@ void usrp2_mboard_impl::update_clock_config(void){
// - Masters always drive the clock over serdes.
// - Slaves always lock to this serdes clock.
// - Slaves lock their time over the serdes.
- const bool master_mode = bool(_iface->peek32(_iface->regs.status) & (1 << 8));
- _clock_ctrl->enable_mimo_clock_out(master_mode);
- if (master_mode){
+ if (_iface->peek32(_iface->regs.status) & (1 << 8)){
+ _clock_ctrl->enable_mimo_clock_out(true);
switch(_iface->get_rev()){
case usrp2_iface::USRP_N200:
case usrp2_iface::USRP_N210:
- _clock_ctrl->set_mimo_clock_delay(0/*TODO*/);
+ _clock_ctrl->set_mimo_clock_delay(mimo_clock_delay_usrp_n2xx);
break;
case usrp2_iface::USRP2_REV4:
- _clock_ctrl->set_mimo_clock_delay(3.08e-9);
+ _clock_ctrl->set_mimo_clock_delay(mimo_clock_delay_usrp2_rev4);
break;
default: break; //not handled
}
+ _iface->poke32(_iface->regs.time64_mimo_sync, 0);
}
else{
_iface->poke32(_iface->regs.misc_ctrl_clock, 0x15);
_clock_ctrl->enable_external_ref(true);
+ _clock_ctrl->enable_mimo_clock_out(false);
+ _iface->poke32(_iface->regs.time64_mimo_sync,
+ (1 << 8) | (mimo_clock_sync_delay_cycles & 0xff)
+ );
}
- //TODO slaves lock time over the serdes...
}
diff --git a/host/lib/usrp/usrp2/usrp2_regs.cpp b/host/lib/usrp/usrp2/usrp2_regs.cpp
index 0590082f6..82ad30f08 100644
--- a/host/lib/usrp/usrp2/usrp2_regs.cpp
+++ b/host/lib/usrp/usrp2/usrp2_regs.cpp
@@ -57,6 +57,7 @@ usrp2_regs_t usrp2_get_regs(bool use_n2xx_map) {
x.time64_flags = sr_addr(misc_output_base, x.sr_time64 + 2);
x.time64_imm = sr_addr(misc_output_base, x.sr_time64 + 3);
x.time64_tps = sr_addr(misc_output_base, x.sr_time64 + 4);
+ x.time64_mimo_sync = sr_addr(misc_output_base, x.sr_time64 + 5);
x.status = bp_base + 4*8;
x.time64_secs_rb = bp_base + 4*10;
x.time64_ticks_rb = bp_base + 4*11;
diff --git a/host/lib/usrp/usrp2/usrp2_regs.hpp b/host/lib/usrp/usrp2/usrp2_regs.hpp
index 40c3635fb..0311ac625 100644
--- a/host/lib/usrp/usrp2/usrp2_regs.hpp
+++ b/host/lib/usrp/usrp2/usrp2_regs.hpp
@@ -57,6 +57,7 @@ typedef struct {
int time64_flags; // flags -- see chart below
int time64_imm; // set immediate (0=latch on next pps, 1=latch immediate, default=0)
int time64_tps; // ticks per second rollover count
+ int time64_mimo_sync;
int status;
int time64_secs_rb;
int time64_ticks_rb;