From SPI - Serial Peripheral Interface - for Arduino by Nick Gammon.

gammon-spi-peripheral.ino
// Written by Nick Gammon
// February 2011
 
 
#include <SPI.h>
 
char buf [100];
volatile byte pos;
volatile boolean process_it;
 
void setup (void)
{
  Serial.begin (115200);   // debugging
 
  // turn on SPI in slave mode
  SPCR |= bit (SPE);
 
  // have to send on master in, *slave out*
  pinMode(MISO, OUTPUT);
 
  // get ready for an interrupt 
  pos = 0;   // buffer empty
  process_it = false;
 
  // now turn on interrupts
  SPI.attachInterrupt();
 
}  // end of setup
 
 
// SPI interrupt routine
ISR (SPI_STC_vect)
{
byte c = SPDR;  // grab byte from SPI Data Register
 
  // add to buffer if room
  if (pos < (sizeof (buf) - 1))
    buf [pos++] = c;
 
  // example: newline means time to process buffer
  if (c == '\n')
    process_it = true;
 
}  // end of interrupt routine SPI_STC_vect
 
// main loop - wait for flag set in interrupt routine
void loop (void)
{
  if (process_it)
    {
    buf [pos] = 0;  
    Serial.println (buf);
    pos = 0;
    process_it = false;
    }  // end of flag set
 
}  // end of loop