<?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: some example code of SPI with DMA for Kinetics. in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/some-example-code-of-SPI-with-DMA-for-Kinetics/m-p/432600#M25101</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It is at best 'very difficult' to 'cheat' on this expansion of TX SPI DMA buffer to 32-bits.&amp;nbsp; I just define the buffer that way, and make the buffer-filler 'know' to only work into the lower byte or half-word.&amp;nbsp; One place I used this was in a small monochrome-graphics display buffer that updates the actual display periodically with a DMA block-write.&amp;nbsp; You might also look into:&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/thread/330454"&gt;Using SPI/DMA on the K60.&lt;/A&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 24 Sep 2015 13:35:33 GMT</pubDate>
    <dc:creator>egoodii</dc:creator>
    <dc:date>2015-09-24T13:35:33Z</dc:date>
    <item>
      <title>some example code of SPI with DMA for Kinetics.</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/some-example-code-of-SPI-with-DMA-for-Kinetics/m-p/432597#M25098</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hellow:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My pr&lt;SPAN style="color: #3d3d3d;"&gt;oblem is to implement a SPI master driver. Also I need to send this port many bytes (9600 bytes).&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #3d3d3d; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;I implemented it on MK60FN1M0VMD12&amp;nbsp; by Keil environment and Processor Expert.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #3d3d3d;"&gt;I can send it using a SPI by int&lt;/SPAN&gt;erruptions, but I would like to be able to use DMA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This can not be done using the Processor Expert.&lt;/P&gt;&lt;P&gt;In addition I have seen that it is not possible to send bytes directly to the "PUSHR", because we must also complete "command information" for each byte.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Are there examples code to send a full buffer by DMA?&lt;/P&gt;&lt;P&gt;Is it possible without copying byte by byte with the command information?&lt;/P&gt;&lt;P&gt;Remember, we need to send a lot bytes continuously.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thank you!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 11 Aug 2015 15:00:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/some-example-code-of-SPI-with-DMA-for-Kinetics/m-p/432597#M25098</guid>
      <dc:creator>albertmartin</dc:creator>
      <dc:date>2015-08-11T15:00:24Z</dc:date>
    </item>
    <item>
      <title>Re: some example code of SPI with DMA for Kinetics.</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/some-example-code-of-SPI-with-DMA-for-Kinetics/m-p/432598#M25099</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Abert,&lt;/P&gt;&lt;P&gt;I'd highly recommend you to refer to this document about the SPI operation integrates with DMA.&lt;/P&gt;&lt;P&gt;And please review this doc through the link as below.&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/docs/DOC-100304"&gt;使用DMA降低SPI通信过程中内核负荷 Reduce core work load with DMA Module during SPI communication&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Hope it helps.&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ping&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Aug 2015 01:08:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/some-example-code-of-SPI-with-DMA-for-Kinetics/m-p/432598#M25099</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2015-08-21T01:08:35Z</dc:date>
    </item>
    <item>
      <title>Re: some example code of SPI with DMA for Kinetics.</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/some-example-code-of-SPI-with-DMA-for-Kinetics/m-p/432599#M25100</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I can create this code for DMA SPI:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14429040386939282 jive_text_macro" data-renderedposition="50_8_1232_1136" jivemacro_uid="_14429040386939282" modifiedtitle="true"&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//##############################################################&lt;/P&gt;&lt;P&gt;// * Start Tranfer Buffer to SPI.&lt;/P&gt;&lt;P&gt;//##############################################################&lt;/P&gt;&lt;P&gt;uint32_t DMA_DISP_Start_Transfer (uint32_t * Source, uint16_t Size)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; uint32_t u32ErrorStatus = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; u32ErrorStatus = DMA0-&amp;gt;INT; // CHECK COMPLETE LAST.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; SIM-&amp;gt;SCGC6 |= SIM_SCGC6_DMAMUX0_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable clock to DMA mux&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; SIM-&amp;gt;SCGC7 |= SIM_SCGC7_DMA_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable clock to DMA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;ERR |= (uint32_t) DMA_CHANEL_SPI_MASK; // Remove ERROR flags. // 0x0001&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;CEEI = (uint8_t) 0x00U; // Clear Disp Error Interrupt Register&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;CERQ = (uint8_t) 0x00U; // Clear Disp Request Register&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;CINT = (uint8_t) 0x00U;&amp;nbsp; // Clear Disp Interrupt Requests&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;CERR = (uint8_t) 0x00U; // Clear Disp Error Indicators&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // DMAMUX DMA_CHANEL_SPI&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMAMUX0-&amp;gt;CHCFG[DMA_CHANEL_SPI] = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // reset DMAMUX0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // for Chanel show: "Table 3-26. DMA request sources - MUX 0"&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMAMUX0-&amp;gt;CHCFG[DMA_CHANEL_SPI] = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(17); // Triger // 17: SPI0 Transmit&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;CERQ |= DMA_CERQ_CERQ(DMA_CHANEL_SPI); //to clear a given bit in the ERQ to disable the DMA request for a given channel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].SADDR = (uint32_t) Source;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].CSR &amp;amp;= (uint16_t) (~(uint16_t) (DMA_CSR_DONE_MASK)); // /* Clear DMA transfer done status flag. */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].ATTR = DMA_ATTR_SSIZE(2) | DMA_ATTR_DSIZE(2); // 32-bit source and destiny&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].SOFF = 4;&amp;nbsp; //4 byte(32 bytes) offset between each source element &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].DOFF = 0;&amp;nbsp; //0 byte offset between each destination element&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].NBYTES_MLNO = 0x04; /* Transfer 4 bytes per transaction */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].SLAST = 0x00;/* set last_sga to point to the TCD struct to be loaded at the end of the major loop */ // CHECK // AM&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].DADDR = (uint32_t) &amp;amp;(SPI0-&amp;gt;PUSHR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].CITER_ELINKNO = DMA_CITER_ELINKNO_CITER(Size); /* No link channel to channel, Size transaction */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].BITER_ELINKNO = DMA_BITER_ELINKNO_BITER(Size); /* No link channel to channel, Size transaction */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].DLAST_SGA = 0x00; /* No adjustment to destination address */ //OR -0x0A&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].CSR = DMA_CSR_DREQ_MASK; // No link, //One transfer only./* Clear control status register. *///DisableAfterRequest&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Interrupt.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Transfer compete interrupt vector(s) priority setting */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* NVICIP0: PRI0=0xF0 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; NVIC-&amp;gt;IP[(uint32_t) DMA0_DMA16_IRQn] = (uint8_t) 0xF0; // LOW PRIORITY.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* NVICISER0: SETENA|=1 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(DMA0_DMA16_IRQn);&amp;nbsp; // Set DMA ISRs&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Enable Complete Tranfer on DMA.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;TCD[DMA_CHANEL_SPI].CSR |= DMA_CSR_INTHALF_MASK; // Complete Tranfer.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // end Iterrupt.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;ERQ = DMA_ERQ_ERQ0_MASK; // Start !!!!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DMA0-&amp;gt;SSRT = (uint8_t) DMA_SSRT_SSRT(DMA_CHANEL_&lt;SPAN style="color: rgba(0, 0, 0, 0); font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 12px;"&gt;SPI&lt;/SPAN&gt;); // Start !!!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; return (u32ErrorStatus);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;//##############################################################&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It is important to conmfigure SPI for Request to DMA.: &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; SPI0-&amp;gt;RSER |= SPI_RSER_TFFF_DIRS_MASK | SPI_RSER_TFFF_RE_MASK; // DMA &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope you find it useful.&lt;/P&gt;&lt;P&gt;Alberto Martin.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Sep 2015 06:49:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/some-example-code-of-SPI-with-DMA-for-Kinetics/m-p/432599#M25100</guid>
      <dc:creator>albertmartin</dc:creator>
      <dc:date>2015-09-22T06:49:35Z</dc:date>
    </item>
    <item>
      <title>Re: some example code of SPI with DMA for Kinetics.</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/some-example-code-of-SPI-with-DMA-for-Kinetics/m-p/432600#M25101</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It is at best 'very difficult' to 'cheat' on this expansion of TX SPI DMA buffer to 32-bits.&amp;nbsp; I just define the buffer that way, and make the buffer-filler 'know' to only work into the lower byte or half-word.&amp;nbsp; One place I used this was in a small monochrome-graphics display buffer that updates the actual display periodically with a DMA block-write.&amp;nbsp; You might also look into:&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/thread/330454"&gt;Using SPI/DMA on the K60.&lt;/A&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Sep 2015 13:35:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/some-example-code-of-SPI-with-DMA-for-Kinetics/m-p/432600#M25101</guid>
      <dc:creator>egoodii</dc:creator>
      <dc:date>2015-09-24T13:35:33Z</dc:date>
    </item>
  </channel>
</rss>

