diff options
author | Martin Braun <martin.braun@ettus.com> | 2017-05-12 16:55:54 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2017-12-22 15:03:53 -0800 |
commit | 5a4a78de6104333307da68b6a0dfc516291ede69 (patch) | |
tree | a8fad6471d5df0175dd55e4970a018a8cb2d09b4 | |
parent | 9dee6175da45440997c8ed82fbf40f8f380dc4a7 (diff) | |
download | uhd-5a4a78de6104333307da68b6a0dfc516291ede69.tar.gz uhd-5a4a78de6104333307da68b6a0dfc516291ede69.tar.bz2 uhd-5a4a78de6104333307da68b6a0dfc516291ede69.zip |
mpm: Factored out common LMK04828 code
-rwxr-xr-x | mpm/python/setup.py.in | 7 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/CMakeLists.txt | 1 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/chips/CMakeLists.txt | 25 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/chips/__init__.py | 21 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/chips/lmk04828.py | 63 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/dboard_manager/lmk_eiscat.py | 33 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/dboard_manager/lmk_mg.py | 30 |
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 |