Lines Matching refs:pio
46 PIO pio; member
145 static inline void spi_pico_pio_sm_put8(PIO pio, uint sm, uint8_t data) in spi_pico_pio_sm_put8() argument
149 io_rw_8 *txfifo = (io_rw_8 *)&pio->txf[sm]; in spi_pico_pio_sm_put8()
154 static inline uint8_t spi_pico_pio_sm_get8(PIO pio, uint sm) in spi_pico_pio_sm_get8() argument
158 io_rw_8 *rxfifo = (io_rw_8 *)&pio->rxf[sm]; in spi_pico_pio_sm_get8()
163 static inline void spi_pico_pio_sm_put16(PIO pio, uint sm, uint16_t data) in spi_pico_pio_sm_put16() argument
167 io_rw_16 *txfifo = (io_rw_16 *)&pio->txf[sm]; in spi_pico_pio_sm_put16()
172 static inline uint16_t spi_pico_pio_sm_get16(PIO pio, uint sm) in spi_pico_pio_sm_get16() argument
174 io_rw_16 *rxfifo = (io_rw_16 *)&pio->rxf[sm]; in spi_pico_pio_sm_get16()
179 static inline void spi_pico_pio_sm_put32(PIO pio, uint sm, uint32_t data) in spi_pico_pio_sm_put32() argument
181 io_rw_32 *txfifo = (io_rw_32 *)&pio->txf[sm]; in spi_pico_pio_sm_put32()
186 static inline uint32_t spi_pico_pio_sm_get32(PIO pio, uint sm) in spi_pico_pio_sm_get32() argument
188 io_rw_32 *rxfifo = (io_rw_32 *)&pio->rxf[sm]; in spi_pico_pio_sm_get32()
195 return ((data->pio->sm[data->pio_sm].addr == data->pio_tx_offset) && in spi_pico_pio_sm_complete()
196 pio_sm_is_tx_fifo_empty(data->pio, data->pio_sm)); in spi_pico_pio_sm_complete()
296 data->pio = pio_rpi_pico_get_pio(dev_cfg->piodev); in spi_pico_pio_configure()
310 pio_add_program(data->pio, RPI_PICO_PIO_GET_PROGRAM(spi_sio_mode_0_0_tx)); in spi_pico_pio_configure()
313 pio_add_program(data->pio, RPI_PICO_PIO_GET_PROGRAM(spi_sio_mode_0_0_rx)); in spi_pico_pio_configure()
326 hw_set_bits(&data->pio->input_sync_bypass, 1u << sio->pin); in spi_pico_pio_configure()
335 pio_sm_set_pindirs_with_mask(data->pio, data->pio_sm, in spi_pico_pio_configure()
338 pio_sm_set_pins_with_mask(data->pio, data->pio_sm, 0, in spi_pico_pio_configure()
340 pio_gpio_init(data->pio, sio->pin); in spi_pico_pio_configure()
341 pio_gpio_init(data->pio, clk->pin); in spi_pico_pio_configure()
343 pio_sm_init(data->pio, data->pio_sm, data->pio_tx_offset, &sm_config); in spi_pico_pio_configure()
344 pio_sm_set_enabled(data->pio, data->pio_sm, true); in spi_pico_pio_configure()
384 if (!pio_can_add_program(data->pio, program)) { in spi_pico_pio_configure()
388 data->pio_tx_offset = pio_add_program(data->pio, program); in spi_pico_pio_configure()
401 pio_sm_set_consecutive_pindirs(data->pio, data->pio_sm, miso->pin, 1, false); in spi_pico_pio_configure()
402 pio_sm_set_pindirs_with_mask(data->pio, data->pio_sm, in spi_pico_pio_configure()
405 pio_sm_set_pins_with_mask(data->pio, data->pio_sm, (cpol << clk->pin), in spi_pico_pio_configure()
407 pio_gpio_init(data->pio, mosi->pin); in spi_pico_pio_configure()
408 pio_gpio_init(data->pio, miso->pin); in spi_pico_pio_configure()
409 pio_gpio_init(data->pio, clk->pin); in spi_pico_pio_configure()
411 pio_sm_init(data->pio, data->pio_sm, data->pio_tx_offset, &sm_config); in spi_pico_pio_configure()
412 pio_sm_set_enabled(data->pio, data->pio_sm, true); in spi_pico_pio_configure()
432 pio_sm_clear_fifos(data->pio, data->pio_sm); in spi_pico_pio_txrx_4_wire()
436 while ((!pio_sm_is_tx_fifo_full(data->pio, data->pio_sm)) && in spi_pico_pio_txrx_4_wire()
446 spi_pico_pio_sm_put32(data->pio, data->pio_sm, txrx); in spi_pico_pio_txrx_4_wire()
453 spi_pico_pio_sm_put16(data->pio, data->pio_sm, txrx); in spi_pico_pio_txrx_4_wire()
460 spi_pico_pio_sm_put8(data->pio, data->pio_sm, txrx); in spi_pico_pio_txrx_4_wire()
471 while ((!pio_sm_is_rx_fifo_empty(data->pio, data->pio_sm)) && in spi_pico_pio_txrx_4_wire()
475 txrx = spi_pico_pio_sm_get32(data->pio, data->pio_sm); in spi_pico_pio_txrx_4_wire()
484 txrx = spi_pico_pio_sm_get16(data->pio, data->pio_sm); in spi_pico_pio_txrx_4_wire()
493 txrx = spi_pico_pio_sm_get8(data->pio, data->pio_sm); in spi_pico_pio_txrx_4_wire()
527 pio_sm_set_enabled(data->pio, data->pio_sm, false); in spi_pico_pio_txrx_3_wire()
528 pio_sm_set_wrap(data->pio, data->pio_sm, in spi_pico_pio_txrx_3_wire()
532 pio_sm_clear_fifos(data->pio, data->pio_sm); in spi_pico_pio_txrx_3_wire()
533 pio_sm_set_pindirs_with_mask(data->pio, data->pio_sm, BIT(sio_pin), BIT(sio_pin)); in spi_pico_pio_txrx_3_wire()
534 pio_sm_restart(data->pio, data->pio_sm); in spi_pico_pio_txrx_3_wire()
535 pio_sm_clkdiv_restart(data->pio, data->pio_sm); in spi_pico_pio_txrx_3_wire()
536 pio_sm_exec(data->pio, data->pio_sm, pio_encode_jmp(data->pio_tx_offset)); in spi_pico_pio_txrx_3_wire()
537 pio_sm_set_enabled(data->pio, data->pio_sm, true); in spi_pico_pio_txrx_3_wire()
541 while ((!pio_sm_is_tx_fifo_full(data->pio, data->pio_sm)) && in spi_pico_pio_txrx_3_wire()
547 spi_pico_pio_sm_put32(data->pio, data->pio_sm, txrx); in spi_pico_pio_txrx_3_wire()
552 spi_pico_pio_sm_put16(data->pio, data->pio_sm, txrx); in spi_pico_pio_txrx_3_wire()
557 spi_pico_pio_sm_put8(data->pio, data->pio_sm, txrx); in spi_pico_pio_txrx_3_wire()
569 while ((!pio_sm_is_tx_fifo_empty(data->pio, data->pio_sm)) || in spi_pico_pio_txrx_3_wire()
575 pio_sm_set_enabled(data->pio, data->pio_sm, false); in spi_pico_pio_txrx_3_wire()
576 pio_sm_set_wrap(data->pio, data->pio_sm, data->pio_rx_wrap_target, in spi_pico_pio_txrx_3_wire()
578 pio_sm_clear_fifos(data->pio, data->pio_sm); in spi_pico_pio_txrx_3_wire()
579 pio_sm_set_pindirs_with_mask(data->pio, data->pio_sm, 0, BIT(sio_pin)); in spi_pico_pio_txrx_3_wire()
580 pio_sm_restart(data->pio, data->pio_sm); in spi_pico_pio_txrx_3_wire()
581 pio_sm_clkdiv_restart(data->pio, data->pio_sm); in spi_pico_pio_txrx_3_wire()
582 pio_sm_put(data->pio, data->pio_sm, (rx_size * data->bits) - 1); in spi_pico_pio_txrx_3_wire()
583 pio_sm_exec(data->pio, data->pio_sm, pio_encode_jmp(data->pio_rx_offset)); in spi_pico_pio_txrx_3_wire()
584 pio_sm_set_enabled(data->pio, data->pio_sm, true); in spi_pico_pio_txrx_3_wire()
587 while ((!pio_sm_is_rx_fifo_empty(data->pio, data->pio_sm)) && in spi_pico_pio_txrx_3_wire()
592 txrx = spi_pico_pio_sm_get32(data->pio, data->pio_sm); in spi_pico_pio_txrx_3_wire()
597 txrx = spi_pico_pio_sm_get16(data->pio, data->pio_sm); in spi_pico_pio_txrx_3_wire()
602 txrx = spi_pico_pio_sm_get8(data->pio, data->pio_sm); in spi_pico_pio_txrx_3_wire()