ArduinoCore-API icon indicating copy to clipboard operation
ArduinoCore-API copied to clipboard

Should SPI `attachInterrupt()` and `detachInterrupt()` be removed?

Open carlosperate opened this issue 3 years ago • 1 comments

It looks like these methos are only used in the AVR ports, and even then they indicate that they should not be used.

ArduinoCore-avr/libraries/SPI/src/SPI.h#L306-L310 ArduinoCore-megaavr/libraries/SPI/src/SPI.h#L183-L187

  // These undocumented functions should not be used.  SPI.transfer()
  // polls the hardware flag which is automatically cleared as the
  // AVR responds to SPI's interrupt
  inline static void attachInterrupt() { SPCR |= _BV(SPIE); }
  inline static void detachInterrupt() { SPCR &= ~_BV(SPIE); }

Other cores do nothing or even do not implement it:

When are these methods meant to be used by Arduino users or ArduinoCore developers?

carlosperate avatar Feb 24 '23 10:02 carlosperate

From a quick glance at the AVR SPI library, the actual ISR is not implement anywhere, which I think means that calling attachInterrupt() will cause the system to lock up the next time an SPI interrupt is triggered (since the default ISR just has an infinite loop IIRC). Sounds like removing these would indeed make sense - the only case these methods could be "useful" is when a sketch also implements the ISR itself, but those are very specific and advanced sketches that can also just modify SPCR directly.

matthijskooijman avatar Feb 27 '23 12:02 matthijskooijman