samd: Add Pin.board and Pin.cpu classes to Pin.

For compatibility with other ports.  Code increase up to ~1250 bytes for
SAMD21.  The feature is configurable via MICROPY_PY_MACHINE_PIN_BOARD_CPU
in case flash memory is tight.
This commit is contained in:
robert-hh
2023-02-03 17:03:31 +01:00
committed by Damien George
parent 7198c25175
commit 4598b89ce9
8 changed files with 149 additions and 46 deletions

View File

@@ -54,6 +54,23 @@ typedef struct _machine_pin_irq_obj_t {
uint8_t pin_id;
} machine_pin_irq_obj_t;
#if MICROPY_PY_MACHINE_PIN_BOARD_CPU
// Pin mapping dictionaries
MP_DEFINE_CONST_OBJ_TYPE(
machine_pin_cpu_pins_obj_type,
MP_QSTR_cpu,
MP_TYPE_FLAG_NONE,
locals_dict, &machine_pin_cpu_pins_locals_dict
);
MP_DEFINE_CONST_OBJ_TYPE(
machine_pin_board_pins_obj_type,
MP_QSTR_board,
MP_TYPE_FLAG_NONE,
locals_dict, &machine_pin_board_pins_locals_dict
);
#endif // MICROPY_PY_MACHINE_PIN_BOARD_CPU
STATIC const mp_irq_methods_t machine_pin_irq_methods;
bool EIC_occured;
@@ -411,6 +428,12 @@ STATIC const mp_rom_map_elem_t machine_pin_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_drive), MP_ROM_PTR(&machine_pin_drive_obj) },
{ MP_ROM_QSTR(MP_QSTR_irq), MP_ROM_PTR(&machine_pin_irq_obj) },
#if MICROPY_PY_MACHINE_PIN_BOARD_CPU
// class attributes
{ MP_ROM_QSTR(MP_QSTR_board), MP_ROM_PTR(&machine_pin_board_pins_obj_type) },
{ MP_ROM_QSTR(MP_QSTR_cpu), MP_ROM_PTR(&machine_pin_cpu_pins_obj_type) },
#endif // MICROPY_PY_MACHINE_PIN_BOARD_CPU
// class constants
{ MP_ROM_QSTR(MP_QSTR_IN), MP_ROM_INT(GPIO_MODE_IN) },
{ MP_ROM_QSTR(MP_QSTR_OUT), MP_ROM_INT(GPIO_MODE_OUT) },