<?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中的主题 GPDMA: Cannot copy from 16-bit SPI to internal memory using available API</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/GPDMA-Cannot-copy-from-16-bit-SPI-to-internal-memory-using/m-p/586668#M21461</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by cfgardiner on Wed Jan 07 08:52:58 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a customer project based on an LPC1837. The hardware has many similarities to the Xpresso board. The customer design however has an external 16-channel ADC connected to SPI1 which I want to read every 1 ms. Using lpcopen standard functions I have done it like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPDMA_Init(LPC_GPDMA);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaChanSpiRx&amp;nbsp;&amp;nbsp; = Chip_GPDMA_GetFreeChannel(LPC_GPDMA, GPDMA_CONN_SSP1_Rx);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaChanSpiTx&amp;nbsp;&amp;nbsp; = Chip_GPDMA_GetFreeChannel(LPC_GPDMA, GPDMA_CONN_SSP1_Tx);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SSP_DMA_Enable(LPC_SSP1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPDMA_Transfer(LPC_GPDMA, dmaChanSpiRx, GPDMA_CONN_SSP1_Rx, &amp;amp;spiDin,&amp;nbsp; GPDMA_TRANSFERTYPE_P2M_CONTROLLER_DMA, 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPDMA_Transfer(LPC_GPDMA, dmaChanSpiTx, &amp;amp;spiDout, GPDMA_CONN_SSP1_Tx, GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA, 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Using these standard functions however it is not possible to configure the DMA transfer-width to the SPI controller to use sixteen bits. This transfer size is required by the external ADC. Examining the lpcopen code I see the following problems (in gpdma_18xx_43xx.h and gpdma_18xx_43xx.c) :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1) GPDMA_LUTPerWid is static and I see no interface for modifying the default configuration:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2) Chip_GPDMA_Transfer does all the work from initialising and setting up the GPDMA_CH_CFG_T structure through to starting the DMA channel without any chance to modify the TransferSize/TransferWidth elements before the DMA channel is started.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3) configDMAMux(), makeCtrlWord() and setupChannel() are all local functions to gpdma_18xx_43xx.c&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Looks like I will have to rewrite a variant of Chip_GPDMA_Transfer() for my Board-Support package or am I missing something? Any chance of fixing this in the next lpcopen release? An API to manipulate&amp;nbsp; GPDMA_LUTPerWid would probably be useful. Or, a variant of Chip_GPDMA_Transfer taking a GPDMA_CH_CFG_T instance as parameter would also be an alternative.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Charles&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 20:26:20 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T20:26:20Z</dc:date>
    <item>
      <title>GPDMA: Cannot copy from 16-bit SPI to internal memory using available API</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/GPDMA-Cannot-copy-from-16-bit-SPI-to-internal-memory-using/m-p/586668#M21461</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by cfgardiner on Wed Jan 07 08:52:58 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a customer project based on an LPC1837. The hardware has many similarities to the Xpresso board. The customer design however has an external 16-channel ADC connected to SPI1 which I want to read every 1 ms. Using lpcopen standard functions I have done it like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPDMA_Init(LPC_GPDMA);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaChanSpiRx&amp;nbsp;&amp;nbsp; = Chip_GPDMA_GetFreeChannel(LPC_GPDMA, GPDMA_CONN_SSP1_Rx);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dmaChanSpiTx&amp;nbsp;&amp;nbsp; = Chip_GPDMA_GetFreeChannel(LPC_GPDMA, GPDMA_CONN_SSP1_Tx);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SSP_DMA_Enable(LPC_SSP1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPDMA_Transfer(LPC_GPDMA, dmaChanSpiRx, GPDMA_CONN_SSP1_Rx, &amp;amp;spiDin,&amp;nbsp; GPDMA_TRANSFERTYPE_P2M_CONTROLLER_DMA, 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPDMA_Transfer(LPC_GPDMA, dmaChanSpiTx, &amp;amp;spiDout, GPDMA_CONN_SSP1_Tx, GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA, 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Using these standard functions however it is not possible to configure the DMA transfer-width to the SPI controller to use sixteen bits. This transfer size is required by the external ADC. Examining the lpcopen code I see the following problems (in gpdma_18xx_43xx.h and gpdma_18xx_43xx.c) :&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1) GPDMA_LUTPerWid is static and I see no interface for modifying the default configuration:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2) Chip_GPDMA_Transfer does all the work from initialising and setting up the GPDMA_CH_CFG_T structure through to starting the DMA channel without any chance to modify the TransferSize/TransferWidth elements before the DMA channel is started.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3) configDMAMux(), makeCtrlWord() and setupChannel() are all local functions to gpdma_18xx_43xx.c&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Looks like I will have to rewrite a variant of Chip_GPDMA_Transfer() for my Board-Support package or am I missing something? Any chance of fixing this in the next lpcopen release? An API to manipulate&amp;nbsp; GPDMA_LUTPerWid would probably be useful. Or, a variant of Chip_GPDMA_Transfer taking a GPDMA_CH_CFG_T instance as parameter would also be an alternative.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Charles&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:26:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/GPDMA-Cannot-copy-from-16-bit-SPI-to-internal-memory-using/m-p/586668#M21461</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:26:20Z</dc:date>
    </item>
  </channel>
</rss>

