Skip to content

Commit c969a64

Browse files
working edits to spi and can attempts
1 parent b98ff01 commit c969a64

2 files changed

Lines changed: 11 additions & 8 deletions

File tree

ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ EXTERNAL_FLASH_DEVICES = "S25FL116K, S25FL216K, GD25Q16C"
1111
LONGINT_IMPL = MPZ
1212

1313
CIRCUITPY__EVE = 1
14+
CIRCUITPY_CANIO = 0
1415
CIRCUITPY_FLOPPYIO = 0
1516
CIRCUITPY_SYNTHIO = 0
1617

ports/atmel-samd/common-hal/busio/SPI.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
5858
uint8_t dopo = 255;
5959

6060
if (half_duplex) {
61-
mp_raise_NotImplementedError(MP_ERROR_TEXT("Half duplex SPI is not implemented"));
61+
mp_raise_NotImplementedError(MP_ERROR_TEXT("Half duplex SPI is not implemented but true"));
6262
}
6363

6464
// Ensure the object starts in its deinit state.
@@ -145,10 +145,12 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
145145

146146
// Pads must be set after spi_m_sync_init(), which uses default values from
147147
// the prototypical SERCOM.
148-
uint32_t SPI_CONFIG_OFFSETS[] = {0x40003000, 0x40003400, 0x43000000, 0x43000400, 0x43000800, 0x43000C00};
149-
if (slave_mode) {
150-
*((uint32_t*) SPI_CONFIG_OFFSETS[sercom_index]) &= ~(1<<2);
151-
}
148+
149+
// hri_sercomspi_write_CTRLA_MODE_bf(sercom, slave_mode ? 2 : 3); // this line makes circuitpython crash on a call to "mySpi.write()"
150+
// uint32_t SPI_CONFIG_OFFSETS[] = {0x40003000, 0x40003400, 0x43000000, 0x43000400, 0x43000800, 0x43000C00};
151+
// if (slave_mode) {
152+
// *((uint32_t*) SPI_CONFIG_OFFSETS[sercom_index]) &= ~(1<<2);
153+
// }
152154
hri_sercomspi_write_CTRLA_DOPO_bf(sercom, dopo);
153155
hri_sercomspi_write_CTRLA_DIPO_bf(sercom, miso_pad);
154156

@@ -161,7 +163,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
161163
mp_raise_OSError(MP_EIO);
162164
}
163165

164-
gpio_set_pin_direction(clock->number, GPIO_DIRECTION_OUT);
166+
gpio_set_pin_direction(clock->number, slave_mode ? GPIO_DIRECTION_IN : GPIO_DIRECTION_OUT);
165167
gpio_set_pin_pull_mode(clock->number, GPIO_PULL_OFF);
166168
gpio_set_pin_function(clock->number, clock_pinmux);
167169
claim_pin(clock);
@@ -170,7 +172,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
170172
if (mosi_none) {
171173
self->MOSI_pin = NO_PIN;
172174
} else {
173-
gpio_set_pin_direction(mosi->number, GPIO_DIRECTION_OUT);
175+
gpio_set_pin_direction(mosi->number, slave_mode ? GPIO_DIRECTION_IN : GPIO_DIRECTION_OUT);
174176
gpio_set_pin_pull_mode(mosi->number, GPIO_PULL_OFF);
175177
gpio_set_pin_function(mosi->number, mosi_pinmux);
176178
self->MOSI_pin = mosi->number;
@@ -180,7 +182,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
180182
if (miso_none) {
181183
self->MISO_pin = NO_PIN;
182184
} else {
183-
gpio_set_pin_direction(miso->number, GPIO_DIRECTION_IN);
185+
gpio_set_pin_direction(miso->number, slave_mode ? GPIO_DIRECTION_OUT : GPIO_DIRECTION_IN);
184186
gpio_set_pin_pull_mode(miso->number, GPIO_PULL_OFF);
185187
gpio_set_pin_function(miso->number, miso_pinmux);
186188
self->MISO_pin = miso->number;

0 commit comments

Comments
 (0)