<?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 k60 flex timer nano seconds delay issue in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/k60-flex-timer-nano-seconds-delay-issue/m-p/262789#M8224</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello every one,&lt;/P&gt;&lt;P&gt;We recently acquired a few precision adcs,and i need to give the signals exact timing.&lt;/P&gt;&lt;P&gt;I have made a delay function which gives delay in nano seconds,but i always get stuck in the ISR which handles the timer interrupts while debugging.&lt;/P&gt;&lt;P&gt;I cant see how the flag overflows as it is getting stuck there.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is my delay function.&lt;/P&gt;&lt;P&gt;unsigned long adc_counter = 0;&lt;/P&gt;&lt;P&gt;LDD_TDeviceData *adcdelaytimer;&lt;/P&gt;&lt;P&gt;LDD_TError timerError;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * Description:&amp;nbsp;&amp;nbsp;&amp;nbsp; Function provides delay in nanoseconds.&lt;/P&gt;&lt;P&gt; * Parameters:&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int.&lt;/P&gt;&lt;P&gt; * Return Value:&amp;nbsp;&amp;nbsp;&amp;nbsp; Nothing.&lt;/P&gt;&lt;P&gt; * Minimum time : approx 0.1 microseconds(100 ns)&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void adc_delay(unsigned int a)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adcdelaytimer = ADC_timer_Init(NULL);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; timerError = ADC_timer_Enable(adcdelaytimer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(adc_counter &amp;lt; a)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; timerError = ADC_timer_Disable(adcdelaytimer);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADC_timer_Disable(adcdelaytimer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_counter = 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;events.c&lt;/P&gt;&lt;P&gt;void ADC_timer_OnCounterRestart(LDD_TUserData *UserDataPtr)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Write your code here ... */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_counter++;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;And i keep getting stuck inside this function:&lt;/P&gt;&lt;P&gt;PE_ISR(ADC_timer_Interrupt)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* {Default RTOS Adapter} ISR parameter is passed through the global variable */&lt;/P&gt;&lt;P&gt;&amp;nbsp; ADC_timer_TDeviceDataPtr DeviceDataPrv = INT_FTM0__DEFAULT_RTOS_ISRPARAM;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; LDD_TEventMask State = 0U;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ((FTM_PDD_GetOverflowInterruptFlag(FTM0_BASE_PTR)) != 0U) { /* Is the overflow interrupt flag pending? */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; State |= LDD_TIMERUNIT_ON_COUNTER_RESTART; /* and set mask */&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; State &amp;amp;= DeviceDataPrv-&amp;gt;EnEvents;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Handle only enabled interrupts */&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (State &amp;amp; LDD_TIMERUNIT_ON_COUNTER_RESTART) { /* Is the overflow interrupt flag pending? */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM_PDD_ClearOverflowInterruptFlag(FTM0_BASE_PTR); /* Clear flag */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADC_timer_OnCounterRestart(DeviceDataPrv-&amp;gt;UserDataPtr); /* Invoke OnCounterRestart event */&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any help please....&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 27 Feb 2014 08:20:06 GMT</pubDate>
    <dc:creator>arunkumar1989</dc:creator>
    <dc:date>2014-02-27T08:20:06Z</dc:date>
    <item>
      <title>k60 flex timer nano seconds delay issue</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/k60-flex-timer-nano-seconds-delay-issue/m-p/262789#M8224</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello every one,&lt;/P&gt;&lt;P&gt;We recently acquired a few precision adcs,and i need to give the signals exact timing.&lt;/P&gt;&lt;P&gt;I have made a delay function which gives delay in nano seconds,but i always get stuck in the ISR which handles the timer interrupts while debugging.&lt;/P&gt;&lt;P&gt;I cant see how the flag overflows as it is getting stuck there.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is my delay function.&lt;/P&gt;&lt;P&gt;unsigned long adc_counter = 0;&lt;/P&gt;&lt;P&gt;LDD_TDeviceData *adcdelaytimer;&lt;/P&gt;&lt;P&gt;LDD_TError timerError;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * Description:&amp;nbsp;&amp;nbsp;&amp;nbsp; Function provides delay in nanoseconds.&lt;/P&gt;&lt;P&gt; * Parameters:&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int.&lt;/P&gt;&lt;P&gt; * Return Value:&amp;nbsp;&amp;nbsp;&amp;nbsp; Nothing.&lt;/P&gt;&lt;P&gt; * Minimum time : approx 0.1 microseconds(100 ns)&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void adc_delay(unsigned int a)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adcdelaytimer = ADC_timer_Init(NULL);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; timerError = ADC_timer_Enable(adcdelaytimer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(adc_counter &amp;lt; a)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; timerError = ADC_timer_Disable(adcdelaytimer);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADC_timer_Disable(adcdelaytimer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_counter = 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;events.c&lt;/P&gt;&lt;P&gt;void ADC_timer_OnCounterRestart(LDD_TUserData *UserDataPtr)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Write your code here ... */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_counter++;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;And i keep getting stuck inside this function:&lt;/P&gt;&lt;P&gt;PE_ISR(ADC_timer_Interrupt)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* {Default RTOS Adapter} ISR parameter is passed through the global variable */&lt;/P&gt;&lt;P&gt;&amp;nbsp; ADC_timer_TDeviceDataPtr DeviceDataPrv = INT_FTM0__DEFAULT_RTOS_ISRPARAM;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; LDD_TEventMask State = 0U;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ((FTM_PDD_GetOverflowInterruptFlag(FTM0_BASE_PTR)) != 0U) { /* Is the overflow interrupt flag pending? */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; State |= LDD_TIMERUNIT_ON_COUNTER_RESTART; /* and set mask */&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; State &amp;amp;= DeviceDataPrv-&amp;gt;EnEvents;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Handle only enabled interrupts */&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (State &amp;amp; LDD_TIMERUNIT_ON_COUNTER_RESTART) { /* Is the overflow interrupt flag pending? */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM_PDD_ClearOverflowInterruptFlag(FTM0_BASE_PTR); /* Clear flag */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADC_timer_OnCounterRestart(DeviceDataPrv-&amp;gt;UserDataPtr); /* Invoke OnCounterRestart event */&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any help please....&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 27 Feb 2014 08:20:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/k60-flex-timer-nano-seconds-delay-issue/m-p/262789#M8224</guid>
      <dc:creator>arunkumar1989</dc:creator>
      <dc:date>2014-02-27T08:20:06Z</dc:date>
    </item>
  </channel>
</rss>

