Added time conversions to RT counter code. Documentation improvements.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3728 35acf78f-673a-0410-8e92-d51de3d6d3f4master
parent
8bd4ec7b84
commit
c498fdc4d6
|
@ -72,6 +72,52 @@
|
|||
/* Driver macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @name Time conversion utilities for the realtime counter
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Seconds to realtime ticks.
|
||||
* @details Converts from seconds to realtime ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
*
|
||||
* @param[in] sec number of seconds
|
||||
* @return The number of ticks.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define S2RTT(sec) (halGetCounterFrequency() * (sec))
|
||||
|
||||
/**
|
||||
* @brief Milliseconds to realtime ticks.
|
||||
* @details Converts from milliseconds to realtime ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
*
|
||||
* @param[in] msec number of milliseconds
|
||||
* @return The number of ticks.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define MS2RTT(msec) (((halGetCounterFrequency() + 999UL) / 1000UL) * (msec))
|
||||
|
||||
/**
|
||||
* @brief Microseconds to realtime ticks.
|
||||
* @details Converts from microseconds to realtime ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
*
|
||||
* @param[in] usec number of microseconds
|
||||
* @return The number of ticks.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define US2RTT(usec) (((halGetCounterFrequency() + 999999UL) / 1000000UL) * \
|
||||
(usec))
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Macro Functions
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Returns the current value of the system free running counter.
|
||||
* @note This is an optional service that could not be implemented in
|
||||
|
@ -95,6 +141,53 @@
|
|||
*/
|
||||
#define halGetCounterFrequency() hal_lld_get_counter_frequency()
|
||||
|
||||
/**
|
||||
* @brief Realtime window test.
|
||||
* @details This function verifies if the current realtime counter value
|
||||
* lies within the specified range or not. The test takes care
|
||||
* of the realtime counter wrapping to zero on overflow.
|
||||
* @note When start==end then the function returns always true because the
|
||||
* whole time range is specified.
|
||||
*
|
||||
* @par Example 1
|
||||
* Example of a guarded loop using the realtime counter. The loop implements
|
||||
* a timeout after one second.
|
||||
* @code
|
||||
* halrtcnt_t start = halGetCounterValue();
|
||||
* halrtcnt_t timeout = start + S2RTT(1);
|
||||
* while (my_condition) {
|
||||
* if (!halIsCounterWithin(start, timeout)
|
||||
* return TIMEOUT;
|
||||
* // Do something.
|
||||
* }
|
||||
* // Continue.
|
||||
* @endcode
|
||||
*
|
||||
* @par Example 2
|
||||
* Example of a loop that lasts exactly 50 microseconds.
|
||||
* @code
|
||||
* halrtcnt_t start = halGetCounterValue();
|
||||
* halrtcnt_t timeout = start + US2RTT(50);
|
||||
* while (halIsCounterWithin(start, timeout)) {
|
||||
* // Do something.
|
||||
* }
|
||||
* // Continue.
|
||||
* @endcode
|
||||
*
|
||||
* @param[in] start the start of the time window (inclusive)
|
||||
* @param[in] end the end of the time window (non inclusive)
|
||||
* @retval TRUE current time within the specified time window.
|
||||
* @retval FALSE current time not within the specified time window.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define halIsCounterWithin(start, end) \
|
||||
(end > start ? (halGetCounterValue() >= start) && \
|
||||
(halGetCounterValue() < end) : \
|
||||
(halGetCounterValue() >= start) || \
|
||||
(halGetCounterValue() < end))
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
|
|
@ -37,6 +37,11 @@
|
|||
* @brief Seconds to system ticks.
|
||||
* @details Converts from seconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
*
|
||||
* @param[in] sec number of seconds
|
||||
* @return The number of ticks.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define S2ST(sec) ((systime_t)((sec) * CH_FREQUENCY))
|
||||
|
||||
|
@ -44,6 +49,11 @@
|
|||
* @brief Milliseconds t0 system ticks.
|
||||
* @details Converts from milliseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
*
|
||||
* @param[in] msec number of milliseconds
|
||||
* @return The number of ticks.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define MS2ST(msec) ((systime_t)(((((msec) - 1L) * CH_FREQUENCY) / 1000L) + 1L))
|
||||
|
||||
|
@ -51,6 +61,11 @@
|
|||
* @brief Microseconds to system ticks.
|
||||
* @details Converts from microseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
*
|
||||
* @param[in] usec number of microseconds
|
||||
* @return The number of ticks.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define US2ST(usec) ((systime_t)(((((usec) - 1L) * CH_FREQUENCY) / 1000000L) + 1L))
|
||||
/** @} */
|
||||
|
|
|
@ -20,9 +20,10 @@
|
|||
|
||||
/**
|
||||
* @defgroup various Various
|
||||
* @brief Utilities Library.
|
||||
*
|
||||
* @brief Utilities Library.
|
||||
* @details This is a collection of useful library code that is not part of
|
||||
* the base kernel services.
|
||||
* the base kernel services.
|
||||
* <h2>Notes</h2>
|
||||
* The library code does not follow the same naming convention of the
|
||||
* system APIs in order to make very clear that it is not "core" code.<br>
|
||||
|
@ -32,38 +33,54 @@
|
|||
|
||||
/**
|
||||
* @defgroup cpp_library C++ Wrapper
|
||||
* @brief C++ wrapper module.
|
||||
*
|
||||
* @brief C++ wrapper module.
|
||||
* @details This module allows to use the ChibiOS/RT functionalities
|
||||
* from C++ as classes and objects rather the traditional "C" APIs.
|
||||
* from C++ as classes and objects rather the traditional "C" APIs.
|
||||
*
|
||||
* @ingroup various
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup memory_streams Memory Streams
|
||||
* @brief Memory Streams.
|
||||
*
|
||||
* @brief Memory Streams.
|
||||
* @details This module allows to use a memory area (RAM or ROM) using a
|
||||
* @ref data_streams interface.
|
||||
* @ref data_streams interface.
|
||||
*
|
||||
* @ingroup various
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup event_timer Periodic Events Timer
|
||||
* @brief Periodic Event Timer.
|
||||
*
|
||||
* @brief Periodic Event Timer.
|
||||
* @details This timer generates an event at regular intervals. The
|
||||
* listening threads can use the event to perform time related activities.
|
||||
* Multiple threads can listen to the same timer.
|
||||
* listening threads can use the event to perform time related
|
||||
* activities. Multiple threads can listen to the same timer.
|
||||
*
|
||||
* @ingroup various
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup SHELL Command Shell
|
||||
* @brief Small extendible command line shell.
|
||||
*
|
||||
* @brief Small extendible command line shell.
|
||||
* @details This module implements a generic extendible command line interface.
|
||||
* The CLI just requires an I/O channel (@p BaseChannel), more commands can be
|
||||
* added to the shell using the configuration structure.
|
||||
* The CLI just requires an I/O channel (@p BaseChannel), more
|
||||
* commands can be added to the shell using the configuration
|
||||
* structure.
|
||||
*
|
||||
* @ingroup various
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup lis302dl Interface module for LIS302DL MEMS.
|
||||
*
|
||||
* @brief Interface module for LIS302DL MEMS.
|
||||
* @details This module implements a generic interface for the LIS302DL
|
||||
* STMicroelectronics MEMS device. The communication is performed
|
||||
* through a standard SPI driver.
|
||||
*
|
||||
* @ingroup various
|
||||
*/
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
- FIX: Fixed SYSCFG clock not started in STM32L1/F4 HALs (bug 3449139).
|
||||
- FIX: Fixed wrong definitions in STM32L-Discovery board file (bug 3449076).
|
||||
- OPT: Improved the exception exit code in the GCC Cortex-Mx ports.
|
||||
- NEW: Addred to the HAL driver the handling of an abstract realtime free
|
||||
- NEW: Added to the HAL driver the handling of an abstract realtime free
|
||||
running counter, added the capability to all the STM32 HALs.
|
||||
- NEW: Modified ARM and ARMCMx build rules to allow parallel build. Now the
|
||||
log outputs one dummy compilation command in order to allow paths discovery
|
||||
|
|
Loading…
Reference in New Issue