|
24 | 24 |
|
25 | 25 | #define IRQ_SAMPLE_DELAY_NS 100 |
26 | 26 |
|
27 | | -#if !CYW43_PIN_WL_DYNAMIC |
| 27 | +#if !CYW43_PIN_WL_DYNAMIC && PICO_PIO_USE_GPIO_BASE |
28 | 28 | // The pins should all work in the same gpio base |
29 | 29 | static_assert((CYW43_PIN_WL_DATA_OUT < 32 && CYW43_PIN_WL_DATA_IN < 32 && CYW43_PIN_WL_CLOCK < 32) || |
30 | 30 | (CYW43_PIN_WL_DATA_OUT >= 16 && CYW43_PIN_WL_DATA_IN >= 16 && CYW43_PIN_WL_CLOCK >= 16), ""); |
@@ -131,7 +131,7 @@ int cyw43_spi_init(cyw43_int_t *self) { |
131 | 131 | sm_config_set_sideset_pins(&config, CYW43_PIN_WL_CLOCK); |
132 | 132 | sm_config_set_in_shift(&config, false, true, 32); |
133 | 133 | sm_config_set_out_shift(&config, false, true, 32); |
134 | | - hw_set_bits(&bus_data->pio->input_sync_bypass, 1u << CYW43_PIN_WL_DATA_IN); |
| 134 | + hw_set_bits(&bus_data->pio->input_sync_bypass, 1u << (CYW43_PIN_WL_DATA_IN - pio_get_gpio_base(bus_data->pio))); |
135 | 135 | pio_sm_set_config(bus_data->pio, bus_data->pio_sm, &config); |
136 | 136 | pio_sm_set_consecutive_pindirs(bus_data->pio, bus_data->pio_sm, CYW43_PIN_WL_CLOCK, 1, true); |
137 | 137 | gpio_set_function(CYW43_PIN_WL_DATA_OUT, pio_get_funcsel(bus_data->pio)); |
@@ -242,7 +242,9 @@ int cyw43_spi_transfer(cyw43_int_t *self, const uint8_t *tx, size_t tx_length, u |
242 | 242 | pio_sm_set_enabled(bus_data->pio, bus_data->pio_sm, false); |
243 | 243 | pio_sm_set_wrap(bus_data->pio, bus_data->pio_sm, bus_data->pio_offset, bus_data->pio_offset + SPI_OFFSET_END - 1); |
244 | 244 | pio_sm_clear_fifos(bus_data->pio, bus_data->pio_sm); |
245 | | - pio_sm_set_pindirs_with_mask(bus_data->pio, bus_data->pio_sm, 1u << CYW43_PIN_WL_DATA_OUT, 1u << CYW43_PIN_WL_DATA_OUT); |
| 245 | + pio_sm_set_pindirs_with_mask(bus_data->pio, bus_data->pio_sm, |
| 246 | + 1u << (CYW43_PIN_WL_DATA_OUT - pio_get_gpio_base(bus_data->pio)), |
| 247 | + 1u << (CYW43_PIN_WL_DATA_OUT - pio_get_gpio_base(bus_data->pio))); |
246 | 248 | pio_sm_restart(bus_data->pio, bus_data->pio_sm); |
247 | 249 | pio_sm_clkdiv_restart(bus_data->pio, bus_data->pio_sm); |
248 | 250 | pio_sm_put(bus_data->pio, bus_data->pio_sm, tx_length * 8 - 1); |
@@ -284,7 +286,9 @@ int cyw43_spi_transfer(cyw43_int_t *self, const uint8_t *tx, size_t tx_length, u |
284 | 286 | pio_sm_set_enabled(bus_data->pio, bus_data->pio_sm, false); |
285 | 287 | pio_sm_set_wrap(bus_data->pio, bus_data->pio_sm, bus_data->pio_offset, bus_data->pio_offset + SPI_OFFSET_LP1_END - 1); |
286 | 288 | pio_sm_clear_fifos(bus_data->pio, bus_data->pio_sm); |
287 | | - pio_sm_set_pindirs_with_mask(bus_data->pio, bus_data->pio_sm, 1u << CYW43_PIN_WL_DATA_OUT, 1u << CYW43_PIN_WL_DATA_OUT); |
| 289 | + pio_sm_set_pindirs_with_mask(bus_data->pio, bus_data->pio_sm, |
| 290 | + 1u << (CYW43_PIN_WL_DATA_OUT - pio_get_gpio_base(bus_data->pio)), |
| 291 | + 1u << (CYW43_PIN_WL_DATA_OUT - pio_get_gpio_base(bus_data->pio))); |
288 | 292 | pio_sm_restart(bus_data->pio, bus_data->pio_sm); |
289 | 293 | pio_sm_clkdiv_restart(bus_data->pio, bus_data->pio_sm); |
290 | 294 | pio_sm_put(bus_data->pio, bus_data->pio_sm, tx_length * 8 - 1); |
@@ -563,9 +567,13 @@ static bool cyw43_pins_valid(uint pins[CYW43_PIN_INDEX_WL_COUNT]) { |
563 | 567 | return false; |
564 | 568 | } |
565 | 569 | } |
| 570 | +#if PICO_PIO_USE_GPIO_BASE |
566 | 571 | // These pins should use the same gpio base |
567 | 572 | return (pins[CYW43_PIN_INDEX_WL_DATA_OUT] < 32 && pins[CYW43_PIN_INDEX_WL_DATA_IN] < 32 && pins[CYW43_PIN_INDEX_WL_CLOCK] < 32) || |
568 | 573 | (pins[CYW43_PIN_INDEX_WL_DATA_OUT] >= 16 && pins[CYW43_PIN_INDEX_WL_DATA_IN] >= 16 && pins[CYW43_PIN_INDEX_WL_CLOCK] >= 16); |
| 574 | +#else |
| 575 | + return true; |
| 576 | +#endif |
569 | 577 | } |
570 | 578 |
|
571 | 579 | // Set the gpio pin array |
|
0 commit comments