<?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>MCX MicrocontrollersのトピックWhy is TPM input capture returning large distance values (~12 meters) with 24 MHz TPM clock on i.MX9</title>
    <link>https://community.nxp.com/t5/MCX-Microcontrollers/Why-is-TPM-input-capture-returning-large-distance-values-12/m-p/2134089#M3553</link>
    <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hello NXP Community,&lt;/P&gt;&lt;P&gt;I’m using the &lt;STRONG&gt;i.MX93 (Cortex-M33)&lt;/STRONG&gt; and trying to interface an &lt;STRONG&gt;ultrasonic distance sensor (like HC-SR04)&lt;/STRONG&gt; using &lt;STRONG&gt;TPM input capture&lt;/STRONG&gt;. I'm measuring the pulse width between the rising and falling edge on the ECHO pin using TPM3 (input capture on channel 2).&lt;/P&gt;&lt;P&gt;The TPM clock is configured at &lt;STRONG&gt;24 MHz&lt;/STRONG&gt;, and the distance is calculated using the formula:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;float&lt;/SPAN&gt; timeUs = (ticks / tpmClk) * &lt;SPAN class=""&gt;1e6&lt;/SPAN&gt;; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;float&lt;/SPAN&gt; distanceCm = timeUs / &lt;SPAN class=""&gt;58.0f&lt;/SPAN&gt;; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;Here is my full code for reference:-&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"fsl_debug_console.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"board.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"app.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"fsl_tpm.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"fsl_rgpio.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"fsl_lpuart.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*******************************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* Definitions&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;******************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*******************************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* Prototypes&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;******************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*******************************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* Variables&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;******************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt; &lt;SPAN&gt;bool&lt;/SPAN&gt;&lt;SPAN&gt; tpmIsrFlag = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt; &lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; risingTime = &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt; &lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; fallingTime = &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt; &lt;SPAN&gt;bool&lt;/SPAN&gt;&lt;SPAN&gt; gotRisingEdge = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*******************************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* Code&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;******************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt; Init_LPUART(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; lpuart_config_t config;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Get default UART config (8N1, no parity, no flow control) */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; LPUART_GetDefaultConfig(&amp;amp;config);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Modify parameters as needed */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; config.baudRate_Bps = &lt;/SPAN&gt;&lt;SPAN&gt;115200U&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; config.enableTx = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; config.enableRx = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Initialize the UART with the specified parameters */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; LPUART_Init(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_LPUART&lt;/SPAN&gt;&lt;SPAN&gt;, &amp;amp;config, &lt;/SPAN&gt;&lt;SPAN&gt;BOARD_LPUART_CLK_FREQ&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; CalculateDistance(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; ticks;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (fallingTime &amp;gt;= risingTime)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ticks = fallingTime - risingTime;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ticks = (&lt;/SPAN&gt;&lt;SPAN&gt;TPM_MAX_COUNTER_VALUE&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;) - risingTime) + fallingTime;&lt;/SPAN&gt;&lt;SPAN&gt; /* Overflow handled */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; tpmClk = CLOCK_GetIpFreq(&lt;/SPAN&gt;&lt;SPAN&gt;LPTPM_CLOCK_ROOT&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;SPAN&gt; /* You may adjust to TPM clock */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; timeUs = (ticks * &lt;/SPAN&gt;&lt;SPAN&gt;1.0f&lt;/SPAN&gt;&lt;SPAN&gt; / tpmClk) * &lt;/SPAN&gt;&lt;SPAN&gt;1e6&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"TPM Clock : %.2f\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;,tpmClk);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; distanceCm = timeUs / &lt;/SPAN&gt;&lt;SPAN&gt;58.0f&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN&gt; distanceCm;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt; SetUp(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; rgpio_pin_config_t out_config ={&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;kRGPIO_DigitalOutput&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; };&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Trigger pin */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; RGPIO_PinInit(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_RGPIO&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;TRIG_PIN&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;amp;out_config);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; RGPIO_PinWrite(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_RGPIO&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;TRIG_PIN&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt; SendTrigPulse(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; RGPIO_PinWrite(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_RGPIO&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TRIG_PIN&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; SDK_DelayAtLeastUs(&lt;/SPAN&gt;&lt;SPAN&gt;10&lt;/SPAN&gt;&lt;SPAN&gt;, SystemCoreClock); &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; RGPIO_PinWrite(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_RGPIO&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TRIG_PIN&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;void&lt;/SPAN&gt; &lt;SPAN&gt;TPM_INPUT_CAPTURE_HANDLER&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; status = TPM_GetStatusFlags(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (status &amp;amp; &lt;/SPAN&gt;&lt;SPAN&gt;TPM_CHANNEL_FLAG&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; capturedValue = TPM_GetChannelValue(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;BOARD_TPM_INPUT_CAPTURE_CHANNEL&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (!gotRisingEdge)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; risingTime = capturedValue;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gotRisingEdge = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// Switch to falling edge detection&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TPM_SetupInputCapture(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_TPM_INPUT_CAPTURE_CHANNEL&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;kTPM_FallingEdge&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fallingTime = capturedValue;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tpmIsrFlag = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gotRisingEdge = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// Switch back to rising edge detection for next measurement&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TPM_SetupInputCapture(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_TPM_INPUT_CAPTURE_CHANNEL&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;kTPM_RisingEdge&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// Clear interrupt flag for this channel&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TPM_ClearStatusFlags(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TPM_CHANNEL_FLAG&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;SDK_ISR_EXIT_BARRIER&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// tpmIsrFlag = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// /* Clear interrupt flag.*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// TPM_ClearStatusFlags(DEMO_TPM_BASEADDR, TPM_CHANNEL_FLAG);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// SDK_ISR_EXIT_BARRIER;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*!&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* &lt;/SPAN&gt;&lt;SPAN&gt;@brief&lt;/SPAN&gt;&lt;SPAN&gt; Main function&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;int&lt;/SPAN&gt;&lt;SPAN&gt; main(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; tpm_config_t tpmInfo;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Board pin, clock, debug console init */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; BOARD_InitHardware();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; SetUp();&lt;/SPAN&gt;&lt;SPAN&gt; /* Set up the GPIO */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// Init_LPUART(); /* Initialise one more UART */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Print a note to terminal */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\nTPM input capture example\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\nOnce the input signal is received the input capture value is printed\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_GetDefaultConfig(&amp;amp;tpmInfo);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Initialize TPM module */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_Init(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &amp;amp;tpmInfo);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Setup input capture on a TPM channel */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_SetupInputCapture(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;BOARD_TPM_INPUT_CAPTURE_CHANNEL&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;kTPM_RisingEdge&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Set the timer to be in free-running mode */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_SetTimerPeriod(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TPM_MAX_COUNTER_VALUE&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Enable channel interrupt when the second edge is detected */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_EnableInterrupts(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TPM_CHANNEL_INTERRUPT_ENABLE&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Enable at the NVIC */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; EnableIRQ(&lt;/SPAN&gt;&lt;SPAN&gt;TPM_INTERRUPT_NUMBER&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_StartTimer(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;kTPM_SystemClock&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;while&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tpmIsrFlag = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SendTrigPulse();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;while&lt;/SPAN&gt;&lt;SPAN&gt; (!tpmIsrFlag)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;__NOP&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;/SPAN&gt;&lt;SPAN&gt; // Wait for capture&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; distance = CalculateDistance();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"RisingTime : %u\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;,risingTime);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"FallingTime : %u\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;,fallingTime);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"Distance: %.2f cm\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;, distance);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SDK_DelayAtLeastUs(&lt;/SPAN&gt;&lt;SPAN&gt;60000&lt;/SPAN&gt;&lt;SPAN&gt;,SystemCoreClock);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;However, I'm consistently getting &lt;STRONG&gt;distance values around 1228 cm to 1260 cm&lt;/STRONG&gt;, which is abnormally large, even when there's a wall very close to the sensor (e.g., &amp;lt;50 cm). Here are some example readings:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;TPM Clock :&lt;/SPAN&gt; &lt;SPAN class=""&gt;24000000.00&lt;/SPAN&gt;
&lt;SPAN class=""&gt;RisingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1172965159&lt;/SPAN&gt;
&lt;SPAN class=""&gt;FallingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1174675524&lt;/SPAN&gt;
&lt;SPAN class=""&gt;Distance:&lt;/SPAN&gt; &lt;SPAN class=""&gt;1228.71 &lt;/SPAN&gt;&lt;SPAN class=""&gt;cm&lt;/SPAN&gt;

&lt;SPAN class=""&gt;TPM Clock :&lt;/SPAN&gt; &lt;SPAN class=""&gt;24000000.00&lt;/SPAN&gt;
&lt;SPAN class=""&gt;RisingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1283028325&lt;/SPAN&gt;
&lt;SPAN class=""&gt;FallingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1284738837&lt;/SPAN&gt;
&lt;SPAN class=""&gt;Distance:&lt;/SPAN&gt; &lt;SPAN class=""&gt;1228.82 &lt;/SPAN&gt;&lt;SPAN class=""&gt;cm&lt;/SPAN&gt;

&lt;SPAN class=""&gt;TPM Clock :&lt;/SPAN&gt; &lt;SPAN class=""&gt;24000000.00&lt;/SPAN&gt;
&lt;SPAN class=""&gt;RisingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1448107508&lt;/SPAN&gt;
&lt;SPAN class=""&gt;FallingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1449851665&lt;/SPAN&gt;
&lt;SPAN class=""&gt;Distance:&lt;/SPAN&gt; &lt;SPAN class=""&gt;1252.99 &lt;/SPAN&gt;&lt;SPAN class=""&gt;cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 269392922&lt;BR /&gt;FallingTime : 269436317&lt;BR /&gt;Distance: 31.17 cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 278665048&lt;BR /&gt;FallingTime : 278708444&lt;BR /&gt;Distance: 31.18 cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 287937289&lt;BR /&gt;FallingTime : 287977974&lt;BR /&gt;Distance: 29.23 cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 297205949&lt;BR /&gt;FallingTime : 297248662&lt;BR /&gt;Distance: 30.68 cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 306477012&lt;BR /&gt;FallingTime : 306519726&lt;BR /&gt;Distance: 30.69 cm&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;I'm unsure why these values are consistently too large.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;LI-PRODUCT title="i.MX93EVK" id="i.MX93EVK"&gt;&lt;/LI-PRODUCT&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 15 Jul 2025 10:11:25 GMT</pubDate>
    <dc:creator>Manjunathb</dc:creator>
    <dc:date>2025-07-15T10:11:25Z</dc:date>
    <item>
      <title>Why is TPM input capture returning large distance values (~12 meters) with 24 MHz TPM clock on i.MX9</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/Why-is-TPM-input-capture-returning-large-distance-values-12/m-p/2134089#M3553</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hello NXP Community,&lt;/P&gt;&lt;P&gt;I’m using the &lt;STRONG&gt;i.MX93 (Cortex-M33)&lt;/STRONG&gt; and trying to interface an &lt;STRONG&gt;ultrasonic distance sensor (like HC-SR04)&lt;/STRONG&gt; using &lt;STRONG&gt;TPM input capture&lt;/STRONG&gt;. I'm measuring the pulse width between the rising and falling edge on the ECHO pin using TPM3 (input capture on channel 2).&lt;/P&gt;&lt;P&gt;The TPM clock is configured at &lt;STRONG&gt;24 MHz&lt;/STRONG&gt;, and the distance is calculated using the formula:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;float&lt;/SPAN&gt; timeUs = (ticks / tpmClk) * &lt;SPAN class=""&gt;1e6&lt;/SPAN&gt;; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;float&lt;/SPAN&gt; distanceCm = timeUs / &lt;SPAN class=""&gt;58.0f&lt;/SPAN&gt;; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;Here is my full code for reference:-&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"fsl_debug_console.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"board.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"app.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"fsl_tpm.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"fsl_rgpio.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#include &lt;/SPAN&gt;&lt;SPAN&gt;"fsl_lpuart.h"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*******************************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* Definitions&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;******************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*******************************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* Prototypes&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;******************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*******************************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* Variables&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;******************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt; &lt;SPAN&gt;bool&lt;/SPAN&gt;&lt;SPAN&gt; tpmIsrFlag = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt; &lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; risingTime = &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt; &lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; fallingTime = &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt; &lt;SPAN&gt;bool&lt;/SPAN&gt;&lt;SPAN&gt; gotRisingEdge = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*******************************************************************************&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* Code&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;******************************************************************************/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt; Init_LPUART(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; lpuart_config_t config;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Get default UART config (8N1, no parity, no flow control) */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; LPUART_GetDefaultConfig(&amp;amp;config);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Modify parameters as needed */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; config.baudRate_Bps = &lt;/SPAN&gt;&lt;SPAN&gt;115200U&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; config.enableTx = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; config.enableRx = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Initialize the UART with the specified parameters */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; LPUART_Init(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_LPUART&lt;/SPAN&gt;&lt;SPAN&gt;, &amp;amp;config, &lt;/SPAN&gt;&lt;SPAN&gt;BOARD_LPUART_CLK_FREQ&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; CalculateDistance(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; ticks;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (fallingTime &amp;gt;= risingTime)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ticks = fallingTime - risingTime;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ticks = (&lt;/SPAN&gt;&lt;SPAN&gt;TPM_MAX_COUNTER_VALUE&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;) - risingTime) + fallingTime;&lt;/SPAN&gt;&lt;SPAN&gt; /* Overflow handled */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; tpmClk = CLOCK_GetIpFreq(&lt;/SPAN&gt;&lt;SPAN&gt;LPTPM_CLOCK_ROOT&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;SPAN&gt; /* You may adjust to TPM clock */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; timeUs = (ticks * &lt;/SPAN&gt;&lt;SPAN&gt;1.0f&lt;/SPAN&gt;&lt;SPAN&gt; / tpmClk) * &lt;/SPAN&gt;&lt;SPAN&gt;1e6&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"TPM Clock : %.2f\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;,tpmClk);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; distanceCm = timeUs / &lt;/SPAN&gt;&lt;SPAN&gt;58.0f&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN&gt; distanceCm;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt; SetUp(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; rgpio_pin_config_t out_config ={&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;kRGPIO_DigitalOutput&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; };&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Trigger pin */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; RGPIO_PinInit(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_RGPIO&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;TRIG_PIN&lt;/SPAN&gt;&lt;SPAN&gt;,&amp;amp;out_config);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; RGPIO_PinWrite(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_RGPIO&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;TRIG_PIN&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt; SendTrigPulse(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; RGPIO_PinWrite(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_RGPIO&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TRIG_PIN&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; SDK_DelayAtLeastUs(&lt;/SPAN&gt;&lt;SPAN&gt;10&lt;/SPAN&gt;&lt;SPAN&gt;, SystemCoreClock); &lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; RGPIO_PinWrite(&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_RGPIO&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TRIG_PIN&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;void&lt;/SPAN&gt; &lt;SPAN&gt;TPM_INPUT_CAPTURE_HANDLER&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; status = TPM_GetStatusFlags(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (status &amp;amp; &lt;/SPAN&gt;&lt;SPAN&gt;TPM_CHANNEL_FLAG&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; capturedValue = TPM_GetChannelValue(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;BOARD_TPM_INPUT_CAPTURE_CHANNEL&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (!gotRisingEdge)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; risingTime = capturedValue;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gotRisingEdge = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// Switch to falling edge detection&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TPM_SetupInputCapture(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_TPM_INPUT_CAPTURE_CHANNEL&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;kTPM_FallingEdge&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fallingTime = capturedValue;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tpmIsrFlag = &lt;/SPAN&gt;&lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gotRisingEdge = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// Switch back to rising edge detection for next measurement&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TPM_SetupInputCapture(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;BOARD_TPM_INPUT_CAPTURE_CHANNEL&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;kTPM_RisingEdge&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// Clear interrupt flag for this channel&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TPM_ClearStatusFlags(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TPM_CHANNEL_FLAG&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;SDK_ISR_EXIT_BARRIER&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// tpmIsrFlag = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// /* Clear interrupt flag.*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// TPM_ClearStatusFlags(DEMO_TPM_BASEADDR, TPM_CHANNEL_FLAG);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// SDK_ISR_EXIT_BARRIER;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;/*!&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;* &lt;/SPAN&gt;&lt;SPAN&gt;@brief&lt;/SPAN&gt;&lt;SPAN&gt; Main function&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp;*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;int&lt;/SPAN&gt;&lt;SPAN&gt; main(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; tpm_config_t tpmInfo;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Board pin, clock, debug console init */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; BOARD_InitHardware();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; SetUp();&lt;/SPAN&gt;&lt;SPAN&gt; /* Set up the GPIO */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;// Init_LPUART(); /* Initialise one more UART */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Print a note to terminal */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\nTPM input capture example\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\nOnce the input signal is received the input capture value is printed\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_GetDefaultConfig(&amp;amp;tpmInfo);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Initialize TPM module */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_Init(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &amp;amp;tpmInfo);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Setup input capture on a TPM channel */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_SetupInputCapture(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;BOARD_TPM_INPUT_CAPTURE_CHANNEL&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;kTPM_RisingEdge&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Set the timer to be in free-running mode */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_SetTimerPeriod(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TPM_MAX_COUNTER_VALUE&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Enable channel interrupt when the second edge is detected */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_EnableInterrupts(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;TPM_CHANNEL_INTERRUPT_ENABLE&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Enable at the NVIC */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; EnableIRQ(&lt;/SPAN&gt;&lt;SPAN&gt;TPM_INTERRUPT_NUMBER&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; TPM_StartTimer(&lt;/SPAN&gt;&lt;SPAN&gt;DEMO_TPM_BASEADDR&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;kTPM_SystemClock&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;while&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tpmIsrFlag = &lt;/SPAN&gt;&lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SendTrigPulse();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;while&lt;/SPAN&gt;&lt;SPAN&gt; (!tpmIsrFlag)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;__NOP&lt;/SPAN&gt;&lt;SPAN&gt;();&lt;/SPAN&gt;&lt;SPAN&gt; // Wait for capture&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;float&lt;/SPAN&gt;&lt;SPAN&gt; distance = CalculateDistance();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"RisingTime : %u\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;,risingTime);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"FallingTime : %u\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;,fallingTime);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;PRINTF&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;"Distance: %.2f cm\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;, distance);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SDK_DelayAtLeastUs(&lt;/SPAN&gt;&lt;SPAN&gt;60000&lt;/SPAN&gt;&lt;SPAN&gt;,SystemCoreClock);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;However, I'm consistently getting &lt;STRONG&gt;distance values around 1228 cm to 1260 cm&lt;/STRONG&gt;, which is abnormally large, even when there's a wall very close to the sensor (e.g., &amp;lt;50 cm). Here are some example readings:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;&lt;SPAN class=""&gt;TPM Clock :&lt;/SPAN&gt; &lt;SPAN class=""&gt;24000000.00&lt;/SPAN&gt;
&lt;SPAN class=""&gt;RisingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1172965159&lt;/SPAN&gt;
&lt;SPAN class=""&gt;FallingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1174675524&lt;/SPAN&gt;
&lt;SPAN class=""&gt;Distance:&lt;/SPAN&gt; &lt;SPAN class=""&gt;1228.71 &lt;/SPAN&gt;&lt;SPAN class=""&gt;cm&lt;/SPAN&gt;

&lt;SPAN class=""&gt;TPM Clock :&lt;/SPAN&gt; &lt;SPAN class=""&gt;24000000.00&lt;/SPAN&gt;
&lt;SPAN class=""&gt;RisingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1283028325&lt;/SPAN&gt;
&lt;SPAN class=""&gt;FallingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1284738837&lt;/SPAN&gt;
&lt;SPAN class=""&gt;Distance:&lt;/SPAN&gt; &lt;SPAN class=""&gt;1228.82 &lt;/SPAN&gt;&lt;SPAN class=""&gt;cm&lt;/SPAN&gt;

&lt;SPAN class=""&gt;TPM Clock :&lt;/SPAN&gt; &lt;SPAN class=""&gt;24000000.00&lt;/SPAN&gt;
&lt;SPAN class=""&gt;RisingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1448107508&lt;/SPAN&gt;
&lt;SPAN class=""&gt;FallingTime :&lt;/SPAN&gt; &lt;SPAN class=""&gt;1449851665&lt;/SPAN&gt;
&lt;SPAN class=""&gt;Distance:&lt;/SPAN&gt; &lt;SPAN class=""&gt;1252.99 &lt;/SPAN&gt;&lt;SPAN class=""&gt;cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 269392922&lt;BR /&gt;FallingTime : 269436317&lt;BR /&gt;Distance: 31.17 cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 278665048&lt;BR /&gt;FallingTime : 278708444&lt;BR /&gt;Distance: 31.18 cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 287937289&lt;BR /&gt;FallingTime : 287977974&lt;BR /&gt;Distance: 29.23 cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 297205949&lt;BR /&gt;FallingTime : 297248662&lt;BR /&gt;Distance: 30.68 cm&lt;BR /&gt;&lt;BR /&gt;TPM Clock : 24000000.00&lt;BR /&gt;RisingTime : 306477012&lt;BR /&gt;FallingTime : 306519726&lt;BR /&gt;Distance: 30.69 cm&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;I'm unsure why these values are consistently too large.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;LI-PRODUCT title="i.MX93EVK" id="i.MX93EVK"&gt;&lt;/LI-PRODUCT&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 15 Jul 2025 10:11:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/Why-is-TPM-input-capture-returning-large-distance-values-12/m-p/2134089#M3553</guid>
      <dc:creator>Manjunathb</dc:creator>
      <dc:date>2025-07-15T10:11:25Z</dc:date>
    </item>
    <item>
      <title>Re: Why is TPM input capture returning large distance values (~12 meters) with 24 MHz TPM clock on i</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/Why-is-TPM-input-capture-returning-large-distance-values-12/m-p/2135068#M3561</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-huuid="6827211125907733361"&gt;Large distance values (~12 meters) from an HC-SR04 ultrasonic sensor using TPM input capture often stem from incorrect pulse width measerement of signal.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-huuid="6827211125907732922"&gt;The sensor measures distance by timing the duration of the echo pulse, and if the measurement includes the trigger pulse or is otherwise inaccurate, it can lead to inflated distance readings.&lt;SPAN class="pjBG2e" data-cid="14167103-9a76-497c-9949-613992ae660f"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV class="WaaZC"&gt;
&lt;DIV class="RJPOee EIJn2" style="animation: none !important;"&gt;
&lt;DIV class="rPeykc" data-hveid="CAMQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQIAxAB"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="WaaZC"&gt;
&lt;DIV class="RJPOee EIJn2" style="animation: none !important;"&gt;
&lt;DIV class="rPeykc" data-hveid="CAsQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQICxAB"&gt;&lt;SPAN data-huuid="4407698907152216328"&gt;Here's a breakdown of the potential causes and solutions: &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="WaaZC"&gt;
&lt;DIV class="RJPOee EIJn2" style="animation: none !important;"&gt;
&lt;DIV class="rPeykc pyPiTc" data-hveid="CA0QAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQIDRAB"&gt;&lt;SPAN data-huuid="4407698907152216834"&gt;1. Incorrect Pulse Width Measurement: &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="WaaZC"&gt;
&lt;DIV class="RJPOee EIJn2" style="animation: none !important;"&gt;
&lt;UL data-hveid="CA4QAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIDhAB"&gt;
&lt;LI class="K3KsMc"&gt;
&lt;DIV class="zMgcWd dSKvsb" data-il=""&gt;
&lt;DIV data-crb-p=""&gt;
&lt;DIV class="xFTqob"&gt;
&lt;DIV class="Gur8Ad"&gt;&lt;SPAN data-huuid="4407698907152219641"&gt;&lt;STRONG&gt;Trigger Pulse Included:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="vM0jzc"&gt;&lt;SPAN data-huuid="4407698907152217846"&gt;The input capture might be capturing the time from the rising edge of the trigger pulse to the falling edge of the echo pulse, instead of just the echo pulse itself.&lt;SPAN class="pjBG2e" data-cid="c750332a-c70c-4af3-ae79-6a9d8ee2b109"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="c750332a-c70c-4af3-ae79-6a9d8ee2b109" data-uuids="4407698907152219641,4407698907152217846"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CBUQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIFRAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="K3KsMc"&gt;
&lt;DIV data-crb-p=""&gt;
&lt;DIV class="xFTqob"&gt;
&lt;DIV class="Gur8Ad"&gt;&lt;SPAN data-huuid="4407698907152218352"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="vM0jzc"&gt;&lt;SPAN data-huuid="4407698907152216557"&gt;Ensure the input capture is configured to measure the duration of the echo pulse only. &lt;/SPAN&gt;&lt;SPAN data-huuid="4407698907152218858"&gt;This typically involves setting up the timer to trigger on the rising edge of the echo signal and capture the falling edge.&lt;SPAN class="pjBG2e" data-cid="9720d9ae-f375-48db-bf85-8d5f195cd0c7"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="9720d9ae-f375-48db-bf85-8d5f195cd0c7" data-uuids="4407698907152218352,4407698907152216557,4407698907152218858"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CBgQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIGBAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="WaaZC"&gt;
&lt;DIV class="RJPOee EIJn2" style="animation: none !important;"&gt;
&lt;DIV class="rPeykc pyPiTc" data-hveid="CCIQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQIIhAB"&gt;&lt;SPAN data-huuid="14447178069959649932"&gt;2. Signal Interference: &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="WaaZC"&gt;
&lt;DIV class="RJPOee EIJn2" style="animation: none !important;"&gt;
&lt;UL data-hveid="CCUQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIJRAB"&gt;
&lt;LI class="K3KsMc"&gt;
&lt;DIV class="zMgcWd dSKvsb" data-il=""&gt;
&lt;DIV data-crb-p=""&gt;
&lt;DIV class="xFTqob"&gt;
&lt;DIV class="Gur8Ad"&gt;&lt;SPAN data-huuid="14447178069959651191"&gt;&lt;STRONG&gt;Early Echo Detection:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="vM0jzc"&gt;&lt;SPAN data-huuid="14447178069959648880"&gt;The sensor's receiver might detect the signal from the transmitter before it bounces off an object, leading to an artificially long pulse width.&lt;SPAN class="pjBG2e" data-cid="4b5cd649-437c-4d51-abd1-255285e2fcc7"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="4b5cd649-437c-4d51-abd1-255285e2fcc7" data-uuids="14447178069959651191,14447178069959648880"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CCYQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIJhAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="K3KsMc"&gt;
&lt;DIV data-crb-p=""&gt;
&lt;DIV class="xFTqob"&gt;
&lt;DIV class="Gur8Ad"&gt;&lt;SPAN data-huuid="14447178069959648354"&gt;&lt;STRONG&gt;Oblique Reflections:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="vM0jzc"&gt;&lt;SPAN data-huuid="14447178069959650139"&gt;Reflections from angled surfaces can cause the echo signal to be weak or delayed, leading to inaccurate distance readings.&lt;SPAN class="pjBG2e" data-cid="876ca299-a015-4a8d-86be-9b0629f71d8c"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="876ca299-a015-4a8d-86be-9b0629f71d8c" data-uuids="14447178069959648354,14447178069959650139"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CDYQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQINhAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;LI class="K3KsMc"&gt;
&lt;DIV data-crb-p=""&gt;
&lt;DIV class="xFTqob"&gt;
&lt;DIV class="Gur8Ad"&gt;&lt;SPAN data-huuid="14447178069959649613"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="vM0jzc"&gt;
&lt;UL data-hveid="CDgQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIOBAB"&gt;
&lt;LI&gt;&lt;SPAN data-huuid="14447178069959650872"&gt;&lt;STRONG&gt;Shielding:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;SPAN data-huuid="14447178069959648561"&gt;Use a small tube or shroud over the transmitter and receiver to minimize early detection and improve signal directionality.&lt;SPAN class="pjBG2e" data-cid="d379042d-5cc2-42af-add7-5f4bca937a37"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="d379042d-5cc2-42af-add7-5f4bca937a37" data-uuids="14447178069959650872,14447178069959648561"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CDEQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIMRAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-huuid="14447178069959648035"&gt;&lt;STRONG&gt;Multiple Readings:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;SPAN data-huuid="14447178069959649820"&gt;Take multiple readings and filter out excessively large values or calculate an average.&lt;SPAN class="pjBG2e" data-cid="8e5c37a2-a40d-4390-b520-c0937ffdd589"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="8e5c37a2-a40d-4390-b520-c0937ffdd589" data-uuids="14447178069959648035,14447178069959649820"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CDAQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIMBAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-huuid="14447178069959649294"&gt;&lt;STRONG&gt;NewPing Library:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;SPAN data-huuid="14447178069959651079"&gt;Consider using the NewPing library, which is designed to handle these issues.&lt;SPAN class="pjBG2e" data-cid="adeb0665-d189-4561-b42c-e3a49b40c43b"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;DIV class="WaaZC"&gt;
&lt;DIV class="RJPOee EIJn2"&gt;
&lt;DIV class="rPeykc pyPiTc" data-hveid="CGIQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qo_EKegQIYhAB"&gt;&lt;SPAN data-huuid="14447178069959650553"&gt;4. Software Implementation: &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV class="WaaZC"&gt;
&lt;DIV class="RJPOee EIJn2"&gt;
&lt;UL data-hveid="CHcQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIdxAB"&gt;
&lt;LI class="K3KsMc"&gt;
&lt;DIV class="zMgcWd dSKvsb" data-il=""&gt;
&lt;DIV data-crb-p=""&gt;
&lt;DIV class="xFTqob"&gt;
&lt;DIV class="Gur8Ad"&gt;&lt;SPAN data-huuid="14447178069959647716"&gt;&lt;STRONG&gt;Timer Configuration:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="vM0jzc"&gt;&lt;SPAN data-huuid="14447178069959649501"&gt;Incorrect timer prescaler or clock settings can affect the accuracy of the pulse width measurement.&lt;SPAN class="pjBG2e" data-cid="e9d98df0-6be4-4a54-9c29-980784b0cef1"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="e9d98df0-6be4-4a54-9c29-980784b0cef1" data-uuids="14447178069959647716,14447178069959649501"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CHQQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIdBAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV data-crb-p=""&gt;
&lt;DIV class="xFTqob"&gt;
&lt;DIV class="Gur8Ad"&gt;&lt;SPAN data-huuid="14447178069959648975"&gt;&lt;STRONG&gt;Delay between Pings:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="vM0jzc"&gt;&lt;SPAN data-huuid="14447178069959650760"&gt;The sensor has a minimum time between pings, and exceeding this can lead to inaccurate readings.&lt;SPAN class="pjBG2e" data-cid="62089f31-59f9-406c-a06d-63b48d3901db"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="62089f31-59f9-406c-a06d-63b48d3901db" data-uuids="14447178069959648975,14447178069959650760"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CG0QAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIbRAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="K3KsMc"&gt;
&lt;DIV data-crb-p=""&gt;
&lt;DIV class="xFTqob"&gt;
&lt;DIV class="Gur8Ad"&gt;&lt;SPAN data-huuid="14447178069959650234"&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class="vM0jzc"&gt;
&lt;UL data-hveid="CHMQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Qm_YKegQIcxAB"&gt;
&lt;LI&gt;&lt;SPAN data-huuid="14447178069959647397"&gt;&lt;STRONG&gt;Check Timer Settings:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;SPAN data-huuid="14447178069959649182"&gt;Verify the timer's prescaler and clock configuration to ensure accurate time measurement.&lt;SPAN class="pjBG2e" data-cid="1a112955-e1c8-491f-accd-45a4e04285be"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="1a112955-e1c8-491f-accd-45a4e04285be" data-uuids="14447178069959647397,14447178069959649182"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CG4QAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIbhAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-huuid="14447178069959648656"&gt;&lt;STRONG&gt;Appropriate Delays:&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;SPAN data-huuid="14447178069959650441"&gt;Ensure sufficient delay between pings to allow the sensor to reset and stabilize.&lt;SPAN class="pjBG2e" data-cid="ea62ea67-ee19-4245-ac11-f035c46fc95c"&gt;&lt;SPAN class="UV3uM"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;DIV class="NPrrbc" data-cid="ea62ea67-ee19-4245-ac11-f035c46fc95c" data-uuids="14447178069959648656,14447178069959650441"&gt;
&lt;DIV class="BMebGe btku5b fCrZyc LwdV0e FR7ZSc qVhvac OJeuxf" tabindex="0" role="button" aria-label="Ver vínculos relacionados" data-hveid="CHAQAQ" data-ved="2ahUKEwjTsJG2xsGOAxVl38kDHblkHh8Q3fYKegQIcBAB"&gt;
&lt;DIV class="niO4u"&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
Regards
&lt;DIV class="kHtcsd"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Wed, 16 Jul 2025 14:09:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/Why-is-TPM-input-capture-returning-large-distance-values-12/m-p/2135068#M3561</guid>
      <dc:creator>Bio_TICFSL</dc:creator>
      <dc:date>2025-07-16T14:09:16Z</dc:date>
    </item>
    <item>
      <title>Re: Why is TPM input capture returning large distance values (~12 meters) with 24 MHz TPM clock on i</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/Why-is-TPM-input-capture-returning-large-distance-values-12/m-p/2135439#M3566</link>
      <description>Thank you for your response!</description>
      <pubDate>Thu, 17 Jul 2025 05:15:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/Why-is-TPM-input-capture-returning-large-distance-values-12/m-p/2135439#M3566</guid>
      <dc:creator>Manjunathb</dc:creator>
      <dc:date>2025-07-17T05:15:31Z</dc:date>
    </item>
  </channel>
</rss>

