forked from M-Labs/artiq
fastino: ensure `xxx_to_mu()` methods return int32 on the host
Currently running `voltage_to_mu()` or `voltage_group_to_mu()` on the host will convert all machine unit values to int64. This leads to issues when machine units are returned from RPCs. Signed-off-by: Marius Weber <marius.weber@physics.ox.ac.uk>
This commit is contained in:
parent
b8f4c6b9bb
commit
bda5aa7c7e
|
@ -1,6 +1,7 @@
|
||||||
"""RTIO driver for the Fastino 32channel, 16 bit, 2.5 MS/s per channel,
|
"""RTIO driver for the Fastino 32channel, 16 bit, 2.5 MS/s per channel,
|
||||||
streaming DAC.
|
streaming DAC.
|
||||||
"""
|
"""
|
||||||
|
from numpy import int32
|
||||||
|
|
||||||
from artiq.language.core import kernel, portable, delay
|
from artiq.language.core import kernel, portable, delay
|
||||||
from artiq.coredevice.rtio import (rtio_output, rtio_output_wide,
|
from artiq.coredevice.rtio import (rtio_output, rtio_output_wide,
|
||||||
|
@ -112,7 +113,7 @@ class Fastino:
|
||||||
:param voltage: Voltage in SI Volts.
|
:param voltage: Voltage in SI Volts.
|
||||||
:return: DAC data word in machine units, 16 bit integer.
|
:return: DAC data word in machine units, 16 bit integer.
|
||||||
"""
|
"""
|
||||||
data = int(round((0x8000/10.)*voltage)) + 0x8000
|
data = int32(round((0x8000/10.)*voltage)) + int32(0x8000)
|
||||||
if data < 0 or data > 0xffff:
|
if data < 0 or data > 0xffff:
|
||||||
raise ValueError("DAC voltage out of bounds")
|
raise ValueError("DAC voltage out of bounds")
|
||||||
return data
|
return data
|
||||||
|
@ -129,7 +130,7 @@ class Fastino:
|
||||||
v = self.voltage_to_mu(voltage[i])
|
v = self.voltage_to_mu(voltage[i])
|
||||||
if i & 1:
|
if i & 1:
|
||||||
v = data[i // 2] | (v << 16)
|
v = data[i // 2] | (v << 16)
|
||||||
data[i // 2] = v
|
data[i // 2] = int32(v)
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
def set_dac(self, dac, voltage):
|
def set_dac(self, dac, voltage):
|
||||||
|
|
Loading…
Reference in New Issue