@@ -57,19 +57,6 @@ static void *_interrupt_arg[NUM_PIOS][NUM_PIO_STATE_MACHINES];
57
57
58
58
static void rp2pio_statemachine_interrupt_handler (void );
59
59
60
- // Workaround for sdk bug: https://github.com/raspberrypi/pico-sdk/issues/1878
61
- // This workaround can be removed when we upgrade to sdk 2.0.1
62
- static inline void sm_config_set_in_pin_count_issue1878 (pio_sm_config * c , uint in_count ) {
63
- #if PICO_PIO_VERSION == 0
64
- // can't be changed from 32 on PIO v0
65
- ((void )c );
66
- valid_params_if (HARDWARE_PIO , in_count == 32 );
67
- #else
68
- valid_params_if (HARDWARE_PIO , in_count && in_count <= 32 );
69
- c -> shiftctrl = (c -> shiftctrl & ~PIO_SM0_SHIFTCTRL_IN_COUNT_BITS ) |
70
- ((in_count & 0x1fu ) << PIO_SM0_SHIFTCTRL_IN_COUNT_LSB );
71
- #endif
72
- }
73
60
static void rp2pio_statemachine_set_pull (pio_pinmask_t pull_pin_up , pio_pinmask_t pull_pin_down , pio_pinmask_t pins_we_use ) {
74
61
for (size_t i = 0 ; i < NUM_BANK0_GPIOS ; i ++ ) {
75
62
bool used = PIO_PINMASK_IS_SET (pins_we_use , i );
@@ -253,10 +240,12 @@ static bool use_existing_program(PIO *pio_out, uint *sm_out, int *offset_inout,
253
240
if (_current_program_id [i ][j ] == program_id &&
254
241
_current_program_len [i ][j ] == program_len &&
255
242
(* offset_inout == -1 || * offset_inout == _current_program_offset [i ][j ])) {
256
- * pio_out = pio ;
257
- * sm_out = j ;
258
- * offset_inout = _current_program_offset [i ][j ];
259
- return true;
243
+ * sm_out = pio_claim_unused_sm (pio , false);
244
+ if (* sm_out >= 0 ) {
245
+ * pio_out = pio ;
246
+ * offset_inout = _current_program_offset [i ][j ];
247
+ return true;
248
+ }
260
249
}
261
250
}
262
251
}
@@ -435,7 +424,7 @@ bool rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self,
435
424
sm_config_set_wrap (& c , wrap_target , wrap );
436
425
sm_config_set_in_shift (& c , in_shift_right , auto_push , push_threshold );
437
426
#if PICO_PIO_VERSION > 0
438
- sm_config_set_in_pin_count_issue1878 (& c , in_pin_count );
427
+ sm_config_set_in_pin_count (& c , in_pin_count );
439
428
#endif
440
429
441
430
sm_config_set_out_shift (& c , out_shift_right , auto_pull , pull_threshold );
0 commit comments