CS5532 SPI interfacing to Arduino Due

Hello friends,

I am trying to use CS5532 24-bit ADC via SPI interfacing to Arduino Due. I changed a lot of things on my code , but I always read 111111111111. What is the error ?

Here is the codes

#include <SPI.h>
#include "CS5532_lib.h"		// cs5532 definitions.

#define CS5532_CS_PIN 4
#define CS5532_READY MISO
#define CS5532_CS_LOW digitalWrite(CS5532_CS_PIN,LOW);
#define CS5532_CS_HIGH digitalWrite(CS5532_CS_PIN,HIGH);

void SPI_Writing_Word (unsigned int data)
{
  SPI.transfer(CS5532_CS_PIN,(data >> 8) & 0xFF);
  SPI.transfer(CS5532_CS_PIN,data & 0xFF);
}

void SPI_Writing_Long (unsigned long int data)
{
  SPI.transfer(CS5532_CS_PIN,(data >> 24) & 0xFF);
  SPI.transfer(CS5532_CS_PIN,(data >> 16) & 0xFF);
  SPI.transfer(CS5532_CS_PIN,(data >> 8) & 0xFF);
  SPI.transfer(CS5532_CS_PIN,data & 0xFF);
}

unsigned long int SPI_Reading_Long()
{
  unsigned long ret = 0;
  ret = SPI.transfer(CS5532_CS_PIN,0);
  ret = (ret << 8) + SPI.transfer(CS5532_CS_PIN,0);
  ret = (ret << 8) + SPI.transfer(CS5532_CS_PIN,0);
  ret = (ret << 8) + SPI.transfer(CS5532_CS_PIN,0);
  return ret;
}

unsigned long int CS5532_Reset(void)
{
  SPI.transfer(CS5532_CS_PIN,CS5532_CMD_WRITE_CONF);
  SPI_Writing_Long(0x20000000);
  delay(1);
  SPI.transfer(CS5532_CS_PIN,CS5532_CMD_WRITE_CONF);
  SPI_Writing_Long(0x00000000);
  SPI.transfer(CS5532_CS_PIN,CS5532_CMD_READ_CONF);
  return SPI_Reading_Long();
}

unsigned long int CS5532_Init(void)
{
 CS5532_CS_LOW;
  char i = 0;
  //reset precedure
  for (i=0; i<15; i++)
    SPI.transfer(CS5532_CS_PIN, CS5532_SYNC1);
  SPI.transfer(CS5532_CS_PIN, CS5532_SYNC0);
 // CS5532_CS_HIGH;
  return CS5532_Reset();
}

void CS5532_Config(void)
{
  SPI.transfer(CS5532_CMD_WRITE_INDV_CH_SETUP1);
  SPI_Writing_Long(0x02000000);
  SPI.transfer(CS5532_CMD_WRITE_CONF);
  SPI_Writing_Long(0x00000000);
}

void CS5532_Single_Conversion(void)
{
 CS5532_CS_LOW;
  SPI.transfer(CS5532_CS_PIN, CS5532_CMD_SINGLE_CONV_CH_SETUP1);
//  CS5532_CS_HIGH;
}

void CS5532_Continuous_Conversion(void)
{
 CS5532_CS_LOW;
  SPI.transfer(CS5532_CS_PIN,CS5532_CMD_CONTINUOUS_CONV_CH_SETUP1);
//  CS5532_CS_HIGH;
}

char CS5532_ReadADC(unsigned char *DataBuff)
{
  unsigned char i;
  unsigned char *p_DataBuff;
  p_DataBuff = DataBuff;

  digitalRead(CS5532_READY);
  if(CS5532_READY == 1)
   return(0XFF);

 // CS5532_CS_LOW;
//  SPI.transfer(CS5532_CS_PIN,CS5532_NULL);

  for(i = 4; i > 0; i--)
    *p_DataBuff++ = SPI.transfer(CS5532_CS_PIN,0);
//  CS5532_CS_HIGH;

  return(0x0);
}

void init_CS5532(void)
{
  int i=3;
  for(i=3;i>0;i--)
      if(CS5532_Init() == 0x10000000)
      {
       CS5532_Config();
        CS5532_Single_Conversion();
         break;
      }
}

void setup()
{
  SPI.begin(4);
  digitalWrite(CS5532_CS_PIN, OUTPUT);
  SPI.setDataMode(CS5532_CS_PIN,SPI_MODE3);
  SPI.setBitOrder(LSBFIRST);
  //pinMode (CS5532_CS_PIN, OUTPUT);
  //SPI.setClockDivider(SPI_CLOCK_DIV4);
  SPI.setClockDivider(CS5532_CS_PIN,2);       // arduino DUE
  Serial.begin(9600);
  Serial.println("sending...");
  delay(2000);
   CS5532_Init();
  init_CS5532();
  Serial.println("All is Done");
}

void loop()
{
  unsigned char tempbuff[4] = {0, 0, 0 ,0};
  float data;
  Serial.print("rawdata:");
  // CS5532_CS_LOW;
  CS5532_ReadADC(tempbuff);
  // CS5532_CS_HIGH;
  Serial.print(tempbuff[0],BIN);
  Serial.print(tempbuff[1],BIN);
  Serial.print(tempbuff[2],BIN);
  // Serial.print("   birsifirsifir");
  // Serial.println(tempbuff[3],BIN);
  delay(1000);
}
//End

This is the header file.

/*
 * CS5532 Library
 * Meric SARIISIK
 * 7/2015
 */


#ifndef __CS5532_H__
#define __CS5532_H__

#define CS5532_SYNC1      0XFF  //Part of the serial port re-initialization sequence.
#define CS5532_SYNC0      0XFE  //End of the serial port re-initialization sequence.

#define CS5532_NULL       0X00  //This command is used to clear a port flag and keep the converter in the continuous conversion mode.

/*
//Command Register (CS5532_COMM_REG)
#define CS5532_COMM_C               (1 << 7)              //D7 Command Bit, C
#define CS5532_COMM_ARA             (1 << 6)              //D6 Access Registers as Arrays, ARA
#define CS5532_COMM_CS              (((x) & 0x3) << 4)    //D5-D4 Channel Select Bits,CS1-CS0
#define CS5532_COMM_READ            (1 << 3)              //D3 Read/Write, R/W
#define CS5532_COMM_WRITE           (0 << 3)
#define CS5532_COMM_RSB             (((x) & 0x7) << 0)    //D2-D0 Register Select Bit,RSB3-RSB0
*/

//alıntı
#define CS5532_READ_DATA_TIMEOUT 2000000    //4.9152 MHz crystal takes 20ms to start

//Command Register Descriptions
/*READ/WRITE ALL OFFSET CALIBRATION REGISTERS*/
#define CS5532_CMD_READ_ALL_OFFSET_CAL            0x49
#define CS5532_CMD_WRITE_ALL_OFFSET_CAL           0x41

/*READ/WRITE ALL GAIN CALIBRATION REGISTERS*/
#define CS5532_CMD_READ_ALL_GAIN_CAL              0x4A
#define CS5532_CMD_WRITE_ALL_GAIN_CAL             0x42

/*READ/WRITE ALL CHANNEL-SETUP REGISTERS*/
#define CS5532_CMD_READ_ALL_CH_SETUP              0x4D
#define CS5532_CMD_WRITE_ALL_CH_SETUP             0x45

/*READ/WRITE INDIVIDUAL OFFSET REGISTER*/
#define CS5532_CMD_READ_ALL_INDV_OFFSET1          0x9
#define CS5532_CMD_WRITE_ALL_INDV_OFFSET1         0x1
#define CS5532_CMD_READ_ALL_INDV_OFFSET2          0x19
#define CS5532_CMD_WRITE_ALL_INDV_OFFSET2         0x11

/*READ/WRITE INDIVIDUAL GAIN REGISTER*/
#define CS5532_CMD_READ_INDV_GAIN1                0xA
#define CS5532_CMD_WRITE_INDV_GAIN1               0x2
#define CS5532_CMD_READ_INDV_GAIN2                0x1A
#define CS5532_CMD_WRITE_INDV_GAIN2               0x12

/*READ/WRITE INDIVIDUAL CHANNEL-SETUP REGISTER*/
#define CS5532_CMD_READ_INDV_CH_SETUP1            0xD
#define CS5532_CMD_WRITE_INDV_CH_SETUP1           0x5
#define CS5532_CMD_READ_INDV_CH_SETUP2            0x1D
#define CS5532_CMD_WRITE_INDV_CH_SETUP2           0x15
#define CS5532_CMD_READ_INDV_CH_SETUP3            0x2D
#define CS5532_CMD_WRITE_INDV_CH_SETUP3           0x25
#define CS5532_CMD_READ_INDV_CH_SETUP4            0x3D
#define CS5532_CMD_WRITE_INDV_CH_SETUP4           0x35

/*READ/WRITE CONFIGURATION REGISTER*/
#define CS5532_CMD_READ_CONF                      0xB
#define CS5532_CMD_WRITE_CONF                     0x3

/*PERFORM CONVERSION*/
//Perform a single conversion.
#define CS5532_CMD_SINGLE_CONV_CH_SETUP1          0X80
#define CS5532_CMD_SINGLE_CONV_CH_SETUP2          0X88
#define CS5532_CMD_SINGLE_CONV_CH_SETUP3          0X90
#define CS5532_CMD_SINGLE_CONV_CH_SETUP4          0X98
#define CS5532_CMD_SINGLE_CONV_CH_SETUP5          0XA0
#define CS5532_CMD_SINGLE_CONV_CH_SETUP6          0XA8
#define CS5532_CMD_SINGLE_CONV_CH_SETUP7          0XB0
#define CS5532_CMD_SINGLE_CONV_CH_SETUP8          0XB8

//Perform continuous conversions.
#define CS5532_CMD_CONTINUOUS_CONV_CH_SETUP1      0XC0
#define CS5532_CMD_CONTINUOUS_CONV_CH_SETUP2      0XC8
#define CS5532_CMD_CONTINUOUS_CONV_CH_SETUP3      0XD0
#define CS5532_CMD_CONTINUOUS_CONV_CH_SETUP4      0XD8
#define CS5532_CMD_CONTINUOUS_CONV_CH_SETUP5      0XE0
#define CS5532_CMD_CONTINUOUS_CONV_CH_SETUP6      0XE8
#define CS5532_CMD_CONTINUOUS_CONV_CH_SETUP7      0XF0
#define CS5532_CMD_CONTINUOUS_CONV_CH_SETUP8      0XF8

/*PERFORM CALIBRATION*/
//001 Self-Offset Calibration
#define CS5532_CMD_SELF_OFFSET_CALIB_SETUP1       0X81
#define CS5532_CMD_SELF_OFFSET_CALIB_SETUP2       0X89
#define CS5532_CMD_SELF_OFFSET_CALIB_SETUP3       0X91
#define CS5532_CMD_SELF_OFFSET_CALIB_SETUP4       0X99
#define CS5532_CMD_SELF_OFFSET_CALIB_SETUP5       0XA1
#define CS5532_CMD_SELF_OFFSET_CALIB_SETUP6       0XA9
#define CS5532_CMD_SELF_OFFSET_CALIB_SETUP7       0XB1
#define CS5532_CMD_SELF_OFFSET_CALIB_SETUP8       0XB9

//010 Self-Gain Calibration
#define CS5532_CMD_SELF_GAIN_CALIB_SETUP1         0X82
#define CS5532_CMD_SELF_GAIN_CALIB_SETUP2         0X8A
#define CS5532_CMD_SELF_GAIN_CALIB_SETUP3         0X92
#define CS5532_CMD_SELF_GAIN_CALIB_SETUP4         0X9A
#define CS5532_CMD_SELF_GAIN_CALIB_SETUP5         0XA2
#define CS5532_CMD_SELF_GAIN_CALIB_SETUP6         0XAA
#define CS5532_CMD_SELF_GAIN_CALIB_SETUP7         0XB2
#define CS5532_CMD_SELF_GAIN_CALIB_SETUP8         0XBA

//101 System-Offset Calibration
#define CS5532_CMD_SYS_OFFSET_CALIB_SETUP1        0X85
#define CS5532_CMD_SYS_OFFSET_CALIB_SETUP2        0X8D
#define CS5532_CMD_SYS_OFFSET_CALIB_SETUP3        0X95
#define CS5532_CMD_SYS_OFFSET_CALIB_SETUP4        0X9D
#define CS5532_CMD_SYS_OFFSET_CALIB_SETUP5        0XA5
#define CS5532_CMD_SYS_OFFSET_CALIB_SETUP6        0XAD
#define CS5532_CMD_SYS_OFFSET_CALIB_SETUP7        0XB5
#define CS5532_CMD_SYS_OFFSET_CALIB_SETUP8        0XBD

//110 System-Gain Calibration
#define CS5532_CMD_SYS_GAIN_CALIB_SETUP1          0X86
#define CS5532_CMD_SYS_GAIN_CALIB_SETUP2          0X8E
#define CS5532_CMD_SYS_GAIN_CALIB_SETUP3          0X96
#define CS5532_CMD_SYS_GAIN_CALIB_SETUP4          0X9E
#define CS5532_CMD_SYS_GAIN_CALIB_SETUP5          0XA6
#define CS5532_CMD_SYS_GAIN_CALIB_SETUP6          0XAE
#define CS5532_CMD_SYS_GAIN_CALIB_SETUP7          0XB6
#define CS5532_CMD_SYS_GAIN_CALIB_SETUP8          0XBE

//2.3.9. Configuration Register Descriptions
#define CS5532_PSS        1 << 31     //Power Save Select
#define CS5532_PDW        1 << 30     //Power Down Mode
#define CS5532_RS         1 << 29     //Reset System
#define CS5532_RV         1 << 28     //Reset Valid
#define CS5532_IS         1 << 27     //Input Short
#define CS5532_GB         1 << 26     //Guard Signal Bit
#define CS5532_VRS        1 << 25     //Voltage Reference Select
#define CS5532_OLS        1 << 22     //Output Latch Select
#define CS5532_OGS        1 << 20     //Offset and Gain Select
#define CS5532_FRS        1 << 19     //Filter Rate Select

//2.4.1. Channel-Setup Register
//Channel Select Bits
#define CS5532_CS1        0 << 14
#define CS5532_CS2        1 << 14

//Gain Bits
#define CS5532_GAIN_1     0 << 11
#define CS5532_GAIN_2     1 << 11
#define CS5532_GAIN_4     2 << 11
#define CS5532_GAIN_8     3 << 11
#define CS5532_GAIN_16    4 << 11
#define CS5532_GAIN_32    5 << 11
#define CS5532_GAIN_64    6 << 11

//Word Rate when FSR=1
#define CS5532_WR_100SPS    0x0 << 7
#define CS5532_WR_50SPS     0x1 << 7
#define CS5532_WR_25SPS     0x2 << 7
#define CS5532_WR_12P5SPS   0x3 << 7
#define CS5532_WR_6P25SPS   0x4 << 7
#define CS5532_WR_3200SPS   0x8 << 7
#define CS5532_WR_1600SPS   0x9 << 7
#define CS5532_WR_800SPS    0xA << 7
#define CS5532_WR_400SPS    0xB << 7
#define CS5532_WR_200SPS    0xC << 7

//Unipolar / Bipolar
#define CS5532_UNIPOLAR     1 << 6
#define CS5532_BIPOLAR      0 << 6

//Output Latch Bits
#define CS5532_OL0           0 << 4
#define CS5532_OL1           1 << 4       //should Select!
#define CS5532_OL2           2 << 4
#define CS5532_OL3           3 << 4

//Delay Time Bit
#define CS5532_DT0           0 << 3
#define CS5532_DT1           1 << 3       //should select!

//Open Circuit Detect Bit
#define CS5532_OCD0          0 << 2
#define CS5532_OCD1          1 << 2       //should select!

//Offset / Gain Register Pointer Bits
#define CS5532_OG0           0
#define CS5532_OG1           1

//alıntı
#define CMD_STOP_CONT_CONV 0xFF

#define TIMEOUTERR 0xff
#define SUCCESSFUL 0x0
#define CAL_TIMEOUT_LIMIT 4000

/*!< Initializes the SPI communication peripheral. */
unsigned char SPI_Init(unsigned char lsbFirst,
                       unsigned long clockFreq,
                       unsigned char clockPol,
                       unsigned char clockEdg);

/*!< Writes data to SPI. */
unsigned char SPI_Write(unsigned char slaveDeviceId,
                        unsigned char* data,
                        unsigned char bytesNumber);

/*!< Reads data from SPI. */
unsigned char SPI_Read(unsigned char slaveDeviceId,
                       unsigned char* data,
                       unsigned char bytesNumber);


#endif

Hi before I try this new software I would ask if I can use arduino and if I can adapt qusto software to a CS5534, I realized with a shield for arduino with this component. thanks in advance for your help