<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Read from 18-bit ADC using SPI in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Read-from-18-bit-ADC-using-SPI/m-p/758118#M30493</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am trying to read values from an 18-bit ADC using SPI and LPC54608.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;I would like to know what would be the best way to read the values from the ADC.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is the code I wrote:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;uint32_t readSPIvalueInitSPI4(){&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;return readSPIvalueInit2(&amp;amp;SPI4_InterruptDriverState);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint32_t readSPIvalueInit2(cmsis_spi_interrupt_driver_state_t *spi){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return readSPIvalue(spi-&amp;gt;resource-&amp;gt;base);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint32_t readSPIvalue(SPI_Type *base){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;CFG |= (1 &amp;lt;&amp;lt; 8); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// polarity SSEL0 - active high&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;DLY |= (0x8 &amp;lt;&amp;lt; 8); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// End Of Frame delay - 8 clock times inserted&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;uint32_t readFIFO = ADC_LT2336(base);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return readFIFO;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint32_t ADC_LT2336(SPI_Type *base){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;FIFOWR = 15 | 0xf0e0000;&lt;SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;// data = 15 + Assert SSL0, de-assert SSL[1,2,3], no-EOT &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// (EndOfTransfer de-assert), length = 16&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;FIFOWR = 15 | 0x31e0000;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// data = 15 + Assert SSL0, de-assert SSL[1,2,3], EOT (EndOfTransfer &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// de-assert), End Of Frame delay = 15 CLK, length = 4&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;uint_32_t read_MSB = base-&amp;gt;FIFORD;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;SPAN style="background-color: #f6f6f6;"&gt;uint_32_t&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="background-color: #f6f6f6;"&gt;read_LSB&amp;nbsp;&lt;/SPAN&gt;= base-&amp;gt;FIFORD;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return read_MSB;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// only returning the MSB because I don't need the last 2 bits&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;int main(void) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint32_t ADCvalue =&amp;nbsp;readSPIvalueInitSPI4();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;In the "&lt;SPAN style="background-color: #f6f6f6;"&gt;ADC_LT2336(SPI_Type *base)" function, I&lt;/SPAN&gt;&amp;nbsp;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).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;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:&amp;nbsp;&lt;A class="link-titled" href="http://www.analog.com/media/en/technical-documentation/data-sheets/233618fa.pdf" title="http://www.analog.com/media/en/technical-documentation/data-sheets/233618fa.pdf"&gt;http://www.analog.com/media/en/technical-documentation/data-sheets/233618fa.pdf&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance,&lt;/P&gt;&lt;P&gt;Nathan Sowie&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 23 Apr 2018 13:28:37 GMT</pubDate>
    <dc:creator>nathansowie</dc:creator>
    <dc:date>2018-04-23T13:28:37Z</dc:date>
    <item>
      <title>Read from 18-bit ADC using SPI</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Read-from-18-bit-ADC-using-SPI/m-p/758118#M30493</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am trying to read values from an 18-bit ADC using SPI and LPC54608.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;I would like to know what would be the best way to read the values from the ADC.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is the code I wrote:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;uint32_t readSPIvalueInitSPI4(){&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;return readSPIvalueInit2(&amp;amp;SPI4_InterruptDriverState);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint32_t readSPIvalueInit2(cmsis_spi_interrupt_driver_state_t *spi){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return readSPIvalue(spi-&amp;gt;resource-&amp;gt;base);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint32_t readSPIvalue(SPI_Type *base){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;CFG |= (1 &amp;lt;&amp;lt; 8); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// polarity SSEL0 - active high&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;DLY |= (0x8 &amp;lt;&amp;lt; 8); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// End Of Frame delay - 8 clock times inserted&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;uint32_t readFIFO = ADC_LT2336(base);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return readFIFO;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint32_t ADC_LT2336(SPI_Type *base){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;FIFOWR = 15 | 0xf0e0000;&lt;SPAN&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;// data = 15 + Assert SSL0, de-assert SSL[1,2,3], no-EOT &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// (EndOfTransfer de-assert), length = 16&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;base-&amp;gt;FIFOWR = 15 | 0x31e0000;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// data = 15 + Assert SSL0, de-assert SSL[1,2,3], EOT (EndOfTransfer &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// de-assert), End Of Frame delay = 15 CLK, length = 4&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;uint_32_t read_MSB = base-&amp;gt;FIFORD;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;SPAN style="background-color: #f6f6f6;"&gt;uint_32_t&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="background-color: #f6f6f6;"&gt;read_LSB&amp;nbsp;&lt;/SPAN&gt;= base-&amp;gt;FIFORD;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return read_MSB;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// only returning the MSB because I don't need the last 2 bits&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;int main(void) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint32_t ADCvalue =&amp;nbsp;readSPIvalueInitSPI4();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;In the "&lt;SPAN style="background-color: #f6f6f6;"&gt;ADC_LT2336(SPI_Type *base)" function, I&lt;/SPAN&gt;&amp;nbsp;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).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;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:&amp;nbsp;&lt;A class="link-titled" href="http://www.analog.com/media/en/technical-documentation/data-sheets/233618fa.pdf" title="http://www.analog.com/media/en/technical-documentation/data-sheets/233618fa.pdf"&gt;http://www.analog.com/media/en/technical-documentation/data-sheets/233618fa.pdf&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance,&lt;/P&gt;&lt;P&gt;Nathan Sowie&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 23 Apr 2018 13:28:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Read-from-18-bit-ADC-using-SPI/m-p/758118#M30493</guid>
      <dc:creator>nathansowie</dc:creator>
      <dc:date>2018-04-23T13:28:37Z</dc:date>
    </item>
    <item>
      <title>Re: Read from 18-bit ADC using SPI</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Read-from-18-bit-ADC-using-SPI/m-p/758119#M30494</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The LPC54608 SPI function supports separate transmit and receive FIFOs with 8 entries each.&lt;/P&gt;&lt;P&gt;From your application, you only use two receive FIFO.&lt;/P&gt;&lt;P&gt;That will be ok for your both operations ( read MSB before sending the second write command, or 1st send the two write commands, and then two read commands).&lt;/P&gt;&lt;P&gt;Wish it helps.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;Mike&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 25 Apr 2018 07:44:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Read-from-18-bit-ADC-using-SPI/m-p/758119#M30494</guid>
      <dc:creator>Hui_Ma</dc:creator>
      <dc:date>2018-04-25T07:44:00Z</dc:date>
    </item>
    <item>
      <title>Re: Read from 18-bit ADC using SPI</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Read-from-18-bit-ADC-using-SPI/m-p/758120#M30495</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you for this answer, this will surely help !&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Nathan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 25 Apr 2018 14:37:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Read-from-18-bit-ADC-using-SPI/m-p/758120#M30495</guid>
      <dc:creator>nathansowie</dc:creator>
      <dc:date>2018-04-25T14:37:45Z</dc:date>
    </item>
  </channel>
</rss>

