kasli_i2c: port to NAC3

This commit is contained in:
Sebastien Bourdeauducq 2022-03-01 17:22:06 +08:00
parent 01e55f5731
commit fb0b806f61
1 changed files with 15 additions and 6 deletions

View File

@ -1,7 +1,8 @@
from numpy import int32 from numpy import int32
from artiq.experiment import * from artiq.experiment import *
from artiq.coredevice.i2c import i2c_write_many, i2c_read_many, i2c_poll from artiq.coredevice.core import Core
from artiq.coredevice.i2c import I2CSwitch, i2c_write_many, i2c_read_many, i2c_poll
port_mapping = { port_mapping = {
@ -24,7 +25,15 @@ port_mapping = {
} }
@nac3
class KasliEEPROM: class KasliEEPROM:
core: KernelInvariant[Core]
sw0: KernelInvariant[I2CSwitch]
sw1: KernelInvariant[I2CSwitch]
busno: KernelInvariant[int32]
port: KernelInvariant[int32]
address: KernelInvariant[int32]
def __init__(self, dmgr, port, busno=0, def __init__(self, dmgr, port, busno=0,
core_device="core", sw0_device="i2c_switch0", sw1_device="i2c_switch1"): core_device="core", sw0_device="i2c_switch0", sw1_device="i2c_switch1"):
self.core = dmgr.get(core_device) self.core = dmgr.get(core_device)
@ -50,10 +59,10 @@ class KasliEEPROM:
self.sw1.unset() self.sw1.unset()
@kernel @kernel
def write_i32(self, addr, value): def write_i32(self, addr: int32, value: int32):
self.select() self.select()
try: try:
data = [0]*4 data = [0 for _ in range(4)]
for i in range(4): for i in range(4):
data[i] = (value >> 24) & 0xff data[i] = (value >> 24) & 0xff
value <<= 8 value <<= 8
@ -63,12 +72,12 @@ class KasliEEPROM:
self.deselect() self.deselect()
@kernel @kernel
def read_i32(self, addr): def read_i32(self, addr: int32) -> int32:
self.select() self.select()
value = int32(0)
try: try:
data = [0]*4 data = [0 for _ in range(4)]
i2c_read_many(self.busno, self.address, addr, data) i2c_read_many(self.busno, self.address, addr, data)
value = int32(0)
for i in range(4): for i in range(4):
value <<= 8 value <<= 8
value |= data[i] value |= data[i]