Skip to content

Commit 11d4bce

Browse files
authored
Merge pull request #9682 from jepler/rp2350-sdk-bug-workaround
Work around an sdk bug
2 parents 321d6e9 + 3a189e7 commit 11d4bce

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

ports/raspberrypi/common-hal/rp2pio/StateMachine.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ static void *_interrupt_arg[NUM_PIOS][NUM_PIO_STATE_MACHINES];
5757

5858
static void rp2pio_statemachine_interrupt_handler(void);
5959

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+
}
6073
static void rp2pio_statemachine_set_pull(uint32_t pull_pin_up, uint32_t pull_pin_down, uint32_t pins_we_use) {
6174
for (size_t i = 0; i < NUM_BANK0_GPIOS; i++) {
6275
bool used = pins_we_use & (1 << i);
@@ -374,7 +387,7 @@ bool rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self,
374387
sm_config_set_wrap(&c, wrap_target, wrap);
375388
sm_config_set_in_shift(&c, in_shift_right, auto_push, push_threshold);
376389
#if PICO_PIO_VERSION > 0
377-
sm_config_set_in_pin_count(&c, in_pin_count);
390+
sm_config_set_in_pin_count_issue1878(&c, in_pin_count);
378391
#endif
379392

380393
sm_config_set_out_shift(&c, out_shift_right, auto_pull, pull_threshold);

0 commit comments

Comments
 (0)