1) The reason is probably because its rarely used.
2) no, but I've written standalone SPI client proof-of-concept code.
You could add an interrupt handler that uses a callback to get the next response byte:
ISR (SPI_STC_vect)
{
byte to = 0 ;
while (to < TIMEOUT && !(SPSR & (1 << SPIF))) // paranoid check for status flag, probably not needed
{
to ++ ;
}
if (SPSR & (1 << SPIF))
SPDR = spi_slave_callback (SPDR) ;
}
spi_slave_callback would be a function pointer passed to the library before enabling SPI or slave mode. You'd need to provide
an initial value to SPDR before enabling slave mode too (the first response byte).