Usage of SPI inside an ISR
SPI doesn't use interrupts.  It references the interrupt flag to know if a transfer has been completed, but it doesn't actually have interrupts enabled:

SPDR = data;
asm volatile("nop");
while (!(SPSR &amp; _BV(SPIF))) ; // wait
return SPDR;


It should be perfectly possible to use SPI within the interrupt - indeed there is portions of the SPI API that deal specifically with this - see https://www.arduino.cc/en/Reference/SPIusingInterrupt for instance.