8000 save some flash by configuring each busio.SPI pin with a helper function · WaveyD/circuitpython@b085b79 · GitHub
[go: up one dir, main page]

Skip to content

Commit b085b79

Browse files
save some flash by configuring each busio.SPI pin with a helper function
1 parent 84f9849 commit b085b79

File tree

1 file changed

+11
-15
lines changed
  • ports/atmel-samd/common-hal/busio

1 file changed

+11
-15
lines changed

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

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@
2121
#include "samd/dma.h"
2222
#include "samd/sercom.h"
2323

24+
void setup_pin(const mcu_pin_obj_t *pin, uint32_t pinmux) {
25+
gpio_set_pin_direction(pin->number, GPIO_DIRECTION_OUT);
26+
gpio_set_pin_pull_mode(pin->number, GPIO_PULL_OFF);
27+
gpio_set_pin_function(pin->number, pinmux);
28+
claim_pin(pin);
29+
hri_port_set_PINCFG_DRVSTR_bit(PORT, (enum gpio_port)GPIO_PORT(pin->number), GPIO_PIN(pin->number));
30+
}
31+
2432
void common_hal_busio_spi_construct(busio_spi_obj_t *self,
2533
const mcu_pin_obj_t *clock, const mcu_pin_obj_t *mosi,
2634
const mcu_pin_obj_t *miso, bool half_duplex) {
@@ -139,33 +147,21 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
139147
mp_raise_OSError(MP_EIO);
140148
}
141149

142-
gpio_set_pin_direction(clock->number, GPIO_DIRECTION_OUT);
143-
gpio_set_pin_pull_mode(clock->number, GPIO_PULL_OFF);
144-
gpio_set_pin_function(clock->number, clock_pinmux);
145-
claim_pin(clock);
146-
hri_port_set_PINCFG_DRVSTR_bit(PORT, (enum gpio_port)GPIO_PORT(clock->number), GPIO_PIN(clock->number));
150+
setup_pin(clock, clock_pinmux);
147151
self->clock_pin = clock->number;
148152

149153
if (mosi_none) {
150154
self->MOSI_pin = NO_PIN;
151155
} else {
152-
gpio_set_pin_direction(mosi->number, GPIO_DIRECTION_OUT);
153-
gpio_set_pin_pull_mode(mosi->number, GPIO_PULL_OFF);
154-
gpio_set_pin_function(mosi->number, mosi_pinmux);
156+
setup_pin(mosi, mosi_pinmux);
155157
self->MOSI_pin = mosi->number;
156-
claim_pin(mosi);
157-
hri_port_set_PINCFG_DRVSTR_bit(PORT, (enum gpio_port)GPIO_PORT(mosi->number), GPIO_PIN(mosi->number));
158158
}
159159

160160
if (miso_none) {
161161
self->MISO_pin = NO_PIN;
162162
} else {
163-
gpio_set_pin_direction(miso->number, GPIO_DIRECTION_IN);
164-
gpio_set_pin_pull_mode(miso->number, GPIO_PULL_OFF);
165-
gpio_set_pin_function(miso->number, miso_pinmux);
163+
setup_pin(miso, miso_pinmux);
166164
self->MISO_pin = miso->number;
167-
claim_pin(miso);
168-
hri_port_set_PINCFG_DRVSTR_bit(PORT, (enum gpio_port)GPIO_PORT(miso->number), GPIO_PIN(miso->number));
169165
}
170166

171167
spi_m_sync_enable(&self->spi_desc);

0 commit comments

Comments
 (0)
0