forked from M-Labs/artiq
coredevice: Add _mu suffix to AD991x ref_time arguments
GitHub: Fixes #1243.
This commit is contained in:
parent
24b1b9a480
commit
6c52359e59
|
@ -8,6 +8,11 @@ ARTIQ-5
|
||||||
|
|
||||||
5.0
|
5.0
|
||||||
***
|
***
|
||||||
|
|
||||||
|
* The :class:`~artiq.coredevice.ad9910.AD9910` and
|
||||||
|
:class:`~artiq.coredevice.ad9914.AD9914` phase reference timestamp parameters
|
||||||
|
have been renamed to ``ref_time_mu`` for consistency, as they are in machine
|
||||||
|
units.
|
||||||
* :func:`~artiq.tools.verbosity_args` renamed to :func:`~artiq.tools.add_common_args`. New feature: adds an option to print the ARTIQ version.
|
* :func:`~artiq.tools.verbosity_args` renamed to :func:`~artiq.tools.add_common_args`. New feature: adds an option to print the ARTIQ version.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -371,11 +371,11 @@ class AD9910:
|
||||||
self.set_cfr1(power_down=bits)
|
self.set_cfr1(power_down=bits)
|
||||||
self.cpld.io_update.pulse(1*us)
|
self.cpld.io_update.pulse(1*us)
|
||||||
|
|
||||||
# KLUDGE: ref_time default argument is explicitly marked int64() to avoid
|
# KLUDGE: ref_time_mu default argument is explicitly marked int64() to avoid
|
||||||
# silent truncation of explicitly passed timestamps. (Compiler bug?)
|
# silent truncation of explicitly passed timestamps. (Compiler bug?)
|
||||||
@kernel
|
@kernel
|
||||||
def set_mu(self, ftw, pow_=0, asf=0x3fff, phase_mode=_PHASE_MODE_DEFAULT,
|
def set_mu(self, ftw, pow_=0, asf=0x3fff, phase_mode=_PHASE_MODE_DEFAULT,
|
||||||
ref_time=int64(-1), profile=0):
|
ref_time_mu=int64(-1), profile=0):
|
||||||
"""Set profile 0 data in machine units.
|
"""Set profile 0 data in machine units.
|
||||||
|
|
||||||
This uses machine units (FTW, POW, ASF). The frequency tuning word
|
This uses machine units (FTW, POW, ASF). The frequency tuning word
|
||||||
|
@ -393,7 +393,7 @@ class AD9910:
|
||||||
:param asf: Amplitude scale factor: 14 bit unsigned.
|
:param asf: Amplitude scale factor: 14 bit unsigned.
|
||||||
:param phase_mode: If specified, overrides the default phase mode set
|
:param phase_mode: If specified, overrides the default phase mode set
|
||||||
by :meth:`set_phase_mode` for this call.
|
by :meth:`set_phase_mode` for this call.
|
||||||
:param ref_time: Fiducial time used to compute absolute or tracking
|
:param ref_time_mu: Fiducial time used to compute absolute or tracking
|
||||||
phase updates. In machine units as obtained by `now_mu()`.
|
phase updates. In machine units as obtained by `now_mu()`.
|
||||||
:param profile: Profile number to set (0-7, default: 0).
|
:param profile: Profile number to set (0-7, default: 0).
|
||||||
:return: Resulting phase offset word after application of phase
|
:return: Resulting phase offset word after application of phase
|
||||||
|
@ -409,14 +409,14 @@ class AD9910:
|
||||||
# Auto-clear phase accumulator on IO_UPDATE.
|
# Auto-clear phase accumulator on IO_UPDATE.
|
||||||
# This is active already for the next IO_UPDATE
|
# This is active already for the next IO_UPDATE
|
||||||
self.set_cfr1(phase_autoclear=1)
|
self.set_cfr1(phase_autoclear=1)
|
||||||
if phase_mode == PHASE_MODE_TRACKING and ref_time < 0:
|
if phase_mode == PHASE_MODE_TRACKING and ref_time_mu < 0:
|
||||||
# set default fiducial time stamp
|
# set default fiducial time stamp
|
||||||
ref_time = 0
|
ref_time_mu = 0
|
||||||
if ref_time >= 0:
|
if ref_time_mu >= 0:
|
||||||
# 32 LSB are sufficient.
|
# 32 LSB are sufficient.
|
||||||
# Also no need to use IO_UPDATE time as this
|
# Also no need to use IO_UPDATE time as this
|
||||||
# is equivalent to an output pipeline latency.
|
# is equivalent to an output pipeline latency.
|
||||||
dt = int32(now_mu()) - int32(ref_time)
|
dt = int32(now_mu()) - int32(ref_time_mu)
|
||||||
pow_ += dt*ftw*self.sysclk_per_mu >> 16
|
pow_ += dt*ftw*self.sysclk_per_mu >> 16
|
||||||
self.write64(_AD9910_REG_PROFILE0 + profile,
|
self.write64(_AD9910_REG_PROFILE0 + profile,
|
||||||
(asf << 16) | (pow_ & 0xffff), ftw)
|
(asf << 16) | (pow_ & 0xffff), ftw)
|
||||||
|
@ -516,7 +516,7 @@ class AD9910:
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
def set(self, frequency, phase=0.0, amplitude=1.0,
|
def set(self, frequency, phase=0.0, amplitude=1.0,
|
||||||
phase_mode=_PHASE_MODE_DEFAULT, ref_time=int64(-1), profile=0):
|
phase_mode=_PHASE_MODE_DEFAULT, ref_time_mu=int64(-1), profile=0):
|
||||||
"""Set profile 0 data in SI units.
|
"""Set profile 0 data in SI units.
|
||||||
|
|
||||||
.. seealso:: :meth:`set_mu`
|
.. seealso:: :meth:`set_mu`
|
||||||
|
@ -525,13 +525,13 @@ class AD9910:
|
||||||
:param phase: Phase tuning word in turns
|
:param phase: Phase tuning word in turns
|
||||||
:param amplitude: Amplitude in units of full scale
|
:param amplitude: Amplitude in units of full scale
|
||||||
:param phase_mode: Phase mode constant
|
:param phase_mode: Phase mode constant
|
||||||
:param ref_time: Fiducial time stamp in machine units
|
:param ref_time_mu: Fiducial time stamp in machine units
|
||||||
:param profile: Profile to affect
|
:param profile: Profile to affect
|
||||||
:return: Resulting phase offset in turns
|
:return: Resulting phase offset in turns
|
||||||
"""
|
"""
|
||||||
return self.pow_to_turns(self.set_mu(
|
return self.pow_to_turns(self.set_mu(
|
||||||
self.frequency_to_ftw(frequency), self.turns_to_pow(phase),
|
self.frequency_to_ftw(frequency), self.turns_to_pow(phase),
|
||||||
self.amplitude_to_asf(amplitude), phase_mode, ref_time, profile))
|
self.amplitude_to_asf(amplitude), phase_mode, ref_time_mu, profile))
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
def set_att_mu(self, att):
|
def set_att_mu(self, att):
|
||||||
|
|
|
@ -182,7 +182,7 @@ class AD9914:
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
def set_mu(self, ftw, pow=0, phase_mode=_PHASE_MODE_DEFAULT,
|
def set_mu(self, ftw, pow=0, phase_mode=_PHASE_MODE_DEFAULT,
|
||||||
asf=0x0fff, ref_time=-1):
|
asf=0x0fff, ref_time_mu=-1):
|
||||||
"""Sets the DDS channel to the specified frequency and phase.
|
"""Sets the DDS channel to the specified frequency and phase.
|
||||||
|
|
||||||
This uses machine units (FTW and POW). The frequency tuning word width
|
This uses machine units (FTW and POW). The frequency tuning word width
|
||||||
|
@ -196,7 +196,7 @@ class AD9914:
|
||||||
:param pow: adds an offset to the phase.
|
:param pow: adds an offset to the phase.
|
||||||
:param phase_mode: if specified, overrides the default phase mode set
|
:param phase_mode: if specified, overrides the default phase mode set
|
||||||
by :meth:`set_phase_mode` for this call.
|
by :meth:`set_phase_mode` for this call.
|
||||||
:param ref_time: reference time used to compute phase. Specifying this
|
:param ref_time_mu: reference time used to compute phase. Specifying this
|
||||||
makes it easier to have a well-defined phase relationship between
|
makes it easier to have a well-defined phase relationship between
|
||||||
DDSes on the same bus that are updated at a similar time.
|
DDSes on the same bus that are updated at a similar time.
|
||||||
:return: Resulting phase offset word after application of phase
|
:return: Resulting phase offset word after application of phase
|
||||||
|
@ -205,8 +205,8 @@ class AD9914:
|
||||||
"""
|
"""
|
||||||
if phase_mode == _PHASE_MODE_DEFAULT:
|
if phase_mode == _PHASE_MODE_DEFAULT:
|
||||||
phase_mode = self.phase_mode
|
phase_mode = self.phase_mode
|
||||||
if ref_time < 0:
|
if ref_time_mu < 0:
|
||||||
ref_time = now_mu()
|
ref_time_mu = now_mu()
|
||||||
delay_mu(-self.set_duration_mu)
|
delay_mu(-self.set_duration_mu)
|
||||||
|
|
||||||
self.write(AD9914_GPIO, (1 << self.channel) << 1)
|
self.write(AD9914_GPIO, (1 << self.channel) << 1)
|
||||||
|
@ -225,9 +225,9 @@ class AD9914:
|
||||||
# Enable autoclear phase accumulator and enables OSK.
|
# Enable autoclear phase accumulator and enables OSK.
|
||||||
self.write(AD9914_REG_CFR1L, 0x2108)
|
self.write(AD9914_REG_CFR1L, 0x2108)
|
||||||
fud_time = now_mu() + 2 * self.write_duration_mu
|
fud_time = now_mu() + 2 * self.write_duration_mu
|
||||||
pow -= int32((ref_time - fud_time) * self.sysclk_per_mu * ftw >> (32 - 16))
|
pow -= int32((ref_time_mu - fud_time) * self.sysclk_per_mu * ftw >> (32 - 16))
|
||||||
if phase_mode == PHASE_MODE_TRACKING:
|
if phase_mode == PHASE_MODE_TRACKING:
|
||||||
pow += int32(ref_time * self.sysclk_per_mu * ftw >> (32 - 16))
|
pow += int32(ref_time_mu * self.sysclk_per_mu * ftw >> (32 - 16))
|
||||||
|
|
||||||
self.write(AD9914_REG_POW, pow)
|
self.write(AD9914_REG_POW, pow)
|
||||||
self.write(AD9914_REG_ASF, asf)
|
self.write(AD9914_REG_ASF, asf)
|
||||||
|
|
Loading…
Reference in New Issue