How to Controll Nuvoton ISD1760 Chip?

void erase()
{
  digitalWrite(SLAVESELECT, LOW);
  delay(WAIT_TIME);
  spi_transfer(ERASE);// erase 
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT, HIGH);
  delay(WAIT_TIME2);
  
  Serial.println("erase end");
}

void eraseAll()
{
  digitalWrite(SLAVESELECT, LOW);
  delay(WAIT_TIME);
  spi_transfer(G_ERASE);// g_erase 
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT, HIGH);
  delay(WAIT_TIME2);
  
  Serial.println("erase all end");
}

void fwd()
{
  digitalWrite(SLAVESELECT, LOW);
  delay(WAIT_TIME);
  spi_transfer(FWD); // forward
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT, HIGH);
  delay(WAIT_TIME2);
  
  Serial.println("forward end");
}

void ready_play_wait()
{
  byte byte1;
  byte byte2;
  byte byte3;

  while(byte3 << 7 != 128)
  {
    digitalWrite(SLAVESELECT, LOW);
    delay(WAIT_TIME);
    byte1 = spi_transfer(RD_STATUS); // clear interupt and eom bit
    byte2 = spi_transfer(0x00); // data byte
    byte3 = spi_transfer(0x00); // data byte
    digitalWrite(SLAVESELECT, HIGH);
    delay(WAIT_TIME2);
  }
  
  delay(100);
  
  Serial.println("play end");
}

void ready_rec_check()
{
  byte byte1;
  byte byte2;
  byte byte3;

  while(byte3 << 7 == 128)
  {
    digitalWrite(SLAVESELECT, LOW);
    delay(WAIT_TIME);
    byte1 = spi_transfer(RD_STATUS); // clear interupt and eom bit
    byte2 = spi_transfer(0x00); // data byte
    byte3 = spi_transfer(0x00); // data byte
    digitalWrite(SLAVESELECT, HIGH);
    delay(WAIT_TIME2);
  }
  
  delay(100);
  
  Serial.println("rec start");
}

char spi_transfer(volatile char data)
{
  SPDR = data;           // Start the transmission
  while (!(SPSR & (1 << SPIF)))     // Wait for the end of the transmission
  {
  };
  return SPDR;           // return the received byte
} 

//flag : false=analog in/true=mic in
//flag2 : false=no monitor on recording / true=monitor on recording
//vol : volume max=7 min=0
void write_apc(boolean flag, boolean flag2, int vol)
{
    uint16_t d[12];
    for(int i = 0; i < 12; i++)
    {
      d = 0x00;
    }
    if(flag == true)
      d[6] = 0x01;
    if(flag2 == true)
      d[3] = 0x01;
      
    int vv = 7 - vol;
      
    d[0] = vv & 0x01;
    d[1] = vv & 0x02;
    d[2] = vv & 0x04;
    
    uint16_t apc =  (d[0] | d[1] << 1 | d[2] << 2 | d[3] << 3 | d[4] << 4 | d[5] << 5 | d[6] << 6 | d[7] << 7 | d[8] << 8 | d[9] << 9 | d[10] << 10 | d[11] << 11);
      
    digitalWrite(SLAVESELECT, LOW);
    delay(WAIT_TIME);
    spi_transfer(WR_APC2); // write apc register 2
    spi_transfer(apc & 0xFF); // data byte start
    spi_transfer(apc >> ; // data byte last 3 bits
 
    digitalWrite(SLAVESELECT, HIGH);
    
    delay(WAIT_TIME2);
    
    Serial.println("write apc end");
}

uint16_t read_apc()
{
  uint16_t apc;
  uint8_t data[4] = {0xFF,0xFF,0xFF,0xFF};
  
  digitalWrite(SLAVESELECT, LOW);
  delay(WAIT_TIME);
  data[0] = spi_transfer(RD_APC); // read apc register
  data[1] = spi_transfer(0);
  data[2] = spi_transfer(0);
  data[3] = spi_transfer(0);
  digitalWrite(SLAVESELECT, HIGH);
  
  delay(WAIT_TIME2);
  
  apc = word(data[3], data[2]);
  
  Serial.println("read apc end");
  
  return apc;
}
  
uint16_t read_status(void)
{
  uint16_t sr1;
  uint8_t data[3] = {0xFF,0xFF,0xFF};
  
  digitalWrite(SLAVESELECT, LOW);
  delay(WAIT_TIME);
  data[0] = spi_transfer(RD_STATUS); // read status register
  data[1] = spi_transfer(0);
  data[2] = spi_transfer(0);
  digitalWrite(SLAVESELECT, HIGH);
  
  delay(WAIT_TIME2);
  
  sr1 = word(data[2], 0xFF);
  return sr1;
}