<?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 LPC4370 High Speed ADC initial delay. in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4370-High-Speed-ADC-initial-delay/m-p/550790#M14075</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mshrestha789 on Tue Nov 03 10:56:12 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello friends, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Recently I have been working on High speed ADC of the LPC4370 microcontroller. I need to detect the threshold and then capture the data, I managed to do that however, many times ADC misses certain data at the beginning. I attached here the screeshot of the captured data and part of ADC code. This behavior very random. Please help me regarding this. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
void adc_init(void){
Chip_Clock_SetDivider(CLK_IDIV_A, CLKIN_USBPLL, 2); // USB clock 480 MHz -&amp;gt; CLKIN_IDIVA = 480/2=240
Chip_Clock_SetDivider(CLK_IDIV_B, CLKIN_IDIVA, 3);&amp;nbsp; // CLCIN_IDIVB = CLKIN_IDIVB = 240/3 = 80
Chip_Clock_SetBaseClock(CLK_BASE_ADCHS, CLKIN_IDIVB, true, false);


Chip_Clock_EnableOpts(CLK_ADCHS, true, true, 1);
Chip_HSADC_Init(LPC_ADCHS_CMSIS);


Chip_HSADC_SetupFIFO(LPC_ADCHS_CMSIS, 8, true);
Chip_HSADC_ConfigureTrigger(LPC_ADCHS_CMSIS, HSADC_CONFIG_TRIGGER_SW, HSADC_CONFIG_TRIGGER_RISEEXT, HSADC_CONFIG_TRIGGER_NOEXTSYNC, HSADC_CHANNEL_ID_EN_ADD, 0x90);


Chip_HSADC_SetACDCBias(LPC_ADCHS_CMSIS, 0, HSADC_CHANNEL_NODCBIAS, HSADC_CHANNEL_NODCBIAS);

Chip_HSADC_SetThrLowValue(LPC_ADCHS_CMSIS, 0, 10);
Chip_HSADC_SetThrHighValue(LPC_ADCHS_CMSIS, 0, 3000);

Chip_HSADC_SetPowerSpeed(LPC_ADCHS_CMSIS, false);
Chip_HSADC_EnablePower(LPC_ADCHS_CMSIS);

Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 0, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 1, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 2, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 3, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 4, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 5, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 6, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 7, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_SWAP | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));

Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 0, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 1, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 2, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 3, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 4, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 5, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 6, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 7, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_INT | HSADC_DESC_BRANCH_SWAP | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));

Chip_HSADC_UpdateDescTable(LPC_ADCHS_CMSIS, 0);
Chip_HSADC_UpdateDescTable(LPC_ADCHS_CMSIS, 1); 
}

static void vadc_control_task(void *pvParameters){
while (1) {
if(xSemaphoreTake(g_adc_trigger, 10)== pdTRUE){ //wait for trigger
Chip_HSADC_SetActiveDescriptor(LPC_ADCHS_CMSIS, 0, 0); // set active descriptor
Chip_HSADC_SWTrigger(LPC_ADCHS_CMSIS); //software trigger
while((Chip_HSADC_GetLastSample(LPC_ADCHS_CMSIS, 0) &amp;amp; HSADC_LS_RANGE_ABOVE) != HSADC_LS_RANGE_ABOVE); //wait for threshold
Chip_HSADC_FlushFIFO(LPC_ADCHS_CMSIS);
LPC_GPDMA-&amp;gt;C0CONFIG&amp;nbsp; |=&amp;nbsp; (0x1); //initialize DMA transfer
while(1){
if(LPC_GPDMA-&amp;gt;INTTCSTAT &amp;amp; (((1UL &amp;lt;&amp;lt; 0) &amp;amp; 0xFF))){
break;
}
}

}
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:35:22 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:35:22Z</dc:date>
    <item>
      <title>LPC4370 High Speed ADC initial delay.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4370-High-Speed-ADC-initial-delay/m-p/550790#M14075</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mshrestha789 on Tue Nov 03 10:56:12 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello friends, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Recently I have been working on High speed ADC of the LPC4370 microcontroller. I need to detect the threshold and then capture the data, I managed to do that however, many times ADC misses certain data at the beginning. I attached here the screeshot of the captured data and part of ADC code. This behavior very random. Please help me regarding this. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
void adc_init(void){
Chip_Clock_SetDivider(CLK_IDIV_A, CLKIN_USBPLL, 2); // USB clock 480 MHz -&amp;gt; CLKIN_IDIVA = 480/2=240
Chip_Clock_SetDivider(CLK_IDIV_B, CLKIN_IDIVA, 3);&amp;nbsp; // CLCIN_IDIVB = CLKIN_IDIVB = 240/3 = 80
Chip_Clock_SetBaseClock(CLK_BASE_ADCHS, CLKIN_IDIVB, true, false);


Chip_Clock_EnableOpts(CLK_ADCHS, true, true, 1);
Chip_HSADC_Init(LPC_ADCHS_CMSIS);


Chip_HSADC_SetupFIFO(LPC_ADCHS_CMSIS, 8, true);
Chip_HSADC_ConfigureTrigger(LPC_ADCHS_CMSIS, HSADC_CONFIG_TRIGGER_SW, HSADC_CONFIG_TRIGGER_RISEEXT, HSADC_CONFIG_TRIGGER_NOEXTSYNC, HSADC_CHANNEL_ID_EN_ADD, 0x90);


Chip_HSADC_SetACDCBias(LPC_ADCHS_CMSIS, 0, HSADC_CHANNEL_NODCBIAS, HSADC_CHANNEL_NODCBIAS);

Chip_HSADC_SetThrLowValue(LPC_ADCHS_CMSIS, 0, 10);
Chip_HSADC_SetThrHighValue(LPC_ADCHS_CMSIS, 0, 3000);

Chip_HSADC_SetPowerSpeed(LPC_ADCHS_CMSIS, false);
Chip_HSADC_EnablePower(LPC_ADCHS_CMSIS);

Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 0, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 1, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 2, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 3, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 4, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 5, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 6, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 0, 7, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_SWAP | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));

Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 0, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 1, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 2, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 3, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 4, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 5, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 6, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));
Chip_HSADC_SetupDescEntry(LPC_ADCHS_CMSIS, 1, 7, (HSADC_DESC_CH(0) | HSADC_DESC_THRESH_A | HSADC_DESC_INT | HSADC_DESC_BRANCH_SWAP | HSADC_DESC_MATCH(HSADC_DESCRIPTOR_TIME) | HSADC_DESC_RESET_TIMER));

Chip_HSADC_UpdateDescTable(LPC_ADCHS_CMSIS, 0);
Chip_HSADC_UpdateDescTable(LPC_ADCHS_CMSIS, 1); 
}

static void vadc_control_task(void *pvParameters){
while (1) {
if(xSemaphoreTake(g_adc_trigger, 10)== pdTRUE){ //wait for trigger
Chip_HSADC_SetActiveDescriptor(LPC_ADCHS_CMSIS, 0, 0); // set active descriptor
Chip_HSADC_SWTrigger(LPC_ADCHS_CMSIS); //software trigger
while((Chip_HSADC_GetLastSample(LPC_ADCHS_CMSIS, 0) &amp;amp; HSADC_LS_RANGE_ABOVE) != HSADC_LS_RANGE_ABOVE); //wait for threshold
Chip_HSADC_FlushFIFO(LPC_ADCHS_CMSIS);
LPC_GPDMA-&amp;gt;C0CONFIG&amp;nbsp; |=&amp;nbsp; (0x1); //initialize DMA transfer
while(1){
if(LPC_GPDMA-&amp;gt;INTTCSTAT &amp;amp; (((1UL &amp;lt;&amp;lt; 0) &amp;amp; 0xFF))){
break;
}
}

}
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:35:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4370-High-Speed-ADC-initial-delay/m-p/550790#M14075</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:35:22Z</dc:date>
    </item>
    <item>
      <title>Re: LPC4370 High Speed ADC initial delay.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4370-High-Speed-ADC-initial-delay/m-p/550791#M14076</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mshrestha789 on Thu Nov 05 01:38:08 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there any chance its because of DMA transfer? &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Recently I disable the DMA synchronization with LPC_GPDMA-&amp;gt;SYNC = 0x01, it improved the performance. However, it still misses some data sometime.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Please help me regarding this.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:35:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4370-High-Speed-ADC-initial-delay/m-p/550791#M14076</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:35:23Z</dc:date>
    </item>
  </channel>
</rss>

