Skip to content

Commit b004a76

Browse files
authored
Merge pull request #2 from adafruit/support-rp2350-pio2
Handle rp2350 pio2 by using sdk pio_get_instance & PIO_IRQ_NUM
2 parents f4e50b2 + 7f7ea5b commit b004a76

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

src/pio_usb.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,10 +283,10 @@ static void configure_tx_channel(uint8_t ch, PIO pio, uint sm) {
283283

284284
static void apply_config(pio_port_t *pp, const pio_usb_configuration_t *c,
285285
root_port_t *port) {
286-
pp->pio_usb_tx = c->pio_tx_num == 0 ? pio0 : pio1;
286+
pp->pio_usb_tx = pio_get_instance(c->pio_tx_num);
287287
pp->sm_tx = c->sm_tx;
288288
pp->tx_ch = c->tx_ch;
289-
pp->pio_usb_rx = c->pio_rx_num == 0 ? pio0 : pio1;
289+
pp->pio_usb_rx = pio_get_instance(c->pio_rx_num);
290290
pp->sm_rx = c->sm_rx;
291291
pp->sm_eop = c->sm_eop;
292292
port->pin_dp = c->pin_dp;
@@ -336,7 +336,7 @@ void pio_usb_bus_init(pio_port_t *pp, const pio_usb_configuration_t *c,
336336
root_port_t *root) {
337337
memset(root, 0, sizeof(root_port_t));
338338

339-
pp->pio_usb_tx = c->pio_tx_num == 0 ? pio0 : pio1;
339+
pp->pio_usb_tx = pio_get_instance(c->pio_tx_num);
340340
dma_claim_mask(1<<c->tx_ch);
341341
configure_tx_channel(c->tx_ch, pp->pio_usb_tx, c->sm_tx);
342342

src/pio_usb_device.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ usb_device_t *pio_usb_device_init(const pio_usb_configuration_t *c,
291291
// configure PIOx_IRQ_0 to detect packet receive start
292292
pio_set_irqn_source_enabled(pp->pio_usb_rx, 0, pis_interrupt0 + IRQ_RX_START,
293293
true);
294-
pp->device_rx_irq_num = (pp->pio_usb_rx == pio0) ? PIO0_IRQ_0 : PIO1_IRQ_0;
294+
pp->device_rx_irq_num = PIO_IRQ_NUM(pp->pio_usb_rx, 0);
295295
irq_set_exclusive_handler(pp->device_rx_irq_num, usb_device_packet_handler);
296296
irq_set_enabled(pp->device_rx_irq_num, true);
297297

src/sdk_compat.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@ static __always_inline void pio_sm_set_jmp_pin(PIO pio, uint sm, uint jmp_pin) {
66
(pio->sm[sm].execctrl & ~PIO_SM0_EXECCTRL_JMP_PIN_BITS) |
77
(jmp_pin << PIO_SM0_EXECCTRL_JMP_PIN_LSB);
88
}
9+
10+
static_assert(PIO1_BASE - PIO0_BASE == (1u << 20), "hardware layout mismatch");
11+
#define PIO_INSTANCE(instance) ((pio_hw_t *)(PIO0_BASE + (instance) * (1u << 20)))
12+
static __always_inline PIO pio_get_instance(uint instance) {
13+
return PIO_INSTANCE(instance);
14+
}
15+
16+
#define PIO_NUM(pio) (((uintptr_t)(pio) - PIO0_BASE) >> 20)
17+
#define NUM_PIO_IRQS (2u)
18+
#define PIO_IRQ_NUM(pio, irqn) (PIO0_IRQ_0 + NUM_PIO_IRQS * PIO_NUM(pio) + (irqn))
19+
920
#endif
1021

1122
#if PICO_SDK_VERSION_MAJOR < 2 || (PICO_SDK_VERSION_MAJOR == 2 && PICO_SDK_VERSION_MINOR < 1)

0 commit comments

Comments
 (0)