<?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 SSP0 + DMA in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/SSP0-DMA/m-p/519796#M3349</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Lobisomem on Thu Feb 27 12:13:37 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi all !! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Please, take a look at the following code: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void DMA_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__asm volatile("nop"::);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void spi_init()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-&amp;nbsp; P1.20 -&amp;gt; shift CLK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put pin as third alternate func&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINSEL3&amp;nbsp; |= (0x03 &amp;lt;&amp;lt; 8);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put the pull up resistor&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINMODE3 &amp;amp;= ~(0x03 &amp;lt;&amp;lt; 8);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-&amp;nbsp; P1.23 -&amp;gt;&amp;nbsp;&amp;nbsp; MISO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put pin as third alternate func&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINSEL3&amp;nbsp; |= (0x03 &amp;lt;&amp;lt; 14);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put the pull up resistor&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PINMODE3 &amp;amp;= ~(0x03 &amp;lt;&amp;lt; 14);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-&amp;nbsp; P1.24 -&amp;gt;&amp;nbsp; MOSI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put pin as third alternate func&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINSEL3&amp;nbsp; |= (0x03 &amp;lt;&amp;lt; 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put the pull up resistor&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINMODE3 &amp;amp;= ~(0x03 &amp;lt;&amp;lt; 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// ----------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// --------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSP0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -----------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// ----------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Turn on the SSP0 clock&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PCONP |= (1 &amp;lt;&amp;lt; 21);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Select the peripheral clock&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put SSP0 feed clock = (System clock / 1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PCLKSEL1 &amp;amp;= ~(0x03 &amp;lt;&amp;lt; 10);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PCLKSEL1 |=&amp;nbsp; (0x01 &amp;lt;&amp;lt; 10);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put 16 bits data transfer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Pre-scaler = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SSP0-&amp;gt;CR0 = 0x00Cf;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable the controller&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SSP0-&amp;gt;CR1 |= (1 &amp;lt;&amp;lt; 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set the pre scaler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SSP0-&amp;gt;CPSR = 8;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable the RX FIFO to generate DMA request&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SSP0-&amp;gt;DMACR = 0x1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void dma_init(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Turn DMA on&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PCONP |= (1 &amp;lt;&amp;lt; 29);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable the DMA&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMA-&amp;gt;DMACConfig = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while ( !(LPC_GPDMA-&amp;gt;DMACConfig &amp;amp; 0x01) );&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Clear any pending interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMA-&amp;gt;DMACIntTCClear = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable the interrupt on NVIC&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;// Set source address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCSrcAddr&amp;nbsp; = (uint32_t)&amp;amp;LPC_SSP0-&amp;gt;DR;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set the destination address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCDestAddr = (uint32_t)dmaBuffer;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// No linked list&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCLLI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set the length of the transfer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Make destination auto increment&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable the terminal count interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCControl = 1 | (1&amp;lt;&amp;lt;27) | (1&amp;lt;&amp;lt;31);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Select SSP0 RX DMA request&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig = (1&amp;lt;&amp;lt;1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Peripheral to memory transfer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig |= (2&amp;lt;&amp;lt;11);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set error interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig |= (1&amp;lt;&amp;lt;14);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set terminal count interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig |= (1&amp;lt;&amp;lt;15);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Turn Channel 0 on&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig |= 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;int main(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//system_setSysTicTimerTo1ms();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; spi_init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dma_init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write to data reg to generate clock&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SSP0-&amp;gt;DR = 0x00;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0 ;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Well, as one may observ, I am trying to get a byte from an off-chip ADC conected to the SSP0. And I am trying to make the transfer tho memory by DMA. The thing is ... it is not working ! The DMA never generates the interrupt. Can you help me and show me what I am doing wrong ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards &lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:40:38 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:40:38Z</dc:date>
    <item>
      <title>SSP0 + DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SSP0-DMA/m-p/519796#M3349</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Lobisomem on Thu Feb 27 12:13:37 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi all !! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Please, take a look at the following code: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void DMA_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__asm volatile("nop"::);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void spi_init()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-&amp;nbsp; P1.20 -&amp;gt; shift CLK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put pin as third alternate func&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINSEL3&amp;nbsp; |= (0x03 &amp;lt;&amp;lt; 8);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put the pull up resistor&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINMODE3 &amp;amp;= ~(0x03 &amp;lt;&amp;lt; 8);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-&amp;nbsp; P1.23 -&amp;gt;&amp;nbsp;&amp;nbsp; MISO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put pin as third alternate func&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINSEL3&amp;nbsp; |= (0x03 &amp;lt;&amp;lt; 14);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put the pull up resistor&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PINMODE3 &amp;amp;= ~(0x03 &amp;lt;&amp;lt; 14);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-&amp;nbsp; P1.24 -&amp;gt;&amp;nbsp; MOSI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//---------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put pin as third alternate func&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINSEL3&amp;nbsp; |= (0x03 &amp;lt;&amp;lt; 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put the pull up resistor&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PINMODE3 &amp;amp;= ~(0x03 &amp;lt;&amp;lt; 16);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// ----------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// --------&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSP0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -----------&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// ----------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Turn on the SSP0 clock&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PCONP |= (1 &amp;lt;&amp;lt; 21);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Select the peripheral clock&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put SSP0 feed clock = (System clock / 1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PCLKSEL1 &amp;amp;= ~(0x03 &amp;lt;&amp;lt; 10);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PCLKSEL1 |=&amp;nbsp; (0x01 &amp;lt;&amp;lt; 10);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Put 16 bits data transfer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Pre-scaler = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SSP0-&amp;gt;CR0 = 0x00Cf;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable the controller&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SSP0-&amp;gt;CR1 |= (1 &amp;lt;&amp;lt; 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set the pre scaler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SSP0-&amp;gt;CPSR = 8;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable the RX FIFO to generate DMA request&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SSP0-&amp;gt;DMACR = 0x1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void dma_init(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Turn DMA on&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PCONP |= (1 &amp;lt;&amp;lt; 29);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable the DMA&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMA-&amp;gt;DMACConfig = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while ( !(LPC_GPDMA-&amp;gt;DMACConfig &amp;amp; 0x01) );&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Clear any pending interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMA-&amp;gt;DMACIntTCClear = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable the interrupt on NVIC&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;// Set source address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCSrcAddr&amp;nbsp; = (uint32_t)&amp;amp;LPC_SSP0-&amp;gt;DR;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set the destination address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCDestAddr = (uint32_t)dmaBuffer;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// No linked list&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCLLI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set the length of the transfer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Make destination auto increment&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Enable the terminal count interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCControl = 1 | (1&amp;lt;&amp;lt;27) | (1&amp;lt;&amp;lt;31);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// Select SSP0 RX DMA request&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig = (1&amp;lt;&amp;lt;1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Peripheral to memory transfer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig |= (2&amp;lt;&amp;lt;11);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set error interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig |= (1&amp;lt;&amp;lt;14);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Set terminal count interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig |= (1&amp;lt;&amp;lt;15);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Turn Channel 0 on&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GPDMACH0-&amp;gt;DMACCConfig |= 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//-----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;int main(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//system_setSysTicTimerTo1ms();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; spi_init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dma_init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write to data reg to generate clock&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SSP0-&amp;gt;DR = 0x00;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0 ;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Well, as one may observ, I am trying to get a byte from an off-chip ADC conected to the SSP0. And I am trying to make the transfer tho memory by DMA. The thing is ... it is not working ! The DMA never generates the interrupt. Can you help me and show me what I am doing wrong ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards &lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:40:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SSP0-DMA/m-p/519796#M3349</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:40:38Z</dc:date>
    </item>
    <item>
      <title>Re: SSP0 + DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SSP0-DMA/m-p/519797#M3350</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Lobisomem on Sun Mar 02 04:30:23 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you for all your reply. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I manage to make it work. It seems that the SSP (DMACR) must be initialized after the DMA initialization.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:40:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SSP0-DMA/m-p/519797#M3350</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:40:39Z</dc:date>
    </item>
  </channel>
</rss>

