forked from M-Labs/artiq
coredevice: adf5356: add enable/disable and power setting for outA
Signed-off-by: Etienne Wodey <wodey@iqo.uni-hannover.de>
This commit is contained in:
parent
61dc2b8b64
commit
3844123c13
|
@ -116,6 +116,43 @@ class ADF5356:
|
||||||
def read_muxout(self):
|
def read_muxout(self):
|
||||||
return bool(self.cpld.read_reg(0) & (1 << (self.channel + 8)))
|
return bool(self.cpld.read_reg(0) & (1 << (self.channel + 8)))
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def set_output_power_mu(self, n):
|
||||||
|
"""
|
||||||
|
Set the power level at output A of the PLL chip in machine units.
|
||||||
|
|
||||||
|
This driver defaults to `n = 3` at init.
|
||||||
|
|
||||||
|
:param n: output power setting, 0, 1, 2, or 3 (see ADF5356 datasheet, fig. 44).
|
||||||
|
"""
|
||||||
|
if n not in [0, 1, 2, 3]:
|
||||||
|
raise ValueError("invalid power setting")
|
||||||
|
self.regs[6] = ADF5356_REG6_RF_OUTPUT_A_POWER_UPDATE(self.regs[6], n)
|
||||||
|
self.sync()
|
||||||
|
|
||||||
|
@portable
|
||||||
|
def output_power_mu(self):
|
||||||
|
"""
|
||||||
|
Return the power level at output A of the PLL chip in machine units.
|
||||||
|
"""
|
||||||
|
return ADF5356_REG6_RF_OUTPUT_A_POWER_GET(self.regs[6])
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def enable_output(self):
|
||||||
|
"""
|
||||||
|
Enable output A of the PLL chip. This is the default after init.
|
||||||
|
"""
|
||||||
|
self.regs[6] |= ADF5356_REG6_RF_OUTPUT_A_ENABLE(1)
|
||||||
|
self.sync()
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def disable_output(self):
|
||||||
|
"""
|
||||||
|
Disable output A of the PLL chip.
|
||||||
|
"""
|
||||||
|
self.regs[6] &= ~ADF5356_REG6_RF_OUTPUT_A_ENABLE(1)
|
||||||
|
self.sync()
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
def set_frequency(self, f):
|
def set_frequency(self, f):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
import unittest
|
import unittest
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
from artiq.experiment import *
|
from artiq.experiment import *
|
||||||
from artiq.test.hardware_testbench import ExperimentCase
|
from artiq.test.hardware_testbench import ExperimentCase
|
||||||
from artiq.coredevice.adf5356 import (
|
from artiq.coredevice.adf5356 import (
|
||||||
|
@ -29,7 +31,7 @@ class ADF5356Exp(EnvExperiment):
|
||||||
self.dev.init()
|
self.dev.init()
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
def set_get_simple(self):
|
def set_get_freq(self):
|
||||||
self.core.break_realtime()
|
self.core.break_realtime()
|
||||||
self.dev.cpld.init()
|
self.dev.cpld.init()
|
||||||
self.dev.init()
|
self.dev.init()
|
||||||
|
@ -60,6 +62,35 @@ class ADF5356Exp(EnvExperiment):
|
||||||
delay(5 * ms)
|
delay(5 * ms)
|
||||||
self.set_dataset("muxout", self.dev.read_muxout())
|
self.set_dataset("muxout", self.dev.read_muxout())
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def set_get_output_power(self):
|
||||||
|
self.core.break_realtime()
|
||||||
|
self.dev.cpld.init()
|
||||||
|
self.dev.init()
|
||||||
|
self.dev.set_att_mu(0)
|
||||||
|
self.dev.set_frequency(100 * MHz)
|
||||||
|
self.set_dataset("get_power", np.full(4, np.nan))
|
||||||
|
for n in range(4):
|
||||||
|
delay(10 * ms)
|
||||||
|
self.dev.set_output_power_mu(n)
|
||||||
|
m = self.dev.output_power_mu()
|
||||||
|
self.mutate_dataset("get_power", n, m)
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def invalid_output_power_setting(self):
|
||||||
|
self.dev.set_output_power_mu(42)
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def enable_disable_output(self):
|
||||||
|
self.core.break_realtime()
|
||||||
|
self.dev.cpld.init()
|
||||||
|
self.dev.init()
|
||||||
|
self.dev.set_att_mu(0)
|
||||||
|
self.dev.set_frequency(100 * MHz)
|
||||||
|
self.dev.disable_output()
|
||||||
|
delay(100 * us)
|
||||||
|
self.dev.enable_output()
|
||||||
|
|
||||||
|
|
||||||
class TestCalculateParameters(unittest.TestCase):
|
class TestCalculateParameters(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -126,8 +157,8 @@ class ADF5356Test(ExperimentCase):
|
||||||
def test_init(self):
|
def test_init(self):
|
||||||
self.execute(ADF5356Exp, "init")
|
self.execute(ADF5356Exp, "init")
|
||||||
|
|
||||||
def test_set_get_simple(self):
|
def test_set_get_freq(self):
|
||||||
self.execute(ADF5356Exp, "set_get_simple")
|
self.execute(ADF5356Exp, "set_get_freq")
|
||||||
f_set = self.dataset_mgr.get("freq_set")
|
f_set = self.dataset_mgr.get("freq_set")
|
||||||
f_get = self.dataset_mgr.get("freq_get")
|
f_get = self.dataset_mgr.get("freq_get")
|
||||||
self.assertEqual(f_set, f_get)
|
self.assertEqual(f_set, f_get)
|
||||||
|
@ -144,3 +175,16 @@ class ADF5356Test(ExperimentCase):
|
||||||
def test_set_too_low_frequency(self):
|
def test_set_too_low_frequency(self):
|
||||||
with self.assertRaises(ValueError):
|
with self.assertRaises(ValueError):
|
||||||
self.execute(ADF5356Exp, "set_too_low_frequency")
|
self.execute(ADF5356Exp, "set_too_low_frequency")
|
||||||
|
|
||||||
|
def test_set_get_output_power(self):
|
||||||
|
self.execute(ADF5356Exp, "set_get_output_power")
|
||||||
|
get_power = self.dataset_mgr.get("get_power")
|
||||||
|
for n in range(4):
|
||||||
|
self.assertEqual(n, get_power[n])
|
||||||
|
|
||||||
|
def test_invalid_output_power_setting(self):
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
self.execute(ADF5356Exp, "invalid_output_power_setting")
|
||||||
|
|
||||||
|
def test_enable_disable_output(self):
|
||||||
|
self.execute(ADF5356Exp, "enable_disable_output")
|
||||||
|
|
Loading…
Reference in New Issue