<?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 DMA Transfer Delay Problem in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-Transfer-Delay-Problem/m-p/521694#M4332</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mrmehdi on Mon Sep 14 07:32:01 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Everyone&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i have a problem with LPC1788 DMA&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i want transfer data linked list from sram to gpio port by DMA.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i try this code and work correctly&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;but i have a big problem&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in data logger result you can see huge time gap between each transfer completed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;[img]&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fs2.postimg.org%2Flwwour0xl%2Fimage.jpg%5B%2Fimg%5D" rel="nofollow noopener noreferrer" target="_blank"&gt;http://s2.postimg.org/lwwour0xl/image.jpg[/img]&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;my tested code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void DMA_IRQHandler (void)
{
static uint32_t regVal;
regVal=LPC_GPDMA-&amp;gt;IntTCStat;
LPC_GPDMA-&amp;gt;IntTCClear |= regVal;
regVal=LPC_GPDMA-&amp;gt;IntErrStat;
LPC_GPDMA-&amp;gt;IntErrClr |= regVal;

// check GPDMA interrupt on channel DMA_CHANNEL_NO
//if (GPDMA_IntGetStatus(GPDMA_STAT_INT, DMA_CHANNEL_NO)){ //check interrupt status on channel DMA_CHANNEL_NO
// Check counter terminal status
//if(GPDMA_IntGetStatus(GPDMA_STAT_INTTC, DMA_CHANNEL_NO)){
// Clear terminate counter Interrupt pending
//GPDMA_ClearIntPending (GPDMA_STATCLR_INTTC, DMA_CHANNEL_NO);
//Channel0_TC++;
//}
//}
}

GPDMA_LLI_TypdGPDMA_LLI;

void DMA_Setup()
{
uint32_ti=0;
GPDMA_Channel_CFG_TypeGPDMACfg;

for (i=0;i&amp;lt;512;i+=2)
{
DMASrc_Buffer&lt;I&gt;=0x00;
DMASrc_Buffer[i+1]=0xff;
}

NVIC_DisableIRQ(DMA_IRQn);

NVIC_SetPriority(DMA_IRQn, ((0x01&amp;lt;&amp;lt;3)|0x01));

GPDMA_Init();
//Setup DMA Channel

GPDMA_LLI.SrcAddr=(uint32_t)DMASrc_Buffer;
GPDMA_LLI.DstAddr=(uint32_t)&amp;amp;(LPC_GPIO0-&amp;gt;PIN);
GPDMA_LLI.NextLLI=(uint32_t)&amp;amp;GPDMA_LLI;
GPDMA_LLI.Control= DMA_SIZE 
|(2&amp;lt;&amp;lt;18) //SW=32Bit
|(2&amp;lt;&amp;lt;21)//DW=32Bit
|(1&amp;lt;&amp;lt;26) //source incr
|(1&amp;lt;&amp;lt;31) ;

GPDMACfg.ChannelNum=DMA_CHANNEL_NO;
GPDMACfg.SrcMemAddr=(uint32_t)DMASrc_Buffer;
GPDMACfg.DstMemAddr=(uint32_t)(&amp;amp;LPC_GPIO0-&amp;gt;PIN);

// Transfer size
GPDMACfg.TransferSize = DMA_SIZE;
// Transfer width
GPDMACfg.TransferWidth = GPDMA_WIDTH_WORD;
// Transfer type
GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_M2M;
// Source connection - unused
GPDMACfg.SrcConn = 0;
// Destination connection - unused
GPDMACfg.DstConn = 0;
// Linker List Item - unused
GPDMACfg.DMALLI = (uint32_t)&amp;amp;GPDMA_LLI;
// Setup channel with given parameter
GPDMA_Setup(&amp;amp;GPDMACfg,0);

// Enable GPDMA channel DMA_CHANNEL_NO
GPDMA_ChannelCmd(DMA_CHANNEL_NO, ENABLE);

/* Enable GPDMA interrupt */
NVIC_EnableIRQ(DMA_IRQn);

}
&lt;/I&gt;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;my problem is huge time between each transition.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;you can see in this picture&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;A section period time and&amp;nbsp; B section is same.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i don't know why this time gap happened.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;thanks for your help&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:51:16 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:51:16Z</dc:date>
    <item>
      <title>DMA Transfer Delay Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-Transfer-Delay-Problem/m-p/521694#M4332</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mrmehdi on Mon Sep 14 07:32:01 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Everyone&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i have a problem with LPC1788 DMA&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i want transfer data linked list from sram to gpio port by DMA.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i try this code and work correctly&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;but i have a big problem&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;in data logger result you can see huge time gap between each transfer completed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;[img]&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fs2.postimg.org%2Flwwour0xl%2Fimage.jpg%5B%2Fimg%5D" rel="nofollow noopener noreferrer" target="_blank"&gt;http://s2.postimg.org/lwwour0xl/image.jpg[/img]&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;my tested code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void DMA_IRQHandler (void)
{
static uint32_t regVal;
regVal=LPC_GPDMA-&amp;gt;IntTCStat;
LPC_GPDMA-&amp;gt;IntTCClear |= regVal;
regVal=LPC_GPDMA-&amp;gt;IntErrStat;
LPC_GPDMA-&amp;gt;IntErrClr |= regVal;

// check GPDMA interrupt on channel DMA_CHANNEL_NO
//if (GPDMA_IntGetStatus(GPDMA_STAT_INT, DMA_CHANNEL_NO)){ //check interrupt status on channel DMA_CHANNEL_NO
// Check counter terminal status
//if(GPDMA_IntGetStatus(GPDMA_STAT_INTTC, DMA_CHANNEL_NO)){
// Clear terminate counter Interrupt pending
//GPDMA_ClearIntPending (GPDMA_STATCLR_INTTC, DMA_CHANNEL_NO);
//Channel0_TC++;
//}
//}
}

GPDMA_LLI_TypdGPDMA_LLI;

void DMA_Setup()
{
uint32_ti=0;
GPDMA_Channel_CFG_TypeGPDMACfg;

for (i=0;i&amp;lt;512;i+=2)
{
DMASrc_Buffer&lt;I&gt;=0x00;
DMASrc_Buffer[i+1]=0xff;
}

NVIC_DisableIRQ(DMA_IRQn);

NVIC_SetPriority(DMA_IRQn, ((0x01&amp;lt;&amp;lt;3)|0x01));

GPDMA_Init();
//Setup DMA Channel

GPDMA_LLI.SrcAddr=(uint32_t)DMASrc_Buffer;
GPDMA_LLI.DstAddr=(uint32_t)&amp;amp;(LPC_GPIO0-&amp;gt;PIN);
GPDMA_LLI.NextLLI=(uint32_t)&amp;amp;GPDMA_LLI;
GPDMA_LLI.Control= DMA_SIZE 
|(2&amp;lt;&amp;lt;18) //SW=32Bit
|(2&amp;lt;&amp;lt;21)//DW=32Bit
|(1&amp;lt;&amp;lt;26) //source incr
|(1&amp;lt;&amp;lt;31) ;

GPDMACfg.ChannelNum=DMA_CHANNEL_NO;
GPDMACfg.SrcMemAddr=(uint32_t)DMASrc_Buffer;
GPDMACfg.DstMemAddr=(uint32_t)(&amp;amp;LPC_GPIO0-&amp;gt;PIN);

// Transfer size
GPDMACfg.TransferSize = DMA_SIZE;
// Transfer width
GPDMACfg.TransferWidth = GPDMA_WIDTH_WORD;
// Transfer type
GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_M2M;
// Source connection - unused
GPDMACfg.SrcConn = 0;
// Destination connection - unused
GPDMACfg.DstConn = 0;
// Linker List Item - unused
GPDMACfg.DMALLI = (uint32_t)&amp;amp;GPDMA_LLI;
// Setup channel with given parameter
GPDMA_Setup(&amp;amp;GPDMACfg,0);

// Enable GPDMA channel DMA_CHANNEL_NO
GPDMA_ChannelCmd(DMA_CHANNEL_NO, ENABLE);

/* Enable GPDMA interrupt */
NVIC_EnableIRQ(DMA_IRQn);

}
&lt;/I&gt;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;my problem is huge time between each transition.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;you can see in this picture&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;A section period time and&amp;nbsp; B section is same.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i don't know why this time gap happened.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;thanks for your help&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:51:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-Transfer-Delay-Problem/m-p/521694#M4332</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:51:16Z</dc:date>
    </item>
    <item>
      <title>Re: DMA Transfer Delay Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-Transfer-Delay-Problem/m-p/521695#M4333</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mshrestha789 on Wed Nov 04 07:47:56 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Did you solve the problem? &lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:51:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-Transfer-Delay-Problem/m-p/521695#M4333</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:51:16Z</dc:date>
    </item>
  </channel>
</rss>

