<?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 Re: DMA keep getting &amp;quot;Empty FIFO empty&amp;quot; 0x8000 from HSADC in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-keep-getting-quot-Empty-FIFO-empty-quot-0x8000-from-HSADC/m-p/734754#M29670</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;Hi&amp;nbsp;&lt;SPAN style="color: #646464;"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A _jive_internal="true" data-content-finding="Community" data-userid="314407" data-username="cpchen" href="https://community.nxp.com/people/cpchen" style="color: #5e89c1; border: 0px; font-weight: 600; text-decoration: none; font-size: 11.9994px;"&gt;CP Chen&lt;/A&gt;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;Thank you for your interest in NXP Semiconductor products and&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;the opportunity to serve you. &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;I was wondering if you can share a compile-able demo and introduce the steps of testing, then I can replicate the issue on my site.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;I'm looking forward to you reply.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;TIC&lt;/DIV&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;/DIV&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 23 Apr 2018 09:12:18 GMT</pubDate>
    <dc:creator>jeremyzhou</dc:creator>
    <dc:date>2018-04-23T09:12:18Z</dc:date>
    <item>
      <title>DMA keep getting "Empty FIFO empty" 0x8000 from HSADC</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-keep-getting-quot-Empty-FIFO-empty-quot-0x8000-from-HSADC/m-p/734753#M29669</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Sir,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using DMA to collect HSADC output FIFO&amp;nbsp; and store into a local buffer,&amp;nbsp; while the FIFO output seems to be collected correctly, there is always several 0X8000 in between the actual converted sample values.&amp;nbsp; .&amp;nbsp; &amp;nbsp;Below are the local buffer content and code for your reference.&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have done various check, but could find out where was the probelm.&amp;nbsp; hope you can advise how can I get rmake DMA access only valid samples.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is what I have done to check the problem,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. Check the FIFO output by using HSADC interrupt, confirm FIFO contain only correct sample values.&amp;nbsp;&lt;/P&gt;&lt;P&gt;2. I have test it with differenct HSADC speeds, all have this "0x8000" in between samples.&amp;nbsp; howevr, they seems to be reducing with higher HSADC speed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;******* Printout of local buffer, filled by DMA *********************&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_2.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/8229i95FEBEC46F218D93/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_2.png" alt="pastedImage_2.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;************** Code used with above output ****************************&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;#define HSADC_DMA_READ 8&lt;BR /&gt;#define DMA_TRANSFER_SIZE 4095 // max. 4095&lt;BR /&gt;#define DMA_CH 7&lt;BR /&gt;#define NUM_SAMPLE DMA_TRANSFER_SIZE&lt;BR /&gt;uint32_t sample[NUM_SAMPLE];&lt;BR /&gt;long sample_value;&lt;/P&gt;&lt;P&gt;void Setup_ADCHS_J(void)&lt;BR /&gt;{&lt;BR /&gt;Chip_HSADC_Init(LPC_ADCHS);/* Initialize HSADC */&lt;BR /&gt; // Disable the HSADC interrupt&lt;BR /&gt;LPC_ADCHS-&amp;gt;INTS[0].CLR_EN = 0x7F; // disable interrupt 0&lt;BR /&gt;LPC_ADCHS-&amp;gt;INTS[0].CLR_STAT = 0x7F; // clear interrupt status&lt;BR /&gt;while(LPC_ADCHS-&amp;gt;INTS[0].STATUS &amp;amp; 0x7D); // wait for status to clear, have to exclude FIFO_EMPTY&lt;/P&gt;&lt;P&gt;LPC_ADCHS-&amp;gt;INTS[1].CLR_EN = 0x3FFFFFFF;&lt;BR /&gt;LPC_ADCHS-&amp;gt;INTS[1].CLR_STAT = 0x3FFFFFFF;&lt;BR /&gt;while(LPC_ADCHS-&amp;gt;INTS[1].STATUS);&lt;/P&gt;&lt;P&gt;/********** Setup FIFO trip points for interrupt/DMA to 8 samples, no packing */&lt;BR /&gt; Chip_HSADC_SetupFIFO(LPC_ADCHS, 8, false);&lt;BR /&gt; &lt;BR /&gt; /* Software trigger only, 0x90 recovery clocks, add channel IF to FIFO entry */&lt;BR /&gt; Chip_HSADC_ConfigureTrigger(LPC_ADCHS, HSADC_CONFIG_TRIGGER_SW,&lt;BR /&gt; HSADC_CONFIG_TRIGGER_RISEEXT, HSADC_CONFIG_TRIGGER_NOEXTSYNC,&lt;BR /&gt; HSADC_CHANNEL_ID_EN_NONE, 0x90);&lt;/P&gt;&lt;P&gt;/* Select both positive and negative DC biasing for input 3 */&lt;BR /&gt; Chip_HSADC_SetACDCBias(LPC_ADCHS, 1, HSADC_CHANNEL_DCBIAS, HSADC_CHANNEL_NODCBIAS);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; /* Setup data format for 2's complement and update clock settings. This function&lt;BR /&gt; should be called whenever a clock change is made to the HSADC */&lt;BR /&gt; Chip_HSADC_SetPowerSpeed(LPC_ADCHS, false);&lt;/P&gt;&lt;P&gt;/* Enable HSADC power */&lt;BR /&gt; Chip_HSADC_EnablePower(LPC_ADCHS);&lt;BR /&gt; &lt;BR /&gt;LPC_ADCHS-&amp;gt;POWER_DOWN = 0;&lt;BR /&gt;LPC_ADCHS-&amp;gt;FLUSH = 1;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 0);&lt;BR /&gt;Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 1);&lt;BR /&gt;Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 2);&lt;BR /&gt;Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 3);&lt;BR /&gt;Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 4);&lt;BR /&gt;Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 5);&lt;BR /&gt;Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 6);&lt;BR /&gt;Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 7);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Chip_HSADC_SetupDescEntry(LPC_ADCHS, 0, 0, (HSADC_DESC_CH(1) | HSADC_DESC_BRANCH_SWAP | HSADC_DESC_MATCH(0x90) | HSADC_DESC_RESET_TIMER));&lt;BR /&gt;Chip_HSADC_SetupDescEntry(LPC_ADCHS, 1, 0, (HSADC_DESC_CH(1) | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(1) | HSADC_DESC_RESET_TIMER));&lt;BR /&gt;Chip_HSADC_SetupDescEntry(LPC_ADCHS, 1, 1, (HSADC_DESC_CH(1) | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(1) | HSADC_DESC_RESET_TIMER));&lt;BR /&gt;Chip_HSADC_SetupDescEntry(LPC_ADCHS, 1, 2, (HSADC_DESC_CH(1) | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(1) | HSADC_DESC_RESET_TIMER));&lt;BR /&gt;Chip_HSADC_SetupDescEntry(LPC_ADCHS, 1, 3, (HSADC_DESC_CH(1) | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(1) | HSADC_DESC_RESET_TIMER));&lt;BR /&gt;Chip_HSADC_SetupDescEntry(LPC_ADCHS, 1, 4, (HSADC_DESC_CH(1) | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(1) | HSADC_DESC_RESET_TIMER));&lt;BR /&gt;Chip_HSADC_SetupDescEntry(LPC_ADCHS, 1, 5, (HSADC_DESC_CH(1) | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(1) | HSADC_DESC_RESET_TIMER));&lt;BR /&gt;Chip_HSADC_SetupDescEntry(LPC_ADCHS, 1, 6, (HSADC_DESC_CH(1) | HSADC_DESC_BRANCH_NEXT | HSADC_DESC_MATCH(1) | HSADC_DESC_RESET_TIMER));&lt;BR /&gt;Chip_HSADC_SetupDescEntry(LPC_ADCHS, 1, 7, (HSADC_DESC_CH(1) | HSADC_DESC_BRANCH_FIRST | HSADC_DESC_MATCH(1) | HSADC_DESC_RESET_TIMER));&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; Chip_HSADC_UpdateDescTable(LPC_ADCHS, 1);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;void Setup_DMA_J(void)&lt;BR /&gt;{&lt;BR /&gt;Chip_GPDMA_Init(LPC_GPDMA);&lt;BR /&gt;/* Clear all DMA interrupt and error flag */&lt;BR /&gt;LPC_GPDMA-&amp;gt;CONFIG = 0x00;&lt;BR /&gt;LPC_GPDMA-&amp;gt;INTTCCLEAR = 0xFF; //clears channel terminal count interrupt&lt;BR /&gt;LPC_GPDMA-&amp;gt;INTERRCLR = 0xFF; //clears channel error interrupt.&lt;BR /&gt;LPC_GPDMA-&amp;gt;CONFIG = 0x01;&lt;BR /&gt;while( !(LPC_GPDMA-&amp;gt;CONFIG &amp;amp; 0x01) );&lt;BR /&gt;LPC_GPDMA-&amp;gt;CH[DMA_CH].SRCADDR = (uint32_t) &amp;amp;LPC_ADCHS-&amp;gt;FIFO_OUTPUT[0];&lt;BR /&gt;LPC_GPDMA-&amp;gt;CH[DMA_CH].DESTADDR = ((uint32_t) &amp;amp;sample);&lt;/P&gt;&lt;P&gt;LPC_GPDMA-&amp;gt;CH[DMA_CH].CONTROL = (DMA_TRANSFER_SIZE &amp;lt;&amp;lt; 0)// transfer size&lt;BR /&gt;| (0x2 &amp;lt;&amp;lt; 12) // src burst size&lt;BR /&gt;| (0x2 &amp;lt;&amp;lt; 15) // dst burst size&lt;BR /&gt;| (0x2 &amp;lt;&amp;lt; 18) // src transfer width&lt;BR /&gt;| (0x2 &amp;lt;&amp;lt; 21) // dst transfer width&lt;BR /&gt;| (0x1 &amp;lt;&amp;lt; 24) // src AHB master select&lt;BR /&gt;| (0x0 &amp;lt;&amp;lt; 25) // dst AHB master select&lt;BR /&gt;| (0x0 &amp;lt;&amp;lt; 26) // src increment: 0, src address not increment after each trans&lt;BR /&gt;| (0x1 &amp;lt;&amp;lt; 27) // dst increment: 1, dst address increment after each trans&lt;BR /&gt;| (0x1 &amp;lt;&amp;lt; 31); // terminal count interrupt enable bit: 1, enabled, (0x0UL &amp;lt;&amp;lt; 31); // Terminal count interrupt disabled&lt;/P&gt;&lt;P&gt;LPC_GPDMA-&amp;gt;CH[DMA_CH].CONFIG = (0x1 &amp;lt;&amp;lt; 0) // enable bit: 1 enable, 0 disable&lt;BR /&gt;| (HSADC_DMA_READ &amp;lt;&amp;lt; 1) // src peripheral: set to 8 - HSADC&lt;BR /&gt;| (0x0 &amp;lt;&amp;lt; 6) // dst peripheral: no setting - memory&lt;BR /&gt;| (0x2 &amp;lt;&amp;lt; 11) // flow control: peripheral to memory - DMA control&lt;BR /&gt;| (0x1 &amp;lt;&amp;lt; 14) // IE - interrupt error mask&lt;BR /&gt;| (0x1 &amp;lt;&amp;lt; 15) // ITC - terminal count interrupt mask&lt;BR /&gt;| (0x0 &amp;lt;&amp;lt; 16) // lock: when set, this bit enables locked transfer&lt;BR /&gt;| (0x1 &amp;lt;&amp;lt; 18); // Halt: 1, enable DMA requests; 0, ignore further src DMA req&lt;BR /&gt;LPC_GPDMA-&amp;gt;CH[DMA_CH].LLI = 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;uint32_t freqHSADC = 0;&lt;BR /&gt; uint32_t freqM4 = 0;&lt;BR /&gt;int main(void)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;int i, j;&lt;/P&gt;&lt;P&gt;int sts;&lt;/P&gt;&lt;P&gt;SystemCoreClockUpdate();&lt;BR /&gt;Board_Init(); &lt;BR /&gt;//************** Setup_ADCHS_Clock *****************//&lt;BR /&gt;Chip_USB0_Init(); /* Initialize the USB0 PLL to 480 MHz */&lt;BR /&gt;Chip_Clock_SetDivider(CLK_IDIV_A, CLKIN_USBPLL, 2); /* Source DIV_A from USB0PLL, and set divider to 2 (Max div value supported is 4) [IN 480 MHz; OUT 240 MHz */&lt;BR /&gt;Chip_Clock_SetDivider(CLK_IDIV_B, CLKIN_IDIVA, 4); /* Source DIV_B from DIV_A, [IN 240 MHz; OUT 80 MHz */&lt;BR /&gt;Chip_Clock_SetBaseClock(CLK_BASE_ADCHS, CLKIN_IDIVB, true, false); /* Source ADHCS base clock from DIV_B */&lt;BR /&gt;Chip_Clock_EnableOpts(CLK_ADCHS, true, true, 1); /* Enable the Clock */&lt;BR /&gt; &lt;BR /&gt; /* ************* Show the HSADC clock rate */&lt;BR /&gt; freqHSADC = Chip_HSADC_GetBaseClockRate(LPC_ADCHS);&lt;BR /&gt; DEBUGOUT("HSADC sampling rate = %dKHz\r\n", freqHSADC / 1000);&lt;BR /&gt; &lt;BR /&gt; /******************* Show the M4 clock rate */&lt;BR /&gt; freqM4 = Chip_Clock_GetBaseClocktHz(CLK_BASE_MX);&lt;BR /&gt; DEBUGOUT("M4 Clock rate = %dKHz\r\n", freqM4 / 1000);&lt;BR /&gt; &lt;BR /&gt;//************** Setup_DMA *******************//&lt;BR /&gt;Setup_DMA_J();&lt;BR /&gt;//************** Setup_ADCHS *****************//&lt;BR /&gt;Setup_ADCHS_J();&lt;/P&gt;&lt;P&gt;//************** Start ADCHS *****************//&lt;/P&gt;&lt;P&gt;Chip_HSADC_SWTrigger(LPC_ADCHS);&lt;/P&gt;&lt;P&gt;//************** Start DMA *******************//&lt;/P&gt;&lt;P&gt;LPC_GPDMA-&amp;gt;CH[DMA_CH].CONFIG = (0x1 &amp;lt;&amp;lt; 0); // enable bit, 1 enable, 0 disable&lt;/P&gt;&lt;P&gt;//need to add wait for DMA complete&lt;BR /&gt;for(i=0; i&amp;lt;4094; i++)&lt;BR /&gt;{&lt;BR /&gt;//Issues with DMA interrupt, wait for end of sampling&lt;BR /&gt;}&lt;BR /&gt;// *****Printout Mem_buffer &lt;BR /&gt;for(j=0; j&amp;lt;4095; j++)&lt;BR /&gt;{&lt;BR /&gt; sample_value = sample[j];&lt;/P&gt;&lt;P&gt;DEBUGOUT("Mem_Buff content = %d\r\n", sample_value);&lt;BR /&gt;}&lt;BR /&gt;//******************** Shutdown ADCHS &amp;amp; DMA ***********&lt;BR /&gt;Chip_HSADC_FlushFIFO(LPC_ADCHS);&lt;BR /&gt;sts = Chip_HSADC_GetFIFOLevel(LPC_ADCHS);&lt;/P&gt;&lt;P&gt;/* Shutdown HSADC when done */&lt;BR /&gt;Chip_GPDMA_DeInit(LPC_GPDMA);&lt;BR /&gt;Chip_HSADC_DeInit(LPC_ADCHS);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Apr 2018 01:49:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-keep-getting-quot-Empty-FIFO-empty-quot-0x8000-from-HSADC/m-p/734753#M29669</guid>
      <dc:creator>cpchen</dc:creator>
      <dc:date>2018-04-14T01:49:57Z</dc:date>
    </item>
    <item>
      <title>Re: DMA keep getting "Empty FIFO empty" 0x8000 from HSADC</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-keep-getting-quot-Empty-FIFO-empty-quot-0x8000-from-HSADC/m-p/734754#M29670</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;Hi&amp;nbsp;&lt;SPAN style="color: #646464;"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A _jive_internal="true" data-content-finding="Community" data-userid="314407" data-username="cpchen" href="https://community.nxp.com/people/cpchen" style="color: #5e89c1; border: 0px; font-weight: 600; text-decoration: none; font-size: 11.9994px;"&gt;CP Chen&lt;/A&gt;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;Thank you for your interest in NXP Semiconductor products and&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;the opportunity to serve you. &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;I was wondering if you can share a compile-able demo and introduce the steps of testing, then I can replicate the issue on my site.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;SPAN style="background-color: #ffffff; font-size: 16px;"&gt;I'm looking forward to you reply.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-size: 14px;"&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;TIC&lt;/DIV&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;/DIV&gt;&lt;DIV style="color: #51626f; border: 0px; font-size: 14px;"&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 23 Apr 2018 09:12:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-keep-getting-quot-Empty-FIFO-empty-quot-0x8000-from-HSADC/m-p/734754#M29670</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2018-04-23T09:12:18Z</dc:date>
    </item>
    <item>
      <title>Re: DMA keep getting "Empty FIFO empty" 0x8000 from HSADC</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-keep-getting-quot-Empty-FIFO-empty-quot-0x8000-from-HSADC/m-p/734755#M29671</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I don't know if this is the reason for your problem, but you seem to be starting from the last vector (1,7), since this is the last call to Chip_HSADC_SetActiveDescriptor(), so you are never waiting for the HSADC recovery time before taking measurements. This really only needs to be called once with the descriptor that you want to start the measurements with. Also you never save the Table 0 descriptor 0.&lt;/P&gt;&lt;P&gt;Try the following changes.&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;// REMOVE Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 0);&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// REMOVE Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 1);&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// REMOVE Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 2);&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// REMOVE Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 3);&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// REMOVE Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 4);&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// REMOVE Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 5);&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// REMOVE Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 6);&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;// REMOVE Chip_HSADC_SetActiveDescriptor(LPC_ADCHS, 1, 7);&lt;/SPAN&gt;


&lt;SPAN class="token function"&gt;Chip_HSADC_SetupDescEntry&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;HSADC_DESC_CH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_BRANCH_SWAP &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;HSADC_DESC_MATCH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0x90&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_RESET_TIMER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_UpdateDescTable&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// ADD -- SAVE TABLE 0&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_SetupDescEntry&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;HSADC_DESC_CH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_BRANCH_NEXT &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;HSADC_DESC_MATCH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_RESET_TIMER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_SetupDescEntry&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;HSADC_DESC_CH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_BRANCH_NEXT &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;HSADC_DESC_MATCH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_RESET_TIMER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_SetupDescEntry&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;HSADC_DESC_CH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_BRANCH_NEXT &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;HSADC_DESC_MATCH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_RESET_TIMER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_SetupDescEntry&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;HSADC_DESC_CH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_BRANCH_NEXT &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;HSADC_DESC_MATCH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_RESET_TIMER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_SetupDescEntry&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;4&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;HSADC_DESC_CH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_BRANCH_NEXT &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;HSADC_DESC_MATCH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_RESET_TIMER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_SetupDescEntry&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;5&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;HSADC_DESC_CH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_BRANCH_NEXT &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;HSADC_DESC_MATCH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_RESET_TIMER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_SetupDescEntry&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;6&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;HSADC_DESC_CH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_BRANCH_NEXT &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;HSADC_DESC_MATCH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_RESET_TIMER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_SetupDescEntry&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;7&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;HSADC_DESC_CH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_BRANCH_FIRST &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;HSADC_DESC_MATCH&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; HSADC_DESC_RESET_TIMER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="token function"&gt;Chip_HSADC_UpdateDescTable&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;Chip_HSADC_SetActiveDescriptor&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;LPC_ADCHS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// ADD -- SET TABLE 0, VECTOR 0 ACTIVE&lt;/SPAN&gt;

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 May 2020 18:37:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-keep-getting-quot-Empty-FIFO-empty-quot-0x8000-from-HSADC/m-p/734755#M29671</guid>
      <dc:creator>Ray_V</dc:creator>
      <dc:date>2020-05-12T18:37:35Z</dc:date>
    </item>
  </channel>
</rss>

