samd/modsamd: Add pininfo() function to the samd module.
samd.pininfo() returns the data stored in the pin af table for a pin. Using a small script, a nice representation of the table can be created.
This commit is contained in:
parent
7a2f2d88f7
commit
6e2dff6bae
@ -92,7 +92,6 @@ int pin_find(mp_obj_t pin, const machine_pin_obj_t machine_pin_obj[], int table_
|
||||
return wanted_pin;
|
||||
}
|
||||
|
||||
|
||||
// Pin.init(mode, pull=None, *, value=None, drive=0). No 'alt' yet.
|
||||
STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
enum { ARG_mode, ARG_pull, ARG_value, ARG_drive, ARG_alt };
|
||||
@ -157,7 +156,6 @@ mp_obj_t mp_pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw,
|
||||
if (self == NULL || self->base.type == NULL) {
|
||||
mp_raise_ValueError(MP_ERROR_TEXT("invalid pin"));
|
||||
}
|
||||
self = (machine_pin_obj_t *)&machine_pin_obj[wanted_pin];
|
||||
|
||||
if (n_args > 1 || n_kw > 0) {
|
||||
// pin mode given, so configure this GPIO
|
||||
|
@ -24,14 +24,56 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "string.h"
|
||||
#include "py/runtime.h"
|
||||
#include "py/mphal.h"
|
||||
|
||||
#include "sam.h"
|
||||
#include "pin_af.h"
|
||||
#include "pins.h"
|
||||
#include "samd_soc.h"
|
||||
|
||||
extern const mp_obj_type_t samd_flash_type;
|
||||
|
||||
STATIC mp_obj_t samd_pininfo(mp_obj_t pin_obj) {
|
||||
mp_hal_pin_obj_t pin = mp_hal_get_pin_obj(pin_obj);
|
||||
const pin_af_t *pin_af = get_pin_af_info(pin);
|
||||
const char *name = ((machine_pin_obj_t *)MP_OBJ_TO_PTR(pin_obj))->name;
|
||||
if (pin_af) {
|
||||
#if defined(MCU_SAMD21)
|
||||
mp_obj_t tuple[7] = {
|
||||
tuple[0] = mp_obj_new_str(name, strlen(name)),
|
||||
tuple[1] = mp_obj_new_int(pin_af->eic),
|
||||
tuple[2] = mp_obj_new_int(pin_af->adc0),
|
||||
tuple[3] = mp_obj_new_int(pin_af->sercom1),
|
||||
tuple[4] = mp_obj_new_int(pin_af->sercom2),
|
||||
tuple[5] = mp_obj_new_int(pin_af->tcc1),
|
||||
tuple[6] = mp_obj_new_int(pin_af->tcc2),
|
||||
};
|
||||
return mp_obj_new_tuple(7, tuple);
|
||||
#elif defined(MCU_SAMD51)
|
||||
mp_obj_t tuple[9] = {
|
||||
tuple[0] = mp_obj_new_str(name, strlen(name)),
|
||||
tuple[1] = mp_obj_new_int(pin_af->eic),
|
||||
tuple[2] = mp_obj_new_int(pin_af->adc0),
|
||||
tuple[3] = mp_obj_new_int(pin_af->adc1),
|
||||
tuple[4] = mp_obj_new_int(pin_af->sercom1),
|
||||
tuple[5] = mp_obj_new_int(pin_af->sercom2),
|
||||
tuple[6] = mp_obj_new_int(pin_af->tc),
|
||||
tuple[7] = mp_obj_new_int(pin_af->tcc1),
|
||||
tuple[8] = mp_obj_new_int(pin_af->tcc2),
|
||||
};
|
||||
return mp_obj_new_tuple(9, tuple);
|
||||
#endif
|
||||
}
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(samd_pininfo_obj, samd_pininfo);
|
||||
|
||||
STATIC const mp_rom_map_elem_t samd_module_globals_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_samd) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_Flash), MP_ROM_PTR(&samd_flash_type) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_pininfo), MP_ROM_PTR(&samd_pininfo_obj) },
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(samd_module_globals, samd_module_globals_table);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user