def resolve_bus_name(mcu, param, bus): # Find enumerations for the given bus enumerations = mcu.get_enumerations() enums = enumerations.get(param, enumerations.get('bus')) if enums is None: if bus is None: return 0 return bus # Verify bus is a valid enumeration ppins = mcu.get_printer().lookup_object("pins") mcu_name = mcu.get_name() if bus is None: rev_enums = {v: k for k, v in enums.items()} if 0 not in rev_enums: raise ppins.error("Must specify %s on mcu '%s'" % (param, mcu_name)) bus = rev_enums[0] if bus not in enums: raise ppins.error("Unknown %s '%s'" % (param, bus)) # Check for reserved bus pins constants = mcu.get_constants() reserve_pins = constants.get('BUS_PINS_%s' % (bus, ), None) pin_resolver = ppins.get_pin_resolver(mcu_name) if reserve_pins is not None: for pin in reserve_pins.split(','): pin_resolver.reserve_pin(pin, bus) return bus
def _mcu_identify(self): # Obtain mcu information mcu = self.mcu_adc.get_mcu() self.debug_read_cmd = mcu.lookup_query_command( "debug_read order=%c addr=%u", "debug_result val=%u") self.mcu_type = mcu.get_constants().get("MCU", "") # Run MCU specific configuration cfg_funcs = [ ('rp2040', self.config_rp2040), ('sam3', self.config_sam3), ('sam4', self.config_sam4), ('same70', self.config_same70), ('samd21', self.config_samd21), ('samd51', self.config_samd51), ('stm32f1', self.config_stm32f1), ('stm32f2', self.config_stm32f2), ('stm32f4', self.config_stm32f4), ('stm32f042', self.config_stm32f0x2), ('stm32f070', self.config_stm32f070), ('stm32f072', self.config_stm32f0x2), ('stm32g0', self.config_stm32g0), ('', self.config_unknown)] for name, func in cfg_funcs: if self.mcu_type.startswith(name): func() break logging.info("mcu_temperature '%s' nominal base=%.6f slope=%.6f", mcu.get_name(), self.base_temperature, self.slope) # Setup manual base/slope override if self.temp1 is not None: if self.temp2 is not None: self.slope = (self.temp2 - self.temp1) / (self.adc2 - self.adc1) self.base_temperature = self.calc_base(self.temp1, self.adc1) # Setup min/max checks adc_range = [self.calc_adc(t) for t in [self.min_temp, self.max_temp]] self.mcu_adc.setup_minmax(SAMPLE_TIME, SAMPLE_COUNT, minval=min(adc_range), maxval=max(adc_range), range_check_count=RANGE_CHECK_COUNT)
def __init__(self, mcu, pin_desc, cmd_queue=None, value=0): self.mcu = mcu self.oid = mcu.create_oid() ppins = mcu.get_printer().lookup_object('pins') pin_params = ppins.lookup_pin(pin_desc) if pin_params['chip'] is not mcu: raise ppins.error("Pin %s must be on mcu %s" % (pin_desc, mcu.get_name())) mcu.add_config_cmd("config_digital_out oid=%d pin=%s value=%d" " default_value=%d max_duration=%d" % (self.oid, pin_params['pin'], value, value, 0)) mcu.register_config_callback(self.build_config) if cmd_queue is None: cmd_queue = mcu.alloc_command_queue() self.cmd_queue = cmd_queue self.update_pin_cmd = None