Skip to content

Commit 6404aaf

Browse files
committed
Fix up nrf and using board.SPI in FourWire
1 parent 760bd8d commit 6404aaf

14 files changed

Lines changed: 109 additions & 56 deletions

File tree

main.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
#include <stdint.h>
2828
#include <string.h>
2929

30-
#include "shared-module/displayio/__init__.h"
3130
#include "extmod/vfs.h"
3231
#include "extmod/vfs_fat.h"
3332

@@ -62,6 +61,10 @@
6261
#include "shared-module/network/__init__.h"
6362
#endif
6463

64+
#ifdef CIRCUITPY_DISPLAYIO
65+
#include "shared-module/displayio/__init__.h"
66+
#endif
67+
6568
void do_str(const char *src, mp_parse_input_kind_t input_kind) {
6669
mp_lexer_t *lex = mp_lexer_new_from_str_len(MP_QSTR__lt_stdin_gt_, src, strlen(src), 0);
6770
if (lex == NULL) {
@@ -200,8 +203,10 @@ bool run_code_py(safe_mode_t safe_mode) {
200203
serial_write_compressed(translate("WARNING: Your code filename has two extensions\n"));
201204
}
202205
}
206+
#ifdef CIRCUITPY_DISPLAYIO
203207
// Turn off the display before the heap disappears.
204208
reset_displays();
209+
#endif
205210
stop_mp();
206211
free_memory(heap);
207212

ports/atmel-samd/background.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,13 @@
3030
#include "supervisor/usb.h"
3131

3232
#include "py/runtime.h"
33-
#include "shared-module/displayio/__init__.h"
3433
#include "shared-module/network/__init__.h"
3534
#include "supervisor/shared/stack.h"
3635

36+
#ifdef CIRCUITPY_DISPLAYIO
37+
#include "shared-module/displayio/__init__.h"
38+
#endif
39+
3740
volatile uint64_t last_finished_tick = 0;
3841

3942
bool stack_ok_so_far = true;

ports/atmel-samd/mpconfigport.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ extern const struct _mp_obj_module_t wiznet_module;
285285
#define CIRCUITPY_DISPLAY_LIMIT (3)
286286
#define DISPLAYIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_displayio), (mp_obj_t)&displayio_module },
287287
#else
288+
#define CIRCUITPY_DISPLAY_LIMIT (0)
288289
#define DISPLAYIO_MODULE
289290
#endif
290291

@@ -338,6 +339,7 @@ extern const struct _mp_obj_module_t wiznet_module;
338339
#define MICROPY_PY_BUILTINS_COMPLEX (0)
339340

340341
#define MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG (0)
342+
#define CIRCUITPY_DISPLAY_LIMIT (0)
341343
#endif
342344

343345
// Disabled for now.

ports/nrf/background.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,20 @@
2424
* THE SOFTWARE.
2525
*/
2626

27-
#ifdef NRF52840
27+
#include "py/runtime.h"
2828
#include "supervisor/usb.h"
29-
#endif
30-
3129
#include "supervisor/shared/stack.h"
3230

31+
#ifdef CIRCUITPY_DISPLAYIO
32+
#include "shared-module/displayio/__init__.h"
33+
#endif
34+
3335
void run_background_tasks(void) {
34-
#ifdef NRF52840
35-
usb_background();
36+
usb_background();
37+
38+
#ifdef CIRCUITPY_DISPLAYIO
39+
displayio_refresh_displays();
3640
#endif
41+
3742
assert_heap_ok();
3843
}

ports/nrf/boards/feather_nrf52840_express/pins.c

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,53 @@
33
#include "supervisor/shared/board_busses.h"
44

55
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
6-
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_04) },
7-
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_05) },
8-
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_P0_30) },
9-
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_28) },
10-
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_02) },
11-
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_03) },
6+
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_04) },
7+
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_05) },
8+
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_P0_30) },
9+
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_28) },
10+
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_02) },
11+
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_03) },
1212

13-
{ MP_ROM_QSTR(MP_QSTR_AREF), MP_ROM_PTR(&pin_P0_31) },
13+
{ MP_ROM_QSTR(MP_QSTR_AREF), MP_ROM_PTR(&pin_P0_31) },
1414

15-
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_P0_29) },
16-
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_P0_29) },
15+
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_P0_29) },
16+
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_P0_29) },
1717

18-
{ MP_ROM_QSTR(MP_QSTR_SWITCH), MP_ROM_PTR(&pin_P1_02) },
18+
{ MP_ROM_QSTR(MP_QSTR_SWITCH), MP_ROM_PTR(&pin_P1_02) },
1919

20-
{ MP_ROM_QSTR(MP_QSTR_NFC1), MP_ROM_PTR(&pin_P0_09) },
21-
{ MP_ROM_QSTR(MP_QSTR_NFC2), MP_ROM_PTR(&pin_P0_10) },
20+
{ MP_ROM_QSTR(MP_QSTR_NFC1), MP_ROM_PTR(&pin_P0_09) },
21+
{ MP_ROM_QSTR(MP_QSTR_NFC2), MP_ROM_PTR(&pin_P0_10) },
2222

23-
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P0_10) },
24-
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P1_08) },
25-
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_P0_07) },
26-
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P0_26) },
27-
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P0_27) },
28-
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_P0_06) },
29-
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_P0_08) },
30-
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_P1_09) },
23+
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P0_10) },
24+
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P1_08) },
25+
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_P0_07) },
26+
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P0_26) },
27+
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P0_27) },
28+
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_P0_06) },
29+
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_P0_08) },
30+
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_P1_09) },
3131

32-
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_P0_16) },
32+
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_P0_16) },
3333

34-
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_14) },
35-
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P0_13) },
36-
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P0_15) },
34+
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_14) },
35+
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P0_13) },
36+
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P0_15) },
3737

38-
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P0_25) },
39-
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P0_24) },
38+
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P0_25) },
39+
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P0_24) },
4040

41-
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_11) },
42-
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P0_12) },
41+
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_11) },
42+
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P0_12) },
4343

44-
{ MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_P1_15) },
45-
{ MP_ROM_QSTR(MP_QSTR_RED_LED), MP_ROM_PTR(&pin_P1_15) },
46-
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P1_15) },
44+
{ MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_P1_15) },
45+
{ MP_ROM_QSTR(MP_QSTR_RED_LED), MP_ROM_PTR(&pin_P1_15) },
46+
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P1_15) },
4747

48-
{ MP_ROM_QSTR(MP_QSTR_BLUE_LED), MP_ROM_PTR(&pin_P1_10) },
48+
{ MP_ROM_QSTR(MP_QSTR_BLUE_LED), MP_ROM_PTR(&pin_P1_10) },
49+
50+
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
51+
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
52+
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
4953
};
5054

5155
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

ports/nrf/common-hal/microcontroller/Pin.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,11 @@ void claim_pin(const mcu_pin_obj_t* pin) {
142142
#endif
143143
}
144144

145+
146+
bool pin_number_is_free(uint8_t pin_number) {
147+
return !(claimed_pins[nrf_pin_port(pin_number)] & (1 << nrf_relative_pin_number(pin_number)));
148+
}
149+
145150
bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) {
146151
#ifdef MICROPY_HW_NEOPIXEL
147152
if (pin == MICROPY_HW_NEOPIXEL) {
@@ -163,5 +168,5 @@ bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) {
163168
}
164169
#endif
165170

166-
return !(claimed_pins[nrf_pin_port(pin->number)] & (1 << nrf_relative_pin_number(pin->number)));
171+
return pin_number_is_free(pin->number);
167172
}

ports/nrf/mpconfigport.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ extern const struct _mp_obj_module_t microcontroller_module;
163163
extern const struct _mp_obj_module_t bitbangio_module;
164164
extern const struct _mp_obj_module_t analogio_module;
165165
extern const struct _mp_obj_module_t digitalio_module;
166+
extern const struct _mp_obj_module_t displayio_module;
166167
extern const struct _mp_obj_module_t pulseio_module;
167168
extern const struct _mp_obj_module_t busio_module;
168169
extern const struct _mp_obj_module_t board_module;
@@ -195,6 +196,7 @@ extern const struct _mp_obj_module_t bleio_module;
195196
{ MP_OBJ_NEW_QSTR (MP_QSTR_busio ), (mp_obj_t)&busio_module }, \
196197
{ MP_OBJ_NEW_QSTR (MP_QSTR_analogio ), (mp_obj_t)&analogio_module }, \
197198
{ MP_OBJ_NEW_QSTR (MP_QSTR_digitalio ), (mp_obj_t)&digitalio_module }, \
199+
{ MP_OBJ_NEW_QSTR (MP_QSTR_displayio ), (mp_obj_t)&displayio_module }, \
198200
{ MP_OBJ_NEW_QSTR (MP_QSTR_pulseio ), (mp_obj_t)&pulseio_module }, \
199201
{ MP_OBJ_NEW_QSTR (MP_QSTR_microcontroller ), (mp_obj_t)&microcontroller_module }, \
200202
{ MP_OBJ_NEW_QSTR (MP_QSTR_neopixel_write ), (mp_obj_t)&neopixel_write_module }, \

shared-bindings/displayio/Display.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a
8383

8484
displayio_display_obj_t *self = NULL;
8585
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
86-
if (displays[i].display.base.type == NULL) {
86+
if (displays[i].display.base.type == NULL ||
87+
displays[i].display.base.type == &mp_type_NoneType) {
8788
self = &displays[i].display;
8889
break;
8990
}

shared-bindings/displayio/FourWire.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,23 @@ STATIC mp_obj_t displayio_fourwire_make_new(const mp_obj_type_t *type, size_t n_
6565

6666
mp_obj_t command = args[ARG_command].u_obj;
6767
mp_obj_t chip_select = args[ARG_chip_select].u_obj;
68-
mp_obj_t reset = args[ARG_reset].u_obj;
6968
if (command == mp_const_none || chip_select == mp_const_none) {
7069
mp_raise_ValueError(translate("Command and chip_select required"));
7170
}
7271
assert_pin_free(command);
7372
assert_pin_free(chip_select);
74-
assert_pin_free(reset);
73+
mp_obj_t reset = args[ARG_reset].u_obj;
74+
if (reset != mp_const_none) {
75+
assert_pin_free(reset);
76+
} else {
77+
reset = NULL;
78+
}
7579

7680
displayio_fourwire_obj_t* self = NULL;
7781
mp_obj_t spi = args[ARG_spi_bus].u_obj;
7882
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
79-
if (displays[i].fourwire_bus.base.type== NULL) {
83+
if (displays[i].fourwire_bus.base.type == NULL ||
84+
displays[i].fourwire_bus.base.type == &mp_type_NoneType) {
8085
self = &displays[i].fourwire_bus;
8186
self->base.type = &displayio_fourwire_type;
8287
break;

shared-bindings/displayio/ParallelBus.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ STATIC mp_obj_t displayio_parallelbus_make_new(const mp_obj_type_t *type, size_t
8383

8484
displayio_parallelbus_obj_t* self = NULL;
8585
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
86-
if (displays[i].parallel_bus.base.type== NULL) {
86+
if (displays[i].parallel_bus.base.type== NULL ||
87+
displays[i].parallel_bus.base.type == &mp_type_NoneType) {
8788
self = &displays[i].parallel_bus;
8889
self->base.type = &displayio_parallelbus_type;
8990
break;

0 commit comments

Comments
 (0)