tmc2660: Fix tmc register reading
The tmc2660 appears to send responses as soon as the clk starts toggling. That means the 20 bit response is at the top of the 24bit sent message. Also, this implies that RDSEL must already have the correct value in the prior message. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
e24709b112
commit
af8bfee210
|
@ -58,40 +58,40 @@ Fields["DRVCONF"] = {
|
||||||
}
|
}
|
||||||
|
|
||||||
Fields["READRSP@RDSEL0"] = {
|
Fields["READRSP@RDSEL0"] = {
|
||||||
"SG": 0x01,
|
"SG": 0x01 << 4,
|
||||||
"ot": 0x01 << 1,
|
"ot": 0x01 << 5,
|
||||||
"otpw": 0x01 << 2,
|
"otpw": 0x01 << 6,
|
||||||
"s2ga": 0x01 << 3,
|
"s2ga": 0x01 << 7,
|
||||||
"s2gb": 0x01 << 4,
|
"s2gb": 0x01 << 8,
|
||||||
"ola": 0x01 << 5,
|
"ola": 0x01 << 9,
|
||||||
"olb": 0x01 << 6,
|
"olb": 0x01 << 10,
|
||||||
"stst": 0x01 << 7,
|
"stst": 0x01 << 11,
|
||||||
"MSTEP": 0x3ff << 10
|
"MSTEP": 0x3ff << 14
|
||||||
}
|
}
|
||||||
|
|
||||||
Fields["READRSP@RDSEL1"] = {
|
Fields["READRSP@RDSEL1"] = {
|
||||||
"SG": 0x01,
|
"SG": 0x01 << 4,
|
||||||
"ot": 0x01 << 1,
|
"ot": 0x01 << 5,
|
||||||
"otpw": 0x01 << 2,
|
"otpw": 0x01 << 6,
|
||||||
"s2ga": 0x01 << 3,
|
"s2ga": 0x01 << 7,
|
||||||
"s2gb": 0x01 << 4,
|
"s2gb": 0x01 << 8,
|
||||||
"ola": 0x01 << 5,
|
"ola": 0x01 << 9,
|
||||||
"olb": 0x01 << 6,
|
"olb": 0x01 << 10,
|
||||||
"stst": 0x01 << 7,
|
"stst": 0x01 << 11,
|
||||||
"SG@RDSEL1": 0x3ff << 10
|
"SG@RDSEL1": 0x3ff << 14
|
||||||
}
|
}
|
||||||
|
|
||||||
Fields["READRSP@RDSEL2"] = {
|
Fields["READRSP@RDSEL2"] = {
|
||||||
"SG": 0x01,
|
"SG": 0x01 << 4,
|
||||||
"ot": 0x01 << 1,
|
"ot": 0x01 << 5,
|
||||||
"otpw": 0x01 << 2,
|
"otpw": 0x01 << 6,
|
||||||
"s2ga": 0x01 << 3,
|
"s2ga": 0x01 << 7,
|
||||||
"s2gb": 0x01 << 4,
|
"s2gb": 0x01 << 8,
|
||||||
"ola": 0x01 << 5,
|
"ola": 0x01 << 9,
|
||||||
"olb": 0x01 << 6,
|
"olb": 0x01 << 10,
|
||||||
"stst": 0x01 << 7,
|
"stst": 0x01 << 11,
|
||||||
"SG@RDSEL2": 0x1f << 15,
|
"SE": 0x1f << 14,
|
||||||
"SE": 0x1f << 10
|
"SG@RDSEL2": 0x1f << 19
|
||||||
}
|
}
|
||||||
|
|
||||||
SignedFields = ["SGT"]
|
SignedFields = ["SGT"]
|
||||||
|
@ -192,12 +192,17 @@ class MCU_TMC2660_SPI:
|
||||||
def get_fields(self):
|
def get_fields(self):
|
||||||
return self.fields
|
return self.fields
|
||||||
def get_register(self, reg_name):
|
def get_register(self, reg_name):
|
||||||
|
new_rdsel = ReadRegisters.index(reg_name)
|
||||||
reg = self.name_to_reg["DRVCONF"]
|
reg = self.name_to_reg["DRVCONF"]
|
||||||
val = self.fields.set_field("RDSEL", ReadRegisters.index(reg_name))
|
|
||||||
if self.printer.get_start_args().get('debugoutput') is not None:
|
if self.printer.get_start_args().get('debugoutput') is not None:
|
||||||
return 0
|
return 0
|
||||||
msg = [((val >> 16) | reg) & 0xff, (val >> 8) & 0xff, val & 0xff]
|
|
||||||
with self.mutex:
|
with self.mutex:
|
||||||
|
old_rdsel = self.fields.get_field("RDSEL")
|
||||||
|
val = self.fields.set_field("RDSEL", new_rdsel)
|
||||||
|
msg = [((val >> 16) | reg) & 0xff, (val >> 8) & 0xff, val & 0xff]
|
||||||
|
if new_rdsel != old_rdsel:
|
||||||
|
# Must set RDSEL value first
|
||||||
|
self.spi.spi_send(msg)
|
||||||
params = self.spi.spi_transfer(msg)
|
params = self.spi.spi_transfer(msg)
|
||||||
pr = bytearray(params['response'])
|
pr = bytearray(params['response'])
|
||||||
return (pr[0] << 16) | (pr[1] << 8) | pr[2]
|
return (pr[0] << 16) | (pr[1] << 8) | pr[2]
|
||||||
|
|
Loading…
Reference in New Issue