ADS124S08: Data received always 0 value

Part Number: ADS124S08

/********************************************************************************
 * @file    hal_sensor_stack.c
 * @author  Naresh Patel
 * @date    03-May-2024
 * @brief
 *******************************************************************************/
/********************************************************************************
 * INCLUDES
 ********************************************************************************/
//#include "ADS124S08.h"
#include "hal_sensor_stack.h"
#include "hal_display_stack.h"
#include "project_data_types.h"
//#include "math.h"
#include <math.h>
#include "sl_common.h"
#include "ustimer.h"
#include "spidrv.h"
#include "sl_spidrv_instances.h"


static void TransferComplete(SPIDRV_Handle_t handle,Ecode_t transferStatus,int itemsTransferred);
static double HAL_SensorStack_Calculate_RTD_Temperature(int32_t adcValue);
static void restoreRegisterDefaults(void);

extern SPIDRV_Init_t sl_spidrv_init_SPI_Display_TemperatureSensor;

/* Internal register map array (to recall current configuration) */
static uint8_t registerMap[NUM_REGISTERS];

//ADS124S08::ADS124S08()
//{
//  pinMode(ADS124S08_DRDY_PIN, INPUT);                  //data ready input line
//  pinMode(ADS124S08_START_PIN, OUTPUT);               // start
//  pinMode(ADS124S08_PWDN_PIN, OUTPUT);                // Power down output
//}
/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_Init(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- Initialize temperature stack
 ******************************************************************************************************************/
void HAL_SensorStack_Init(void)
{
// initalize the  data ready and chip select pins:
//  pinMode(ADS124S08_DRDY_PIN, INPUT);                  //data ready input line
//  pinMode(ADS124S08_CS_PIN, OUTPUT);                   //chip enable output line
//  pinMode(ADS124S08_START_PIN, OUTPUT);               // start
//  pinMode(ADS124S08_PWDN_PIN, OUTPUT);                // Power down output
  GPIO_PinModeSet(SENSOR_DRDY_PORT, SENSOR_DRDY_PIN, gpioModeInput, 1);
  GPIO_PinModeSet(SENSOR_CS_PORT,SENSOR_CS_PIN,gpioModePushPull,1);
  GPIO_PinModeSet(DISPLAY_CS_PORT,DISPLAY_CS_PIN,gpioModePushPull,1);
  GPIO_PinModeSet(SENSOR_RESET_PORT,SENSOR_RESET_PIN,gpioModePushPull,1);
  GPIO_PinModeSet(SENSOR_START_SYNCH_PORT,SENSOR_START_SYNCH_PIN,gpioModePushPull,0);

  //digitalWrite(ADS124S08_CS_PIN, HIGH);
  HAL_SensorStack_Sensor_ChipSelect_Set();

//  SerialDEBUG.begin(9600);
//  delay(1000);
//  // start the SPI library:
//  SPI.begin();
//  SPI.setBitOrder(MSBFIRST);
//  //CPOL = 0, CPHA = 1
//  SPI.setDataMode(SPI_MODE1);
//  // Selecting 1Mhz clock for SPI
//  SPI.setClockDivider(SPI_CLOCK_DIV8); // DIV16
  HAL_SensorStack_ReInitialize();
  sl_spidrv_SPI_Display_TemperatureSensor_handle->userCallback = TransferComplete;

  //initalize ADS1292 slave
//  PC_ADS124S08.ADS124S08_Init();                      // initialise ADS124S08
  ADS124S08_Init();
  //  SerialDEBUG.println("ADS124S08 Initialised successfully....");

}

// return mV value
uint32_t ADS124S08_Read_Data(void)
{
//  double value = -1;
  uint8_t DataTx[3] = {0x00,0x00,0x00};
  uint8_t DataRx[3] = {0xFF,0xFF,0xFF};
  uint32_t iData = 0;

//  if(digitalRead(ADS124S08_DRDY_PIN) == LOW)               // monitor Data ready(DRDY pin)
  if(GPIO_PinOutGet(SENSOR_DRDY_PORT, SENSOR_DRDY_PIN) == LOW)               // monitor Data ready(DRDY pin)
  {
//    while(digitalRead(ADS124S08_DRDY_PIN) == LOW);
    while(GPIO_PinOutGet(SENSOR_DRDY_PORT, SENSOR_DRDY_PIN) == LOW);


//    digitalWrite(ADS124S08_CS_PIN, LOW);
    HAL_SensorStack_Sensor_ChipSelect_Clear();

//    delay(5);
    USTIMER_Delay(5 * MS_MULTIPLIER);

//    iData = SPI.transfer(CONFIG_SPI_MASTER_DUMMY);
//    iData = (iData<<8) + SPI.transfer(CONFIG_SPI_MASTER_DUMMY);
//    iData = (iData<<8) + SPI.transfer(CONFIG_SPI_MASTER_DUMMY);
    HAL_SensorStack_SendReceive_SPI_Data(&DataTx, &DataRx, 3);
    iData = (DataRx[0] << 16) + (DataRx[1] << 8) + (DataRx[2]);

 //    delay(5);
    USTIMER_Delay(5 * MS_MULTIPLIER);

//    digitalWrite(ADS124S08_CS_PIN, HIGH);
    HAL_SensorStack_Sensor_ChipSelect_Set();

//    value = (RES) * (float)iData * 1000;
//  	return value;
    return iData;
  }
  else
  {
    return iData;
  }
}


uint32_t ADS124S08_Read(void)
{
  uint32_t iData = 0;
//  uint8_t rxBuffer[3] = {0};
  uint8_t DataTx[4] = {0x00,0x00,0x00,0x00};
  uint8_t DataRx[4] = {0xFF,0xFF,0xFF,0xFF};
  uint8_t dummy_read;

//  digitalWrite(ADS124S08_CS_PIN,LOW);
  HAL_SensorStack_Sensor_ChipSelect_Clear();

//  delay(5);
  USTIMER_Delay(5 * MS_MULTIPLIER);

//  SPI.transfer(ADS_RDATA);
//  rxBuffer[0] = SPI.transfer(0x00);
//	rxBuffer[1] = SPI.transfer(0x00);
//  rxBuffer[2] = SPI.transfer(0x00);
  DataTx[0] = ADS_RDATA;
  HAL_SensorStack_SendReceive_SPI_Data(&DataTx, &DataRx, 4);

//  delay(5);
  USTIMER_Delay(5 * MS_MULTIPLIER);

//  digitalWrite(ADS124S08_CS_PIN,HIGH);
  HAL_SensorStack_Sensor_ChipSelect_Set();

//  Serial.println(rxBuffer[0]);
//  Serial.println(rxBuffer[1]);
//  Serial.println(rxBuffer[2]);

//  iData = (rxBuffer[0] << 16) + (rxBuffer[1] << 8) + rxBuffer[2];
  iData = (DataRx[2] << 16) + (DataRx[3] << 8) + (DataRx[4]);

  return iData;
}

uint8_t readRegister(uint8_t address)
{
  uint8_t data;
  uint8_t data1;
  uint8_t DataTx[3] = {0x00,0x00,0x00};
  uint8_t DataRx[3] = {0xFF,0xFF,0xFF};

//  digitalWrite(ADS124S08_CS_PIN,LOW);
  HAL_SensorStack_Sensor_ChipSelect_Clear();

//  delay(5);
  USTIMER_Delay(5 * MS_MULTIPLIER);

//  SPI.transfer(ADS_RREG|(address & 0x1f));
//  SPI.transfer(0x00);
//  data = SPI.transfer(CONFIG_SPI_MASTER_DUMMY);
  DataTx[0] = (ADS_RREG|(address & 0x1F));
  DataTx[1] = 0x00;
  DataTx[2] = 0x00;
  HAL_SensorStack_SendReceive_SPI_Data(&DataTx, &DataRx, 3);

//  delay(5);
  USTIMER_Delay(5 * MS_MULTIPLIER);

//  digitalWrite(ADS124S08_CS_PIN,HIGH);
  HAL_SensorStack_Sensor_ChipSelect_Set();

  data = DataRx[2];
  return data;
}

void ADS124S08_Init(void)
{
  uint8_t initRegisterMap[NUM_REGISTERS] = { 0 };
  uint8_t status = FALSE;
  // Log.info("ADS Init");
//  delay(10);
  USTIMER_Delay(10 * MS_MULTIPLIER);

  ADS124S08_Reset();

//  delay(20);
  USTIMER_Delay(20 * MS_MULTIPLIER);

  ADS124S08_Reset_Data_Conv_Command();

  status = readRegister(REG_ADDR_STATUS);
  if ( (status & ADS_nRDY_MASK) ) {
      return(FALSE);                      // Device not ready
  }


  restoreRegisterDefaults();

  // Configure initial device register settings here
   initRegisterMap[REG_ADDR_STATUS]  = 0x00;                      // Reset POR event
   initRegisterMap[REG_ADDR_INPMUX]  = RTD_FOUR_WIRE_INPUT_MUX;
   initRegisterMap[REG_ADDR_PGA]     = RTD_FOUR_WIRE_PGA;
   initRegisterMap[REG_ADDR_DATARATE]= RTD_FOUR_WIRE_DATARATE;
   initRegisterMap[REG_ADDR_REF]     = RTD_FOUR_WIRE_REF_SEL;
   initRegisterMap[REG_ADDR_IDACMAG] = RTD_FOUR_WIRE_IDACMAG;
   initRegisterMap[REG_ADDR_IDACMUX] = RTD_FOUR_WIRE_IDACMUX;
   initRegisterMap[REG_ADDR_VBIAS]   = RTD_VBIAS;
//    initRegisterMap[REG_ADDR_SYS]     = SYS_DEFAULT;
   initRegisterMap[REG_ADDR_SYS]     = (SYS_DEFAULT | ADS_CALSAMPLE_16 ) ; // sample 16 times for calibration (calibration works when global chopping is off)

//  delay(1000);
  USTIMER_Delay(1000 * MS_MULTIPLIER);

  ADS124S08_Reg_Write(REG_ADDR_ID, 0x00);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  ADS124S08_Reg_Write(REG_ADDR_STATUS, 0x00);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  ADS124S08_Reg_Write(REG_ADDR_INPMUX, RTD_FOUR_WIRE_INPUT_MUX);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  ADS124S08_Reg_Write(REG_ADDR_PGA, RTD_FOUR_WIRE_PGA);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  ADS124S08_Reg_Write(REG_ADDR_DATARATE, RTD_FOUR_WIRE_DATARATE);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  ADS124S08_Reg_Write(REG_ADDR_REF, RTD_FOUR_WIRE_REF_SEL);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  ADS124S08_Reg_Write(REG_ADDR_IDACMAG, RTD_FOUR_WIRE_IDACMAG);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  ADS124S08_Reg_Write(REG_ADDR_IDACMUX, RTD_FOUR_WIRE_IDACMUX);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  ADS124S08_Reg_Write(REG_ADDR_VBIAS, RTD_VBIAS);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  ADS124S08_Reg_Write(REG_ADDR_SYS, (SYS_DEFAULT| ADS_CALSAMPLE_16 ));
  USTIMER_Delay(10 * MS_MULTIPLIER);

  // Read back all registers, except for status register.
  registerMap[REG_ADDR_STATUS] = readRegister(REG_ADDR_STATUS);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  registerMap[REG_ADDR_INPMUX] = readRegister(REG_ADDR_INPMUX);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  registerMap[REG_ADDR_PGA] = readRegister(REG_ADDR_PGA);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  registerMap[REG_ADDR_DATARATE] = readRegister(REG_ADDR_DATARATE);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  registerMap[REG_ADDR_REF] = readRegister(REG_ADDR_REF);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  registerMap[REG_ADDR_IDACMAG] = readRegister(REG_ADDR_IDACMAG);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  registerMap[REG_ADDR_IDACMUX] = readRegister(REG_ADDR_IDACMUX);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  registerMap[REG_ADDR_VBIAS] = readRegister(REG_ADDR_VBIAS);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  registerMap[REG_ADDR_SYS] = readRegister(REG_ADDR_SYS);
  USTIMER_Delay(10 * MS_MULTIPLIER);
  registerMap[REG_ADDR_FSCAL2] = readRegister(REG_ADDR_FSCAL2);
  USTIMER_Delay(10 * MS_MULTIPLIER);

  ADS124S08_Enable_Start();

//  delay(10);
  USTIMER_Delay(10 * MS_MULTIPLIER);

  ADS124S08_Disable_Start();

//  delay(50);
  USTIMER_Delay(50 * MS_MULTIPLIER);

  ADS124S08_Start_Data_Conv_Command();

//  delay(50);
  USTIMER_Delay(50 * MS_MULTIPLIER);
}

void setChannel(uint8_t channel)
{
  channel = (channel << 4) + 0x0C;
  ADS124S08_Reg_Write(ADS_INPMUX, channel);	//Ch 1 enabled, gain 6, connected to electrode in

//  delay(10);
  USTIMER_Delay(50 * MS_MULTIPLIER);
}

void ADS124S08_Reset(void)
{
//  digitalWrite(ADS124S08_PWDN_PIN, HIGH);
  HAL_SensorStack_Sensor_ResetPin_Set();

//  delay(100);					// Wait 100 mSec
  USTIMER_Delay(100 * MS_MULTIPLIER);

//  digitalWrite(ADS124S08_PWDN_PIN, LOW);
  HAL_SensorStack_Sensor_ResetPin_Clear();

//  delay(100);
  USTIMER_Delay(100 * MS_MULTIPLIER);

//  digitalWrite(ADS124S08_PWDN_PIN, HIGH);
  HAL_SensorStack_Sensor_ResetPin_Set();

//  delay(100);
  USTIMER_Delay(100 * MS_MULTIPLIER);
}

void ADS124S08_Disable_Start(void)
{
//  digitalWrite(ADS124S08_START_PIN, LOW);
  HAL_SensorStack_Sensor_StartSynch_Clear();

//  delay(20);
  USTIMER_Delay(20 * MS_MULTIPLIER);
}

void ADS124S08_Enable_Start(void)
{
//  digitalWrite(ADS124S08_START_PIN, HIGH);
  HAL_SensorStack_Sensor_StartSynch_Set();

//  delay(20);
  USTIMER_Delay(20 * MS_MULTIPLIER);
}

//void ADS124S08_Hard_Stop (void)
//{
//  digitalWrite(ADS124S08_START_PIN, LOW);
//  delay(100);
//}

void ADS124S08_Reset_Data_Conv_Command (void)
{
  ADS124S08_SPI_Command_Data(ADS_RESET);					// Send 0x08 to the ADS1x9x
}


void ADS124S08_Start_Data_Conv_Command (void)
{
  ADS124S08_SPI_Command_Data(ADS_START);					// Send 0x08 to the ADS1x9x
}

void ADS124S08_Wakeup_Data_Conv_Command (void)
{
  ADS124S08_SPI_Command_Data(ADS_WAKEUP);					// Send 0x08 to the ADS1x9x
}

//void ADS124S08_Soft_Stop (void)
//{
//  ADS124S08_SPI_Command_Data(ADS_STOP);                   // Send 0x0A to the ADS1x9x
//}

void ADS124S08_Start_Read_Data_Continuous (void)
{

}

void ADS124S08_Stop_Read_Data_Continuous (void)
{

}

void ADS124S08_SPI_Command_Data(unsigned char data_in)
{
  uint8_t DataRx = 0xFF;

//  digitalWrite(ADS124S08_CS_PIN, LOW);
  HAL_SensorStack_Sensor_ChipSelect_Clear();

//  delay(2);
  USTIMER_Delay(2 * MS_MULTIPLIER);

//  SPI.transfer(data_in);
  HAL_SensorStack_SendReceive_SPI_Data(&data_in, &DataRx, 1);

//  delay(2);
  USTIMER_Delay(2 * MS_MULTIPLIER);

//  digitalWrite(ADS124S08_CS_PIN, HIGH);
  HAL_SensorStack_Sensor_ChipSelect_Set();
}

//Sends a write command to SCP1000
void ADS124S08_Reg_Write (unsigned char READ_WRITE_ADDRESS, unsigned char DATA)
{
  uint8_t DataTx[3] = {0xFF,0xFF,0xFF};
  uint8_t DataRx[3] = {0xFF,0xFF,0xFF};

  // now combine the register address and the command into one byte:
//  byte dataToSend = READ_WRITE_ADDRESS + ADS_WREG;
  uint8_t dataToSend = READ_WRITE_ADDRESS + ADS_WREG;

  // take the chip select low to select the device:
//  digitalWrite(ADS124S08_CS_PIN, LOW);
  HAL_SensorStack_Sensor_ChipSelect_Clear();

//  delay(2);
  USTIMER_Delay(2 * MS_MULTIPLIER);

//  SPI.transfer(dataToSend); //Send register location
//  SPI.transfer(0x00);		//number of register to wr
//  SPI.transfer(DATA);		//Send value to record into register
  DataTx[0] = dataToSend;
  DataTx[1] = 0x00;
  DataTx[2] = DATA;
  HAL_SensorStack_SendReceive_SPI_Data(&DataTx, &DataRx, 3);

//  delay(2);
  USTIMER_Delay(2 * MS_MULTIPLIER);

  // take the chip select high to de-select:
//  digitalWrite(ADS124S08_CS_PIN, HIGH);
  HAL_SensorStack_Sensor_ChipSelect_Set();
}



/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_Sensor_ChipSelect_Set(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- Set GPIO for sensor chip select
 ******************************************************************************************************************/
void HAL_SensorStack_Sensor_ChipSelect_Set(void)
{
  GPIO_PinOutSet(SENSOR_CS_PORT,SENSOR_CS_PIN);
}

/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_Sensor_ChipSelect_Clear(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- Clear GPIO for sensor chip select
 ******************************************************************************************************************/
void HAL_SensorStack_Sensor_ChipSelect_Clear(void)
{
  GPIO_PinOutClear(SENSOR_CS_PORT,SENSOR_CS_PIN);
}

/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_Display_ChipSelect_Set(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- Set GPIO for display chip select
 ******************************************************************************************************************/
void HAL_SensorStack_Display_ChipSelect_Set(void)
{
  GPIO_PinOutSet(DISPLAY_CS_PORT,DISPLAY_CS_PIN);
}


/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_Display_ChipSelect_Clear(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- Clear GPIO for display chip select
 ******************************************************************************************************************/
void HAL_SensorStack_Display_ChipSelect_Clear(void)
{
  GPIO_PinOutClear(DISPLAY_CS_PORT,DISPLAY_CS_PIN);
}

/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_Sensor_ResetPin_Set(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- Set GPIO for Reset pin
 ******************************************************************************************************************/
void HAL_SensorStack_Sensor_ResetPin_Set(void)
{
  GPIO_PinOutSet(SENSOR_RESET_PORT,SENSOR_RESET_PIN);
}

/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_Sensor_ResetPin_Clear(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- Clear GPIO for Reset pin
 ******************************************************************************************************************/
void HAL_SensorStack_Sensor_ResetPin_Clear(void)
{
  GPIO_PinOutClear(SENSOR_RESET_PORT,SENSOR_RESET_PIN);
}

/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_Sensor_StartSynch_Set(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- Set Start/Synch GPIO
 ******************************************************************************************************************/
void HAL_SensorStack_Sensor_StartSynch_Set(void)
{
  GPIO_PinOutSet(SENSOR_START_SYNCH_PORT,SENSOR_START_SYNCH_PIN);
}

/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_Sensor_StartSynch_Clear(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- Clear Start/Synch GPIO
 ******************************************************************************************************************/
void HAL_SensorStack_Sensor_StartSynch_Clear(void)
{
  GPIO_PinOutClear(SENSOR_START_SYNCH_PORT,SENSOR_START_SYNCH_PIN);
}

///******************************************************************************************************************
// * Function Name:   void HAL_SensorStack_Sensor_Set_StartSynchPin(void)
// * Author:  Naresh
// * Date:    23-June-2024
// * Function Parameter: state level of START pin (false = low, true = high)
// * Return value : void
// * Description: -- Sets the state of the MCU START GPIO pin
// ******************************************************************************************************************/
//void HAL_SensorStack_Sensor_Set_StartSynchPin( uint8_t state )
//{
//    if(state){
//        HAL_SensorStack_Sensor_StartSynch_Set();
//    } else {
//        HAL_SensorStack_Sensor_StartSynch_Clear();
//    }
//
//    USTIMER_Delay(2);
//}

///******************************************************************************************************************
// * Function Name:   void HAL_SensorStack_Sensor_Send_Start_Command(void)
// * Author:  Naresh
// * Date:    23-June-2024
// * Function Parameter: void
// * Return value : void
// * Description: -- Sends START Command through SPI
// ******************************************************************************************************************/
//void HAL_SensorStack_Sensor_Send_Start_Command(void)
//{
//    uint16_t dataTx = OPCODE_START;
//
//    SPIDRV_MTransmit(sl_spidrv_SPI_Display_TemperatureSensor_handle,&dataTx,1,TransferComplete);
//}


/************************************************************************************//**
 *
 * @brief HAL_SensorStack_Sensor_Send_Stop_Command()
 *            Sends STOP Command through SPI
 *
 * @param[in]
 *
 * @return      None
 */
//void HAL_SensorStack_Sensor_Send_Stop_Command(void)
//{
//    uint16_t dataTx = OPCODE_STOP;
//
//    SPIDRV_MTransmit(sl_spidrv_SPI_Display_TemperatureSensor_handle,&dataTx,1,TransferComplete);
//}

void HAL_SensorStack_Send_SPI_Data(uint8_t *TxData, uint8_t length)
{
  SPIDRV_MTransmit(sl_spidrv_SPI_Display_TemperatureSensor_handle,TxData,length,TransferComplete);
}

void HAL_SensorStack_Receive_SPI_Data(uint8_t *RxData, uint8_t length)
{
  SPIDRV_MReceive(sl_spidrv_SPI_Display_TemperatureSensor_handle,RxData,length,TransferComplete);
}

void HAL_SensorStack_SendReceive_SPI_Data(uint8_t *TxData , uint8_t *RxData, uint8_t length)
{
  SPIDRV_MTransferB(sl_spidrv_SPI_Display_TemperatureSensor_handle,TxData,RxData,length);
 // SPIDRV_MTransfer(sl_spidrv_SPI_Display_TemperatureSensor_handle,TxData,RxData,length,TransferComplete);
}


/********************************************************************************
 * STATIC FUNCTIONS
 ********************************************************************************/
/******************************************************************************************************************
 * Function Name:   static void TransferComplete(SPIDRV_Handle_t handle,Ecode_t transferStatus,int itemsTransferred)
 * Author:  Sumit
 * Date:    31-May-2024
 * Function Parameter: SPIDRV_Handle_t handle,Ecode_t transferStatus,int itemsTransferred
 * Return value : Success
 * Description: -- This is a callback function to check if the transfer is success
 ******************************************************************************************************************/
static void TransferComplete(SPIDRV_Handle_t handle,
                      Ecode_t transferStatus,
                      int itemsTransferred)
{
  if (transferStatus == ECODE_EMDRV_SPIDRV_OK) {
   // Success !
  }
}

/********************************************************************************
 * Function Name:   int16_t HAL_TemperatureStack_Receive_Temperature_Value(uint8_t)
 * Author:  Naresh Patel
 * Date:    03-May-2024
 * Function Parameter: void
 * Return value : void
 * Description: --
 *******************************************************************************/
int16_t HAL_TemperatureStack_Receive_Temperature_Value(uint8_t temperature_config)
{
  uint16_t    statusb;
  uint16_t    crc;
  double       temperature_val;
  int16_t temperature_sensor_val = 0;
  int32_t adc_value;
  uint8_t i = 0;
  //Temperature Sensor logic

  // 1st : Send SPI command to read resistance value from RTD to digital converter
  // 2nd : Using constants Aplha, beta and gamma and gain value ---> Degree Celcius
  // 3rd : Celcius to Fahrenhit

  //Method 1: To read data from saved data buffer.
  adc_value = ADS124S08_Read();

//Method 2 : To read data direct from data buffer.
//    if(GPIO_PinOutGet(SENSOR_DRDY_PORT, SENSOR_DRDY_PIN) == LOW)
//      adc_value[i] = ADS124S08_Read_Data();
//    else
//      {
//        while(GPIO_PinOutGet(SENSOR_DRDY_PORT, SENSOR_DRDY_PIN) == HIGH);
//        adc_value[i] = ADS124S08_Read_Data();
//      }


  temperature_val = HAL_SensorStack_Calculate_RTD_Temperature(adc_value);

  temperature_sensor_val = (int16_t)(temperature_val * 10U);
  return(temperature_sensor_val);
}

/********************************************************************************
 * Function Name:   static float HAL_SensorStack_Calculate_RTD_Temperature(int32_t adcValue)
 * Author:  Naresh Patel
 * Date:    03-May-2024
 * Function Parameter: void
 * Return value : void
 * Description: --
 *******************************************************************************/
static double HAL_SensorStack_Calculate_RTD_Temperature(int32_t adcValue)
{
  double temperature;
  // Calculate resistance of RTD
  volatile double resistance = (adcValue * (RREF / 8388607)) /(16); // Adjust for gain of 16

  // Calculate temperature using Callendar-Van Dusen equation

  if (resistance > R0) {  // Temperatures above 0 degrees C
      temperature = ((-RTD_A * R0 + sqrt(pow(RTD_A * R0, 2) - 4 * RTD_B * R0 * (R0 - resistance))) / (2 * RTD_B * R0));
  } else {                // Temperatures above 0 degrees C
      temperature = ((resistance / R0 - 1) / (RTD_A + RTD_B * (resistance / R0 - 1) + RTD_C * pow((resistance / R0 - 1), 2)));
  }

  return temperature;
}

/******************************************************************************************************************
 * Function Name:   void HAL_SensorStack_ReInitialize(void)
 * Author:  Naresh
 * Date:    23-June-2024
 * Function Parameter: void
 * Return value : void
 * Description: -- ReInitialize SPI interface for temperature stack
 ******************************************************************************************************************/
void HAL_SensorStack_ReInitialize(void)
{
  sl_spidrv_init_SPI_Display_TemperatureSensor.bitRate = SL_SPIDRV_SPI_TEMPERATURESENSOR_BITRATE;
  sl_spidrv_init_SPI_Display_TemperatureSensor.clockMode = spidrvClockMode1;
  SPIDRV_Init(sl_spidrv_SPI_Display_TemperatureSensor_handle, &sl_spidrv_init_SPI_Display_TemperatureSensor);
}

/************************************************************************************//**
 *
 * @brief restoreRegisterDefaults()
 *          Updates the registerMap[] array to its default values
 *          NOTES: If the MCU keeps a copy of the ADC register settings in memory,
 *          then it is important to ensure that these values remain in sync with the
 *          actual hardware settings. In order to help facilitate this, this function
 *          should be called after powering up or resetting the device (either by
 *          hardware pin control or SPI software command).
 *          Reading back all of the registers after resetting the device will
 *          accomplish the same result.
 *
 * @return    None
 */
static void restoreRegisterDefaults(void)
{
  /* Default register settings */
  registerMap[REG_ADDR_ID]       = ID_DEFAULT;
  registerMap[REG_ADDR_STATUS]   = STATUS_DEFAULT;
  registerMap[REG_ADDR_INPMUX]   = INPMUX_DEFAULT;
  registerMap[REG_ADDR_PGA]      = PGA_DEFAULT;
  registerMap[REG_ADDR_DATARATE] = DATARATE_DEFAULT;
  registerMap[REG_ADDR_REF]      = REF_DEFAULT;
  registerMap[REG_ADDR_IDACMAG]  = IDACMAG_DEFAULT;
  registerMap[REG_ADDR_IDACMUX]  = IDACMUX_DEFAULT;
  registerMap[REG_ADDR_VBIAS]    = VBIAS_DEFAULT;
  registerMap[REG_ADDR_SYS]      = SYS_DEFAULT;
  registerMap[REG_ADDR_OFCAL0]   = OFCAL0_DEFAULT;
  registerMap[REG_ADDR_OFCAL1]   = OFCAL1_DEFAULT;
  registerMap[REG_ADDR_OFCAL2]   = OFCAL2_DEFAULT;
  registerMap[REG_ADDR_FSCAL0]   = FSCAL0_DEFAULT;
  registerMap[REG_ADDR_FSCAL1]   = FSCAL1_DEFAULT;
  registerMap[REG_ADDR_FSCAL2]   = FSCAL2_DEFAULT;
  registerMap[REG_ADDR_GPIODAT]  = GPIODAT_DEFAULT;
  registerMap[REG_ADDR_GPIOCON]  = GPIOCON_DEFAULT;
}

Tool/software:

Hello ,

I am using ADS124S08 RTD to digital converter to read RTD sensor data. I have initialized register settings and read it back. It is giving proper value which i initialized.. 

In HW circuit , We use AIN0 as current source. We use 4 wire RTD sensor. We connected RTD sensor with AIN0, AIN1, AIN2, AIN3. I checked that AIN0 voltage is 1.6 V. AIN1 voltage is 1.6 V. AIN2 voltage is  REFOUT voltage is 2.7.  Voltage difference between AIN1(V+) and AIN2(V-) = 1.1 V.  

I use "ADS124S08_Read()" function to read ADC value. After that i send read command periodically. Which always returns 0.I am using silicon lab microcontroller , for silicon lab microcontroller SPI is working fine. 

I am attaching source code and schematic. Could you please guide me why i am getting zero ADC value during read "ADS124S08_Read()" ?