<?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>Processor Expert Software中的主题 Re: Ethernet LDD potential bug</title>
    <link>https://community.nxp.com/t5/Processor-Expert-Software/Ethernet-LDD-potential-bug/m-p/312354#M2345</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After investigation of this problem, I think I found the &lt;EM&gt;&lt;STRONG&gt;root cause&lt;/STRONG&gt;&lt;/EM&gt; of problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SendFrame adds to TxQueue in two steps. First without TX_READY flag and then in next step TX_READY flag is added.&lt;/P&gt;&lt;P&gt;The TX_READY flag is reset when ethernet peripheral has sent it.&lt;/P&gt;&lt;P&gt;InterruptTxFrame checks that TX_READY is reset to determine if OnFrameTransmit should take place.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now, when interrupt occurrs between step 1 and 2 of SendFrame above, the frame is wrongly interpreted as already sent since the bit TX_READY is not yet set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;One solution is:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;1) Add another flag, ETH1_TX_TO1, or-ed to TX_READY in step 2.&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;SPAN style="text-decoration: line-through;"&gt;LDD_QUEUE_GET_TAIL_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferDescCount - Index).Flags |= ETH1_TX_READY; /* Enable buffer transmission */&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;LDD_QUEUE_GET_TAIL_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferDescCount - Index).Flags |=&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;ETH1_TX_READY | /* Enable buffer transmission */&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;ETH1_TX_TO1; /* Indicate that it has been enabled */&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2) Add check for TX_TO1 in RemoveTxFrame&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;SPAN style="text-decoration: line-through;"&gt;!(LDD_QUEUE_GET_HEAD_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferOffset).Flags &amp;amp; ETH1_TX_READY)) {&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;!(LDD_QUEUE_GET_HEAD_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferOffset).Flags &amp;amp; ETH1_TX_READY) &amp;amp;&amp;amp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;(LDD_QUEUE_GET_HEAD_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferOffset).Flags &amp;amp; ETH1_TX_TO1)) {&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;/Peter&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 09 May 2014 05:56:54 GMT</pubDate>
    <dc:creator>PeterFromSweden</dc:creator>
    <dc:date>2014-05-09T05:56:54Z</dc:date>
    <item>
      <title>Ethernet LDD potential bug</title>
      <link>https://community.nxp.com/t5/Processor-Expert-Software/Ethernet-LDD-potential-bug/m-p/312353#M2344</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am using CodeWarrior 10.6 and Processor Expert to generate Ethernet LDD. The code supplied runs on TWR-K60N512 and in just a few seconds reproduce my problem.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Problem is that I get one more OnFrameTransmitted than actual SendFrame's. When this occurrs it is always when OnFrameTransmitted interrupts an ongoing SendFrame. From a user perspective it is easy to say that I don't want more completed frame receipts than what I have scheduled for sending, but finding logical explanation to it is harder.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please have a try on attached project and se for yourself! More info in main.c on steps to reproduce problem.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;/Peter&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-339144"&gt;EthernetPE.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 08 May 2014 12:53:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Processor-Expert-Software/Ethernet-LDD-potential-bug/m-p/312353#M2344</guid>
      <dc:creator>PeterFromSweden</dc:creator>
      <dc:date>2014-05-08T12:53:50Z</dc:date>
    </item>
    <item>
      <title>Re: Ethernet LDD potential bug</title>
      <link>https://community.nxp.com/t5/Processor-Expert-Software/Ethernet-LDD-potential-bug/m-p/312354#M2345</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After investigation of this problem, I think I found the &lt;EM&gt;&lt;STRONG&gt;root cause&lt;/STRONG&gt;&lt;/EM&gt; of problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SendFrame adds to TxQueue in two steps. First without TX_READY flag and then in next step TX_READY flag is added.&lt;/P&gt;&lt;P&gt;The TX_READY flag is reset when ethernet peripheral has sent it.&lt;/P&gt;&lt;P&gt;InterruptTxFrame checks that TX_READY is reset to determine if OnFrameTransmit should take place.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now, when interrupt occurrs between step 1 and 2 of SendFrame above, the frame is wrongly interpreted as already sent since the bit TX_READY is not yet set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;One solution is:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;1) Add another flag, ETH1_TX_TO1, or-ed to TX_READY in step 2.&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;SPAN style="text-decoration: line-through;"&gt;LDD_QUEUE_GET_TAIL_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferDescCount - Index).Flags |= ETH1_TX_READY; /* Enable buffer transmission */&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;LDD_QUEUE_GET_TAIL_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferDescCount - Index).Flags |=&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;ETH1_TX_READY | /* Enable buffer transmission */&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;ETH1_TX_TO1; /* Indicate that it has been enabled */&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2) Add check for TX_TO1 in RemoveTxFrame&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;SPAN style="text-decoration: line-through;"&gt;!(LDD_QUEUE_GET_HEAD_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferOffset).Flags &amp;amp; ETH1_TX_READY)) {&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;!(LDD_QUEUE_GET_HEAD_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferOffset).Flags &amp;amp; ETH1_TX_READY) &amp;amp;&amp;amp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;(LDD_QUEUE_GET_HEAD_OFFSET_ITEM(DeviceDataPrv-&amp;gt;TxQueue, BufferOffset).Flags &amp;amp; ETH1_TX_TO1)) {&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;/Peter&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 09 May 2014 05:56:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Processor-Expert-Software/Ethernet-LDD-potential-bug/m-p/312354#M2345</guid>
      <dc:creator>PeterFromSweden</dc:creator>
      <dc:date>2014-05-09T05:56:54Z</dc:date>
    </item>
  </channel>
</rss>

