@@ -181,6 +181,33 @@ static uint add_program(PIO pio, const pio_program_t *program, int offset) {
181181 }
182182}
183183
184+ static pio_fifo_join compute_fifo_type (int fifo_type_in , bool rx_fifo , bool tx_fifo ) {
185+ if (fifo_type_in != PIO_FIFO_JOIN_AUTO ) {
186+ return fifo_type_in ;
187+ }
188+ if (!rx_fifo ) {
189+ return PIO_FIFO_JOIN_TX ;
190+ }
191+ if (!tx_fifo ) {
192+ return PIO_FIFO_JOIN_RX ;
193+ }
194+ return PIO_FIFO_JOIN_NONE ;
195+ }
196+
197+ static int compute_fifo_depth (pio_fifo_join join ) {
198+ if (join == PIO_FIFO_JOIN_TX || join == PIO_FIFO_JOIN_RX ) {
199+ return 8 ;
200+ }
201+
202+ #if PICO_PIO_VERSION > 0
203+ if (join == PIO_FIFO_JOIN_PUTGET ) {
204+ return 0 ;
205+ }
206+ #endif
207+
208+ return 4 ;
209+ }
210+
184211bool rp2pio_statemachine_construct (rp2pio_statemachine_obj_t * self ,
185212 const uint16_t * program , size_t program_len ,
186213 size_t frequency ,
@@ -355,16 +382,9 @@ bool rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self,
355382
356383 sm_config_set_set_pin_count (& c , set_pin_count );
357384
358- enum pio_fifo_join join =
359- fifo_type != PIO_FIFO_JOIN_AUTO ? fifo_type
360- : !rx_fifo ? PIO_FIFO_JOIN_TX
361- : !tx_fifo ? PIO_FIFO_JOIN_RX
362- : PIO_FIFO_JOIN_NONE ;
363- self -> fifo_depth = (join == PIO_FIFO_JOIN_TX || join == PIO_FIFO_JOIN_RX ) ? 8
364- #if PICO_PIO_VERSION > 0
365- : (join == PIO_FIFO_JOIN_PUTGET ) ? 0
366- #endif
367- : 4 ;
385+ enum pio_fifo_join join = compute_fifo_type (fifo_type , rx_fifo , tx_fifo );
386+
387+ self -> fifo_depth = compute_fifo_depth (join );
368388
369389 #if PICO_PIO_VERSION > 0
370390 if (fifo_type == PIO_FIFO_JOIN_TXPUT || fifo_type == PIO_FIFO_JOIN_TXGET ) {
0 commit comments