@@ -71,23 +71,42 @@ MP_DEFINE_CONST_FUN_OBJ_0(board_i2c_obj, board_i2c);
7171STATIC busio_spi_obj_t spi_obj ;
7272STATIC mp_obj_t spi_singleton = NULL ;
7373
74- mp_obj_t board_spi (void ) {
75- if (spi_singleton == NULL ) {
76- busio_spi_obj_t * self = & spi_obj ;
77- self -> base .type = & busio_spi_type ;
78- assert_pin_free (DEFAULT_SPI_BUS_SCK );
79- assert_pin_free (DEFAULT_SPI_BUS_MOSI );
80- assert_pin_free (DEFAULT_SPI_BUS_MISO );
81- const mcu_pin_obj_t * clock = MP_OBJ_TO_PTR (DEFAULT_SPI_BUS_SCK );
82- const mcu_pin_obj_t * mosi = MP_OBJ_TO_PTR (DEFAULT_SPI_BUS_MOSI );
83- const mcu_pin_obj_t * miso = MP_OBJ_TO_PTR (DEFAULT_SPI_BUS_MISO );
84- common_hal_busio_spi_construct (self , clock , mosi , miso );
85- spi_singleton = (mp_obj_t )self ;
74+ // TODO(tannewt): Move this to shared-bindings/board/__init__.c and corresponding shared-module.
75+ mp_obj_t common_hal_board_get_spi (void ) {
76+ return spi_singleton ;
77+ }
78+
79+ mp_obj_t common_hal_board_create_spi (void ) {
80+ if (spi_singleton != NULL ) {
81+ return spi_singleton ;
82+ }
83+ busio_spi_obj_t * self = & spi_obj ;
84+ self -> base .type = & busio_spi_type ;
85+ if (!common_hal_mcu_pin_is_free (DEFAULT_SPI_BUS_SCK ) ||
86+ !common_hal_mcu_pin_is_free (DEFAULT_SPI_BUS_MOSI ) ||
87+ !common_hal_mcu_pin_is_free (DEFAULT_SPI_BUS_MISO )) {
88+ return NULL ;
8689 }
90+ const mcu_pin_obj_t * clock = MP_OBJ_TO_PTR (DEFAULT_SPI_BUS_SCK );
91+ const mcu_pin_obj_t * mosi = MP_OBJ_TO_PTR (DEFAULT_SPI_BUS_MOSI );
92+ const mcu_pin_obj_t * miso = MP_OBJ_TO_PTR (DEFAULT_SPI_BUS_MISO );
93+ common_hal_busio_spi_construct (self , clock , mosi , miso );
94+ spi_singleton = (mp_obj_t )self ;
8795 return spi_singleton ;
8896}
89- #else
97+
9098mp_obj_t board_spi (void ) {
99+ mp_obj_t singleton = common_hal_board_get_spi ();
100+ if (singleton != NULL ) {
101+ return singleton ;
102+ }
103+ assert_pin_free (DEFAULT_SPI_BUS_SCK );
104+ assert_pin_free (DEFAULT_SPI_BUS_MOSI );
105+ assert_pin_free (DEFAULT_SPI_BUS_MISO );
106+ return common_hal_board_create_spi ();
107+ }
108+ #else
109+ mp_obj_t common_hal_board_spi (void ) {
91110 mp_raise_NotImplementedError (translate ("No default SPI bus" ));
92111 return NULL ;
93112}
0 commit comments