|
21 | 21 | #include "samd/dma.h"
|
22 | 22 | #include "samd/sercom.h"
|
23 | 23 |
|
| 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 | + |
24 | 32 | void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
25 | 33 | const mcu_pin_obj_t *clock, const mcu_pin_obj_t *mosi,
|
26 | 34 | const mcu_pin_obj_t *miso, bool half_duplex) {
|
@@ -139,33 +147,21 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
139 | 147 | mp_raise_OSError(MP_EIO);
|
140 | 148 | }
|
141 | 149 |
|
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); |
147 | 151 | self->clock_pin = clock->number;
|
148 | 152 |
|
149 | 153 | if (mosi_none) {
|
150 | 154 | self->MOSI_pin = NO_PIN;
|
151 | 155 | } 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); |
155 | 157 | 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)); |
158 | 158 | }
|
159 | 159 |
|
160 | 160 | if (miso_none) {
|
161 | 161 | self->MISO_pin = NO_PIN;
|
162 | 162 | } 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); |
166 | 164 | 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)); |
169 | 165 | }
|
170 | 166 |
|
171 | 167 | spi_m_sync_enable(&self->spi_desc);
|
|
0 commit comments