int32_t ADS126xReadData(uint8_t NumBytes, uint8_t DataByteStartNum) { assert((4 == NumBytes) || (5 == NumBytes) || (6 == NumBytes)); // Aborts program if FALSE assert((0 == DataByteStartNum) || (1 == DataByteStartNum)); // Aborts program if FALSE uint8_t ADC_Bytes[6]; int32_t ADC_Data_Only; uint8_t Checksum = 0x9B; uint8_t Sum = 0; while (1) { ADS126xXferByte(RDATA1); for (int i = 0; i < NumBytes; ++i) ADC_Bytes[i] = ADS126xXferByte(0); if (ADC_Bytes[0] >= 0x40 && ADC_Bytes[0] <= 0x41) { for (int i = 1; i < NumBytes-1; ++i) { Sum += ADC_Bytes[i]; } Sum += Checksum; if ((Sum & 0xFF )!= ADC_Bytes[NumBytes - 1]) { Sum = 0; continue; } else { ADC_Data_Only = ((int32_t)ADC_Bytes[DataByteStartNum + 0] << 24) | //Data MSB ((int32_t)ADC_Bytes[DataByteStartNum + 1] << 16) | ((int32_t)ADC_Bytes[DataByteStartNum + 2] << 8) | ((int32_t)ADC_Bytes[DataByteStartNum + 3] << 0); //Data LSB //set_adc_CS(1); break; } } } return ADC_Data_Only; }