<?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 configure DMA to trigger interrupt end of major loop in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/configure-DMA-to-trigger-interrupt-end-of-major-loop/m-p/320545#M14355</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How do I configure a DMA to trigger the INTMAJOR interrupt on the completion of a major loop?&lt;/P&gt;&lt;P&gt;I am using MQX RTOS on a k60f120 board through CodeWarrior.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;void dma_ch1_isr( void *user_isr_ptr){ DMA_CINT = DMA_CINT_CINT(0);}&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;uint16_t dma_dst[16] = {0};&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;uint16_t dma_src[16] = {0xF, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA};&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;_int_install_isr(16, dma_ch1_isr, NULL);&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;_bsp_int_init(16, 3, 0, TRUE);&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMAMUX0_CHCFG0 = 0;//use software trigger&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMAMUX1_CHCFG0 = 0;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_SADDR = (uint32) &amp;amp;dma_src[0];//source address&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_SOFF = 2;&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; //src addr ubcr&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_SLAST = 0;&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; //minor loop end decr&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_DADDR = &amp;amp;dma_dst[0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //dest address&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_DOFF = 2;&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; //dest addr incr&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_DLASTSGA = 0;&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; //minor loop end decr&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_NBYTES_MLNO = 8;&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; //transfer 4 words&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_BITER_ELINKNO = 1;//one major loop iteration&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_CITER_ELINKNO = 1;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_ATTR = DMA_ATTR_SSIZE(1) | DMA_ATTR_DSIZE(1);&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_CSR = DMA_CSR_INTMAJOR_MASK; //interrupt after major loop ends&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_SSRT = DMA_SSRT_SSRT(0);//start DMA&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;while(!(DMA_TCD0_CSR &amp;amp; DMA_CSR_DONE_MASK)){}//wait for DMA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The data transfer is successful if the DMA_CSR_INTMAJOR bit is not set.&amp;nbsp; The program hangs to "_mqx_idle_task" when the SSRT start bit is set if the DMA_CSR_INTMAJOR bit is set.&lt;/P&gt;&lt;P&gt;Any ideas on what I am doing wrong or a different approach I could use?&amp;nbsp; If anyone can tell me how to format code blocks in these discussion things, I would appreciate that too.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 15 Jul 2014 14:06:02 GMT</pubDate>
    <dc:creator>trichert</dc:creator>
    <dc:date>2014-07-15T14:06:02Z</dc:date>
    <item>
      <title>configure DMA to trigger interrupt end of major loop</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/configure-DMA-to-trigger-interrupt-end-of-major-loop/m-p/320545#M14355</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How do I configure a DMA to trigger the INTMAJOR interrupt on the completion of a major loop?&lt;/P&gt;&lt;P&gt;I am using MQX RTOS on a k60f120 board through CodeWarrior.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;void dma_ch1_isr( void *user_isr_ptr){ DMA_CINT = DMA_CINT_CINT(0);}&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;uint16_t dma_dst[16] = {0};&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;uint16_t dma_src[16] = {0xF, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA};&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;_int_install_isr(16, dma_ch1_isr, NULL);&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;_bsp_int_init(16, 3, 0, TRUE);&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMAMUX0_CHCFG0 = 0;//use software trigger&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMAMUX1_CHCFG0 = 0;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_SADDR = (uint32) &amp;amp;dma_src[0];//source address&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_SOFF = 2;&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; //src addr ubcr&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_SLAST = 0;&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; //minor loop end decr&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_DADDR = &amp;amp;dma_dst[0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //dest address&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_DOFF = 2;&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; //dest addr incr&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_DLASTSGA = 0;&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; //minor loop end decr&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_NBYTES_MLNO = 8;&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; //transfer 4 words&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_BITER_ELINKNO = 1;//one major loop iteration&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_CITER_ELINKNO = 1;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_ATTR = DMA_ATTR_SSIZE(1) | DMA_ATTR_DSIZE(1);&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_TCD0_CSR = DMA_CSR_INTMAJOR_MASK; //interrupt after major loop ends&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;DMA_SSRT = DMA_SSRT_SSRT(0);//start DMA&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;while(!(DMA_TCD0_CSR &amp;amp; DMA_CSR_DONE_MASK)){}//wait for DMA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The data transfer is successful if the DMA_CSR_INTMAJOR bit is not set.&amp;nbsp; The program hangs to "_mqx_idle_task" when the SSRT start bit is set if the DMA_CSR_INTMAJOR bit is set.&lt;/P&gt;&lt;P&gt;Any ideas on what I am doing wrong or a different approach I could use?&amp;nbsp; If anyone can tell me how to format code blocks in these discussion things, I would appreciate that too.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jul 2014 14:06:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/configure-DMA-to-trigger-interrupt-end-of-major-loop/m-p/320545#M14355</guid>
      <dc:creator>trichert</dc:creator>
      <dc:date>2014-07-15T14:06:02Z</dc:date>
    </item>
    <item>
      <title>Re: configure DMA to trigger interrupt end of major loop</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/configure-DMA-to-trigger-interrupt-end-of-major-loop/m-p/320546#M14356</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I figured it out.&amp;nbsp; I had an error in my "user_config.h" header.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Jul 2014 14:35:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/configure-DMA-to-trigger-interrupt-end-of-major-loop/m-p/320546#M14356</guid>
      <dc:creator>trichert</dc:creator>
      <dc:date>2014-07-15T14:35:08Z</dc:date>
    </item>
  </channel>
</rss>

