From 56c848ffd63d30d9bd0debcef7f1663e0bfa46c4 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 5 Aug 2013 14:08:52 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6081 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/halnew/src/hal.c | 79 ++++++----------------------------------------------- os/halnew/src/st.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 70 deletions(-) create mode 100644 os/halnew/src/st.c (limited to 'os/halnew/src') diff --git a/os/halnew/src/hal.c b/os/halnew/src/hal.c index c104f5eae..8b56b4ac8 100644 --- a/os/halnew/src/hal.c +++ b/os/halnew/src/hal.c @@ -59,6 +59,10 @@ */ void halInit(void) { + /* Initializes the OS Abstraction Layer.*/ + osalInit(); + + /* Platform low level initializations.*/ hal_lld_init(); #if HAL_USE_TM || defined(__DOXYGEN__) @@ -115,79 +119,14 @@ void halInit(void) { #if HAL_USE_RTC || defined(__DOXYGEN__) rtcInit(); #endif + /* Board specific initialization.*/ boardInit(); -} -#if HAL_IMPLEMENTS_COUNTERS || defined(__DOXYGEN__) -/** - * @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. - * @note This is an optional service that could not be implemented in - * all HAL implementations. - * @note This function can be called from any context. - * - * @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. - * - * @special - */ -bool_t halIsCounterWithin(halrtcnt_t start, halrtcnt_t end) { - halrtcnt_t now = halGetCounterValue(); - - return end > start ? (now >= start) && (now < end) : - (now >= start) || (now < end); -} - -/** - * @brief Polled delay. - * @note The real delays is always few cycles in excess of the specified - * value. - * @note This is an optional service that could not be implemented in - * all HAL implementations. - * @note This function can be called from any context. - * - * @param[in] ticks number of ticks - * - * @special - */ -void halPolledDelay(halrtcnt_t ticks) { - halrtcnt_t start = halGetCounterValue(); - halrtcnt_t timeout = start + (ticks); - while (halIsCounterWithin(start, timeout)) - ; +#if (OSAL_ST_MODE != OSAL_ST_MODE_NONE) || defined(__DOXYGEN__) + /* System tick service if the underlying OS requires it.*/ + stInit(); +#endif } -#endif /* HAL_IMPLEMENTS_COUNTERS */ /** @} */ diff --git a/os/halnew/src/st.c b/os/halnew/src/st.c new file mode 100644 index 000000000..f2e8f3bf2 --- /dev/null +++ b/os/halnew/src/st.c @@ -0,0 +1,71 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010, + 2011,2012,2013 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file st.c + * @brief ST Driver code. + * + * @addtogroup ST + * @{ + */ + +#include "hal.h" + +#if (OSAL_ST_MODE != OSAL_ST_MODE_NONE) || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief ST Driver initialization. + * @note This function is implicitly invoked by @p halInit(), there is + * no need to explicitly initialize the driver. + * + * @init + */ +void stInit(void) { + + st_lld_init(); +} + +#endif /* OSAL_ST_MODE != OSAL_ST_MODE_NONE */ + +/** @} */ -- cgit v1.2.3