<?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のトピックRe: DMA with UART0</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-with-UART0/m-p/596359#M23005</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Scribe on Tue Sep 25 02:03:50 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Problem resolved,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For dmaChannel0.destinationEndPointer I used the value 0x4000C000 when it should have been 0x40008000.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For reference for anyone wishing to use DMA who doesn't like NXP's overly incumbent drivers, with this change the code works perfectly.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:24:34 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:24:34Z</dc:date>
    <item>
      <title>DMA with UART0</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-with-UART0/m-p/596357#M23003</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Scribe on Mon Sep 24 07:12:53 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi guys,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm attempting to configure DMA with UART0, however, when receiving a byte, only UART interrupts are triggering to tell me I have data ready and these continue to trigger, whilst DMA interrupts aren't and there's no sign of data moving into my buffers. My DMA code is below, any suggestions where I may have gone wrong in the setup? I have enabled DMA in LPC_UART0-&amp;gt;FCR.&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;
typedef struct
{
uint32_t sourceEndPointer;
uint32_t destinationEndPointer;
uint32_t channelControlData;
uint32_t unused;
} DMA_ChannelControlStructure;

DMA_ChannelControlStructure dmaChannel0 __attribute__((at(0x10000400)));
DMA_ChannelControlStructure dmaChannel1 __attribute__((at(0x10000410)));

uint8_t UARTTXBuffer[256];
uint8_t UARTRXBuffer[256];

void configureDMA()
{
// Disable interrupts
NVIC_DisableIRQ( DMA_IRQn );

// Reset the DMA peripheral
LPC_SYSCON-&amp;gt;PRESETCTRL &amp;amp;= ~(1 &amp;lt;&amp;lt; 10);
LPC_SYSCON-&amp;gt;PRESETCTRL |= (1 &amp;lt;&amp;lt; 10);

// Enable DMA peripheral clock at the rate of the AHB clock
LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL |= (1 &amp;lt;&amp;lt; 17);

LPC_DMA-&amp;gt;CTRL_BASE_PTR = (uint32_t)(&amp;amp;dmaChannel0) &amp;amp; 0xFFFFFF00; // Point DMA control to the dmaChannel1 structure 

uint32_t cfg = (1UL &amp;lt;&amp;lt; 0) |// Enable the DMA controller
 (0UL &amp;lt;&amp;lt; 5) |// Enable user access control
 (0UL &amp;lt;&amp;lt; 6); // Configure as non-bufferable

LPC_DMA-&amp;gt;CFG = cfg;

// Wait for the DMA controller to start-up
while( !(LPC_DMA-&amp;gt;STATUS &amp;amp; 0x01) );

// Disable all channels and clear any bus error
LPC_DMA-&amp;gt;CHNL_ENABLE_CLR = 0x01FFFFF;
LPC_DMA-&amp;gt;ERR_CLR = 0x01;

// Configure DMA channel 0 (UART0 TX)
dmaChannel0.sourceEndPointer = (uint32_t)UARTTXBuffer + sizeof(UARTTXBuffer) - 1;
dmaChannel0.destinationEndPointer = 0x4000C000;
dmaChannel0.channelControlData = (1UL &amp;lt;&amp;lt; 0 )&amp;nbsp; |// Use basic DMA transfer mode
 (0UL &amp;lt;&amp;lt; 3 )&amp;nbsp; |// Disable next burst
 (0UL &amp;lt;&amp;lt; 4 )&amp;nbsp; |// 1 DMA transfer per cycle
 (0UL &amp;lt;&amp;lt; 14 ) |// Rearbitrate the DMA cycle every transfer
 (0UL &amp;lt;&amp;lt; 18 ) |// No AHB read protection
 (0UL &amp;lt;&amp;lt; 21 ) |// No AHB write protection
 (0UL &amp;lt;&amp;lt; 24 ) |// Source data size is in bytes
 (0UL &amp;lt;&amp;lt; 26 ) |// Set the source address increment by 1 byte
 (0UL &amp;lt;&amp;lt; 28 ) |// Destination data size is in bytes
 (3UL &amp;lt;&amp;lt; 30 );// Set the destination address to not increment
 
// Configure DMA channel 1 (UART0 RX) 
dmaChannel1.sourceEndPointer = 0x40008000;
dmaChannel1.destinationEndPointer = (uint32_t)UARTRXBuffer + sizeof(UARTRXBuffer) - 1;
dmaChannel1.channelControlData = (1UL &amp;lt;&amp;lt; 0 )&amp;nbsp;&amp;nbsp; |// Use basic DMA transfer mode
 (0UL &amp;lt;&amp;lt; 3 )&amp;nbsp;&amp;nbsp; |// Disable next burst
 (255UL &amp;lt;&amp;lt; 4 ) |// 256 DMA transfers per cycle
 (3UL &amp;lt;&amp;lt; 14 )&amp;nbsp; |// Rearbitrate the DMA cycle every 8 transfers
 (0UL &amp;lt;&amp;lt; 18 )&amp;nbsp; |// No AHB read protection
 (0UL &amp;lt;&amp;lt; 21 )&amp;nbsp; |// No AHB write protection
 (0UL &amp;lt;&amp;lt; 24 )&amp;nbsp; |// Source data size is in bytes
 (3UL &amp;lt;&amp;lt; 26 )&amp;nbsp; |// Set the source address to not increment
 (0UL &amp;lt;&amp;lt; 28 )&amp;nbsp; |// Destination data size is in bytes
 (0UL &amp;lt;&amp;lt; 30 );// Set the destination address increment by 1 byte

LPC_DMA-&amp;gt;CHNL_ENABLE_SET = (1UL &amp;lt;&amp;lt; 0) |// Enable DMA channel 1
 (1UL &amp;lt;&amp;lt; 1);// Enable DMA channel 2
&amp;nbsp; 
// Enable interrupts
NVIC_EnableIRQ( DMA_IRQn );

LPC_DMA-&amp;gt;CHNL_IRQ_ENABLE = (1UL &amp;lt;&amp;lt; 0) |// Enable IRQ Done for DMA channel 1
 (1UL &amp;lt;&amp;lt; 1);// Enable IRQ Done for DMA channel 2
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Many thanks for any advice.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:24:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-with-UART0/m-p/596357#M23003</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:24:32Z</dc:date>
    </item>
    <item>
      <title>Re: DMA with UART0</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-with-UART0/m-p/596358#M23004</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Scribe on Mon Sep 24 07:18:28 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Yuk, I'll try that again with a different tag:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;pre&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;typedef struct&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t sourceEndPointer;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t destinationEndPointer;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t channelControlData;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t unused;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;} DMA_ChannelControlStructure;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;DMA_ChannelControlStructure dmaChannel0 __attribute__((at(0x10000400)));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;DMA_ChannelControlStructure dmaChannel1 __attribute__((at(0x10000410)));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t UARTTXBuffer[256];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t UARTRXBuffer[256];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void configureDMA()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Disable interrupts&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_DisableIRQ( DMA_IRQn );&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Reset the DMA peripheral&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCON-&amp;gt;PRESETCTRL &amp;amp;= ~(1 &amp;lt;&amp;lt; 10);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCON-&amp;gt;PRESETCTRL |= (1 &amp;lt;&amp;lt; 10);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable DMA peripheral clock at the rate of the AHB clock&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL |= (1 &amp;lt;&amp;lt; 17);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_DMA-&amp;gt;CTRL_BASE_PTR = (uint32_t)(&amp;amp;dmaChannel0) &amp;amp; 0xFFFFFF00; // Point DMA control to the dmaChannel1 structure &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t cfg = (1UL &amp;lt;&amp;lt; 0) |// Enable the DMA controller&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0UL &amp;lt;&amp;lt; 5) |// Enable user access control&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0UL &amp;lt;&amp;lt; 6); // Configure as non-bufferable&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_DMA-&amp;gt;CFG = cfg;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Wait for the DMA controller to start-up&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while( !(LPC_DMA-&amp;gt;STATUS &amp;amp; 0x01) );&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Disable all channels and clear any bus error&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_DMA-&amp;gt;CHNL_ENABLE_CLR = 0x01FFFFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_DMA-&amp;gt;ERR_CLR = 0x01;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Configure DMA channel 0 (UART0 TX)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dmaChannel0.sourceEndPointer = (uint32_t)UARTTXBuffer + sizeof(UARTTXBuffer) - 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dmaChannel0.destinationEndPointer = 0x4000C000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dmaChannel0.channelControlData = (1UL &amp;lt;&amp;lt; 0 )&amp;nbsp; |// Use basic DMA transfer mode&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 3 )&amp;nbsp; |// Disable next burst&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 4 )&amp;nbsp; |// 1 DMA transfer per cycle&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 14 ) |// Rearbitrate the DMA cycle every transfer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 18 ) |// No AHB read protection&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 21 ) |// No AHB write protection&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 24 ) |// Source data size is in bytes&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 26 ) |// Set the source address increment by 1 byte&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 28 ) |// Destination data size is in bytes&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (3UL &amp;lt;&amp;lt; 30 );// Set the destination address to not increment&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Configure DMA channel 1 (UART0 RX) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dmaChannel1.sourceEndPointer = 0x40008000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dmaChannel1.destinationEndPointer = (uint32_t)UARTRXBuffer + sizeof(UARTRXBuffer) - 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dmaChannel1.channelControlData = (1UL &amp;lt;&amp;lt; 0 )&amp;nbsp;&amp;nbsp; |// Use basic DMA transfer mode&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 3 )&amp;nbsp;&amp;nbsp; |// Disable next burst&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (255UL &amp;lt;&amp;lt; 4 ) |// 256 DMA transfers per cycle&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (3UL &amp;lt;&amp;lt; 14 )&amp;nbsp; |// Rearbitrate the DMA cycle every 8 transfers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 18 )&amp;nbsp; |// No AHB read protection&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 21 )&amp;nbsp; |// No AHB write protection&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 24 )&amp;nbsp; |// Source data size is in bytes&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (3UL &amp;lt;&amp;lt; 26 )&amp;nbsp; |// Set the source address to not increment&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 28 )&amp;nbsp; |// Destination data size is in bytes&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; (0UL &amp;lt;&amp;lt; 30 );// Set the destination address increment by 1 byte&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_DMA-&amp;gt;CHNL_ENABLE_SET = (1UL &amp;lt;&amp;lt; 0) |// Enable DMA channel 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; (1UL &amp;lt;&amp;lt; 1);// Enable DMA channel 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable interrupts&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ( DMA_IRQn );&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_DMA-&amp;gt;CHNL_IRQ_ENABLE = (1UL &amp;lt;&amp;lt; 0) |// Enable IRQ Done for DMA channel 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; (1UL &amp;lt;&amp;lt; 1);// Enable IRQ Done for DMA channel 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/pre&amp;gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:24:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-with-UART0/m-p/596358#M23004</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:24:33Z</dc:date>
    </item>
    <item>
      <title>Re: DMA with UART0</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-with-UART0/m-p/596359#M23005</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Scribe on Tue Sep 25 02:03:50 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Problem resolved,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For dmaChannel0.destinationEndPointer I used the value 0x4000C000 when it should have been 0x40008000.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For reference for anyone wishing to use DMA who doesn't like NXP's overly incumbent drivers, with this change the code works perfectly.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:24:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/DMA-with-UART0/m-p/596359#M23005</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:24:34Z</dc:date>
    </item>
  </channel>
</rss>

