mirror of
https://github.com/licsber/micropython.git
synced 2024-09-20 00:50:24 +08:00
rp2: Add new NO_DEFAULT_PINS config options for i2c, spi, and uart.
Some boards have multiple options for these pins, and they don't want to allow users to initialize a port without explicitly specifying pin numbers. Signed-off-by: Paul Grayson <paul@pololu.com>
This commit is contained in:
parent
a78ec4ef7b
commit
fbf079d773
@ -34,6 +34,20 @@
|
||||
#define DEFAULT_I2C_FREQ (400000)
|
||||
#define DEFAULT_I2C_TIMEOUT (50000)
|
||||
|
||||
#ifdef MICROPY_HW_I2C_NO_DEFAULT_PINS
|
||||
|
||||
// With no default I2C, need to require the pin args.
|
||||
#define MICROPY_HW_I2C0_SCL (0)
|
||||
#define MICROPY_HW_I2C0_SDA (0)
|
||||
#define MICROPY_HW_I2C1_SCL (0)
|
||||
#define MICROPY_HW_I2C1_SDA (0)
|
||||
#define MICROPY_I2C_PINS_ARG_OPTS MP_ARG_REQUIRED
|
||||
|
||||
#else
|
||||
|
||||
// Most boards do not require pin args.
|
||||
#define MICROPY_I2C_PINS_ARG_OPTS 0
|
||||
|
||||
#ifndef MICROPY_HW_I2C0_SCL
|
||||
#if PICO_DEFAULT_I2C == 0
|
||||
#define MICROPY_HW_I2C0_SCL (PICO_DEFAULT_I2C_SCL_PIN)
|
||||
@ -53,6 +67,7 @@
|
||||
#define MICROPY_HW_I2C1_SDA (6)
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// SDA/SCL on even/odd pins, I2C0/I2C1 on even/odd pairs of pins.
|
||||
#define IS_VALID_SCL(i2c, pin) (((pin) & 1) == 1 && (((pin) & 2) >> 1) == (i2c))
|
||||
@ -84,8 +99,8 @@ mp_obj_t machine_i2c_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_id, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
{ MP_QSTR_freq, MP_ARG_INT, {.u_int = DEFAULT_I2C_FREQ} },
|
||||
{ MP_QSTR_scl, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_sda, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_scl, MICROPY_I2C_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_sda, MICROPY_I2C_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_I2C_TIMEOUT} },
|
||||
};
|
||||
|
||||
|
@ -38,6 +38,22 @@
|
||||
#define DEFAULT_SPI_BITS (8)
|
||||
#define DEFAULT_SPI_FIRSTBIT (SPI_MSB_FIRST)
|
||||
|
||||
#ifdef MICROPY_HW_SPI_NO_DEFAULT_PINS
|
||||
|
||||
// With no default SPI, need to require the pin args.
|
||||
#define MICROPY_HW_SPI0_SCK (0)
|
||||
#define MICROPY_HW_SPI0_MOSI (0)
|
||||
#define MICROPY_HW_SPI0_MISO (0)
|
||||
#define MICROPY_HW_SPI1_SCK (0)
|
||||
#define MICROPY_HW_SPI1_MOSI (0)
|
||||
#define MICROPY_HW_SPI1_MISO (0)
|
||||
#define MICROPY_SPI_PINS_ARG_OPTS MP_ARG_REQUIRED
|
||||
|
||||
#else
|
||||
|
||||
// Most boards do not require pin args.
|
||||
#define MICROPY_SPI_PINS_ARG_OPTS 0
|
||||
|
||||
#ifndef MICROPY_HW_SPI0_SCK
|
||||
#if PICO_DEFAULT_SPI == 0
|
||||
#define MICROPY_HW_SPI0_SCK (PICO_DEFAULT_SPI_SCK_PIN)
|
||||
@ -62,6 +78,8 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
// SPI0 can be GP{0..7,16..23}, SPI1 can be GP{8..15,24..29}.
|
||||
#define IS_VALID_PERIPH(spi, pin) ((((pin) & 8) >> 3) == (spi))
|
||||
// GP{2,6,10,14,...}
|
||||
@ -116,9 +134,9 @@ mp_obj_t machine_spi_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
|
||||
{ MP_QSTR_phase, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_SPI_PHASE} },
|
||||
{ MP_QSTR_bits, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_SPI_BITS} },
|
||||
{ MP_QSTR_firstbit, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_SPI_FIRSTBIT} },
|
||||
{ MP_QSTR_sck, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_mosi, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_miso, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_sck, MICROPY_SPI_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_mosi, MICROPY_SPI_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_miso, MICROPY_SPI_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
};
|
||||
|
||||
// Parse the arguments.
|
||||
|
@ -40,6 +40,14 @@
|
||||
#define DEFAULT_UART_BITS (8)
|
||||
#define DEFAULT_UART_STOP (1)
|
||||
|
||||
#ifdef MICROPY_HW_UART_NO_DEFAULT_PINS
|
||||
// With no default I2C, need to require the pin args.
|
||||
#define MICROPY_UART_PINS_ARG_OPTS MP_ARG_REQUIRED
|
||||
#else
|
||||
// Most boards do not require pin args.
|
||||
#define MICROPY_UART_PINS_ARG_OPTS 0
|
||||
#endif
|
||||
|
||||
// UART 0 default pins
|
||||
#if !defined(MICROPY_HW_UART0_TX)
|
||||
#define MICROPY_HW_UART0_TX (0)
|
||||
@ -225,8 +233,8 @@ STATIC void mp_machine_uart_init_helper(machine_uart_obj_t *self, size_t n_args,
|
||||
{ MP_QSTR_bits, MP_ARG_INT, {.u_int = -1} },
|
||||
{ MP_QSTR_parity, MP_ARG_OBJ, {.u_rom_obj = MP_ROM_INT(-1)} },
|
||||
{ MP_QSTR_stop, MP_ARG_INT, {.u_int = -1} },
|
||||
{ MP_QSTR_tx, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_rx, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_tx, MICROPY_UART_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_rx, MICROPY_UART_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_cts, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_rts, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
|
||||
{ MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} },
|
||||
|
Loading…
Reference in New Issue
Block a user