Skip to content

Commit abe69a6

Browse files
committed
Add (and use) 32-bit version of check_pio_pin_mask64
1 parent 65c1754 commit abe69a6

File tree

2 files changed

+13
-0
lines changed
  • src/rp2_common/hardware_pio

2 files changed

+13
-0
lines changed

src/rp2_common/hardware_pio/include/hardware/pio.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,15 @@ static inline uint pio_get_gpio_base(PIO pio) {
786786
#endif
787787
}
788788

789+
static inline void check_pio_pin_mask(__unused PIO pio, __unused uint sm, __unused uint32_t pinmask) {
790+
// check no pins are set in the mask which are incompatible with the pio
791+
#if PICO_PIO_USE_GPIO_BASE
792+
valid_params_if(HARDWARE_PIO, (pinmask & ~(0xfffffffful << pio_get_gpio_base(pio))) == 0);
793+
#else
794+
valid_params_if(HARDWARE_PIO, (pinmask & ~0xfffffffful) == 0);
795+
#endif
796+
}
797+
789798
static inline void check_pio_pin_mask64(__unused PIO pio, __unused uint sm, __unused uint64_t pinmask) {
790799
// check no pins are set in the mask which are incompatible with the pio
791800
#if PICO_PIO_USE_GPIO_BASE

src/rp2_common/hardware_pio/pio.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ void pio_sm_set_pins_internal(PIO pio, uint sm, uint32_t pins) {
251251

252252
#ifndef pio_sm_set_pins_internal
253253
void pio_sm_set_pins(PIO pio, uint sm, uint32_t pins) {
254+
check_pio_pin_mask(pio, sm, pins);
254255
#if PICO_PIO_USE_GPIO_BASE
255256
pins >>= pio_get_gpio_base(pio);
256257
#endif
@@ -287,6 +288,7 @@ void pio_sm_set_pins_with_mask_internal(PIO pio, uint sm, uint32_t pin_values, u
287288

288289
#ifndef pio_sm_set_pins_with_mask_internal
289290
void pio_sm_set_pins_with_mask(PIO pio, uint sm, uint32_t pin_values, uint32_t pin_mask) {
291+
check_pio_pin_mask(pio, sm, pin_mask);
290292
#if PICO_PIO_USE_GPIO_BASE
291293
pin_values >>= pio_get_gpio_base(pio);
292294
pin_mask >>= pio_get_gpio_base(pio);
@@ -324,6 +326,7 @@ void pio_sm_set_pindirs_with_mask_internal(PIO pio, uint sm, uint32_t pindirs, u
324326

325327
#ifndef pio_sm_set_pindirs_with_mask_internal
326328
void pio_sm_set_pindirs_with_mask(PIO pio, uint sm, uint32_t pindirs, uint32_t pin_mask) {
329+
check_pio_pin_mask(pio, sm, pin_mask);
327330
#if PICO_PIO_USE_GPIO_BASE
328331
pindirs >>= pio_get_gpio_base(pio);
329332
pin_mask >>= pio_get_gpio_base(pio);
@@ -333,6 +336,7 @@ void pio_sm_set_pindirs_with_mask(PIO pio, uint sm, uint32_t pindirs, uint32_t p
333336
#endif
334337

335338
void pio_sm_set_pindirs_with_mask64(PIO pio, uint sm, uint64_t pindirs, uint64_t pin_mask) {
339+
check_pio_pin_mask64(pio, sm, pin_mask);
336340
#if PICO_PIO_USE_GPIO_BASE
337341
pindirs >>= pio_get_gpio_base(pio);
338342
pin_mask >>= pio_get_gpio_base(pio);

0 commit comments

Comments
 (0)