blob: d93b8a3ef2fef1e62b87ee69dd1ad6b6089c1c47 [file] [log] [blame]
/*
* 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_ */