AnsweredAssumed Answered

Read from 18-bit ADC using SPI

Question asked by nathan sowie on Apr 23, 2018
Latest reply on Apr 25, 2018 by nathan sowie

Hi everyone,


I am trying to read values from an 18-bit ADC using SPI and LPC54608.

I would like to know what would be the best way to read the values from the ADC.


Here is the code I wrote:


uint32_t readSPIvalueInitSPI4(){
   return readSPIvalueInit2(&SPI4_InterruptDriverState);


uint32_t readSPIvalueInit2(cmsis_spi_interrupt_driver_state_t *spi){

   return readSPIvalue(spi->resource->base);


uint32_t readSPIvalue(SPI_Type *base){

   base->CFG |= (1 << 8);             // polarity SSEL0 - active high
   base->DLY |= (0x8 << 8);          // End Of Frame delay - 8 clock times inserted

   uint32_t readFIFO = ADC_LT2336(base);

   return readFIFO;



uint32_t ADC_LT2336(SPI_Type *base){

   base->FIFOWR = 15 | 0xf0e0000;       // data = 15 + Assert SSL0, de-assert SSL[1,2,3], no-EOT                                                                 // (EndOfTransfer de-assert), length = 16

   base->FIFOWR = 15 | 0x31e0000;      // data = 15 + Assert SSL0, de-assert SSL[1,2,3], EOT (EndOfTransfer                                                                 // de-assert), End Of Frame delay = 15 CLK, length = 4

   uint_32_t read_MSB = base->FIFORD;
   uint_32_t read_LSB = base->FIFORD;


   return read_MSB;                     // only returning the MSB because I don't need the last 2 bits




int main(void) {

   uint32_t ADCvalue = readSPIvalueInitSPI4();


In the "ADC_LT2336(SPI_Type *base)" function, I am not sure whether I should read MSB before sending the second write command, or if I should do like in the code above (1st send the two write commands, and then two read commands).


If it can be of any help, the ADC I am using is the LTC2336 from Analog Devices, and here is the link to the datasheet of this ADC: 


Thanks in advance,

Nathan Sowie