<?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: FlexTimer - measuring pulse width in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexTimer-measuring-pulse-width/m-p/551506#M33529</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think I found the solution. The FTM0-&amp;gt;MOD was zero, so the counter counted from 0 to 0. Setting the value to 0xFFFF solves the problem:&lt;/P&gt;&lt;PRE&gt;FTM0-&amp;gt;MOD = 0xFFFF&lt;/PRE&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 22 Jun 2016 19:00:24 GMT</pubDate>
    <dc:creator>bluetiger9</dc:creator>
    <dc:date>2016-06-22T19:00:24Z</dc:date>
    <item>
      <title>FlexTimer - measuring pulse width</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexTimer-measuring-pulse-width/m-p/551504#M33527</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am trying to measure the pulse width of a PWM signal on a FRDM-K82F board. I am using the FTM0 FlexTimer in dual edge capture mode on channels 6-7. I'm getting the interrupts both for the rising and falling edge of the pulses. My understanding was that pulse width can be calculated&amp;nbsp; by subtracting the counter values of the two channels. The problem is that as I see these values are always 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14664476457415773" data-renderedposition="160_25_798_1536" jivemacro_uid="_14664476457415773"&gt;&lt;P&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include "main.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void FTM0_IRQHandler(void) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; int status = FTM_GetStatusFlags(FTM0);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (status &amp;amp; kFTM_Chnl6Flag) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF("channel6\r\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" cnt %d \r\n", FTM0-&amp;gt;CNT);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" sc %d \r\n", FTM0-&amp;gt;CONTROLS[6].CnSC);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 0 %d \r\n", FTM0-&amp;gt;CONTROLS[0].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 1 %d \r\n", FTM0-&amp;gt;CONTROLS[1].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 2 %d \r\n", FTM0-&amp;gt;CONTROLS[2].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 3 %d \r\n", FTM0-&amp;gt;CONTROLS[3].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 4 %d \r\n", FTM0-&amp;gt;CONTROLS[4].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 5 %d \r\n", FTM0-&amp;gt;CONTROLS[5].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 6 %d \r\n", FTM0-&amp;gt;CONTROLS[6].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 7 %d \r\n\r\n\r\n", FTM0-&amp;gt;CONTROLS[7].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; LED_GREEN_ON();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (status &amp;amp; kFTM_Chnl7Flag) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF("channel7\r\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" cnt %d \r\n", FTM0-&amp;gt;CNT);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" sc %d \r\n", FTM0-&amp;gt;CONTROLS[7].CnSC);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 0 %d \r\n", FTM0-&amp;gt;CONTROLS[0].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 1 %d \r\n", FTM0-&amp;gt;CONTROLS[1].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 2 %d \r\n", FTM0-&amp;gt;CONTROLS[2].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 3 %d \r\n", FTM0-&amp;gt;CONTROLS[3].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 4 %d \r\n", FTM0-&amp;gt;CONTROLS[4].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 5 %d \r\n", FTM0-&amp;gt;CONTROLS[5].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 6 %d \r\n", FTM0-&amp;gt;CONTROLS[6].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" value 7 %d \r\n\r\n\r\n", FTM0-&amp;gt;CONTROLS[7].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF(" pulse width = %d \r\n\r\n\r\n", FTM0-&amp;gt;CONTROLS[7].CnV - FTM0-&amp;gt;CONTROLS[6].CnV);&lt;/P&gt;&lt;P&gt;&amp;nbsp; LED_BLUE_ON();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (status &amp;amp; kFTM_TimeOverflowFlag) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF("overflow\r\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp; LED_RED_ON();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM_ClearStatusFlags(FTM0, status);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;int main(void) {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Init board hardware. */&lt;/P&gt;&lt;P&gt;&amp;nbsp; BOARD_InitPins();&lt;/P&gt;&lt;P&gt;&amp;nbsp; BOARD_BootClockRUN();&lt;/P&gt;&lt;P&gt;&amp;nbsp; BOARD_InitDebugConsole();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; //EnableInterrupts;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NVIC_EnableIRQ(FTM0_IRQn);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; PRINTF("Start...");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Add your code here */&lt;/P&gt;&lt;P&gt;&amp;nbsp; CLOCK_EnableClock(kCLOCK_PortD);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PORT_SetPinMux(BOARD_LED_GREEN_GPIO_PORT, BOARD_LED_GREEN_GPIO_PIN, kPORT_MuxAsGpio);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PORT_SetPinMux(BOARD_LED_BLUE_GPIO_PORT, BOARD_LED_BLUE_GPIO_PIN, kPORT_MuxAsGpio);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PORT_SetPinMux(BOARD_LED_RED_GPIO_PORT, BOARD_LED_RED_GPIO_PIN, kPORT_MuxAsGpio);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; // setup PTA1, PTA2 (J2-18,20) as FTM0_CH6, FTM0_CH7&lt;/P&gt;&lt;P&gt;&amp;nbsp; CLOCK_EnableClock(kCLOCK_PortA);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PORT_SetPinMux(PORTA, 1, kPORT_MuxAlt3);&lt;/P&gt;&lt;P&gt;&amp;nbsp; PORT_SetPinMux(PORTA, 2, kPORT_MuxAlt3);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ftm_config_t ftmInfo;&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM_GetDefaultConfig(&amp;amp;ftmInfo);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ftmInfo.prescale = kFTM_Prescale_Divide_128;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM_Init(FTM0, &amp;amp;ftmInfo);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; //FTM_SetupPwm(FTM0, ftmParam, 2U, kFTM_EdgeAlignedPwm, 24000U, CLOCK_GetFreq(BUS_CLK));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ftm_dual_edge_capture_param_t param = { kFTM_Continuous, kFTM_RisingEdge, kFTM_FallingEdge };&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM_SetupDualEdgeCapture(FTM0, kFTM_Chnl_3, &amp;amp;param, 0);&lt;/P&gt;&lt;P&gt;&amp;nbsp; //FTM_SetupInputCapture(FTM0, kFTM_Chnl_6, kFTM_RiseAndFallEdge, 0);&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM_EnableInterrupts(FTM0,&lt;/P&gt;&lt;P&gt;&amp;nbsp; kFTM_Chnl6InterruptEnable | kFTM_Chnl7InterruptEnable | kFTM_Chnl3InterruptEnable | kFTM_Chnl4InterruptEnable |&lt;/P&gt;&lt;P&gt;&amp;nbsp; kFTM_Chnl0InterruptEnable | kFTM_Chnl1InterruptEnable | kFTM_Chnl2InterruptEnable | kFTM_Chnl5InterruptEnable&lt;/P&gt;&lt;P&gt;&amp;nbsp; | kFTM_TimeOverflowInterruptEnable&lt;/P&gt;&lt;P&gt;&amp;nbsp; | kFTM_FaultInterruptEnable | kFTM_ReloadInterruptEnable);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; FTM_StartTimer(FTM0, kFTM_SystemClock);&lt;/P&gt;&lt;P&gt;&amp;nbsp; //FTM_StartTimer(FTM0, kFTM_ExternalClock);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; LED_GREEN_INIT(LOGIC_LED_OFF);&lt;/P&gt;&lt;P&gt;&amp;nbsp; LED_RED_INIT(LOGIC_LED_OFF);&lt;/P&gt;&lt;P&gt;&amp;nbsp; LED_BLUE_INIT(LOGIC_LED_OFF);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (true) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; __asm("nop");bbb&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I tried without interrupts too, pulling the values in while loop, but I'm getting the same values. The result are the same with single edge capture mode too.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Probably I missed something in the setup part or maybe I'm reading the wrong values from wrong place.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can somebody take look on the above code to see what goes wrong?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks &lt;IMG alt="Smiley Happy" class="emoticon emoticon-smileyhappy" id="smileyhappy" src="https://community.nxp.com/i/smilies/16x16_smiley-happy.png" title="Smiley Happy" /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 13:38:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexTimer-measuring-pulse-width/m-p/551504#M33527</guid>
      <dc:creator>bluetiger9</dc:creator>
      <dc:date>2020-11-02T13:38:56Z</dc:date>
    </item>
    <item>
      <title>Re: FlexTimer - measuring pulse width</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexTimer-measuring-pulse-width/m-p/551505#M33528</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Attila,&lt;/P&gt;&lt;P&gt;Thank you for your interest in NXP Semiconductor products and the opportunity to serve you.&lt;/P&gt;&lt;P&gt;I was wondering if you can upload the demo, then I can replicate the kind of issue on the FRDM-K82F board.&lt;/P&gt;&lt;P&gt;I'm looking forward to your reply.&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>Wed, 22 Jun 2016 02:38:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexTimer-measuring-pulse-width/m-p/551505#M33528</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2016-06-22T02:38:44Z</dc:date>
    </item>
    <item>
      <title>Re: FlexTimer - measuring pulse width</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexTimer-measuring-pulse-width/m-p/551506#M33529</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think I found the solution. The FTM0-&amp;gt;MOD was zero, so the counter counted from 0 to 0. Setting the value to 0xFFFF solves the problem:&lt;/P&gt;&lt;PRE&gt;FTM0-&amp;gt;MOD = 0xFFFF&lt;/PRE&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Jun 2016 19:00:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexTimer-measuring-pulse-width/m-p/551506#M33529</guid>
      <dc:creator>bluetiger9</dc:creator>
      <dc:date>2016-06-22T19:00:24Z</dc:date>
    </item>
  </channel>
</rss>

