<?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>LPC Microcontrollers中的主题 Problem with HSADC and GPDMA</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Problem-with-HSADC-and-GPDMA/m-p/563253#M16636</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Vandar501 on Wed Jan 20 11:39:23 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello everyone,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I want to use the HSADC with GPDMA (LPC4370) for transfer constantly a 16 sample burst from FIFO to a Buffer. So far the HSADC collect Samples and put them in the FIFO and the FIFO_FULL Flag appears so the DMA transfer data to the buffer. But after this first transfer the DMA stops and the HSADC continues sampling new data. I thought the Problem was that the FIFO_FULL Flag won't reset so the DMA can't get a new request. So I tried to reset the FIFO_FULL FLAG manually but nothing happens. It actually happens that the FIFO_FULL and FIFO_EMPTY Flag are set at the same time after the first transfer is complete.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I searched the whole Forum for Information about this Topic and I found this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://https://github.com/embeddedartists/labtool/blob/master/fw/program/source/capture_vadc.c" rel="nofollow noopener noreferrer" target="_blank"&gt;Laptool VADC&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;and&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://https://www.lpcware.com/system/files/hsadc.c" rel="nofollow noopener noreferrer" target="_blank"&gt;hsadc.c&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But still I don't figure out the Problem.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This are my Configurations for HSADC and DMA:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
//Initialize DMA
NVIC_DisableIRQ(DMA_IRQn);
LPC_GPDMA-&amp;gt;CH[0].CONFIG = 0;

//Clear all interrupts on Channel 0
LPC_GPDMA-&amp;gt;INTERRCLR&amp;nbsp; = 0x1;
LPC_GPDMA-&amp;gt;INTTCCLEAR = 0x1;

//Setting Muxing for DMA
setDMAMUX();

//Programming the DMA Controller

//Enabling the DMA-Controller
LPC_GPDMA-&amp;gt;CONFIG = 0x01;
while ( !(LPC_GPDMA-&amp;gt;CONFIG &amp;amp; 0x01) );

//Find an inactive DMA-Channel with the highest priority
uint8_t ch_no = Chip_GPDMA_GetFreeChannel(LPC_GPDMA,0);

//Setting Source and Destination Adress, LLI-Option and Transfer Size
LPC_GPDMA-&amp;gt;CH[ch_no].SRCADDR = (uint32_t) &amp;amp;LPC_ADCHS-&amp;gt;FIFO_OUTPUT[0];
LPC_GPDMA-&amp;gt;CH[ch_no].DESTADDR = (uint32_t) &amp;amp;buffer;
LPC_GPDMA-&amp;gt;CH[ch_no].LLI =&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0;
LPC_GPDMA-&amp;gt;CH[ch_no].CONTROL=&amp;nbsp;&amp;nbsp; (0x8 &amp;lt;&amp;lt; 1 )//Transfer size
&amp;nbsp; | (0x3 &amp;lt;&amp;lt; 12)//Source burst size
&amp;nbsp; | (0x3 &amp;lt;&amp;lt; 15)//Destination burst size
&amp;nbsp; | (0x2 &amp;lt;&amp;lt; 18)//Source transfer width
&amp;nbsp; | (0x2 &amp;lt;&amp;lt; 21)//Destination transfer width
&amp;nbsp; | (0x1 &amp;lt;&amp;lt; 24)//Source AHB master select
&amp;nbsp; | (0x0 &amp;lt;&amp;lt; 25)//Destination AHB master select
&amp;nbsp; | (0x0 &amp;lt;&amp;lt; 26)//Source increment
&amp;nbsp; | (0x1 &amp;lt;&amp;lt; 27)//Destination increment
/*note*/&amp;nbsp; | (0x1 &amp;lt;&amp;lt; 31);//Terminal count interrupt enable bit


//Setting Source Peripheral, Setting Transfer-type, Flow Control
LPC_GPDMA-&amp;gt;CH[ch_no].CONFIG =&amp;nbsp; (0x8 &amp;lt;&amp;lt; 1 )//Source peripheral
 | (0x0 &amp;lt;&amp;lt; 6 )//Destination peripheral
 | (0x2 &amp;lt;&amp;lt; 11)//Flow control and transfer type
 | (0x1 &amp;lt;&amp;lt; 14)//Interrupt error mask
 | (0x1 &amp;lt;&amp;lt; 15);//Terminal count interrupt mask

//Enable Interrupt for DMA
NVIC_EnableIRQ(DMA_IRQn);

//Enable Channel
LPC_GPDMA-&amp;gt;CH[ch_no].CONFIG |= (0x1 &amp;lt;&amp;lt; 0);

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
//initialize HSADC Clock
hsadc_init();

/* Show the actual HSADC clock rate */
freqHSADC = Chip_HSADC_GetBaseClockRate(LPC_ADCHS);
DEBUGOUT("HSADC sampling rate = %dKHz\r\n\n\n", freqHSADC / 1000);

//disable attenuator on AI_1
SET_PIN(PIN_ATT_AI1_5K,0);
SET_PIN(PIN_ATT_AI1_10K,0);

//Reset all Interrupts
NVIC_DisableIRQ(ADCHS_IRQn);
LPC_ADCHS-&amp;gt;INTS[0].CLR_EN = 0x7f; // disable Interrupt0
LPC_ADCHS-&amp;gt;INTS[0].CLR_STAT = 0x7f; // clear Interrupt-Status
while(LPC_ADCHS-&amp;gt;INTS[0].STATUS &amp;amp; 0x7d); // wait for status to clear, have to exclude FIFO_EMPTY (bit 1)
LPC_ADCHS-&amp;gt;INTS[1].CLR_EN = 0x7f;
LPC_ADCHS-&amp;gt;INTS[1].CLR_STAT = 0x7f;
while(LPC_ADCHS-&amp;gt;INTS[1].STATUS &amp;amp; 0x7d); // wait for status to clear, have to exclude FIFO_EMPTY (bit 1)

// Make sure the HSADC is not powered down
LPC_ADCHS-&amp;gt;POWER_DOWN = (0&amp;lt;&amp;lt;0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* PD_CTRL:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=disable power down, 1=enable power down */

// Clear FIFO
LPC_ADCHS-&amp;gt;FLUSH = 1;

// FIFO Settings&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0= 1 sample packed into 32 bit, 1= 2 samples packed into 32 bit */
LPC_ADCHS-&amp;gt;FIFO_CFG =
(0x0&amp;lt;&amp;lt;0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* UNPACKED */
(0x8&amp;lt;&amp;lt;1);&amp;nbsp; /* FIFO_LEVEL */

LPC_ADCHS-&amp;gt;DSCR_STS =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ACT_TABLE:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=table 0 is active, 1=table 1 is active */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ACT_DESCRIPTOR:&amp;nbsp;&amp;nbsp; ID of the descriptor that is active */

// Select both positive and negative DC biasing for input 2
Chip_HSADC_SetACDCBias(LPC_ADCHS, 2, HSADC_CHANNEL_DCBIAS, HSADC_CHANNEL_NODCBIAS);

LPC_ADCHS-&amp;gt;THR[0] = 0x000 &amp;lt;&amp;lt; 0 | 0xFFF &amp;lt;&amp;lt; 16;//Default
LPC_ADCHS-&amp;gt;THR[1] = 0x000 &amp;lt;&amp;lt; 0 | 0xFFF &amp;lt;&amp;lt; 16;//Default


LPC_ADCHS-&amp;gt;CONFIG =&amp;nbsp; /* configuration register */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* TRIGGER_MASK:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=triggers off, 1=SW trigger, 2=EXT trigger, 3=both triggers */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;2) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* TRIGGER_MODE:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=rising, 1=falling, 2=low, 3=high external trigger */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;4) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* TRIGGER_SYNC:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=no sync, 1=sync external trigger input */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;5) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* CHANNEL_ID_EN:&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=don't add, 1=add channel id to FIFO output data */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x90&amp;lt;&amp;lt;6);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* RECOVERY_TIME:&amp;nbsp;&amp;nbsp;&amp;nbsp; ADC recovery time from power down, default is 0x90 */

/* Setup data format for 2's complement and update clock settings. This function
&amp;nbsp;&amp;nbsp; should be called whenever a clock change is made to the HSADC */
Chip_HSADC_SetPowerSpeed(LPC_ADCHS, false);

LPC_ADCHS-&amp;gt;DESCRIPTOR[0][0] =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2&amp;lt;&amp;lt;0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* CHANNEL_NR:&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=convert input 0, 1=convert input 1, ..., 5=convert input 5 */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;3) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* HALT:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=continue with next descriptor after this one, 1=halt after this and restart at a new trigger */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;4) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* INTERRUPT:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1=raise interrupt when ADC result is available */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;5) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* POWER_DOWN:&amp;nbsp;&amp;nbsp;&amp;nbsp; 1=power down after this conversion */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;6) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* BRANCH:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=continue with next descriptor (wraps around after top) */
&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; 1=branch to the first descriptor in this table */
&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; 2=swap tables and branch to the first descriptor of the new table */
&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; 3=reserved (do not store sample). continue with next descriptor (wraps around the top) */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x95&amp;lt;&amp;lt;8)&amp;nbsp; |&amp;nbsp;&amp;nbsp; /* MATCH_VALUE:&amp;nbsp;&amp;nbsp; Evaluate this descriptor when descriptor timer value is equal to match value */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;22) |&amp;nbsp;&amp;nbsp; /* THRESHOLD_SEL: 0=no comparison, 1=THR_A, 2=THR_B */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;24) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* RESET_TIME:&amp;nbsp;&amp;nbsp;&amp;nbsp; 1=reset descriptor timer */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;31);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* UPDATE_TABLE:&amp;nbsp; 1=update table with all 8 descriptors of this table */



//Enable HSADC power
Chip_HSADC_EnablePower(LPC_ADCHS);

// Enable interrupts
NVIC_EnableIRQ(ADCHS_IRQn);

Chip_HSADC_UpdateDescTable(LPC_ADCHS, 0);

//clear interrupt stats
Chip_HSADC_ClearIntStatus(LPC_ADCHS, 0, Chip_HSADC_GetEnabledInts(LPC_ADCHS, 0));

Chip_HSADC_EnableInts(LPC_ADCHS, 0 ,(HSADC_INT0_DSCR_DONE | HSADC_INT0_FIFO_FULL));

//start HSADC
Chip_HSADC_SWTrigger(LPC_ADCHS);
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope someone can help. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:47:08 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:47:08Z</dc:date>
    <item>
      <title>Problem with HSADC and GPDMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Problem-with-HSADC-and-GPDMA/m-p/563253#M16636</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Vandar501 on Wed Jan 20 11:39:23 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello everyone,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I want to use the HSADC with GPDMA (LPC4370) for transfer constantly a 16 sample burst from FIFO to a Buffer. So far the HSADC collect Samples and put them in the FIFO and the FIFO_FULL Flag appears so the DMA transfer data to the buffer. But after this first transfer the DMA stops and the HSADC continues sampling new data. I thought the Problem was that the FIFO_FULL Flag won't reset so the DMA can't get a new request. So I tried to reset the FIFO_FULL FLAG manually but nothing happens. It actually happens that the FIFO_FULL and FIFO_EMPTY Flag are set at the same time after the first transfer is complete.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I searched the whole Forum for Information about this Topic and I found this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://https://github.com/embeddedartists/labtool/blob/master/fw/program/source/capture_vadc.c" rel="nofollow noopener noreferrer" target="_blank"&gt;Laptool VADC&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;and&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://https://www.lpcware.com/system/files/hsadc.c" rel="nofollow noopener noreferrer" target="_blank"&gt;hsadc.c&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But still I don't figure out the Problem.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This are my Configurations for HSADC and DMA:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
//Initialize DMA
NVIC_DisableIRQ(DMA_IRQn);
LPC_GPDMA-&amp;gt;CH[0].CONFIG = 0;

//Clear all interrupts on Channel 0
LPC_GPDMA-&amp;gt;INTERRCLR&amp;nbsp; = 0x1;
LPC_GPDMA-&amp;gt;INTTCCLEAR = 0x1;

//Setting Muxing for DMA
setDMAMUX();

//Programming the DMA Controller

//Enabling the DMA-Controller
LPC_GPDMA-&amp;gt;CONFIG = 0x01;
while ( !(LPC_GPDMA-&amp;gt;CONFIG &amp;amp; 0x01) );

//Find an inactive DMA-Channel with the highest priority
uint8_t ch_no = Chip_GPDMA_GetFreeChannel(LPC_GPDMA,0);

//Setting Source and Destination Adress, LLI-Option and Transfer Size
LPC_GPDMA-&amp;gt;CH[ch_no].SRCADDR = (uint32_t) &amp;amp;LPC_ADCHS-&amp;gt;FIFO_OUTPUT[0];
LPC_GPDMA-&amp;gt;CH[ch_no].DESTADDR = (uint32_t) &amp;amp;buffer;
LPC_GPDMA-&amp;gt;CH[ch_no].LLI =&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0;
LPC_GPDMA-&amp;gt;CH[ch_no].CONTROL=&amp;nbsp;&amp;nbsp; (0x8 &amp;lt;&amp;lt; 1 )//Transfer size
&amp;nbsp; | (0x3 &amp;lt;&amp;lt; 12)//Source burst size
&amp;nbsp; | (0x3 &amp;lt;&amp;lt; 15)//Destination burst size
&amp;nbsp; | (0x2 &amp;lt;&amp;lt; 18)//Source transfer width
&amp;nbsp; | (0x2 &amp;lt;&amp;lt; 21)//Destination transfer width
&amp;nbsp; | (0x1 &amp;lt;&amp;lt; 24)//Source AHB master select
&amp;nbsp; | (0x0 &amp;lt;&amp;lt; 25)//Destination AHB master select
&amp;nbsp; | (0x0 &amp;lt;&amp;lt; 26)//Source increment
&amp;nbsp; | (0x1 &amp;lt;&amp;lt; 27)//Destination increment
/*note*/&amp;nbsp; | (0x1 &amp;lt;&amp;lt; 31);//Terminal count interrupt enable bit


//Setting Source Peripheral, Setting Transfer-type, Flow Control
LPC_GPDMA-&amp;gt;CH[ch_no].CONFIG =&amp;nbsp; (0x8 &amp;lt;&amp;lt; 1 )//Source peripheral
 | (0x0 &amp;lt;&amp;lt; 6 )//Destination peripheral
 | (0x2 &amp;lt;&amp;lt; 11)//Flow control and transfer type
 | (0x1 &amp;lt;&amp;lt; 14)//Interrupt error mask
 | (0x1 &amp;lt;&amp;lt; 15);//Terminal count interrupt mask

//Enable Interrupt for DMA
NVIC_EnableIRQ(DMA_IRQn);

//Enable Channel
LPC_GPDMA-&amp;gt;CH[ch_no].CONFIG |= (0x1 &amp;lt;&amp;lt; 0);

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
//initialize HSADC Clock
hsadc_init();

/* Show the actual HSADC clock rate */
freqHSADC = Chip_HSADC_GetBaseClockRate(LPC_ADCHS);
DEBUGOUT("HSADC sampling rate = %dKHz\r\n\n\n", freqHSADC / 1000);

//disable attenuator on AI_1
SET_PIN(PIN_ATT_AI1_5K,0);
SET_PIN(PIN_ATT_AI1_10K,0);

//Reset all Interrupts
NVIC_DisableIRQ(ADCHS_IRQn);
LPC_ADCHS-&amp;gt;INTS[0].CLR_EN = 0x7f; // disable Interrupt0
LPC_ADCHS-&amp;gt;INTS[0].CLR_STAT = 0x7f; // clear Interrupt-Status
while(LPC_ADCHS-&amp;gt;INTS[0].STATUS &amp;amp; 0x7d); // wait for status to clear, have to exclude FIFO_EMPTY (bit 1)
LPC_ADCHS-&amp;gt;INTS[1].CLR_EN = 0x7f;
LPC_ADCHS-&amp;gt;INTS[1].CLR_STAT = 0x7f;
while(LPC_ADCHS-&amp;gt;INTS[1].STATUS &amp;amp; 0x7d); // wait for status to clear, have to exclude FIFO_EMPTY (bit 1)

// Make sure the HSADC is not powered down
LPC_ADCHS-&amp;gt;POWER_DOWN = (0&amp;lt;&amp;lt;0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* PD_CTRL:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=disable power down, 1=enable power down */

// Clear FIFO
LPC_ADCHS-&amp;gt;FLUSH = 1;

// FIFO Settings&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0= 1 sample packed into 32 bit, 1= 2 samples packed into 32 bit */
LPC_ADCHS-&amp;gt;FIFO_CFG =
(0x0&amp;lt;&amp;lt;0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* UNPACKED */
(0x8&amp;lt;&amp;lt;1);&amp;nbsp; /* FIFO_LEVEL */

LPC_ADCHS-&amp;gt;DSCR_STS =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ACT_TABLE:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=table 0 is active, 1=table 1 is active */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ACT_DESCRIPTOR:&amp;nbsp;&amp;nbsp; ID of the descriptor that is active */

// Select both positive and negative DC biasing for input 2
Chip_HSADC_SetACDCBias(LPC_ADCHS, 2, HSADC_CHANNEL_DCBIAS, HSADC_CHANNEL_NODCBIAS);

LPC_ADCHS-&amp;gt;THR[0] = 0x000 &amp;lt;&amp;lt; 0 | 0xFFF &amp;lt;&amp;lt; 16;//Default
LPC_ADCHS-&amp;gt;THR[1] = 0x000 &amp;lt;&amp;lt; 0 | 0xFFF &amp;lt;&amp;lt; 16;//Default


LPC_ADCHS-&amp;gt;CONFIG =&amp;nbsp; /* configuration register */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* TRIGGER_MASK:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=triggers off, 1=SW trigger, 2=EXT trigger, 3=both triggers */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;2) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* TRIGGER_MODE:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=rising, 1=falling, 2=low, 3=high external trigger */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;4) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* TRIGGER_SYNC:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=no sync, 1=sync external trigger input */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;5) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* CHANNEL_ID_EN:&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=don't add, 1=add channel id to FIFO output data */
&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x90&amp;lt;&amp;lt;6);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* RECOVERY_TIME:&amp;nbsp;&amp;nbsp;&amp;nbsp; ADC recovery time from power down, default is 0x90 */

/* Setup data format for 2's complement and update clock settings. This function
&amp;nbsp;&amp;nbsp; should be called whenever a clock change is made to the HSADC */
Chip_HSADC_SetPowerSpeed(LPC_ADCHS, false);

LPC_ADCHS-&amp;gt;DESCRIPTOR[0][0] =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2&amp;lt;&amp;lt;0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* CHANNEL_NR:&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=convert input 0, 1=convert input 1, ..., 5=convert input 5 */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;3) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* HALT:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=continue with next descriptor after this one, 1=halt after this and restart at a new trigger */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;4) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* INTERRUPT:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1=raise interrupt when ADC result is available */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;5) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* POWER_DOWN:&amp;nbsp;&amp;nbsp;&amp;nbsp; 1=power down after this conversion */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;6) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* BRANCH:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0=continue with next descriptor (wraps around after top) */
&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; 1=branch to the first descriptor in this table */
&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; 2=swap tables and branch to the first descriptor of the new table */
&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; 3=reserved (do not store sample). continue with next descriptor (wraps around the top) */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0x95&amp;lt;&amp;lt;8)&amp;nbsp; |&amp;nbsp;&amp;nbsp; /* MATCH_VALUE:&amp;nbsp;&amp;nbsp; Evaluate this descriptor when descriptor timer value is equal to match value */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;22) |&amp;nbsp;&amp;nbsp; /* THRESHOLD_SEL: 0=no comparison, 1=THR_A, 2=THR_B */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;24) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* RESET_TIME:&amp;nbsp;&amp;nbsp;&amp;nbsp; 1=reset descriptor timer */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0&amp;lt;&amp;lt;31);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* UPDATE_TABLE:&amp;nbsp; 1=update table with all 8 descriptors of this table */



//Enable HSADC power
Chip_HSADC_EnablePower(LPC_ADCHS);

// Enable interrupts
NVIC_EnableIRQ(ADCHS_IRQn);

Chip_HSADC_UpdateDescTable(LPC_ADCHS, 0);

//clear interrupt stats
Chip_HSADC_ClearIntStatus(LPC_ADCHS, 0, Chip_HSADC_GetEnabledInts(LPC_ADCHS, 0));

Chip_HSADC_EnableInts(LPC_ADCHS, 0 ,(HSADC_INT0_DSCR_DONE | HSADC_INT0_FIFO_FULL));

//start HSADC
Chip_HSADC_SWTrigger(LPC_ADCHS);
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope someone can help. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:47:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Problem-with-HSADC-and-GPDMA/m-p/563253#M16636</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:47:08Z</dc:date>
    </item>
    <item>
      <title>Re: Problem with HSADC and GPDMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Problem-with-HSADC-and-GPDMA/m-p/563254#M16637</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Vandar501 on Wed Jan 27 01:50:53 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;OK Problem solve,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have to use Linked List's. The Problem was 0x0 under LLI. So I used the LLI type in the gpdma_18xx_43xx.h and created a single Linked List. After that I wrote the adresse of this LLI in the CH[ch_no].LLI Register. Now the DMA-Transfer never stops.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:47:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Problem-with-HSADC-and-GPDMA/m-p/563254#M16637</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:47:09Z</dc:date>
    </item>
    <item>
      <title>Re: Problem with HSADC and GPDMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Problem-with-HSADC-and-GPDMA/m-p/563255#M16638</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks to your post. I tried to operating HSADC and DMA using LPC-link2 but i've not worked them. So, can you post how to fix the LLI and a total code?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In addition, What is the setDMAMUX(); ?&lt;/P&gt;&lt;P&gt;please give me some info.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 18 Aug 2017 07:21:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Problem-with-HSADC-and-GPDMA/m-p/563255#M16638</guid>
      <dc:creator>jungjaekim</dc:creator>
      <dc:date>2017-08-18T07:21:18Z</dc:date>
    </item>
  </channel>
</rss>

