mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-08-06 21:44:13 -06:00
tmc2208: Decode register fields in DUMP_TMC (#1156)
Report values of TMC2208 register fields in DUMP_TMC command to help in tuning and diagnostics. This also adds functions to refer to register fields by name for TMC drivers and register mappings for TMC2208. Signed-off-by: Kevin O'Connor <kevin@koconnor.net> Signed-off-by: Dmitry Frolov <dmitry.frolov@gmail.com>
This commit is contained in:
parent
3b6ddb08a1
commit
54683c9535
2 changed files with 189 additions and 2 deletions
|
@ -24,6 +24,40 @@ ReadRegisters = [
|
|||
"CHOPCONF", "DRV_STATUS", "PWM_SCALE", "LOST_STEPS",
|
||||
]
|
||||
|
||||
Fields = {}
|
||||
|
||||
|
||||
######################################################################
|
||||
# Field helpers
|
||||
######################################################################
|
||||
|
||||
# Return the position of the first bit set in a mask
|
||||
def ffs(mask):
|
||||
return (mask & -mask).bit_length() - 1
|
||||
|
||||
# Provide a string description of a register
|
||||
def pretty_format(all_fields, reg_name, value):
|
||||
fields = [ " %s=%d" % (field_name, (value & mask) >> ffs(mask))
|
||||
for field_name, mask in sorted(all_fields.get(
|
||||
reg_name, {}).items(), key = lambda f: f[1])
|
||||
if value & mask ]
|
||||
return "%-15s %08x%s" % (reg_name + ":", value, "".join(fields))
|
||||
|
||||
# Returns value of the register field
|
||||
def get_field(all_fields, reg_name, field_name, reg_value):
|
||||
mask = all_fields.get(reg_name, {})[field_name]
|
||||
return (reg_value & mask) >> ffs(mask)
|
||||
|
||||
# Returns register value with field bits filled with supplied field value
|
||||
def set_field(all_fields, reg_name, field_name, reg_value, field_value):
|
||||
mask = all_fields.get(reg_name, {})[field_name]
|
||||
return (reg_value & ~mask) | ((field_value << ffs(mask)) & mask)
|
||||
|
||||
|
||||
######################################################################
|
||||
# TMC2130 printer object
|
||||
######################################################################
|
||||
|
||||
class TMC2130:
|
||||
def __init__(self, config):
|
||||
self.printer = config.get_printer()
|
||||
|
@ -126,7 +160,7 @@ class TMC2130:
|
|||
logging.info("DUMP_TMC %s", self.name)
|
||||
for reg_name in ReadRegisters:
|
||||
val = self.get_register(reg_name)
|
||||
msg = "%-15s %08x" % (reg_name + ":", val)
|
||||
msg = pretty_format(Fields, reg_name, val)
|
||||
logging.info(msg)
|
||||
gcode.respond_info(msg)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue