Is This code correct for interfacing ultra-sonic sensor into i.mx93 (cortex-m33) ?

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Is This code correct for interfacing ultra-sonic sensor into i.mx93 (cortex-m33) ?

819 次查看
Manjunathb
Contributor II
/*
 * Copyright (c) 2015, Freescale Semiconductor, Inc.
 * Copyright 2016-2021 NXP
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include "fsl_debug_console.h"
#include "board.h"
#include "app.h"
#include "fsl_tpm.h"
#include "fsl_rgpio.h"

/*******************************************************************************
 * Definitions
 ******************************************************************************/

/*******************************************************************************
 * Prototypes
 ******************************************************************************/

/*******************************************************************************
 * Variables
 ******************************************************************************/
volatile bool tpmIsrFlag = false;
volatile uint32_t risingTime = 0;
volatile uint32_t fallingTime = 0;
volatile bool gotRisingEdge = false;

/*******************************************************************************
 * Code
 ******************************************************************************/
void SetUp(void)
{
    rgpio_pin_config_t out_config ={
        kRGPIO_DigitalOutput,
        0,
    };
   
    /* Trigger pin */
    RGPIO_PinInit(BOARD_RGPIO,TRIG_PIN,&out_config);
    RGPIO_PinWrite(BOARD_RGPIO,TRIG_PIN,0);
}

void SendTrigPulse(void)
{
    RGPIO_PinWrite(BOARD_RGPIO, TRIG_PIN, 1);
    SDK_DelayAtLeastUs(10, SystemCoreClock);
    RGPIO_PinWrite(BOARD_RGPIO, TRIG_PIN, 0);
}

void TPM_INPUT_CAPTURE_HANDLER(void)
{
    uint32_t status = TPM_GetStatusFlags(DEMO_TPM_BASEADDR);
    if (status & TPM_CHANNEL_FLAG)
    {
        uint32_t capturedValue = TPM_GetChannelValue(DEMO_TPM_BASEADDR, BOARD_TPM_INPUT_CAPTURE_CHANNEL);
        // PRINTF("CAPTURED VALUE : %u\r\n",capturedValue);

        if (!gotRisingEdge)
        {
            risingTime = capturedValue;
            gotRisingEdge = true;

            // TPM_SetupInputCapture(DEMO_TPM_BASEADDR,BOARD_TPM_INPUT_CAPTURE_CHANNEL,kTPM_FallingEdge);

        }
        else
        {
            fallingTime = capturedValue;
            tpmIsrFlag = true;
            gotRisingEdge = false;

            // TPM_SetupInputCapture(DEMO_TPM_BASEADDR,BOARD_TPM_INPUT_CAPTURE_CHANNEL,kTPM_RisingEdge);
        }
       
        /* Clear interrupt flag.*/
        TPM_ClearStatusFlags(DEMO_TPM_BASEADDR, TPM_CHANNEL_FLAG);
    }
    SDK_ISR_EXIT_BARRIER;
}

/*!
 * @brief Main function
 */
int main(void)
{
    tpm_config_t tpmInfo;

    /* Board pin, clock, debug console init */
    BOARD_InitHardware();

    SetUp();

    /* Print a note to terminal */
    PRINTF("\r\nTPM input capture example\r\n");
    PRINTF("\r\nOnce the input signal is received the input capture value is printed\r\n");

    TPM_GetDefaultConfig(&tpmInfo);
    /* Initialize TPM module */
    TPM_Init(DEMO_TPM_BASEADDR, &tpmInfo);

    /* Setup input capture on a TPM channel */
    TPM_SetupInputCapture(DEMO_TPM_BASEADDR, BOARD_TPM_INPUT_CAPTURE_CHANNEL, kTPM_RiseAndFallEdge);

    /* Set the timer to be in free-running mode */
    TPM_SetTimerPeriod(DEMO_TPM_BASEADDR,
    TPM_MAX_COUNTER_VALUE(DEMO_TPM_BASEADDR));

    /* Enable channel interrupt when the second edge is detected */
    TPM_EnableInterrupts(DEMO_TPM_BASEADDR, TPM_CHANNEL_INTERRUPT_ENABLE);

    /* Enable at the NVIC */
    EnableIRQ(TPM_INTERRUPT_NUMBER);

    TPM_StartTimer(DEMO_TPM_BASEADDR, kTPM_SystemClock);
 
    while (1)
    {
        SendTrigPulse();
       
        while (tpmIsrFlag != true)
        {
        }
 
        uint32_t ticks = 0;
        if (fallingTime >= risingTime)
            ticks = fallingTime - risingTime;
        else
            ticks = (TPM_MAX_COUNTER_VALUE(DEMO_TPM_BASEADDR) - risingTime) + fallingTime;
   
        float PulseUs = (ticks * 1000000) / TPM_SOURCE_CLOCK ;
        PRINTF("RISING TIME  : %u\r\n",risingTime);
        PRINTF("FALLING TIME : %u\r\n",fallingTime);
        PRINTF("Micro second is : %.2f\r\n",PulseUs);

        SDK_DelayAtLeastUs(60000,SystemCoreClock);
    }
}
 
I have some problems in this code to check the object distance ?
Here SDK_DelayAtLeastUs(10,SystemCoreClock); This API is not giving the 10 us for trigger the pin to start measurement ?
 
标签 (1)
0 项奖励
回复
4 回复数

800 次查看
JorgeCas
NXP TechSupport
NXP TechSupport

Hello,

The sections of your code are according to the TPM configuration and generation/reading of TRIG and ECHO signals of the ultra-sonic sensor.

To confirm if your function is generating the 10 us signal, I suggest you measure the signal with an oscilloscope or digital analyzer. If the timing is not the expected, you could tune the values to generate the delay since the compiler may optimize the code in such a way that the pulse does not last as expected.

Did you check the operation of the sensor in the board?

Here an example as a reference:

Tutorial: Ultrasonic Ranging with the Freedom Board | MCU on Eclipse

Best regards.

0 项奖励
回复

769 次查看
Manjunathb
Contributor II
/*
 * Copyright (c) 2015, Freescale Semiconductor, Inc.
 * Copyright 2016-2021 NXP
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include "fsl_debug_console.h"
#include "board.h"
#include "app.h"
#include "fsl_tpm.h"
#include "fsl_rgpio.h"

/*******************************************************************************
 * Definitions
 ******************************************************************************/

/*******************************************************************************
 * Prototypes
 ******************************************************************************/

/*******************************************************************************
 * Variables
 ******************************************************************************/
volatile bool tpmIsrFlag = false;
volatile uint32_t risingTime = 0;
volatile uint32_t fallingTime = 0;
volatile bool gotRisingEdge = false;

/*******************************************************************************
 * Code
 ******************************************************************************/
void SetUp(void)
{
    rgpio_pin_config_t out_config ={
        kRGPIO_DigitalOutput,
        0,
    };
   
    /* Trigger pin */
    RGPIO_PinInit(BOARD_RGPIO,TRIG_PIN,&out_config);
    RGPIO_PinWrite(BOARD_RGPIO,TRIG_PIN,0);
}

void SendTrigPulse(void)
{
    RGPIO_PinWrite(BOARD_RGPIO, TRIG_PIN, 1);
    SDK_DelayAtLeastUs(10, SystemCoreClock);
    RGPIO_PinWrite(BOARD_RGPIO, TRIG_PIN, 0);
}

void TPM_INPUT_CAPTURE_HANDLER(void)
{
    uint32_t status = TPM_GetStatusFlags(DEMO_TPM_BASEADDR);
    if (status & TPM_CHANNEL_FLAG)
    {
        uint32_t capturedValue = TPM_GetChannelValue(DEMO_TPM_BASEADDR, BOARD_TPM_INPUT_CAPTURE_CHANNEL);
        // PRINTF("CAPTURED VALUE : %u\r\n",capturedValue);

        if (!gotRisingEdge)
        {
            risingTime = capturedValue;
            gotRisingEdge = true;

            // TPM_SetupInputCapture(DEMO_TPM_BASEADDR,BOARD_TPM_INPUT_CAPTURE_CHANNEL,kTPM_FallingEdge);

        }
        else
        {
            fallingTime = capturedValue;
            tpmIsrFlag = true;
            gotRisingEdge = false;

            // TPM_SetupInputCapture(DEMO_TPM_BASEADDR,BOARD_TPM_INPUT_CAPTURE_CHANNEL,kTPM_RisingEdge);
        }
       
        /* Clear interrupt flag.*/
        TPM_ClearStatusFlags(DEMO_TPM_BASEADDR, TPM_CHANNEL_FLAG);
    }
    SDK_ISR_EXIT_BARRIER;
}

/*!
 * @brief Main function
 */
int main(void)
{
    tpm_config_t tpmInfo;

    /* Board pin, clock, debug console init */
    BOARD_InitHardware();

    SetUp();

    /* Print a note to terminal */
    PRINTF("\r\nTPM input capture example\r\n");
    PRINTF("\r\nOnce the input signal is received the input capture value is printed\r\n");

    TPM_GetDefaultConfig(&tpmInfo);
    /* Initialize TPM module */
    TPM_Init(DEMO_TPM_BASEADDR, &tpmInfo);

    /* Setup input capture on a TPM channel */
    TPM_SetupInputCapture(DEMO_TPM_BASEADDR, BOARD_TPM_INPUT_CAPTURE_CHANNEL, kTPM_RiseAndFallEdge);

    /* Set the timer to be in free-running mode */
    TPM_SetTimerPeriod(DEMO_TPM_BASEADDR, TPM_MAX_COUNTER_VALUE(DEMO_TPM_BASEADDR));

    /* Enable channel interrupt when the second edge is detected */
    TPM_EnableInterrupts(DEMO_TPM_BASEADDR, TPM_CHANNEL_INTERRUPT_ENABLE);

    /* Enable at the NVIC */
    EnableIRQ(TPM_INTERRUPT_NUMBER);

    TPM_StartTimer(DEMO_TPM_BASEADDR, kTPM_SystemClock);

       while (1)
    {
        SendTrigPulse();
       
        while (tpmIsrFlag != true)
        {
        }

    // PRINTF("\r\nCapture value C(n)V=%x\r\n", TPM_GetChannelValue(DEMO_TPM_BASEADDR, BOARD_TPM_INPUT_CAPTURE_CHANNEL));
        uint32_t ticks = 0;
        if (fallingTime >= risingTime)
            ticks = fallingTime - risingTime;
        else
            ticks = (TPM_MAX_COUNTER_VALUE(DEMO_TPM_BASEADDR) - risingTime) + fallingTime;
   
        uint32_t tpm_clock = CLOCK_GetIpFreq(LPTPM_CLOCK_ROOT);
        float PulseUs = (ticks * 1000000) / tpm_clock ;
        PRINTF("RISING TIME  : %u\r\n",risingTime);
        PRINTF("FALLING TIME : %u\r\n",fallingTime);
        PRINTF("Micro second is : %.2f\r\n",PulseUs);

        float Distance = PulseUs / 58;
        PRINTF("DISTANCE : %.2f\r\n",Distance);

        SDK_DelayAtLeastUs(60000,SystemCoreClock);
    }
}
 
i checked using oscilloscope , its trigger 10 us is correct. But problem is now echo pin ?
its not reading the correct value ?
标记 (1)
0 项奖励
回复

787 次查看
Manjunathb
Contributor II
I have already verified the signal using an oscilloscope, and it shows a 10 µs pulse.

Next, I tested by looping the TRIG pin to the ECHO pin directly and measured the pulse width in code. However, it is printing approximately 66 µs instead of the expected 10 µs.

If the TRIG and ECHO pins are directly connected in a loop, it should measure exactly 10 µs, matching the signal generated. I’m unable to identify where the discrepancy is occurring.

Could this be due to a clock configuration issue or some timing inaccuracy in the capture logic?

I would appreciate your help in identifying and resolving this issue.

Thank you in advance!
0 项奖励
回复

789 次查看
Manjunathb
Contributor II
Thank you for your response!
0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2135797%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%B0%86%E8%B6%85%E5%A3%B0%E6%B3%A2%E4%BC%A0%E6%84%9F%E5%99%A8%E8%BF%9E%E6%8E%A5%E5%88%B0%20i.mx93%20(cortex-m33)%20%E7%9A%84%E4%BB%A3%E7%A0%81%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%EF%BC%9F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2135797%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E7%89%88%E6%9D%83%E6%89%80%E6%9C%89%20(c)%202015%EF%BC%8C%E9%A3%9E%E6%80%9D%E5%8D%A1%E5%B0%94%E5%8D%8A%E5%AF%BC%E4%BD%93%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E7%89%88%E6%9D%83%E6%89%80%E6%9C%89%202016-2021%20%E6%81%A9%E6%99%BA%E6%B5%A6%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E4%BF%9D%E7%95%99%E6%89%80%E6%9C%89%E6%9D%83%E5%88%A9%E3%80%82%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20SPDX%20%E8%AE%B8%E5%8F%AF%E8%AF%81%E6%A0%87%E8%AF%86%E7%AC%A6%EF%BC%9ABSD-3%20%E6%9D%A1%E6%AC%BE%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_debug_console.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%3C%2FSPAN%3E%20%3CSPAN%3E%22%20board.h%3C%2FSPAN%3E%20%22%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22app.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_tpm.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_rgpio.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E5%AE%9A%E4%B9%89%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E5%8E%9F%E5%9E%8B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E5%8F%98%E9%87%8F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%98%93%E5%8F%98%3C%2FSPAN%3E%20%3CSPAN%3Ebool%3C%2FSPAN%3E%3CSPAN%3EtpmIsrFlag%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E%E5%81%87%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%98%93%E5%8F%98%3C%2FSPAN%3E%20%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3E%E4%B8%8A%E5%8D%87%E6%97%B6%E9%97%B4%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%98%93%E5%8F%98%3C%2FSPAN%3E%20%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3EfallingTime%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%98%93%E5%8F%98%3C%2FSPAN%3E%20%3CSPAN%3Ebool%3C%2FSPAN%3E%3CSPAN%3EgotRisingEdge%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E%E5%81%87%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E4%BB%A3%E7%A0%81%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E%E8%AE%BE%E7%BD%AE%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20rgpio_pin_config_t%20out_config%20%3D%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EkRGPIO_DigitalOutput%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%7D%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20%E8%A7%A6%E5%8F%91%E4%BF%A1%E5%8F%B7%E5%BC%95%E8%84%9A%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20RGPIO_PinInit(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%26amp%3Bout_config%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20RGPIO_PinWrite(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3ESendTrigPulse(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20RGPIO_PinWrite(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20SDK_DelayAtLeastUs(%3C%2FSPAN%3E%3CSPAN%3E10%3C%2FSPAN%3E%3CSPAN%3E%EF%BC%8CSystemCoreClock%EF%BC%89%EF%BC%9B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20RGPIO_PinWrite(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3Etpm_input_capture_handler%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%E5%A4%84%E7%90%86%E7%A8%8B%E5%BA%8F%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3Estatus%20%3D%20TPM_GetStatusFlags(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E5%A6%82%E6%9E%9C%3C%2FSPAN%3E%3CSPAN%3E(%E7%8A%B6%E6%80%81%26amp%3B%20%3C%2FSPAN%3E%3CSPAN%3Etpm_channel_flag%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3EcapturedValue%20%3D%20TPM_GetChannelValue(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Eboard_tpm_input_capture_channel%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%3C%2FSPAN%3E%3CSPAN%3E%2F%2FPRINTF%20(%22%20%E6%8D%95%E8%8E%B7%E7%9A%84%E5%80%BC%EF%BC%9A%25u%5C%20r%5Cn%20%22%2C%20CapturedValue)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E5%A6%82%E6%9E%9C%3C%2FSPAN%3E%3CSPAN%3E(!gotRisingEdge)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20risingTime%20%3D%20capturedValue%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20gotRisingEdge%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20TPM_SetupInputCapture(DEMO_TPM_BASEADDR%2CBOARD_TPM_INPUT_CAPTURE_CHANNEL%2CkTPM_FallingEdge)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E4%B8%8D%E7%84%B6%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20fallingTime%20%3D%20capturedValue%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20tpmIsrFlag%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20gotRisingEdge%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E%E5%81%87%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20TPM_SetupInputCapture(DEMO_TPM_BASEADDR%2CBOARD_TPM_INPUT_CAPTURE_CHANNEL%2CkTPM_RisingEdge)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%2F*%20%E6%B8%85%E9%99%A4%E4%B8%AD%E6%96%AD%E6%A0%87%E5%BF%97%E3%80%82%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20TPM_ClearStatusFlags(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Etpm_channel_flag%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Esdk_isr_exit_barrier%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*!%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%3C%2FSPAN%3E%3CSPAN%3E%40brief%3C%2FSPAN%3E%3CSPAN%3E%E4%B8%BB%E8%A6%81%E5%8A%9F%E8%83%BD%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eint%3C%2FSPAN%3E%3CSPAN%3Emain(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20tpm_config_t%20tpmInfo%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*%20%E6%9D%BF%E5%BC%95%E8%84%9A%E3%80%81%E6%97%B6%E9%92%9F%E3%80%81%E8%B0%83%E8%AF%95%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%88%9D%E5%A7%8B%E5%8C%96%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20BOARD_InitHardware()%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20SetUp()%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%90%91%E7%BB%88%E7%AB%AF%E6%89%93%E5%8D%B0%E6%B3%A8%E9%87%8A%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%3C%2FSPAN%3E%3CSPAN%3EPRINTF(%3C%2FSPAN%3E%3CSPAN%3E%20%3C%2FSPAN%3E%3CSPAN%3E%22%5C%20r%5Cn%20TPM%20%E8%BE%93%E5%85%A5%E6%8D%95%E8%8E%B7%E7%A4%BA%E4%BE%8B%5C%20r%5Cn%3C%2FSPAN%3E%3CSPAN%3E%20%22)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%20%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%5C%20r%5Cn%20%E4%B8%80%E6%97%A6%E6%8E%A5%E6%94%B6%E5%88%B0%E8%BE%93%E5%85%A5%E4%BF%A1%E5%8F%B7%EF%BC%8C%E5%B0%B1%E4%BC%9A%E6%89%93%E5%8D%B0%E5%87%BA%E8%BE%93%E5%85%A5%E6%8D%95%E8%8E%B7%E5%80%BC%5C%20r%5Cn%20%22%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%EF%BC%9B%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_GetDefaultConfig(%26amp%3BtpmInfo)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%20TPM%20%E6%A8%A1%E5%9D%97%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_Init(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%26amp%3BtpmInfo%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*%20%E5%9C%A8%20TPM%20%E9%80%9A%E9%81%93%E4%B8%8A%E8%AE%BE%E7%BD%AE%E8%BE%93%E5%85%A5%E6%8D%95%E8%8E%B7%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_SetupInputCapture(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETPM_SetupInputCapture(%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EkTPM_RiseAndFallEdge%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%B0%86%E8%AE%A1%E6%97%B6%E5%99%A8%E8%AE%BE%E7%BD%AE%E4%B8%BA%E8%87%AA%E7%94%B1%E8%BF%90%E8%A1%8C%E6%A8%A1%E5%BC%8F%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_SetTimerPeriod(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20tpm_max_counter_value%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E6%A3%80%E6%B5%8B%E5%88%B0%E7%AC%AC%E4%BA%8C%E4%B8%AA%E8%BE%B9%E6%B2%BF%E6%97%B6%E5%90%AF%E7%94%A8%E9%80%9A%E9%81%93%E4%B8%AD%E6%96%AD%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_EnableInterrupts(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Etpm_channel_interrupt_enable%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%9C%A8%20NVIC%20%E5%90%AF%E7%94%A8%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%E5%90%AF%E7%94%A8%20IRQ(%3C%2FSPAN%3E%3CSPAN%3Etpm_interrupt_number%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_StartTimer(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EkTPM_SystemClock%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E8%99%BD%E7%84%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20SendTrigPulse()%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E5%BD%93%3C%2FSPAN%3E%3CSPAN%3E(tpmIsrFlag%20!%3D)%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3Eticks%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E5%A6%82%E6%9E%9C%3C%2FSPAN%3E%3CSPAN%3E(fallingTime%26gt%3B%3D%20risingTime)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20ticks%20%3D%20fallingTime%20-%20risingTime%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E4%B8%8D%E7%84%B6%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20ticks%20%3D%20(%3C%2FSPAN%3E%3CSPAN%3Etpm_max_counter_value%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E)%20-%20risingTime)%2B%20fallingTime%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%B5%AE%E7%82%B9%E6%95%B0%3C%2FSPAN%3E%3CSPAN%3EPulseUs%20%3D%20(ticks%20*)%20%3C%2FSPAN%3E%3CSPAN%3E1000000%3C%2FSPAN%3E%3CSPAN%3E)%2F%20%3C%2FSPAN%3E%3CSPAN%3Etpm_source_clock%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22RISING%20TIME%20%3A%25u%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%2CrisingTime%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22FALLING%20TIME%20%3A%25u%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%2CfallingTime%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E5%BE%AE%E7%A7%92%E4%B8%BA%EF%BC%9A%25.2f%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%E8%84%89%E5%86%B2%E5%8D%95%E4%BD%8D%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20SDK_DelayAtLeastUs(%3C%2FSPAN%3E%3CSPAN%3E60000%3C%2FSPAN%3E%3CSPAN%3E%2CSystemCoreClock)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%88%91%E5%9C%A8%E8%BF%99%E6%AE%B5%E4%BB%A3%E7%A0%81%E4%B8%AD%E6%A3%80%E6%9F%A5%E5%AF%B9%E8%B1%A1%E8%B7%9D%E7%A6%BB%E6%97%B6%E9%81%87%E5%88%B0%E4%BA%86%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98%EF%BC%9F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E8%BF%99%E9%87%8C%20sdk_delayAtleastUS%20(10%EF%BC%8CsystemCoreClock)%EF%BC%9B%E8%BF%99%E4%B8%AA%20API%20%E6%B2%A1%E6%9C%89%E7%BB%99%E5%87%BA%2010%20us%20%E6%9D%A5%E8%A7%A6%E5%8F%91%E4%BF%A1%E5%8F%B7%E5%BC%80%E5%A7%8B%E6%B5%8B%E9%87%8F%E7%9A%84%E5%BC%95%E8%84%9A%EF%BC%9F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fc-pwmxy87654%2Fi.MX93EVK%2Fpd-p%2Fi.MX93EVK%22%20class%3D%22lia-product-mention%22%20data-product%3D%222927-1%22%20target%3D%22_blank%22%3Ei.MX93EVK%3C%2FA%3E%3C%2FSPAN%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2135797%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3E%E6%97%B6%E9%92%9F%7C%E8%AE%A1%E6%97%B6%E5%99%A8%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2136596%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Is%20This%20code%20correct%20for%20interfacing%20ultra-sonic%20sensor%20into%20i.mx93%20(cortex-m33)%20%3F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2136596%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E7%89%88%E6%9D%83%E6%89%80%E6%9C%89%20(c)%202015%EF%BC%8C%E9%A3%9E%E6%80%9D%E5%8D%A1%E5%B0%94%E5%8D%8A%E5%AF%BC%E4%BD%93%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E7%89%88%E6%9D%83%E6%89%80%E6%9C%89%202016-2021%20%E6%81%A9%E6%99%BA%E6%B5%A6%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E4%BF%9D%E7%95%99%E6%89%80%E6%9C%89%E6%9D%83%E5%88%A9%E3%80%82%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20SPDX%20%E8%AE%B8%E5%8F%AF%E8%AF%81%E6%A0%87%E8%AF%86%E7%AC%A6%EF%BC%9ABSD-3%20%E6%9D%A1%E6%AC%BE%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_debug_console.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%3C%2FSPAN%3E%20%3CSPAN%3E%22%20board.h%3C%2FSPAN%3E%20%22%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22app.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_tpm.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%23include%20%3C%2FSPAN%3E%3CSPAN%3E%22fsl_rgpio.h%22%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E5%AE%9A%E4%B9%89%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E5%8E%9F%E5%9E%8B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E5%8F%98%E9%87%8F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%98%93%E5%8F%98%3C%2FSPAN%3E%20%3CSPAN%3Ebool%3C%2FSPAN%3E%3CSPAN%3EtpmIsrFlag%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E%E5%81%87%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%98%93%E5%8F%98%3C%2FSPAN%3E%20%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3E%E4%B8%8A%E5%8D%87%E6%97%B6%E9%97%B4%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%98%93%E5%8F%98%3C%2FSPAN%3E%20%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3EfallingTime%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%98%93%E5%8F%98%3C%2FSPAN%3E%20%3CSPAN%3Ebool%3C%2FSPAN%3E%3CSPAN%3EgotRisingEdge%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E%E5%81%87%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*******************************************************************************%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%E4%BB%A3%E7%A0%81%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E******************************************************************************%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E%E8%AE%BE%E7%BD%AE%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20rgpio_pin_config_t%20out_config%20%3D%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EkRGPIO_DigitalOutput%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%7D%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F*%20%E8%A7%A6%E5%8F%91%E4%BF%A1%E5%8F%B7%E5%BC%95%E8%84%9A%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20RGPIO_PinInit(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%26amp%3Bout_config%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20RGPIO_PinWrite(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3ESendTrigPulse(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20RGPIO_PinWrite(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20SDK_DelayAtLeastUs(%3C%2FSPAN%3E%3CSPAN%3E10%3C%2FSPAN%3E%3CSPAN%3E%EF%BC%8CSystemCoreClock%EF%BC%89%EF%BC%9B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20RGPIO_PinWrite(%3C%2FSPAN%3E%3CSPAN%3EBOARD_RGPIO%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETRIG_PIN%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%20%3CSPAN%3Etpm_input_capture_handler%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%E5%A4%84%E7%90%86%E7%A8%8B%E5%BA%8F%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3Estatus%20%3D%20TPM_GetStatusFlags(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E5%A6%82%E6%9E%9C%3C%2FSPAN%3E%3CSPAN%3E(%E7%8A%B6%E6%80%81%26amp%3B%20%3C%2FSPAN%3E%3CSPAN%3Etpm_channel_flag%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3EcapturedValue%20%3D%20TPM_GetChannelValue(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Eboard_tpm_input_capture_channel%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%3C%2FSPAN%3E%3CSPAN%3E%2F%2FPRINTF%20(%22%20%E6%8D%95%E8%8E%B7%E7%9A%84%E5%80%BC%EF%BC%9A%25u%5C%20r%5Cn%20%22%2C%20CapturedValue)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E5%A6%82%E6%9E%9C%3C%2FSPAN%3E%3CSPAN%3E(!gotRisingEdge)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20risingTime%20%3D%20capturedValue%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20gotRisingEdge%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20TPM_SetupInputCapture(DEMO_TPM_BASEADDR%2CBOARD_TPM_INPUT_CAPTURE_CHANNEL%2CkTPM_FallingEdge)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E4%B8%8D%E7%84%B6%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20fallingTime%20%3D%20capturedValue%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20tpmIsrFlag%20%3D%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20gotRisingEdge%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E%E5%81%87%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20TPM_SetupInputCapture(DEMO_TPM_BASEADDR%2CBOARD_TPM_INPUT_CAPTURE_CHANNEL%2CkTPM_RisingEdge)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%2F*%20%E6%B8%85%E9%99%A4%E4%B8%AD%E6%96%AD%E6%A0%87%E5%BF%97%E3%80%82%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20TPM_ClearStatusFlags(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Etpm_channel_flag%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Esdk_isr_exit_barrier%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*!%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%20%3C%2FSPAN%3E%3CSPAN%3E%40brief%3C%2FSPAN%3E%3CSPAN%3E%E4%B8%BB%E8%A6%81%E5%8A%9F%E8%83%BD%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eint%3C%2FSPAN%3E%3CSPAN%3Emain(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20tpm_config_t%20tpmInfo%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*%20%E6%9D%BF%E5%BC%95%E8%84%9A%E3%80%81%E6%97%B6%E9%92%9F%E3%80%81%E8%B0%83%E8%AF%95%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%88%9D%E5%A7%8B%E5%8C%96%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20BOARD_InitHardware()%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20SetUp()%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%90%91%E7%BB%88%E7%AB%AF%E6%89%93%E5%8D%B0%E6%B3%A8%E9%87%8A%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%3C%2FSPAN%3E%3CSPAN%3EPRINTF(%3C%2FSPAN%3E%3CSPAN%3E%20%3C%2FSPAN%3E%3CSPAN%3E%22%5C%20r%5Cn%20TPM%20%E8%BE%93%E5%85%A5%E6%8D%95%E8%8E%B7%E7%A4%BA%E4%BE%8B%5C%20r%5Cn%3C%2FSPAN%3E%3CSPAN%3E%20%22)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%20%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%5C%20r%5Cn%20%E4%B8%80%E6%97%A6%E6%8E%A5%E6%94%B6%E5%88%B0%E8%BE%93%E5%85%A5%E4%BF%A1%E5%8F%B7%EF%BC%8C%E5%B0%B1%E4%BC%9A%E6%89%93%E5%8D%B0%E5%87%BA%E8%BE%93%E5%85%A5%E6%8D%95%E8%8E%B7%E5%80%BC%5C%20r%5Cn%20%22%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%EF%BC%9B%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_GetDefaultConfig(%26amp%3BtpmInfo)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%20TPM%20%E6%A8%A1%E5%9D%97%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_Init(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%26amp%3BtpmInfo%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%2F*%20%E5%9C%A8%20TPM%20%E9%80%9A%E9%81%93%E4%B8%8A%E8%AE%BE%E7%BD%AE%E8%BE%93%E5%85%A5%E6%8D%95%E8%8E%B7%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_SetupInputCapture(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3ETPM_SetupInputCapture(%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EkTPM_RiseAndFallEdge%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%B0%86%E8%AE%A1%E6%97%B6%E5%99%A8%E8%AE%BE%E7%BD%AE%E4%B8%BA%E8%87%AA%E7%94%B1%E8%BF%90%E8%A1%8C%E6%A8%A1%E5%BC%8F%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_SetTimerPeriod(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Etpm_max_counter_value%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E6%A3%80%E6%B5%8B%E5%88%B0%E7%AC%AC%E4%BA%8C%E4%B8%AA%E8%BE%B9%E6%B2%BF%E6%97%B6%E5%90%AF%E7%94%A8%E9%80%9A%E9%81%93%E4%B8%AD%E6%96%AD%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_EnableInterrupts(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Etpm_channel_interrupt_enable%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%9C%A8%20NVIC%20%E5%90%AF%E7%94%A8%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%E5%90%AF%E7%94%A8%20IRQ(%3C%2FSPAN%3E%3CSPAN%3Etpm_interrupt_number%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20TPM_StartTimer(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EkTPM_SystemClock%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E8%99%BD%E7%84%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20SendTrigPulse()%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%20%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E5%BD%93%3C%2FSPAN%3E%3CSPAN%3E(tpmIsrFlag%20!%3D)%20%3C%2FSPAN%3E%3CSPAN%3Etrue%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2F%20PRINTF(%22%5Cr%5CnCapture%20value%20C(n)V%3D%25x%5Cr%5Cn%22%2C%20TPM_GetChannelValue(DEMO_TPM_BASEADDR%2C%20BOARD_TPM_INPUT_CAPTURE_CHANNEL))%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3Eticks%20%3D%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E5%A6%82%E6%9E%9C%3C%2FSPAN%3E%3CSPAN%3E(fallingTime%26gt%3B%3D%20risingTime)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20ticks%20%3D%20fallingTime%20-%20risingTime%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E4%B8%8D%E7%84%B6%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%20%20%20%20ticks%20%3D%20(%3C%2FSPAN%3E%3CSPAN%3Etpm_max_counter_value%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Edemo_tpm_baseaddr%3C%2FSPAN%3E%3CSPAN%3E)%20-%20risingTime)%2B%20fallingTime%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Euint32_t%3C%2FSPAN%3E%3CSPAN%3Etpm_clock%20%3D%20CLOCK_GetIpFreq(%3C%2FSPAN%3E%3CSPAN%3Elptpm_clock_root%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%B5%AE%E7%82%B9%E6%95%B0%3C%2FSPAN%3E%3CSPAN%3EPulseUs%20%3D%20(ticks%20*)%20%3C%2FSPAN%3E%3CSPAN%3E1000000%3C%2FSPAN%3E%3CSPAN%3E)%2F%20tpm_clock%20%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22RISING%20TIME%20%3A%25u%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%2CrisingTime%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22FALLING%20TIME%20%3A%25u%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%2CfallingTime%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E5%BE%AE%E7%A7%92%E4%B8%BA%EF%BC%9A%25.2f%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%E8%84%89%E5%86%B2%E5%8D%95%E4%BD%8D%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%B5%AE%E7%82%B9%E6%95%B0%3C%2FSPAN%3E%3CSPAN%3E%E8%B7%9D%E7%A6%BB%20%3D%20PulseUs%20%2F%20%3C%2FSPAN%3E%3CSPAN%3E58%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EPRINTF%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22DISTANCE%20%3A%25.2f%5Cr%5Cn%22%3C%2FSPAN%3E%3CSPAN%3E%2C%E8%B7%9D%E7%A6%BB%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%20%20SDK_DelayAtLeastUs(%3C%2FSPAN%3E%3CSPAN%3E60000%3C%2FSPAN%3E%3CSPAN%3E%2CSystemCoreClock)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E6%88%91%E7%94%A8%E7%A4%BA%E6%B3%A2%E5%99%A8%E6%A3%80%E6%9F%A5%E8%BF%87%EF%BC%8C%E5%AE%83%E7%9A%84%E8%A7%A6%E5%8F%91%E4%BF%A1%E5%8F%B7%2010%20us%20%E6%98%AF%E6%AD%A3%E7%A1%AE%E7%9A%84%E3%80%82%E4%BD%86%E7%8E%B0%E5%9C%A8%E7%9A%84%E9%97%AE%E9%A2%98%E6%98%AF%E5%9B%9E%E9%9F%B3%E9%92%88%E8%84%9A%EF%BC%9F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E8%AF%BB%E5%8F%96%E7%9A%84%E6%95%B0%E5%80%BC%E4%B8%8D%E6%AD%A3%E7%A1%AE%EF%BC%9F%3C%2FSPAN%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2136240%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Is%20This%20code%20correct%20for%20interfacing%20ultra-sonic%20sensor%20into%20i.mx93%20(cortex-m33)%20%3F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2136240%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E6%88%91%E5%B7%B2%E7%BB%8F%E4%BD%BF%E7%94%A8%E7%A4%BA%E6%B3%A2%E5%99%A8%E9%AA%8C%E8%AF%81%E4%BA%86%E4%BF%A1%E5%8F%B7%EF%BC%8C%E5%AE%83%E6%98%BE%E7%A4%BA%E4%BA%86%2010%20%C2%B5s%20%E7%9A%84%E8%84%89%E5%86%B2%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%8E%A5%E4%B8%8B%E6%9D%A5%EF%BC%8C%E6%88%91%E9%80%9A%E8%BF%87%E7%9B%B4%E6%8E%A5%E5%B0%86TRIG%E5%BC%95%E8%84%9A%E5%BE%AA%E7%8E%AF%E5%88%B0ECHO%E5%BC%95%E8%84%9A%E8%BF%9B%E8%A1%8C%E6%B5%8B%E8%AF%95%EF%BC%8C%E5%B9%B6%E6%B5%8B%E9%87%8F%E4%BA%86%E4%BB%A3%E7%A0%81%E4%B8%AD%E7%9A%84%E8%84%89%E5%86%B2%E5%AE%BD%E5%BA%A6%E3%80%82%E4%B8%8D%E8%BF%87%EF%BC%8C%E6%89%93%E5%8D%B0%E6%97%B6%E9%97%B4%E7%BA%A6%E4%B8%BA%2066%20%E5%BE%AE%E7%A7%92%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E9%A2%84%E6%9C%9F%E7%9A%84%2010%20%E5%BE%AE%E7%A7%92%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%20TRIG%20%E5%92%8C%20ECHO%20%E5%BC%95%E8%84%9A%E7%9B%B4%E6%8E%A5%E8%BF%9E%E6%8E%A5%E5%9C%A8%E4%B8%80%E4%B8%AA%E5%9B%9E%E8%B7%AF%E4%B8%AD%EF%BC%8C%E5%88%99%E6%B5%8B%E9%87%8F%E5%80%BC%E5%BA%94%E6%AD%A3%E5%A5%BD%E4%B8%BA%2010%20%C2%B5s%EF%BC%8C%E4%B8%8E%E4%BA%A7%E7%94%9F%E7%9A%84%E4%BF%A1%E5%8F%B7%E7%9B%B8%E5%8C%B9%E9%85%8D%E3%80%82%E6%88%91%E6%97%A0%E6%B3%95%E7%A1%AE%E5%AE%9A%E5%93%AA%E9%87%8C%E5%87%BA%E7%8E%B0%E4%BA%86%E5%B7%AE%E5%BC%82%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E8%BF%99%E5%8F%AF%E8%83%BD%E6%98%AF%E7%94%B1%E4%BA%8E%E6%97%B6%E9%92%9F%E9%85%8D%E7%BD%AE%E9%97%AE%E9%A2%98%E6%88%96%E6%8D%95%E8%8E%B7%E9%80%BB%E8%BE%91%E4%B8%AD%E7%9A%84%E6%9F%90%E4%BA%9B%E6%97%B6%E5%BA%8F%E4%B8%8D%E5%87%86%E7%A1%AE%E6%89%80%E8%87%B4%EF%BC%9F%3CBR%20%2F%3E%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%E6%82%A8%E8%83%BD%E5%B8%AE%E5%8A%A9%E7%A1%AE%E5%AE%9A%E5%B9%B6%E8%A7%A3%E5%86%B3%E8%BF%99%E4%B8%AA%E9%97%AE%E9%A2%98%EF%BC%8C%E6%88%91%E5%B0%86%E4%B8%8D%E8%83%9C%E6%84%9F%E6%BF%80%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E5%9C%A8%E6%AD%A4%E5%85%88%E8%A1%A8%E7%A4%BA%E6%84%9F%E8%B0%A2%EF%BC%81%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2136235%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Is%20This%20code%20correct%20for%20interfacing%20ultra-sonic%20sensor%20into%20i.mx93%20(cortex-m33)%20%3F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2136235%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E8%B0%A2%E8%B0%A2%E6%82%A8%E7%9A%84%E7%AD%94%E5%A4%8D%EF%BC%81%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2135963%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Is%20This%20code%20correct%20for%20interfacing%20ultra-sonic%20sensor%20into%20i.mx93%20(cortex-m33)%20%3F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2135963%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CDIV%3E%0A%3CDIV%3E%0A%3CDIV%3E%0A%3CP%3E%E4%BD%A0%E5%A5%BD%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E4%BB%A3%E7%A0%81%E4%B8%AD%E7%9A%84%E9%83%A8%E5%88%86%E4%B8%8E%20TPM%20%E9%85%8D%E7%BD%AE%E4%BB%A5%E5%8F%8A%E8%B6%85%E9%9F%B3%E9%80%9F%E4%BC%A0%E6%84%9F%E5%99%A8%20TRIG%20%E5%92%8C%20ECHO%20%E4%BF%A1%E5%8F%B7%E7%9A%84%E7%94%9F%E6%88%90%2F%E8%AF%BB%E5%8F%96%E6%9C%89%E5%85%B3%E3%80%82%3C%2FP%3E%0A%3CP%3E%E8%A6%81%E7%A1%AE%E8%AE%A4%E6%82%A8%E7%9A%84%E5%8A%9F%E8%83%BD%E6%98%AF%E5%90%A6%E4%BA%A7%E7%94%9F%E4%BA%86%2010%20us%20%E4%BF%A1%E5%8F%B7%EF%BC%8C%E6%88%91%E5%BB%BA%E8%AE%AE%E6%82%A8%E4%BD%BF%E7%94%A8%E7%A4%BA%E6%B3%A2%E5%99%A8%E6%88%96%E6%95%B0%E5%AD%97%E5%88%86%E6%9E%90%E4%BB%AA%E6%B5%8B%E9%87%8F%E4%BF%A1%E5%8F%B7%E3%80%82%E5%A6%82%E6%9E%9C%E6%97%B6%E9%97%B4%E4%B8%8D%E7%AC%A6%E5%90%88%E9%A2%84%E6%9C%9F%EF%BC%8C%E5%88%99%E5%8F%AF%E4%BB%A5%E8%B0%83%E6%95%B4%E5%80%BC%E4%BB%A5%E7%94%9F%E6%88%90%E5%BB%B6%E8%BF%9F%EF%BC%8C%E5%9B%A0%E4%B8%BA%E7%BC%96%E8%AF%91%E5%99%A8%E5%8F%AF%E8%83%BD%E4%BC%9A%E4%BC%98%E5%8C%96%E4%BB%A3%E7%A0%81%EF%BC%8C%E4%BD%BF%E8%84%89%E5%86%B2%E6%97%A0%E6%B3%95%E6%8C%89%E9%A2%84%E6%9C%9F%E6%8C%81%E7%BB%AD%E4%B8%8B%E5%8E%BB%E3%80%82%3C%2FP%3E%0A%3CP%3E%E4%BD%A0%E6%A3%80%E6%9F%A5%E8%BF%87%E6%9D%BF%E4%B8%AD%E4%BC%A0%E6%84%9F%E5%99%A8%E7%9A%84%E8%BF%90%E8%A1%8C%E6%83%85%E5%86%B5%E4%BA%86%E5%90%97%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E4%BB%A5%E4%B8%8B%E6%98%AF%E7%A4%BA%E4%BE%8B%E4%BD%9C%E4%B8%BA%E5%8F%82%E8%80%83%EF%BC%9A%3C%2FP%3E%0A%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fmcuoneclipse.com%2F2013%2F01%2F01%2Ftutorial-ultrasonic-ranging-with-the-freedom-board%2F%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3E%E6%95%99%E7%A8%8B%EF%BC%9A%E4%BD%BF%E7%94%A8%E8%87%AA%E7%94%B1%E6%9D%BF%E8%BF%9B%E8%A1%8C%E8%B6%85%E5%A3%B0%E6%B3%A2%E6%B5%8B%E8%B7%9D%20%7C%20Eclipse%20%E4%B8%8A%E7%9A%84%20MCU%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%E9%A1%BA%E7%A5%9D%E5%95%86%E7%A5%BA%EF%BC%81%3C%2FP%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%0A%3C%2FDIV%3E%3C%2FLINGO-BODY%3E