<?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: Delay in microsecond in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/Delay-in-microsecond/m-p/220169#M5792</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Typically, default BSP resolution for an MQX tick is 5 ms. So, _time_delay_ticks(1) would put the task back to ready queue 5 milliseconds after the call to it. To get a finer resolution, you can use _time_get_microseconds or _time_get_nanoseconds functions, or even _time_get_hwticks. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If your time delay range is in microseconds, a wait function like the example below works. On TWR-MCF52259 this code gives me about 6 microseconds delay. This kind of delay function should be considered as a minimum delay, due to possible MQX preemptions by higher priority task(s), MQX interrupt(s) and so forth.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; #define MIN_DELAY_HWTICKS&amp;nbsp;&amp;nbsp;&amp;nbsp; (10)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* write logical 1 to the pin - initial state */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lwgpio_set_value(&amp;amp;led1, LWGPIO_VALUE_HIGH); /* set pin to 1 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* write logical 0 to the pin - falling edge - delay starts */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lwgpio_set_value(&amp;amp;led1, LWGPIO_VALUE_LOW); /* set pin to 0 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* do nothing for minimum 10 hwticks plus some software overhead */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; old_hwticks = _time_get_hwticks();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; diff_hwticks = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; while(MIN_DELAY_HWTICKS &amp;gt; diff_hwticks)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hwticks = _time_get_hwticks();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* get the time elapsed from old_hwticks.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * we need to consider a possible occurrence of a tick &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * between the two _time_get_hwticks() calls.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * if a tick occurs between the two, it is possible that old_hwticks &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * is a greater value than the actual hwticks&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * (because a tick resets hwticks to 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; diff_hwticks = hwticks&amp;gt;old_hwticks?(hwticks-old_hwticks):((int_32)_time_get_hw_ticks_per_tick()-old_hwticks+hwticks);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* write logical 1 to the pin */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lwgpio_set_value(&amp;amp;led1, LWGPIO_VALUE_HIGH); /* set pin to 1 */&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 18 Oct 2012 04:38:59 GMT</pubDate>
    <dc:creator>Martin_</dc:creator>
    <dc:date>2012-10-18T04:38:59Z</dc:date>
    <item>
      <title>Delay in microsecond</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Delay-in-microsecond/m-p/220168#M5791</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How can I generate delay in microsecond scale in MQX? _time_delay() works in ms only. I need it for 1-wire memory protocol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Oct 2012 16:12:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Delay-in-microsecond/m-p/220168#M5791</guid>
      <dc:creator>amleng</dc:creator>
      <dc:date>2012-10-17T16:12:22Z</dc:date>
    </item>
    <item>
      <title>Re: Delay in microsecond</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Delay-in-microsecond/m-p/220169#M5792</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Typically, default BSP resolution for an MQX tick is 5 ms. So, _time_delay_ticks(1) would put the task back to ready queue 5 milliseconds after the call to it. To get a finer resolution, you can use _time_get_microseconds or _time_get_nanoseconds functions, or even _time_get_hwticks. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If your time delay range is in microseconds, a wait function like the example below works. On TWR-MCF52259 this code gives me about 6 microseconds delay. This kind of delay function should be considered as a minimum delay, due to possible MQX preemptions by higher priority task(s), MQX interrupt(s) and so forth.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; #define MIN_DELAY_HWTICKS&amp;nbsp;&amp;nbsp;&amp;nbsp; (10)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* write logical 1 to the pin - initial state */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lwgpio_set_value(&amp;amp;led1, LWGPIO_VALUE_HIGH); /* set pin to 1 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* write logical 0 to the pin - falling edge - delay starts */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lwgpio_set_value(&amp;amp;led1, LWGPIO_VALUE_LOW); /* set pin to 0 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* do nothing for minimum 10 hwticks plus some software overhead */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; old_hwticks = _time_get_hwticks();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; diff_hwticks = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; while(MIN_DELAY_HWTICKS &amp;gt; diff_hwticks)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hwticks = _time_get_hwticks();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* get the time elapsed from old_hwticks.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * we need to consider a possible occurrence of a tick &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * between the two _time_get_hwticks() calls.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * if a tick occurs between the two, it is possible that old_hwticks &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * is a greater value than the actual hwticks&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * (because a tick resets hwticks to 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; diff_hwticks = hwticks&amp;gt;old_hwticks?(hwticks-old_hwticks):((int_32)_time_get_hw_ticks_per_tick()-old_hwticks+hwticks);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* write logical 1 to the pin */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lwgpio_set_value(&amp;amp;led1, LWGPIO_VALUE_HIGH); /* set pin to 1 */&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Oct 2012 04:38:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Delay-in-microsecond/m-p/220169#M5792</guid>
      <dc:creator>Martin_</dc:creator>
      <dc:date>2012-10-18T04:38:59Z</dc:date>
    </item>
  </channel>
</rss>

