Skip to content

Commit fbf079d

Browse files
Paul Graysondpgeorge
authored andcommitted
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>
1 parent a78ec4e commit fbf079d

File tree

3 files changed

+48
-7
lines changed

3 files changed

+48
-7
lines changed

ports/rp2/machine_i2c.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@
3434
#define DEFAULT_I2C_FREQ (400000)
3535
#define DEFAULT_I2C_TIMEOUT (50000)
3636

37+
#ifdef MICROPY_HW_I2C_NO_DEFAULT_PINS
38+
39+
// With no default I2C, need to require the pin args.
40+
#define MICROPY_HW_I2C0_SCL (0)
41+
#define MICROPY_HW_I2C0_SDA (0)
42+
#define MICROPY_HW_I2C1_SCL (0)
43+
#define MICROPY_HW_I2C1_SDA (0)
44+
#define MICROPY_I2C_PINS_ARG_OPTS MP_ARG_REQUIRED
45+
46+
#else
47+
48+
// Most boards do not require pin args.
49+
#define MICROPY_I2C_PINS_ARG_OPTS 0
50+
3751
#ifndef MICROPY_HW_I2C0_SCL
3852
#if PICO_DEFAULT_I2C == 0
3953
#define MICROPY_HW_I2C0_SCL (PICO_DEFAULT_I2C_SCL_PIN)
@@ -53,6 +67,7 @@
5367
#define MICROPY_HW_I2C1_SDA (6)
5468
#endif
5569
#endif
70+
#endif
5671

5772
// SDA/SCL on even/odd pins, I2C0/I2C1 on even/odd pairs of pins.
5873
#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
8499
static const mp_arg_t allowed_args[] = {
85100
{ MP_QSTR_id, MP_ARG_REQUIRED | MP_ARG_OBJ },
86101
{ MP_QSTR_freq, MP_ARG_INT, {.u_int = DEFAULT_I2C_FREQ} },
87-
{ MP_QSTR_scl, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
88-
{ MP_QSTR_sda, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
102+
{ MP_QSTR_scl, MICROPY_I2C_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
103+
{ MP_QSTR_sda, MICROPY_I2C_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
89104
{ MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_I2C_TIMEOUT} },
90105
};
91106

ports/rp2/machine_spi.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,22 @@
3838
#define DEFAULT_SPI_BITS (8)
3939
#define DEFAULT_SPI_FIRSTBIT (SPI_MSB_FIRST)
4040

41+
#ifdef MICROPY_HW_SPI_NO_DEFAULT_PINS
42+
43+
// With no default SPI, need to require the pin args.
44+
#define MICROPY_HW_SPI0_SCK (0)
45+
#define MICROPY_HW_SPI0_MOSI (0)
46+
#define MICROPY_HW_SPI0_MISO (0)
47+
#define MICROPY_HW_SPI1_SCK (0)
48+
#define MICROPY_HW_SPI1_MOSI (0)
49+
#define MICROPY_HW_SPI1_MISO (0)
50+
#define MICROPY_SPI_PINS_ARG_OPTS MP_ARG_REQUIRED
51+
52+
#else
53+
54+
// Most boards do not require pin args.
55+
#define MICROPY_SPI_PINS_ARG_OPTS 0
56+
4157
#ifndef MICROPY_HW_SPI0_SCK
4258
#if PICO_DEFAULT_SPI == 0
4359
#define MICROPY_HW_SPI0_SCK (PICO_DEFAULT_SPI_SCK_PIN)
@@ -62,6 +78,8 @@
6278
#endif
6379
#endif
6480

81+
#endif
82+
6583
// SPI0 can be GP{0..7,16..23}, SPI1 can be GP{8..15,24..29}.
6684
#define IS_VALID_PERIPH(spi, pin) ((((pin) & 8) >> 3) == (spi))
6785
// 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
116134
{ MP_QSTR_phase, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_SPI_PHASE} },
117135
{ MP_QSTR_bits, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_SPI_BITS} },
118136
{ MP_QSTR_firstbit, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_SPI_FIRSTBIT} },
119-
{ MP_QSTR_sck, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
120-
{ MP_QSTR_mosi, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
121-
{ MP_QSTR_miso, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
137+
{ MP_QSTR_sck, MICROPY_SPI_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
138+
{ MP_QSTR_mosi, MICROPY_SPI_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
139+
{ MP_QSTR_miso, MICROPY_SPI_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
122140
};
123141

124142
// Parse the arguments.

ports/rp2/machine_uart.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@
4040
#define DEFAULT_UART_BITS (8)
4141
#define DEFAULT_UART_STOP (1)
4242

43+
#ifdef MICROPY_HW_UART_NO_DEFAULT_PINS
44+
// With no default I2C, need to require the pin args.
45+
#define MICROPY_UART_PINS_ARG_OPTS MP_ARG_REQUIRED
46+
#else
47+
// Most boards do not require pin args.
48+
#define MICROPY_UART_PINS_ARG_OPTS 0
49+
#endif
50+
4351
// UART 0 default pins
4452
#if !defined(MICROPY_HW_UART0_TX)
4553
#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,
225233
{ MP_QSTR_bits, MP_ARG_INT, {.u_int = -1} },
226234
{ MP_QSTR_parity, MP_ARG_OBJ, {.u_rom_obj = MP_ROM_INT(-1)} },
227235
{ MP_QSTR_stop, MP_ARG_INT, {.u_int = -1} },
228-
{ MP_QSTR_tx, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
229-
{ MP_QSTR_rx, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
236+
{ MP_QSTR_tx, MICROPY_UART_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
237+
{ MP_QSTR_rx, MICROPY_UART_PINS_ARG_OPTS | MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
230238
{ MP_QSTR_cts, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
231239
{ MP_QSTR_rts, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE} },
232240
{ MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} },

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy