Exemplo n.º 1
0
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
Exemplo n.º 2
0
 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)