aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2017-05-12 16:55:54 -0700
committerMartin Braun <martin.braun@ettus.com>2017-12-22 15:03:53 -0800
commit5a4a78de6104333307da68b6a0dfc516291ede69 (patch)
treea8fad6471d5df0175dd55e4970a018a8cb2d09b4
parent9dee6175da45440997c8ed82fbf40f8f380dc4a7 (diff)
downloaduhd-5a4a78de6104333307da68b6a0dfc516291ede69.tar.gz
uhd-5a4a78de6104333307da68b6a0dfc516291ede69.tar.bz2
uhd-5a4a78de6104333307da68b6a0dfc516291ede69.zip
mpm: Factored out common LMK04828 code
-rwxr-xr-xmpm/python/setup.py.in7
-rw-r--r--mpm/python/usrp_mpm/CMakeLists.txt1
-rw-r--r--mpm/python/usrp_mpm/chips/CMakeLists.txt25
-rw-r--r--mpm/python/usrp_mpm/chips/__init__.py21
-rw-r--r--mpm/python/usrp_mpm/chips/lmk04828.py63
-rw-r--r--mpm/python/usrp_mpm/dboard_manager/lmk_eiscat.py33
-rw-r--r--mpm/python/usrp_mpm/dboard_manager/lmk_mg.py30
7 files changed, 124 insertions, 56 deletions
diff --git a/mpm/python/setup.py.in b/mpm/python/setup.py.in
index 278a83522..cbcff393b 100755
--- a/mpm/python/setup.py.in
+++ b/mpm/python/setup.py.in
@@ -38,7 +38,12 @@ setup(name='usrp_mpm',
package_dir={ '': '${CMAKE_CURRENT_BINARY_DIR}' },
package_data={"usrp_mpm": ["*.so"]},
zip_safe=False,
- packages=['usrp_mpm', 'usrp_mpm.periph_manager', 'usrp_mpm.dboard_manager'],
+ packages=[
+ 'usrp_mpm',
+ 'usrp_mpm.periph_manager',
+ 'usrp_mpm.dboard_manager',
+ 'usrp_mpm.chips'
+ ],
install_requires=[
'mprpc',
'systemd-python',
diff --git a/mpm/python/usrp_mpm/CMakeLists.txt b/mpm/python/usrp_mpm/CMakeLists.txt
index e9e95555c..4d48d455e 100644
--- a/mpm/python/usrp_mpm/CMakeLists.txt
+++ b/mpm/python/usrp_mpm/CMakeLists.txt
@@ -32,4 +32,5 @@ SET(USRP_MPM_TOP_FILES
LIST(APPEND USRP_MPM_FILES ${USRP_MPM_TOP_FILES})
ADD_SUBDIRECTORY(periph_manager)
ADD_SUBDIRECTORY(dboard_manager)
+ADD_SUBDIRECTORY(chips)
SET(USRP_MPM_FILES ${USRP_MPM_FILES} PARENT_SCOPE)
diff --git a/mpm/python/usrp_mpm/chips/CMakeLists.txt b/mpm/python/usrp_mpm/chips/CMakeLists.txt
new file mode 100644
index 000000000..438b76038
--- /dev/null
+++ b/mpm/python/usrp_mpm/chips/CMakeLists.txt
@@ -0,0 +1,25 @@
+#
+# Copyright 2017 Ettus Research (National Instruments)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+SET(USRP_MPM_FILES ${USRP_MPM_FILES})
+SET(USRP_MPM_CHIP_FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/lmk04828.py
+)
+LIST(APPEND USRP_MPM_FILES ${USRP_MPM_CHIP_FILES})
+SET(USRP_MPM_FILES ${USRP_MPM_FILES} PARENT_SCOPE)
+
diff --git a/mpm/python/usrp_mpm/chips/__init__.py b/mpm/python/usrp_mpm/chips/__init__.py
new file mode 100644
index 000000000..ea4a4cff6
--- /dev/null
+++ b/mpm/python/usrp_mpm/chips/__init__.py
@@ -0,0 +1,21 @@
+#
+# Copyright 2017 Ettus Research (National Instruments)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+"""
+Chips submodule
+"""
+
+from .lmk04828 import LMK04828
diff --git a/mpm/python/usrp_mpm/chips/lmk04828.py b/mpm/python/usrp_mpm/chips/lmk04828.py
new file mode 100644
index 000000000..3b9a35bae
--- /dev/null
+++ b/mpm/python/usrp_mpm/chips/lmk04828.py
@@ -0,0 +1,63 @@
+#
+# Copyright 2017 Ettus Research (National Instruments)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+"""
+LMK04828 parent driver class
+"""
+
+from ..mpmlog import get_logger
+
+class LMK04828(object):
+ """
+ Generic driver class for LMK04828 access.
+ """
+ LMK_CHIP_ID = 6
+
+ def __init__(self, regs_iface, postfix=None):
+ postfix = postfix or ""
+ self.log = get_logger("LMK04828"+postfix)
+ self.regs_iface = regs_iface
+ assert hasattr(self.regs_iface, 'peek8')
+ assert hasattr(self.regs_iface, 'poke8')
+ self.poke8 = regs_iface.poke8
+ self.peek8 = regs_iface.peek8
+
+ def pokes8(self, addr_vals):
+ """
+ Apply a series of pokes.
+ pokes8((0,1),(0,2)) is the same as calling poke8(0,1), poke8(0,2).
+ """
+ for addr, val in addr_vals:
+ self.regs_iface.poke8(addr, val)
+
+ def get_chip_id(self):
+ """
+ Read back the chip ID
+ """
+ chip_id = self.regs_iface.peek8(0x03)
+ self.log.trace("Read chip ID: {}".format(chip_id))
+ return chip_id
+
+ def verify_chip_id(self):
+ """
+ Returns True if the chip ID matches what we expect, False otherwise.
+ """
+ chip_id = self.get_chip_id()
+ if chip_id != self.LMK_CHIP_ID:
+ self.log.error("Wrong chip id 0x{:X}".format(chip_id))
+ return False
+ return True
+
diff --git a/mpm/python/usrp_mpm/dboard_manager/lmk_eiscat.py b/mpm/python/usrp_mpm/dboard_manager/lmk_eiscat.py
index ee4dd3e38..1628613df 100644
--- a/mpm/python/usrp_mpm/dboard_manager/lmk_eiscat.py
+++ b/mpm/python/usrp_mpm/dboard_manager/lmk_eiscat.py
@@ -20,30 +20,20 @@ LMK04828 driver for use with Magnesium
import time
from ..mpmlog import get_logger
+from ..chips import LMK04828
-LMK_CHIP_ID = 6
-
-class LMK04828EISCAT(object):
+class LMK04828EISCAT(LMK04828):
"""
LMK04828 controls for EISCAT daughterboard
"""
def __init__(self, regs_iface, ref_clock_freq, slot=None):
- slot = slot or "-A"
- self.log = get_logger("LMK04828"+slot)
+ LMK04828.__init__(self, regs_iface, slot)
self.log.trace("Using reference clock frequency {} MHz".format(ref_clock_freq/1e6))
assert ref_clock_freq in (10e6, 20e6)
self.ref_clock_freq = ref_clock_freq
- self.regs_iface = regs_iface
self.init()
self.config()
- def pokes8(self, addr_vals):
- """
- Apply a series of pokes
- """
- for addr, val in addr_vals:
- self.regs_iface.poke8(addr, val)
-
def init(self):
"""
Basic init. Turns it on. Let's us read SPI.
@@ -201,23 +191,6 @@ class LMK04828EISCAT(object):
))
self.log.info("LMK init'd and locked!")
- def get_chip_id(self):
- """
- Read back the chip ID
- """
- chip_id = self.regs_iface.peek8(0x03)
- self.log.trace("Read chip ID: {}".format(chip_id))
- return chip_id
-
- def verify_chip_id(self):
- """
- Returns True if the chip ID matches what we expect, False otherwise.
- """
- chip_id = self.get_chip_id()
- if chip_id != LMK_CHIP_ID:
- self.log.error("wrong chip id {0}".format(chip_id))
- return False
- return True
# TODO delete this
# def enable_sysref_pulse(self):
diff --git a/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py b/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py
index 94d50527d..96795f7fd 100644
--- a/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py
+++ b/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py
@@ -18,16 +18,15 @@
LMK04828 driver for use with Magnesium
"""
-from ..mpmlog import get_logger
from time import sleep
+from ..mpmlog import get_logger
+from ..chips import LMK04828
-class LMK04828Mg(object):
- def __init__(self, regs_iface, spi_lock):
- self.regs_iface = regs_iface
+class LMK04828Mg(LMK04828):
+ def __init__(self, regs_iface, spi_lock, slot=None):
+ LMK04828.__init__(self, regs_iface, slot)
self.spi_lock = spi_lock
self.log = get_logger("LMK04828")
- assert hasattr(self.regs_iface, 'peek8')
- assert hasattr(self.regs_iface, 'poke8')
assert hasattr(self.spi_lock, 'lock')
assert hasattr(self.spi_lock, 'unlock')
@@ -95,22 +94,3 @@ class LMK04828Mg(object):
self.log.trace("LMK init'd and locked")
- def get_chip_id(self):
- """
- Read back the chip ID
- """
- # TODO: avoid deadlock by not locking when we already have lock (or use a recursive mutex internally)
- #self.spi_lock.lock()
- chip_id = self.regs_iface.peek8(0x03)
- #self.spi_lock.unlock()
- return chip_id
-
- def verify_chip_id(self):
- """
- Returns True if the chip ID matches what we expect, False otherwise.
- """
- chip_id = self.get_chip_id()
- if chip_id != 6:
- self.log.error("wrong chip id {0}".format(chip_id))
- return False
- return True