<?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 Trigger in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547765#M33393</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Is there an example for this scenario I could use to find the problem on my own?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 29 Jul 2016 10:39:50 GMT</pubDate>
    <dc:creator>schw_gld</dc:creator>
    <dc:date>2016-07-29T10:39:50Z</dc:date>
    <item>
      <title>ADC-DMA Trigger</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547762#M33390</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12.0pt; font-family: 'Times New Roman',serif;"&gt;I am trying to implement an ADC driver on a Kinetis MK22FN512M12. &lt;BR /&gt; The ADC is configured once and should be hardware triggered by the PIT. The ADC should then send a DMA request on conversion complete to readout the result. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12.0pt; font-family: 'Times New Roman',serif;"&gt;&lt;BR /&gt; The PIT triggering and ADC conversion seems to run properly. Also the DMA executes one minor loop correctly when I write a '1' to the DMA channel start register:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_1469683702911821" data-renderedposition="264_50_798_16" jivemacro_uid="_1469683702911821"&gt;&lt;SPAN style="font-size: 12.0pt; font-family: 'Times New Roman',serif;"&gt; DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].CSR |= &lt;SPAN style="font-size: 12.0pt; font-family: 'Times New Roman',serif;"&gt;DMA_CSR_START(1);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12.0pt; font-family: 'Times New Roman',serif;"&gt; Unfortunately, the ADC DMA request does not seem to work. The DMA Multiplexer is configured as&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14696836854017756 jive_macro_code jive_text_macro" data-renderedposition="332_50_798_48" jivemacro_uid="_14696836854017756"&gt;&lt;P&gt;DMAMUX-&amp;gt;CHCFG[SYSTEM_AUDIOADC_DMA_CHANNEL] = 0;&lt;/P&gt;&lt;P&gt;DMAMUX-&amp;gt;CHCFG[SYSTEM_AUDIOADC_DMA_CHANNEL] |= 28; // for ADC0&lt;/P&gt;&lt;P&gt;DMAMUX-&amp;gt;CHCFG[SYSTEM_AUDIOADC_DMA_CHANNEL] |= DMAMUX_CHCFG_ENBL_MASK;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and the ADC is configured to send a DMA request on COCO:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14696837082531988" data-renderedposition="432_50_798_16" jivemacro_uid="_14696837082531988"&gt;&lt;P&gt;ADC0-&amp;gt;SC2 = ADC_SC2_ADTRG_MASK | ADC_SC2_DMAEN_MASK;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The clocks are ungated. The COCO flag is asserted all the time because the result register is never read out. I really don't want to fall back to interrupts (which would work fine btw) for efficiency reasons.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you need further information about my code, feel free to ask!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can anyone help me with my&lt;/P&gt;&lt;P&gt;Thank you in advance!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jul 2016 05:28:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547762#M33390</guid>
      <dc:creator>schw_gld</dc:creator>
      <dc:date>2016-07-28T05:28:54Z</dc:date>
    </item>
    <item>
      <title>Re: ADC-DMA Trigger</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547763#M33391</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Eike,&lt;/P&gt;&lt;P&gt;In your SW I can see the line (with number mistake):&lt;/P&gt;&lt;P&gt;DMAMUX-&amp;gt;CHCFG[SYSTEM_AUDIOADC_DMA_CHANNEL] |= &lt;SPAN class="number"&gt;28; &lt;SPAN class="comment"&gt;// for ADC0&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="number"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="number"&gt;But in the Table in the Reference Manual I can see the ADC0 request source is 40.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="number"&gt;Which is nuber 40 (decimal) or 0x28 (hexa). So maybe this is the typo mistake.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="number"&gt;- If not, send me the complete DMA register configuration. If there is anything wrong, it won't work at all.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="number"&gt;Thanks,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="number"&gt;Michael&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jul 2016 08:25:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547763#M33391</guid>
      <dc:creator>michael_galda</dc:creator>
      <dc:date>2016-07-28T08:25:17Z</dc:date>
    </item>
    <item>
      <title>Re: ADC-DMA Trigger</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547764#M33392</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Oh, I should have copied the code direcly, it is actually already 0x28 in my firmware. I only made the mistake in the Question so this should work fine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here comes the DMA and DMAMUX configuration:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14697068422207786 jive_macro_code jive_text_macro" data-renderedposition="86_8_1192_544" jivemacro_uid="_14697068422207786" modifiedtitle="true"&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// Enable DMA requests from ADC&lt;/P&gt;&lt;P&gt;ADC0-&amp;gt;SC2 = ADC_SC2_ADTRG_MASK | ADC_SC2_DMAEN_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// Clear DMAMUX configuration register&lt;/P&gt;&lt;P&gt;DMAMUX-&amp;gt;CHCFG[SYSTEM_AUDIOADC_DMA_CHANNEL] = 0;&lt;/P&gt;&lt;P&gt;// Configure DMAMUX for ADC0&lt;/P&gt;&lt;P&gt;DMAMUX-&amp;gt;CHCFG[SYSTEM_AUDIOADC_DMA_CHANNEL] = 0x28; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;CR = DMA_CR_HOE_MASK;&lt;/P&gt;&lt;P&gt;// Set DMA source address to ADC0 Data Result Register&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].SADDR = (int)(&amp;amp;ADC0-&amp;gt;R[0]);&lt;/P&gt;&lt;P&gt;// Set offset for each pointer increase to zero to always read from the same register&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].SOFF = 0;&lt;/P&gt;&lt;P&gt;// 16 bit operations (buffer has 16 bit words)&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].ATTR = DMA_ATTR_SSIZE(1) | DMA_ATTR_DSIZE(1);&lt;/P&gt;&lt;P&gt;// Number of bytes per dma request (minor loop)&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].NBYTES_MLNO = 2;&lt;/P&gt;&lt;P&gt;// Number of bytes per dma request (minor loop)&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].SLAST = 0;&lt;/P&gt;&lt;P&gt;// Destination address is the start of the current writing buffer&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].DADDR = (int)WritingBuffer;&lt;/P&gt;&lt;P&gt;// Destination address increases by 2 after each request (minor loop)&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].DOFF = 2;&lt;/P&gt;&lt;P&gt;// Number of iterations (major loop) until an interrupt is thrown&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].CITER_ELINKNO = SYSTEM_AUDIOADC_BUFFERLENGTH;&lt;/P&gt;&lt;P&gt;// Address after major loop finished&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].DLAST_SGA = 0;&lt;/P&gt;&lt;P&gt;// Enable interrupt at the end of major loop and automatically disable requests when major loop ends&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].CSR = DMA_CSR_INTMAJOR_MASK | DMA_CSR_DREQ_MASK;&lt;/P&gt;&lt;P&gt;// Number of iterations (major loop) until an interrupt is thrown&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].BITER_ELINKNO = SYSTEM_AUDIOADC_BUFFERLENGTH;&lt;/P&gt;&lt;P&gt;// Enable major loop interrupt&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;TCD[SYSTEM_AUDIOADC_DMA_CHANNEL].CSR |= DMA_CSR_INTMAJOR_MASK;&lt;/P&gt;&lt;P&gt;// Enable DMA requests&lt;/P&gt;&lt;P&gt;DMAMUX-&amp;gt;CHCFG[SYSTEM_AUDIOADC_DMA_CHANNEL] |= DMAMUX_CHCFG_ENBL_MASK;&lt;/P&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jul 2016 12:02:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547764#M33392</guid>
      <dc:creator>schw_gld</dc:creator>
      <dc:date>2016-07-28T12:02:05Z</dc:date>
    </item>
    <item>
      <title>Re: ADC-DMA Trigger</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547765#M33393</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Is there an example for this scenario I could use to find the problem on my own?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Jul 2016 10:39:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547765#M33393</guid>
      <dc:creator>schw_gld</dc:creator>
      <dc:date>2016-07-29T10:39:50Z</dc:date>
    </item>
    <item>
      <title>Re: ADC-DMA Trigger</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547766#M33394</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;&lt;SPAN&gt;See &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fdocs%2FuTasker%2FuTaskerADC.pdf" rel="nofollow" target="_blank"&gt;http://www.utasker.com/docs/uTasker/uTaskerADC.pdf&lt;/A&gt;&lt;SPAN&gt; and get any code needed from the uTasker project, containing PIT/DMA driven ADC and also K22 simulation to allow its operation (including interrupts and DMA) to be analysed and any problems in your code to be suitably solved.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Note also that PDB is usually used for this on the K22.&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>Fri, 29 Jul 2016 12:03:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547766#M33394</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2016-07-29T12:03:41Z</dc:date>
    </item>
    <item>
      <title>Re: ADC-DMA Trigger</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547767#M33395</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Okay, I solved the problem... It was a pretty obvious thing since the question already hinted to the answer... &lt;/P&gt;&lt;P&gt;I forgot to enable the DMA request using&lt;/P&gt;&lt;P&gt;DMA0-&amp;gt;REQ |= (1 &amp;lt;&amp;lt; SYSTEM_AUDIOADC_DMACHANNEL);&lt;/P&gt;&lt;P&gt;Well fortunately you mostly run into those mistakes once and never again... &lt;/P&gt;&lt;P&gt;Thank you guys!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 30 Jul 2016 12:26:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-DMA-Trigger/m-p/547767#M33395</guid>
      <dc:creator>schw_gld</dc:creator>
      <dc:date>2016-07-30T12:26:33Z</dc:date>
    </item>
  </channel>
</rss>

