du hast die Seite mit dem Beispiel doch selber verlinkt. Wenn man da runter scrollt steht da
How to get a response from a slave
Mit dem Slave Beispiel worin sich diese Funktion befindet
ISR (SPI_STC_vect)
{
byte c = SPDR;
switch (command)
{
// no command? then this is the command
case 0:
command = c;
SPDR = 0;
break;
// add to incoming byte, return result
case 'a':
SPDR = c + 15; // add 15
break;
// subtract from incoming byte, return result
case 's':
SPDR = c - 8; // subtract 8
break;
} // end of switch
} // end of interrupt service routine (ISR) SPI_STC_vect
Das Register SPDR wird zum Senden und Empfangen verwendet. Wenn ein Byte über SPI beim Slave reinkommt, wird der Inhalt des SPDR vom Slave über MISO rausgeschoben, während gleichzeitig die Daten vom MOSI auf der anderen Seite des Registers reingeschoben werden. D.h. wenn obige Funktion aufgerufen wird, steht in SPDR drin was vom Master gekommen ist und man schreibt da rein, was beim nächsten Byte, das vom Master kommt, an diesen zurückgesendet wird.