<?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 Re: LPC824 SPI Master using DMA in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC824-SPI-Master-using-DMA/m-p/559501#M15857</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;bump&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 19 Jun 2016 01:08:50 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-19T01:08:50Z</dc:date>
    <item>
      <title>LPC824 SPI Master using DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC824-SPI-Master-using-DMA/m-p/559499#M15855</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by tobias2504 on Tue Apr 19 08:12:36 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Im trying to get SPI as Master using DMA to run on a LPC824. SPI in polling mode as well in interrupt mode is working but not DMA.&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;
#include "chip.h"

/******************************************************************************
 * Defines
 *****************************************************************************/
#define INTERRUPT 1
#defineDMA1

#define SPI_BUFFER_SIZE 64


/******************************************************************************
 * Global Variables
 *****************************************************************************/
static uint16_t txBuf[SPI_BUFFER_SIZE];
static uint16_t rxBuf[SPI_BUFFER_SIZE];

static SPI_DATA_SETUP_T tx0Setup;


/******************************************************************************
 * Routines
 *****************************************************************************/
void SPI0_IRQHandler(void)
{
// Disable SPI0 Interrupts
Chip_SPI_Int_Cmd(LPC_SPI0, SPI_INTENSET_TXDYEN | SPI_INTENSET_RXDYEN | SPI_INTENSET_RXOVEN | SPI_INTENSET_TXUREN, DISABLE);

if(tx0Setup.TxCnt &amp;lt; tx0Setup.Length)
{
Chip_SPI_Int_RWFrames(LPC_SPI0,&amp;amp;tx0Setup);
Chip_SPI_Int_Cmd(LPC_SPI0, SPI_INTENSET_TXDYEN | SPI_INTENSET_RXDYEN | SPI_INTENSET_RXOVEN | SPI_INTENSET_TXUREN, ENABLE);
}

// Get status flags
uint32_t status = Chip_SPI_GetStatus(LPC_SPI0);

// Clear status flags
Chip_SPI_ClearStatus(LPC_SPI0, status);
}

static void Init_SPI_PinMux(void)
{
// Enable the clock for the switch matrix controller
Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);

// Assign a movable pin functions to a physical pins
Chip_SWM_MovablePinAssign(SWM_SPI0_SCK_IO, 16);
Chip_SWM_MovablePinAssign(SWM_SPI0_MOSI_IO, 27);
Chip_SWM_MovablePinAssign(SWM_SPI0_MISO_IO, 26);
Chip_SWM_MovablePinAssign(SWM_SPI0_SSEL0_IO, 15);

// Disable the clock for the switch matrix controller
Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);
}

/******************************************************************************
 * Start Routine
 *****************************************************************************/
int main(void)
{
volatile static int i = 0 ;

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read clock settings and update SystemCoreClock variable
&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemCoreClockUpdate();

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Setup buffers
for(i=0; i&amp;lt;SPI_BUFFER_SIZE; i++)
{
txBuf&lt;I&gt; = i+1;
rxBuf&lt;I&gt; = 0;
}

// Initialize SPI
&amp;nbsp;&amp;nbsp;&amp;nbsp; Init_SPI_PinMux();
Chip_SPI_Init(LPC_SPI0);
LPC_SPI0-&amp;gt;CFG = (SPI_MODE_MASTER | SPI_CLOCK_CPHA0_CPOL0 | SPI_DATA_MSB_FIRST | SPI_SSEL_ACTIVE_LO);
Chip_SPI_Enable(LPC_SPI0);

// Initialize DMA
#if(DMA)
Chip_DMA_Init(LPC_DMA);
Chip_DMA_Enable(LPC_DMA);
Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));
Chip_DMA_SetupChannelConfig(LPC_DMA, DMAREQ_SPI0_TX, (DMA_CFG_PERIPHREQEN | DMA_CFG_TRIGBURST_SNGL | DMA_CFG_CHPRIORITY(3)));

Chip_DMA_Table[DMAREQ_SPI0_TX].source = DMA_ADDR(&amp;amp;txBuf[SPI_BUFFER_SIZE-1]);
Chip_DMA_Table[DMAREQ_SPI0_TX].dest = DMA_ADDR(&amp;amp;LPC_SPI0-&amp;gt;TXDAT);
Chip_DMA_Table[DMAREQ_SPI0_TX].next = DMA_ADDR(0);
Chip_DMA_Table[DMAREQ_SPI0_TX].xfercfg= DMA_XFERCFG_CFGVALID | DMA_XFERCFG_SWTRIG | DMA_XFERCFG_WIDTH_8 | DMA_XFERCFG_SRCINC_1 | DMA_XFERCFG_DSTINC_0 | DMA_XFERCFG_XFERCOUNT(SPI_BUFFER_SIZE);

// Setup transfer descriptor and validate it
Chip_DMA_SetupTranChannel(LPC_DMA, DMAREQ_SPI0_TX, &amp;amp;Chip_DMA_Table[DMAREQ_SPI0_TX]);

// Setup data transfer --&amp;gt; Start Sending data?
Chip_DMA_SetupChannelTransfer(LPC_DMA, DMAREQ_SPI0_TX, Chip_DMA_Table[DMAREQ_SPI0_TX].xfercfg);

#else

// Setup SPI Transfer setup
tx0Setup.Length = SPI_BUFFER_SIZE;
tx0Setup.pTx = txBuf;
tx0Setup.pRx = rxBuf;
tx0Setup.RxCnt = tx0Setup.TxCnt = 0;
tx0Setup.DataSize = 8;

#if(INTERRUPT)
// Send SPI via interrupt mode
NVIC_EnableIRQ(SPI0_IRQn);
Chip_SPI_Int_RWFrames(LPC_SPI0, &amp;amp;tx0Setup);
Chip_SPI_Int_Cmd(LPC_SPI0, SPI_INTENSET_TXDYEN | SPI_INTENSET_RXDYEN | SPI_INTENSET_RXOVEN | SPI_INTENSET_TXUREN, ENABLE);
#else
// Send SPI via blocking mode
Chip_SPI_WriteFrames_Blocking(LPC_SPI0, &amp;amp;tx0Setup);
#endif

#endif

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enter an infinite loop
&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __WFI();
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0 ;
}
&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Can anyone help me?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Tobi&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:01:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC824-SPI-Master-using-DMA/m-p/559499#M15855</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:01:08Z</dc:date>
    </item>
    <item>
      <title>Re: LPC824 SPI Master using DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC824-SPI-Master-using-DMA/m-p/559500#M15856</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by tobias2504 on Wed Apr 20 00:23:12 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Got it. I attached my example code for this.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:01:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC824-SPI-Master-using-DMA/m-p/559500#M15856</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:01:09Z</dc:date>
    </item>
    <item>
      <title>Re: LPC824 SPI Master using DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC824-SPI-Master-using-DMA/m-p/559501#M15857</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;bump&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 19 Jun 2016 01:08:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC824-SPI-Master-using-DMA/m-p/559501#M15857</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-19T01:08:50Z</dc:date>
    </item>
  </channel>
</rss>

