mirror of
https://github.com/micropython/micropython.git
synced 2025-12-15 17:30:14 +01:00
rp2/machine_pin: Replace macros with Pico SDK functions.
Replace custom macros with Pico SDK functions, enabling support for RP2350B variant chips with > 32 GPIOs. Fixes issue #17241. Signed-off-by: Phil Howard <github@gadgetoid.com>
This commit is contained in:
committed by
Damien George
parent
4545eb844d
commit
28c8fff6d8
@@ -46,12 +46,6 @@
|
||||
|
||||
#define GPIO_IRQ_ALL (0xf)
|
||||
|
||||
// Macros to access the state of the hardware.
|
||||
#define GPIO_GET_FUNCSEL(id) ((iobank0_hw->io[(id)].ctrl & IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS) >> IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB)
|
||||
#define GPIO_IS_OUT(id) (sio_hw->gpio_oe & (1 << (id)))
|
||||
#define GPIO_IS_PULL_UP(id) (padsbank0_hw->io[(id)] & PADS_BANK0_GPIO0_PUE_BITS)
|
||||
#define GPIO_IS_PULL_DOWN(id) (padsbank0_hw->io[(id)] & PADS_BANK0_GPIO0_PDE_BITS)
|
||||
|
||||
// Open drain behaviour is simulated.
|
||||
#define GPIO_IS_OPEN_DRAIN(id) (machine_pin_open_drain_mask & (1 << (id)))
|
||||
|
||||
@@ -198,13 +192,13 @@ const machine_pin_obj_t *machine_pin_find(mp_obj_t pin) {
|
||||
|
||||
static void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
||||
machine_pin_obj_t *self = self_in;
|
||||
uint funcsel = GPIO_GET_FUNCSEL(self->id);
|
||||
uint funcsel = gpio_get_function(self->id);
|
||||
qstr mode_qst;
|
||||
if (!is_ext_pin(self)) {
|
||||
if (funcsel == GPIO_FUNC_SIO) {
|
||||
if (GPIO_IS_OPEN_DRAIN(self->id)) {
|
||||
mode_qst = MP_QSTR_OPEN_DRAIN;
|
||||
} else if (GPIO_IS_OUT(self->id)) {
|
||||
} else if (gpio_is_dir_out(self->id)) {
|
||||
mode_qst = MP_QSTR_OUT;
|
||||
} else {
|
||||
mode_qst = MP_QSTR_IN;
|
||||
@@ -214,11 +208,11 @@ static void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
|
||||
}
|
||||
mp_printf(print, "Pin(%q, mode=%q", self->name, mode_qst);
|
||||
bool pull_up = false;
|
||||
if (GPIO_IS_PULL_UP(self->id)) {
|
||||
if (gpio_is_pulled_up(self->id)) {
|
||||
mp_printf(print, ", pull=%q", MP_QSTR_PULL_UP);
|
||||
pull_up = true;
|
||||
}
|
||||
if (GPIO_IS_PULL_DOWN(self->id)) {
|
||||
if (gpio_is_pulled_down(self->id)) {
|
||||
if (pull_up) {
|
||||
mp_printf(print, "|%q", MP_QSTR_PULL_DOWN);
|
||||
} else {
|
||||
@@ -411,7 +405,7 @@ static mp_obj_t machine_pin_toggle(mp_obj_t self_in) {
|
||||
machine_pin_ext_set(self, self->last_output_value ^ 1);
|
||||
#endif
|
||||
} else if (GPIO_IS_OPEN_DRAIN(self->id)) {
|
||||
if (GPIO_IS_OUT(self->id)) {
|
||||
if (gpio_is_dir_out(self->id)) {
|
||||
gpio_set_dir(self->id, GPIO_IN);
|
||||
} else {
|
||||
gpio_set_dir(self->id, GPIO_OUT);
|
||||
|
||||
Reference in New Issue
Block a user