<?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: How to efficiently use GPDMA to generate audio waveform on DAC output pin</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/How-to-efficiently-use-GPDMA-to-generate-audio-waveform-on-DAC/m-p/520138#M3505</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by giusloq on Sat May 09 06:23:16 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I started from the periph_dac example project that comes with LPCOpen:&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;Chip_GPDMA_Transfer(LPC_GPDMA, dmaChannelNum,
&amp;nbsp; (uint32_t) &amp;amp;DMAbuffer,
&amp;nbsp; GPDMA_CONN_DAC,
&amp;nbsp; GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA,
&amp;nbsp; 1);
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPDMA_Transfer() calls Chip_GPDMA_InitChannelCfg() that is:&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;
volatile static const void *GPDMA_LUTPerAddr[] = {
0,/* Reserved */
[...]
(&amp;amp;LPC_DAC-&amp;gt;CR),/* DAC */
[...]
};
int Chip_GPDMA_InitChannelCfg(LPC_GPDMA_T *pGPDMA,
&amp;nbsp; GPDMA_CH_CFG_T *GPDMACfg,
&amp;nbsp; uint8_t&amp;nbsp; ChannelNum,
&amp;nbsp; uint32_t src,
&amp;nbsp; uint32_t dst,
&amp;nbsp; uint32_t Size,
&amp;nbsp; GPDMA_FLOW_CONTROL_T TransferType)
{
int rval = -1;
GPDMACfg-&amp;gt;ChannelNum = ChannelNum;
GPDMACfg-&amp;gt;TransferType = TransferType;
GPDMACfg-&amp;gt;TransferSize = Size;

switch (TransferType) {
[...]
case GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA:
case GPDMA_TRANSFERTYPE_M2P_CONTROLLER_PERIPHERAL:
GPDMACfg-&amp;gt;SrcAddr = (uint32_t) src;
rval = 1;
GPDMACfg-&amp;gt;DstAddr = (uint32_t) GPDMA_LUTPerAddr[dst];
break;
[...]
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;With this tranfer type (GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA) the destination address is the full DAC value register, so I can't change it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The only way to set an arbitrary destination address is to use GPDMA_TRANSFERTYPE_M2M_CONTROLLER_DMA transfer type, but in this case:&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;
int Chip_GPDMA_InitChannelCfg(LPC_GPDMA_T *pGPDMA,
&amp;nbsp; GPDMA_CH_CFG_T *GPDMACfg,
&amp;nbsp; uint8_t&amp;nbsp; ChannelNum,
&amp;nbsp; uint32_t src,
&amp;nbsp; uint32_t dst,
&amp;nbsp; uint32_t Size,
&amp;nbsp; GPDMA_FLOW_CONTROL_T TransferType)
{
[...]
switch (TransferType) {
case GPDMA_TRANSFERTYPE_M2M_CONTROLLER_DMA:
GPDMACfg-&amp;gt;SrcAddr = (uint32_t) src;
GPDMACfg-&amp;gt;DstAddr = (uint32_t) dst;
rval = 3;
GPDMACfg-&amp;gt;TransferWidth = GPDMA_WIDTH_WORD;
GPDMACfg-&amp;gt;TransferSize = Size / 4;
break;
[...]
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;The transfer width is fixed to GPDMA_WIDTH_WORD, that is 4 bytes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Should I have to change LPCOpen chip-level functions?&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:42:54 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:42:54Z</dc:date>
    <item>
      <title>How to efficiently use GPDMA to generate audio waveform on DAC output pin</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/How-to-efficiently-use-GPDMA-to-generate-audio-waveform-on-DAC/m-p/520136#M3503</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by giusloq on Fri May 08 03:39:23 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I need to play some simple audio signals on DAC output pin and I'd like to use GPDMA so I can save CPU cycles.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I don't need hi-fi, so I'm going to store audio signals as 8-bits const unsigned char arrays.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The single 8-bit sample should be written to DACR register, but it must be manipulated. I don't need to save power (BIAS flag could be set to 0), so I have to only shift the 8-bit sample value by 8 bits:&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;&amp;nbsp; const unsigned char samples[] = { ... };
&amp;nbsp; ...
&amp;nbsp; DACR = samples[idx] &amp;lt;&amp;lt; 8;
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In other words, I have to write the 8-bits sample to address 0x4008 C001 and not the base DACR register 0x4008 C000.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it possible with GPDMA and LPCOpen libraries?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:42:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/How-to-efficiently-use-GPDMA-to-generate-audio-waveform-on-DAC/m-p/520136#M3503</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:42:52Z</dc:date>
    </item>
    <item>
      <title>Re: How to efficiently use GPDMA to generate audio waveform on DAC output pin</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/How-to-efficiently-use-GPDMA-to-generate-audio-waveform-on-DAC/m-p/520137#M3504</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by wmues on Fri May 08 07:31:27 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;The GPDMA can write bytes to every address. So yes, this will be possible.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:42:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/How-to-efficiently-use-GPDMA-to-generate-audio-waveform-on-DAC/m-p/520137#M3504</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:42:53Z</dc:date>
    </item>
    <item>
      <title>Re: How to efficiently use GPDMA to generate audio waveform on DAC output pin</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/How-to-efficiently-use-GPDMA-to-generate-audio-waveform-on-DAC/m-p/520138#M3505</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by giusloq on Sat May 09 06:23:16 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I started from the periph_dac example project that comes with LPCOpen:&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;Chip_GPDMA_Transfer(LPC_GPDMA, dmaChannelNum,
&amp;nbsp; (uint32_t) &amp;amp;DMAbuffer,
&amp;nbsp; GPDMA_CONN_DAC,
&amp;nbsp; GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA,
&amp;nbsp; 1);
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPDMA_Transfer() calls Chip_GPDMA_InitChannelCfg() that is:&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;
volatile static const void *GPDMA_LUTPerAddr[] = {
0,/* Reserved */
[...]
(&amp;amp;LPC_DAC-&amp;gt;CR),/* DAC */
[...]
};
int Chip_GPDMA_InitChannelCfg(LPC_GPDMA_T *pGPDMA,
&amp;nbsp; GPDMA_CH_CFG_T *GPDMACfg,
&amp;nbsp; uint8_t&amp;nbsp; ChannelNum,
&amp;nbsp; uint32_t src,
&amp;nbsp; uint32_t dst,
&amp;nbsp; uint32_t Size,
&amp;nbsp; GPDMA_FLOW_CONTROL_T TransferType)
{
int rval = -1;
GPDMACfg-&amp;gt;ChannelNum = ChannelNum;
GPDMACfg-&amp;gt;TransferType = TransferType;
GPDMACfg-&amp;gt;TransferSize = Size;

switch (TransferType) {
[...]
case GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA:
case GPDMA_TRANSFERTYPE_M2P_CONTROLLER_PERIPHERAL:
GPDMACfg-&amp;gt;SrcAddr = (uint32_t) src;
rval = 1;
GPDMACfg-&amp;gt;DstAddr = (uint32_t) GPDMA_LUTPerAddr[dst];
break;
[...]
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;With this tranfer type (GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA) the destination address is the full DAC value register, so I can't change it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The only way to set an arbitrary destination address is to use GPDMA_TRANSFERTYPE_M2M_CONTROLLER_DMA transfer type, but in this case:&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;
int Chip_GPDMA_InitChannelCfg(LPC_GPDMA_T *pGPDMA,
&amp;nbsp; GPDMA_CH_CFG_T *GPDMACfg,
&amp;nbsp; uint8_t&amp;nbsp; ChannelNum,
&amp;nbsp; uint32_t src,
&amp;nbsp; uint32_t dst,
&amp;nbsp; uint32_t Size,
&amp;nbsp; GPDMA_FLOW_CONTROL_T TransferType)
{
[...]
switch (TransferType) {
case GPDMA_TRANSFERTYPE_M2M_CONTROLLER_DMA:
GPDMACfg-&amp;gt;SrcAddr = (uint32_t) src;
GPDMACfg-&amp;gt;DstAddr = (uint32_t) dst;
rval = 3;
GPDMACfg-&amp;gt;TransferWidth = GPDMA_WIDTH_WORD;
GPDMACfg-&amp;gt;TransferSize = Size / 4;
break;
[...]
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;The transfer width is fixed to GPDMA_WIDTH_WORD, that is 4 bytes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Should I have to change LPCOpen chip-level functions?&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:42:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/How-to-efficiently-use-GPDMA-to-generate-audio-waveform-on-DAC/m-p/520138#M3505</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:42:54Z</dc:date>
    </item>
    <item>
      <title>Re: How to efficiently use GPDMA to generate audio waveform on DAC output pin</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/How-to-efficiently-use-GPDMA-to-generate-audio-waveform-on-DAC/m-p/520139#M3506</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by wmues on Sat May 09 09:08:44 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Make a copy of the DMA setup code, and change the copy to do what you want.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:42:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/How-to-efficiently-use-GPDMA-to-generate-audio-waveform-on-DAC/m-p/520139#M3506</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:42:54Z</dc:date>
    </item>
  </channel>
</rss>

