@@ -79,9 +79,9 @@ static int _parity(int bits, int data) {
79
79
80
80
// We need to cache generated SerialPIOs so we can add data to them from
81
81
// the shared handler
82
- static SerialPIO *_pioSP[2 ][4 ];
82
+ static SerialPIO *_pioSP[3 ][4 ];
83
83
static void __not_in_flash_func (_fifoIRQ)() {
84
- for (int p = 0 ; p < 2 ; p++) {
84
+ for (int p = 0 ; p < 3 ; p++) {
85
85
for (int sm = 0 ; sm < 4 ; sm++) {
86
86
SerialPIO *s = _pioSP[p][sm];
87
87
if (s) {
@@ -148,6 +148,21 @@ SerialPIO::~SerialPIO() {
148
148
delete[] _queue;
149
149
}
150
150
151
+ static int pio_irq_0 (PIO p) {
152
+ switch (pio_get_index (p)) {
153
+ case 0 :
154
+ return PIO0_IRQ_0;
155
+ case 1 :
156
+ return PIO1_IRQ_0;
157
+ #if defined(PICO_RP2350)
158
+ case 2 :
159
+ return PIO2_IRQ_0;
160
+ #endif
161
+ default :
162
+ return -1 ;
163
+ }
164
+ }
165
+
151
166
void SerialPIO::begin (unsigned long baud, uint16_t config) {
152
167
_overflow = false ;
153
168
_baud = baud;
@@ -247,7 +262,7 @@ void SerialPIO::begin(unsigned long baud, uint16_t config) {
247
262
case 2 : pio_set_irq0_source_enabled (_rxPIO, pis_sm2_rx_fifo_not_empty, true ); break ;
248
263
case 3 : pio_set_irq0_source_enabled (_rxPIO, pis_sm3_rx_fifo_not_empty, true ); break ;
249
264
}
250
- auto irqno = pio_get_index (_rxPIO) == 0 ? PIO0_IRQ_0 : PIO1_IRQ_0 ;
265
+ auto irqno = pio_irq_0 (_rxPIO);
251
266
irq_set_exclusive_handler (irqno, _fifoIRQ);
252
267
irq_set_enabled (irqno, true );
253
268
@@ -278,7 +293,7 @@ void SerialPIO::end() {
278
293
used = used || !!_pioSP[pioNum][i];
279
294
}
280
295
if (!used) {
281
- auto irqno = pioNum == 0 ? PIO0_IRQ_0 : PIO1_IRQ_0 ;
296
+ auto irqno = pio_irq_0 (_rxPIO) ;
282
297
irq_set_enabled (irqno, false );
283
298
}
284
299
gpio_set_inover (_rx, 0 );
0 commit comments