Skip to content

Commit 8d1d821

Browse files
author
Matt Land
committed
pin issue
1 parent fbb57f9 commit 8d1d821

File tree

4 files changed

+36
-0
lines changed

4 files changed

+36
-0
lines changed

ports/atmel-samd/board_busses.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
*/
2626

2727
#include "shared-bindings/busio/I2C.h"
28+
#include "shared-bindings/busio/SPI.h"
2829
#include "shared-bindings/microcontroller/Pin.h"
2930
#include "mpconfigboard.h"
3031
#include "pins.h"
@@ -60,3 +61,30 @@
6061
#endif
6162

6263
MP_DEFINE_CONST_FUN_OBJ_0(board_i2c_obj, board_i2c);
64+
65+
#if !defined(DEFAULT_SPI_BUS_CLK) || !defined(DEFAULT_SPI_BUS_MISO) || !defined(DEFAULT_SPI_BUS_MOSI)
66+
STATIC mp_obj_t board_spi(void) {
67+
mp_raise_NotImplementedError("No default SPI bus");
68+
return NULL;
69+
}
70+
#else
71+
STATIC mp_obj_t spi_singleton = NULL;
72+
73+
STATIC mp_obj_t board_spi(void) {
74+
75+
if (spi_singleton == NULL) {
76+
busio_spi_obj_t *self = m_new_obj(busio_spi_obj_t);
77+
self->base.type = &busio_spi_type;
78+
assert_pin_free(DEFAULT_SPI_BUS_CLK);
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_CLK);
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;
86+
}
87+
return spi_singleton;
88+
}
89+
#endif
90+
MP_DEFINE_CONST_FUN_OBJ_0(board_spi_obj, board_spi);

ports/atmel-samd/board_busses.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,7 @@
3030
void board_i2c(void);
3131
extern mp_obj_fun_builtin_fixed_t board_i2c_obj;
3232

33+
void board_spi(void);
34+
extern mp_obj_fun_builtin_fixed_t board_spi_obj;
35+
3336
#endif // MICROPY_INCLUDED_ATMEL_SAMD_BOARD_BUSSES_H

ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,7 @@
6161

6262
#define DEFAULT_I2C_BUS_SCL (&pin_PB03)
6363
#define DEFAULT_I2C_BUS_SDA (&pin_PB02)
64+
65+
#define DEFAULT_SPI_BUS_CLK (&pin_PA21)
66+
#define DEFAULT_SPI_BUS_MISO (&pin_PA16)
67+
#define DEFAULT_SPI_BUS_MOSI (&pin_PA20)

ports/atmel-samd/boards/circuitplayground_express/pins.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,6 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
5858
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PA07) },
5959
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PA06) },
6060
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
61+
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
6162
};
6263
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

0 commit comments

Comments
 (0)