@@ -79,9 +79,9 @@ static int _parity(int bits, int data) {
7979
8080//  We need to cache generated SerialPIOs so we can add data to them from
8181//  the shared handler
82- static  SerialPIO *_pioSP[2 ][4 ];
82+ static  SerialPIO *_pioSP[3 ][4 ];
8383static  void  __not_in_flash_func (_fifoIRQ)() {
84-     for  (int  p = 0 ; p < 2 ; p++) {
84+     for  (int  p = 0 ; p < 3 ; p++) {
8585        for  (int  sm = 0 ; sm < 4 ; sm++) {
8686            SerialPIO *s = _pioSP[p][sm];
8787            if  (s) {
@@ -148,6 +148,21 @@ SerialPIO::~SerialPIO() {
148148    delete[]  _queue;
149149}
150150
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+ 
151166void  SerialPIO::begin (unsigned  long  baud, uint16_t  config) {
152167    _overflow = false ;
153168    _baud = baud;
@@ -247,7 +262,7 @@ void SerialPIO::begin(unsigned long baud, uint16_t config) {
247262        case  2 : pio_set_irq0_source_enabled (_rxPIO, pis_sm2_rx_fifo_not_empty, true ); break ;
248263        case  3 : pio_set_irq0_source_enabled (_rxPIO, pis_sm3_rx_fifo_not_empty, true ); break ;
249264        }
250-         auto  irqno = pio_get_index (_rxPIO) ==  0  ? PIO0_IRQ_0 : PIO1_IRQ_0 ;
265+         auto  irqno = pio_irq_0 (_rxPIO);
251266        irq_set_exclusive_handler (irqno, _fifoIRQ);
252267        irq_set_enabled (irqno, true );
253268
@@ -278,7 +293,7 @@ void SerialPIO::end() {
278293            used = used || !!_pioSP[pioNum][i];
279294        }
280295        if  (!used) {
281-             auto  irqno = pioNum ==  0  ? PIO0_IRQ_0 : PIO1_IRQ_0 ;
296+             auto  irqno = pio_irq_0 (_rxPIO) ;
282297            irq_set_enabled (irqno, false );
283298        }
284299        gpio_set_inover (_rx, 0 );
0 commit comments