diff options
author | djepson1 <daniel.jepson@ni.com> | 2017-10-12 10:14:13 -0500 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2017-12-22 15:04:02 -0800 |
commit | 5eb49364cea736d358ca005035ba50e772fae9fd (patch) | |
tree | f36e529f17aec8affdf4391a27a890b8fe43e9cf /mpm/python/usrp_mpm/dboard_manager/lmk_mg.py | |
parent | e212936218481b99a3f2e6283501ee6beaaa4d5a (diff) | |
download | uhd-5eb49364cea736d358ca005035ba50e772fae9fd.tar.gz uhd-5eb49364cea736d358ca005035ba50e772fae9fd.tar.bz2 uhd-5eb49364cea736d358ca005035ba50e772fae9fd.zip |
lmk: change holdover settings to reduce lock time
- Register 0x150 bit [1] to '0'
- Change lock detect to poll operation
Diffstat (limited to 'mpm/python/usrp_mpm/dboard_manager/lmk_mg.py')
-rw-r--r-- | mpm/python/usrp_mpm/dboard_manager/lmk_mg.py | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py b/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py index ca088b80b..4890645aa 100644 --- a/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py +++ b/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py @@ -138,7 +138,7 @@ class LMK04828Mg(LMK04828): (0x14D, 0x00), # DAC Settings (defaults) (0x14E, 0x00), # DAC Settings (defaults) (0x14F, 0x7F), # DAC Settings (defaults) - (0x150, 0x03), # Holdover Settings (defaults) + (0x150, 0x00), # Holdover Settings; bits 0/1 = '0' per long PLL1 lock time debug (0x151, 0x02), # Holdover Settings (defaults) (0x152, 0x00), # Holdover Settings (defaults) (0x153, 0x00), # CLKin0_R divider [13:8], default = 0 @@ -175,16 +175,28 @@ class LMK04828Mg(LMK04828): (0x16E, 0x13), # Status LD2 pin = Output push-pull, PLL2 DLD (0x173, 0x00), # Do not power down PLL2 or prescaler )) - time.sleep(1.0) # Increased time to wait for DAC and VCXO to settle. - self.pokes8(( - (0x182, 0x1), # Clear Lock Detect Sticky - (0x182, 0x0), # Clear Lock Detect Sticky - (0x183, 0x1), # Clear Lock Detect Sticky - (0x183, 0x0), # Clear Lock Detect Sticky - )) - time.sleep(0.1) - if not self.check_plls_locked(): + + # Poll for PLL1/2 lock. Total time = 6 * 50 ms = 300 ms + self.log.trace("Polling for PLL lock...") + locked = False + for _ in range(6): + time.sleep(0.050) + # Clear stickies + self.pokes8(( + (0x182, 0x1), # Clear Lock Detect Sticky + (0x182, 0x0), # Clear Lock Detect Sticky + (0x183, 0x1), # Clear Lock Detect Sticky + (0x183, 0x0), # Clear Lock Detect Sticky + )) + # Wait a bit before checking for lock + # time.sleep(0.050) + if self.check_plls_locked(): + locked = True + self.log.info("LMK PLLs Locked!") + break + if not locked: raise RuntimeError("At least one LMK PLL did not lock! Check the logs for details.") + self.log.trace("Setting SYNC and SYSREF config...") self.pokes8(( (0x143, 0xF1), # toggle SYNC polarity to trigger SYNC event |