<?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: ADC DMA in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324127#M14809</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Pascal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I recommed using short word transfers (unless you have a reason for long word transfer).&lt;/P&gt;&lt;P&gt;When using the eDMA you have to respect its rules:&lt;/P&gt;&lt;P&gt;- all source and destination addresses MUST be aligned (if using 32 bits the last 2 bits of the address MUST bei 00) - check UART_RINGBUFFER address.&lt;/P&gt;&lt;P&gt;- also the transfer count MUST match with the transfer width. If using 32 bit width the total size must be a multiple of this value (4, 8, 12, 16, 20 etc.) If not there will be an error and an abort.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Always check what the error register is telling you - it tells you the reason and whether it was due to the destination or the source. Then you should be able to see why and correct it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 30 Jun 2014 13:28:29 GMT</pubDate>
    <dc:creator>mjbcswitzerland</dc:creator>
    <dc:date>2014-06-30T13:28:29Z</dc:date>
    <item>
      <title>ADC DMA</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324124#M14806</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi at all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;At the moment, I'm writing the last things of my application for my bachelor thesis. For this project&lt;/P&gt;&lt;P&gt;I need to measure every 200us the internal adc. Then I store the measured values into a ringbuffer&lt;/P&gt;&lt;P&gt;and try to send them out to the UART. Well, this application works! But without the use of DMA. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In this project I have got a FTM timer which generates every 200us an interrupt request. Now I&lt;/P&gt;&lt;P&gt;start the adc and wait for the adc complete interrupt. If this interrupt fires, I write the data into the &lt;/P&gt;&lt;P&gt;ringbuffer and send them to the UART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think this is a typical application for dma use or? So I have tried to implement it, but it doesen't&lt;/P&gt;&lt;P&gt;work. I have tried to implement some code examples of the community but it doesn't work too.&lt;/P&gt;&lt;P&gt;Can anyone explain what to do and in which order? or does anyone has got an example code for&lt;/P&gt;&lt;P&gt;this specific case?! I use a MK10DX128VLH7 cpu.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Pascal&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 25 Jun 2014 14:33:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324124#M14806</guid>
      <dc:creator>pascalschröer</dc:creator>
      <dc:date>2014-06-25T14:33:41Z</dc:date>
    </item>
    <item>
      <title>Re: ADC DMA</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324125#M14807</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Pascal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The uTasker supports ADC circular buffer operation based on DMA. It is documented in &lt;A href="http://www.utasker.com/docs/uTasker/uTaskerADC.pdf" title="http://www.utasker.com/docs/uTasker/uTaskerADC.pdf"&gt;http://www.utasker.com/docs/uTasker/uTaskerADC.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;It also supports sending the same buffer (after a delay) to the DAC using DMA. Optionally it will also store the samples in a file on an SD card connected via SPI [&lt;EM&gt;when no SDHC&lt;/EM&gt;] (WAV file for audio).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You know where the code is ;-)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It works on all K parts (&lt;EM&gt;the next release also on all KL parts - apart from the KL02 which doesn't support DMA...&lt;/EM&gt;)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 25 Jun 2014 15:28:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324125#M14807</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2014-06-25T15:28:16Z</dc:date>
    </item>
    <item>
      <title>Re: ADC DMA</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324126#M14808</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for your answer Mark, but I haven't got understood the whole code of your uTasker project.&lt;/P&gt;&lt;P&gt;So I tried to write a very simple example with the help of your code and the datasheet. This example&lt;/P&gt;&lt;P&gt;should only wait for a the adc complete flag and then write the adc data to my ringbuffer... But if I&lt;/P&gt;&lt;P&gt;debug the program, I get some errors in the DMA_ES register and the dma doesn't work&lt;/P&gt;&lt;P&gt;(TCDn_DADDR is inconsistent with TCDn_ATTR[DSIZE])&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do you knwo what I can do now?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Pascal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;void ADC_init(void)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;ADC0_SC1A = ADC_SC1_ADCH(0x13);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; ADC0_CFG1 |= ADC_CFG1_MODE(0x03);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; ADC0_CFG1 |= ADC_CFG1_ADIV(0x03);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; ADC0_SC1A = ADC_SC1_ADCH(0x13);//1A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; ADC0_SC3 |= ADC_SC3_ADCO_MASK;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; //ADC0_SC2 |= ADC_SC2_DMAEN_MASK;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void DMA_init(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC7 |= SIM_SCGC7_DMA_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Start the sequence*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_ERQ |= DMA_ERQ_ERQ0_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set the Source Address*/ &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_SADDR = (uint32_t)(&amp;amp;ADC0_RA); //UART2_D 0x4006C007&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Destination address */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_DADDR = (uint32_t)(&amp;amp;UART_RINGBUFFER);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Source offset*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_SOFF = 0; // No offset&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Destination offset*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_DOFF = 0; //No offset&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_ATTR = 0x00&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | DMA_ATTR_SSIZE(4) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | DMA_ATTR_DSIZE(4);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Transfer size */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_NBYTES_MLNO = 4; //4 byte&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* No adjustment to&amp;nbsp;&amp;nbsp;&amp;nbsp; source address */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_SLAST = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* No link channel, transactions */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_CITER_ELINKNO = 1; //1 major loop&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Adjustment to destination address */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_DLASTSGA = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* No link channel, transactions */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_BITER_ELINKNO = 1; //1 major loop&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_CSR = 0; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMAMUX_CHCFG0 = 0x00;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMAMUX_CHCFG0 = 0x00&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |DMAMUX_CHCFG_ENBL_MASK &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |DMAMUX_CHCFG_SOURCE(40); //Enable channel 0, Request souurce = ADC0&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 30 Jun 2014 10:31:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324126#M14808</guid>
      <dc:creator>pascalschröer</dc:creator>
      <dc:date>2014-06-30T10:31:26Z</dc:date>
    </item>
    <item>
      <title>Re: ADC DMA</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324127#M14809</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Pascal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I recommed using short word transfers (unless you have a reason for long word transfer).&lt;/P&gt;&lt;P&gt;When using the eDMA you have to respect its rules:&lt;/P&gt;&lt;P&gt;- all source and destination addresses MUST be aligned (if using 32 bits the last 2 bits of the address MUST bei 00) - check UART_RINGBUFFER address.&lt;/P&gt;&lt;P&gt;- also the transfer count MUST match with the transfer width. If using 32 bit width the total size must be a multiple of this value (4, 8, 12, 16, 20 etc.) If not there will be an error and an abort.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Always check what the error register is telling you - it tells you the reason and whether it was due to the destination or the source. Then you should be able to see why and correct it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 30 Jun 2014 13:28:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324127#M14809</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2014-06-30T13:28:29Z</dc:date>
    </item>
    <item>
      <title>Re: ADC DMA</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324128#M14810</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mark,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have found a little problem but now it works! I can store some data in my ringbuffer. Now I would like&lt;/P&gt;&lt;P&gt;to connect the adc0 and the UART1 dma. So I tried to do it this way:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void DMA_init(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC7 |= SIM_SCGC7_DMA_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Start the sequence*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_ERQ |= DMA_ERQ_ERQ0_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set the Source Address*/ &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_SADDR = (uint32_t)(&amp;amp;ADC0_RA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //DMA_TCD0_DADDR = (uint32_t)(&amp;amp;UART_RINGBUFFER);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //This case works!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_DADDR = (uint32_t)(&amp;amp;UART1_D);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_SOFF = 0; // No offset&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_DOFF = 2; //No offset&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_ATTR = 0x00&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | DMA_ATTR_SSIZE(1) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | DMA_ATTR_DSIZE(1);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Transfer size */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_NBYTES_MLNO = 2; //4 byte&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* No adjustment to&amp;nbsp;&amp;nbsp;&amp;nbsp; source address */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_SLAST = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_CITER_ELINKYES = 0x8A01; //link to the UART1 transmit channel&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //DMA_TCD0_CITER_ELINKNO = 1; //1 major loop&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_BITER_ELINKYES = 0x8A01; //link to the UART1 transmit channel&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //DMA_TCD0_BITER_ELINKNO = 1; //1 major loop&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_DLASTSGA = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_TCD0_CSR = 0; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMAMUX_CHCFG0 = 0x00;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMAMUX_CHCFG0 = 0x00&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |DMAMUX_CHCFG_ENBL_MASK &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |DMAMUX_CHCFG_SOURCE(40); //Request souurce = ADC0&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The problem is, that the UART1_D register doesn't change. So there isn't a UART&lt;/P&gt;&lt;P&gt;transfere. Do I have to enable something or is there maybe a fault in the ELINKER register?&lt;/P&gt;&lt;P&gt;Because if I enable the disabled comments in the code I can store the adc values in&lt;/P&gt;&lt;P&gt;my ringbuffer without any problems.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Pascal&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 30 Jun 2014 14:23:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324128#M14810</guid>
      <dc:creator>pascalschröer</dc:creator>
      <dc:date>2014-06-30T14:23:21Z</dc:date>
    </item>
    <item>
      <title>Re: ADC DMA</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324129#M14811</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Pascal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't know that copying the ADC value directly to the UART is the best method.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The ADC is best read as a short word since it will have 12..16 byte resolution but a write to the UART data register should be a single byte write. There should also be no destination increment after the write. It is not possible to read a short word and write just one byte (the source and destination should match).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It may be that the UART data register write is working the first time; the UART must be configured correctly in advance to operate. Also you can't read the UART_D register to see whether the write took place because this reads the input (received) byte and not the byte that was written there (it would only read the written byte when the output is connected to the input (loop-back)). This means it is best to watch the data sent by the UART.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You will also need to have the UART set to a speed that allows its data to be sent faster than the ADC is being read - if not the UART output will overrun and there will be data loss.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It may be that you can transfer 16 bits from the ADC with two byte reads and two byte writes; the source would need to increment between the two byte reads to read the low and high register bytes but the destination remain stable in order to write two bytes to the UART_D (minor loop does two transfers and major loop just 1). Since the UART output is buffered it should be able to do this as long as the UART transmission is completed by the next DMA cycle (ADC sampling rate).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Generally it may be more flexible to use the circular buffer to receive ADC sampes to. Then set up a second DMA channel to transfer this data to the UART. This woudl also allow the data in the circular buffer to be processed before sending to the UART (eg. using the DMA half-buffer interrupt).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 30 Jun 2014 15:24:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA/m-p/324129#M14811</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2014-06-30T15:24:36Z</dc:date>
    </item>
  </channel>
</rss>

