SPI interface with other board_AVR_ESK1100 or among Arduino itself

Hi...!!

I am reading http://www.gammon.com.au/spi again and again and trying to grasp SPI, but not getting expected results.

Can we write the codes like this, are these correct codes for mater and slave

//Master sending data
#include <SPI.h>// include the SPI library:
#define SCK_PIN   13
#define MISO_PIN  12
#define MOSI_PIN  11

const int spidata = 10;//Pin 11 is data(MOSI) and pin 13 SCK ,set pin 10(SS) as the slave select for the digital pot:
int array[30] = {0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,0x00, 0x00, 0x00, 0x00, 0x08,0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,0x00};
int chr;

void setup() {
 
  pinMode (spidata, OUTPUT);// set the spi_data_pin as an output:
 
  SPI.begin();// initialize SPI:
  Serial.begin(115200);
  SPI.setDataMode(SPI_MODE2);
  SPI.setClockDivider(SPI_CLOCK_DIV64) ;
  SPI.setBitOrder(LSBFIRST);
  digitalWrite(spidata,HIGH);
 
}

void loop() {
  int data[10];
  char ch;
 

    //delay(14);
   digitalWrite(spidata,LOW);
   SPI.transfer(array[0]);
   SPI.transfer(array[1]);
   digitalWrite(spidata,HIGH);
    //delay(14);
   
   digitalWrite(spidata,LOW);
   SPI.transfer(array[2]);
   SPI.transfer(array[3]);
   digitalWrite(spidata,HIGH);
   // delay(14);
   
   digitalWrite(spidata,LOW);
   SPI.transfer(array[4]);
   SPI.transfer(array[5]);
   digitalWrite(spidata,HIGH);
    delay(1);
   
   digitalWrite(spidata,LOW);
   SPI.transfer(array[6]);
   SPI.transfer(array[7]);
   digitalWrite(spidata,HIGH);
   
     digitalWrite(spidata,LOW);
   SPI.transfer(array[8]);
   SPI.transfer(array[9]);
   digitalWrite(spidata,HIGH);
   
      digitalWrite(spidata,LOW);
   SPI.transfer(array[10]);
   SPI.transfer(array[11]);
   digitalWrite(spidata,HIGH);
  delay(1);
   
     digitalWrite(spidata,LOW);
   SPI.transfer(array[12]);
   SPI.transfer(array[13]);
   digitalWrite(spidata,HIGH);
   // delay(14);
   
   digitalWrite(spidata,LOW);
   SPI.transfer(array[14]);
   SPI.transfer(array[15]);
   digitalWrite(spidata,HIGH);
   // delay(14);
   
   digitalWrite(spidata,LOW);
   SPI.transfer(array[16]);
   SPI.transfer(array[17]);
   digitalWrite(spidata,HIGH);
   delay(1);
   
     digitalWrite(spidata,LOW);
   SPI.transfer(array[18]);
   SPI.transfer(array[19]);
   digitalWrite(spidata,HIGH);
   
      digitalWrite(spidata,LOW);
   SPI.transfer(array[20]);
   SPI.transfer(array[21]);
   digitalWrite(spidata,HIGH);
    digitalWrite(spidata,LOW);
   SPI.transfer(array[22]);
   SPI.transfer(array[23]);
   digitalWrite(spidata,HIGH);
  //  delay(14);
   

    }

Slave receiving data from master then sending the data back to master, is it right.

//Slave receiving data from master and sending back data
#include "pins_arduino.h"
#include <SPI.h>
#define SS 10
int dat[24] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14};
byte c;
void ss_falling()
{
  c = 0;
}

void setup (void)
{

  // have to send on master in, *slave out*
  pinMode(MISO, OUTPUT);
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode (SPI_MODE2);
  SPI.setClockDivider(SPI_CLOCK_DIV64) ;

  // turn on SPI in slave mode
  SPCR |= _BV(SPE);

  // turn on interrupts
  SPCR |= _BV(SPIE);
  
 // disable timer interrupts
  TIMSK0 = 0;
  // interrupt for SS falling edge
  attachInterrupt (0, ss_falling, FALLING);
   // disable timer interrupts
  TIMSK0 = 0;
  
}  // end of setup


// SPI interrupt routine
ISR (SPI_STC_vect)
{
  c = SPDR;
  
 if(c == 0x04)
  {
    digitalWrite(SS, LOW);
  SPI.transfer(dat[0]);
  SPI.transfer(dat[1]);
   digitalWrite(SS, HIGH);
   
   digitalWrite(SS, LOW);
  SPI.transfer(dat[2]);
  SPI.transfer(dat[3]);
   digitalWrite(SS, HIGH);
   
   digitalWrite(SS, LOW);
  SPI.transfer(dat[4]);
  SPI.transfer(dat[5]);
   digitalWrite(SS, HIGH);
 }
 
  else if(c == 0x06)
  {
   digitalWrite(SS, LOW);
  SPI.transfer(dat[6]);
  SPI.transfer(dat[7]);
   digitalWrite(SS, HIGH);
   
   digitalWrite(SS, LOW);
  SPI.transfer(dat[8]);
  SPI.transfer(dat[9]);
   digitalWrite(SS, HIGH);
   
   digitalWrite(SS, LOW);
  SPI.transfer(dat[10]);
  SPI.transfer(dat[11]);
   digitalWrite(SS, HIGH);
 }
  else
 SPDR = 0x00;    // what to return to the master
 


}  // end of interrupt service routine (ISR) SPI_STC_vect

void loop (void)
{
 
}  // end of loop

TEK0000.BMP (76.1 KB)