| /* |
| * Copyright (c) 2015, Freescale Semiconductor, Inc. |
| * Copyright 2016-2017 NXP |
| * All rights reserved. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| #ifndef _FSL_TSTMR_H_ |
| #define _FSL_TSTMR_H_ |
| |
| #include "fsl_common.h" |
| |
| /*! |
| * @addtogroup tstmr_driver |
| * @{ |
| */ |
| |
| /******************************************************************************* |
| * Definitions |
| ******************************************************************************/ |
| |
| /*! @name Driver version */ |
| /*@{*/ |
| #define FSL_TSTMR_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */ |
| /*@}*/ |
| |
| /******************************************************************************* |
| * API |
| ******************************************************************************/ |
| |
| #if defined(__cplusplus) |
| extern "C" { |
| #endif |
| |
| /*! |
| * @brief Reads the time stamp. |
| * |
| * This function reads the low and high registers and returns the 56-bit free running |
| * counter value. This can be read by software at any time to determine the software ticks. |
| * |
| * @param base TSTMR peripheral base address. |
| * |
| * @return The 56-bit time stamp value. |
| */ |
| static inline uint64_t TSTMR_ReadTimeStamp(TSTMR_Type* base) |
| { |
| return *(volatile uint64_t*)(base); |
| } |
| |
| /*! |
| * @brief Delays for a specified number of microseconds. |
| * |
| * This function repeatedly reads the timestamp register and waits for the user-specified |
| * delay value. |
| * |
| * @param base TSTMR peripheral base address. |
| * @param delayInUs Delay value in microseconds. |
| */ |
| static inline void TSTMR_DelayUs(TSTMR_Type* base, uint32_t delayInUs) |
| { |
| uint64_t startTime = TSTMR_ReadTimeStamp(base); |
| #if defined(FSL_FEATURE_TSTMR_CLOCK_FREQUENCY_1MHZ) && FSL_FEATURE_TSTMR_CLOCK_FREQUENCY_1MHZ |
| while (TSTMR_ReadTimeStamp(base) - startTime < delayInUs) |
| #elif defined(FSL_FEATURE_TSTMR_CLOCK_FREQUENCY_8MHZ) && FSL_FEATURE_TSTMR_CLOCK_FREQUENCY_8MHZ |
| while (TSTMR_ReadTimeStamp(base) - startTime < 8 * delayInUs) |
| #else |
| assert(0); |
| #endif |
| { |
| } |
| } |
| |
| #if defined(__cplusplus) |
| } |
| #endif |
| |
| /*! @}*/ |
| |
| #endif /* _FSL_TSTMR_H_ */ |