diff options
author | Martin Braun <martin.braun@ettus.com> | 2017-04-19 18:45:29 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2017-12-22 15:03:45 -0800 |
commit | 285f14392b4494501b462796743e67cc54c4cca8 (patch) | |
tree | e680bf89d33f73b58f515bb9558a4c3db6ec07f5 /mpm/python/usrp_mpm/dboard_manager/magnesium.py | |
parent | b05f72f339dcb02cc6efc6f2bc7d92c4476b5cc9 (diff) | |
download | uhd-285f14392b4494501b462796743e67cc54c4cca8.tar.gz uhd-285f14392b4494501b462796743e67cc54c4cca8.tar.bz2 uhd-285f14392b4494501b462796743e67cc54c4cca8.zip |
mpm: Moved over to new logging infrastructure
Also currently hardcodes some settings.
Diffstat (limited to 'mpm/python/usrp_mpm/dboard_manager/magnesium.py')
-rw-r--r-- | mpm/python/usrp_mpm/dboard_manager/magnesium.py | 101 |
1 files changed, 86 insertions, 15 deletions
diff --git a/mpm/python/usrp_mpm/dboard_manager/magnesium.py b/mpm/python/usrp_mpm/dboard_manager/magnesium.py index f13f1de77..45a19ded6 100644 --- a/mpm/python/usrp_mpm/dboard_manager/magnesium.py +++ b/mpm/python/usrp_mpm/dboard_manager/magnesium.py @@ -17,13 +17,13 @@ """ magnesium dboard implementation module """ -from . import lib -from .base import DboardManagerBase -import struct -from logging import getLogger - -LOG = getLogger(__name__) +import struct +import time +from . import lib # Pulls in everything from C++-land +from .base import DboardManagerBase +from .. import nijesdcore +from ..uio import uio class magnesium(DboardManagerBase): """ @@ -31,33 +31,104 @@ class magnesium(DboardManagerBase): """ hw_pid = 2 special_eeprom_addrs = {"special0": "something"} - spi_chipselect = {"0": "lmk", "1": "mykonos", "2": "random"} + spi_chipselect = {"0": "lmk", "1": "mykonos",} spidevs = {} lmk = "" mykonos = "" random = "" def __init__(self, spi_devices, eeprom_data, *args, **kwargs): + super(magnesium, self).__init__(*args, **kwargs) # eeprom_data is a tuple (head_dict, raw_data) if len(spi_devices) != len(self.spi_chipselect): - LOG.error("Expected {0} spi devices, found {1} spi devices".format(len(spi_devices), len(self.spi_chipselect))) + self.log.error("Expected {0} spi devices, found {1} spi devices".format( + len(self.spi_chipselect), len(spi_devices), + )) exit(1) for spi in spi_devices: device = self.spi_chipselect.get(spi[-1], None) - if self.chipselect is None: - LOG.error("Unexpected chipselect {0}".format(spi[-1])) - exit(1) + # if self.chipselect is None: + # self.log.error("Unexpected chipselect {0}".format(spi[-1])) + # exit(1) setattr(self, device, spi) - super(magnesium, self).__init__(*args, **kwargs) + self.log.debug("Setting spi device for {device}: {spidev}".format( + device=device, spidev=spi + )) def init_device(self): """ Execute necessary init dance to bring up dboard """ - LOG.debug("initialize hardware") + self.log.debug("initialize hardware") + self._device = lib.dboards.magnesium_periph_manager( + # self.lmk.encode('ascii'), self.mykonos.encode('ascii') + '/dev/spidev0.0', + '/dev/spidev0.1', + ) + self.lmk = self._device.get_clock_ctrl() + self.mykonos = self._device.get_radio_ctrl() + + # uio_path, uio_size = get_uio_node("misc-enet-regs0") + self.log.debug("getting Mg A uio") + uio_path = "/dev/uio2" # TODO use labels + uio_size = 0x4000 + self.log.debug("got uio_path and size") + self.uio = uio(uio_path, uio_size, read_only=False) + self.log.info("got my uio") + self.init_jesd(self.uio) + + def init_jesd(self, uio): + """ + Bring up the JESD link between Mykonos and the N310 + """ + self.log.trace("Creating jesdcore object") + self.jesdcore = nijesdcore.NIMgJESDCore(uio) + + self.log.trace("Checking JESD core...") + self.jesdcore.check_core() + self.log.trace("Initializing LMK...") + self.lmk.init() + self.lmk.verify_chip_id() + self.log.trace("Enabling SYSREF pulses...") + self.lmk.enable_sysref_pulse() + + self.jesdcore.unreset_mmcm() + + self.jesdcore.init() + self.log.trace("Resetting Mykonos...") + self.reset_mykonos() #not sure who owns the reset + + self.log.trace("Initializing Mykonos...") + self.mykonos.begin_initialization() + self.jesdcore.send_sysref_pulse() + self.jesdcore.send_sysref_pulse() + self.mykonos.finish_initialization() + + self.log.trace("Stargin Mykonos JESD framing...") + self.mykonos.start_jesd_rx() + self.jesdcore.init_deframer() + self.jesdcore.init_framer() + self.mykonos.start_jesd_tx() + + #TODO add function for Enable FPGA LMFC Generator + self.jesdcore.send_sysref_pulse() + time.sleep(0.2) + if not self.jesdcore.get_framer_status(): + raise Exception('JESD Core Framer is not synced!') + if not self.jesdcore.get_deframer_status(): + raise Exception('JESD Core Deframer is not synced!') + #if (!self.mykonos.get_framer_status()) + # raise Exception('Mykonos Framer is not synced!') + #if (!self.mykonos.get_deframer_status()) + # raise Exception('Mykonos Deframer is not synced!') - self._device = lib.dboards.magnesium( - self.lmk, self.mykonos, self.random) + def reset_mykonos(self): + " Toggle reset line on Mykonos " + # SUPER GHETTO FIXME + import os + os.system('devmem2 0x4001000C w 2') # Active low reset + time.sleep(0.001) + os.system('devmem2 0x4001000C w 10') def read_eeprom_v1(self, data): """ |