<?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: LPC4357 M0 Core Enthernet DMA Problem in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-M0-Core-Enthernet-DMA-Problem/m-p/591011#M22152</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Rsing.Yang on Thu May 29 20:41:33 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you for the reply.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The code below is the ISR of M0 Enternet interrupt.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I use a globle variable _ints_ to record the value of DMA_STAT register .&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ints_ = 0x8010&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That means bit:DMA_ST_OVF &amp;amp; bit:AIS of DMA_STAT register is set.But I don't know why and how this happens.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there any register that needs a special setting?Because I use the same setting&amp;nbsp; as M4(Including device initialization/register setting/ISR). The most difference is they use different IRQ number and IRQ priority.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Do I need to run the initial funtcion in M4 ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/**&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @briefEMAC interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @returnNothing&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @noteThis function handles the transmit, receive, and error interrupt of&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * the LPC118xx/43xx. This is meant to be used when NO_SYS=0.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef CORE_M0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void M0_ETH_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void ETH_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;signed portBASE_TYPE xRecTaskWoken = pdFALSE, XTXTaskWoken = pdFALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; uint32_t ints;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint32_t _ints_;&amp;nbsp;&amp;nbsp; //a globle value&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Get pending interrupts */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ints = LPC_ETHERNET-&amp;gt;DMA_STAT;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;_ints_ = ints;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //record the value of DMA_STAT&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* RX group interrupt(s) */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ints &amp;amp; (DMA_ST_RI | DMA_ST_OVF | DMA_ST_RU)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Give semaphore to wakeup RX receive task. Note the FreeRTOS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; method is used instead of the LWIP arch method. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;xSemaphoreGiveFromISR(lpc_enetdata.RxSem, &amp;amp;xRecTaskWoken);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* TX group interrupt(s) */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ints &amp;amp; (DMA_ST_TI | DMA_ST_UNF | DMA_ST_TU)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Give semaphore to wakeup TX cleanup task. Note the FreeRTOS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; method is used instead of the LWIP arch method. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;xSemaphoreGiveFromISR(lpc_enetdata.TxCleanSem, &amp;amp;XTXTaskWoken);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Clear pending interrupts */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_ETHERNET-&amp;gt;DMA_STAT = ints;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ints = LPC_ETHERNET-&amp;gt;DMA_CURHOST_REC_BUF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Context switch needed? */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;portEND_SWITCHING_ISR(xRecTaskWoken || XTXTaskWoken);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:16:34 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:16:34Z</dc:date>
    <item>
      <title>LPC4357 M0 Core Enthernet DMA Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-M0-Core-Enthernet-DMA-Problem/m-p/591009#M22150</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Rsing.Yang on Wed May 28 23:22:19 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi guys!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have successfully&amp;nbsp; run FreeRTOS + LwIP + TFTP on lpc4357 M4 Core.And now I am trying to run LwIP on M0 Core.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I use the same driver that works perfectly on M4 to drive M0.Everything seems to be ok at the initialization process.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But after that , M0 is Interrupted by the reason of Receive Overflow repetitively.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I want to know what does Receive Overflow mean ? And what will possibly cause this interrupt?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am glad to offer more information about my question if it may help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hope for your help &amp;amp;Thanks in advanced!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best Regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Rising.Yang&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:16:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-M0-Core-Enthernet-DMA-Problem/m-p/591009#M22150</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:16:32Z</dc:date>
    </item>
    <item>
      <title>Re: LPC4357 M0 Core Enthernet DMA Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-M0-Core-Enthernet-DMA-Problem/m-p/591010#M22151</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by TheFallGuy on Thu May 29 07:35:07 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I would guess that either:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1. Your receive interrupt is not being triggered (perhaps it is a different name on the M0, or requires different setup?), or&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2. You are not able to service the interrupts quickly enough. The M0 is slower than the M4.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;To help any further you would need to post your code.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:16:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-M0-Core-Enthernet-DMA-Problem/m-p/591010#M22151</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:16:33Z</dc:date>
    </item>
    <item>
      <title>Re: LPC4357 M0 Core Enthernet DMA Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-M0-Core-Enthernet-DMA-Problem/m-p/591011#M22152</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Rsing.Yang on Thu May 29 20:41:33 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you for the reply.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The code below is the ISR of M0 Enternet interrupt.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I use a globle variable _ints_ to record the value of DMA_STAT register .&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ints_ = 0x8010&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That means bit:DMA_ST_OVF &amp;amp; bit:AIS of DMA_STAT register is set.But I don't know why and how this happens.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there any register that needs a special setting?Because I use the same setting&amp;nbsp; as M4(Including device initialization/register setting/ISR). The most difference is they use different IRQ number and IRQ priority.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Do I need to run the initial funtcion in M4 ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/**&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @briefEMAC interrupt handler&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @returnNothing&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @noteThis function handles the transmit, receive, and error interrupt of&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * the LPC118xx/43xx. This is meant to be used when NO_SYS=0.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef CORE_M0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void M0_ETH_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void ETH_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;signed portBASE_TYPE xRecTaskWoken = pdFALSE, XTXTaskWoken = pdFALSE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; uint32_t ints;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;extern uint32_t _ints_;&amp;nbsp;&amp;nbsp; //a globle value&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Get pending interrupts */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ints = LPC_ETHERNET-&amp;gt;DMA_STAT;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;_ints_ = ints;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //record the value of DMA_STAT&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* RX group interrupt(s) */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ints &amp;amp; (DMA_ST_RI | DMA_ST_OVF | DMA_ST_RU)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Give semaphore to wakeup RX receive task. Note the FreeRTOS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; method is used instead of the LWIP arch method. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;xSemaphoreGiveFromISR(lpc_enetdata.RxSem, &amp;amp;xRecTaskWoken);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* TX group interrupt(s) */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (ints &amp;amp; (DMA_ST_TI | DMA_ST_UNF | DMA_ST_TU)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Give semaphore to wakeup TX cleanup task. Note the FreeRTOS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; method is used instead of the LWIP arch method. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;xSemaphoreGiveFromISR(lpc_enetdata.TxCleanSem, &amp;amp;XTXTaskWoken);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Clear pending interrupts */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_ETHERNET-&amp;gt;DMA_STAT = ints;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ints = LPC_ETHERNET-&amp;gt;DMA_CURHOST_REC_BUF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Context switch needed? */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;portEND_SWITCHING_ISR(xRecTaskWoken || XTXTaskWoken);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:16:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-M0-Core-Enthernet-DMA-Problem/m-p/591011#M22152</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:16:34Z</dc:date>
    </item>
  </channel>
</rss>

