| /****************************************************************************** |
| * Filename: smph.h |
| * Revised: 2015-07-16 12:12:04 +0200 (Thu, 16 Jul 2015) |
| * Revision: 44151 |
| * |
| * Description: Defines and prototypes for the MCU Semaphore. |
| * |
| * Copyright (c) 2015 - 2016, Texas Instruments Incorporated |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * 1) Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * |
| * 2) Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation |
| * and/or other materials provided with the distribution. |
| * |
| * 3) Neither the name of the ORGANIZATION nor the names of its contributors may |
| * be used to endorse or promote products derived from this software without |
| * specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| * POSSIBILITY OF SUCH DAMAGE. |
| * |
| ******************************************************************************/ |
| |
| //***************************************************************************** |
| // |
| //! \addtogroup peripheral_group |
| //! @{ |
| //! \addtogroup mcusemaphore_api |
| //! @{ |
| // |
| //***************************************************************************** |
| |
| #ifndef __SMPH_H__ |
| #define __SMPH_H__ |
| |
| //***************************************************************************** |
| // |
| // If building with a C++ compiler, make all of the definitions in this header |
| // have a C binding. |
| // |
| //***************************************************************************** |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| #include <stdbool.h> |
| #include <stdint.h> |
| #include <inc/hw_types.h> |
| #include <inc/hw_smph.h> |
| #include <inc/hw_memmap.h> |
| #include <driverlib/debug.h> |
| |
| //***************************************************************************** |
| // |
| // Support for DriverLib in ROM: |
| // This section renames all functions that are not "static inline", so that |
| // calling these functions will default to implementation in flash. At the end |
| // of this file a second renaming will change the defaults to implementation in |
| // ROM for available functions. |
| // |
| // To force use of the implementation in flash, e.g. for debugging: |
| // - Globally: Define DRIVERLIB_NOROM at project level |
| // - Per function: Use prefix "NOROM_" when calling the function |
| // |
| //***************************************************************************** |
| #if !defined(DOXYGEN) |
| #define SMPHAcquire NOROM_SMPHAcquire |
| #endif |
| |
| //***************************************************************************** |
| // |
| // General constants and defines |
| // |
| //***************************************************************************** |
| #define SMPH_FREE 0x00000001 // MCU Semaphore has not been claimed |
| #define SMPH_CLAIMED 0x00000000 // MCU Semaphore has been claimed |
| |
| //***************************************************************************** |
| // |
| // Values that can be passed to SMPHAcquire, SMPHTryAcquire and SMPHRelease |
| // as the ui32Semaphore parameter. |
| // |
| //***************************************************************************** |
| #define SMPH_0 0 // MCU Semaphore 0 |
| #define SMPH_1 1 // MCU Semaphore 1 |
| #define SMPH_2 2 // MCU Semaphore 2 |
| #define SMPH_3 3 // MCU Semaphore 3 |
| #define SMPH_4 4 // MCU Semaphore 4 |
| #define SMPH_5 5 // MCU Semaphore 5 |
| #define SMPH_6 6 // MCU Semaphore 6 |
| #define SMPH_7 7 // MCU Semaphore 7 |
| #define SMPH_8 8 // MCU Semaphore 8 |
| #define SMPH_9 9 // MCU Semaphore 9 |
| #define SMPH_10 10 // MCU Semaphore 10 |
| #define SMPH_11 11 // MCU Semaphore 11 |
| #define SMPH_12 12 // MCU Semaphore 12 |
| #define SMPH_13 13 // MCU Semaphore 13 |
| #define SMPH_14 14 // MCU Semaphore 14 |
| #define SMPH_15 15 // MCU Semaphore 15 |
| #define SMPH_16 16 // MCU Semaphore 16 |
| #define SMPH_17 17 // MCU Semaphore 17 |
| #define SMPH_18 18 // MCU Semaphore 18 |
| #define SMPH_19 19 // MCU Semaphore 19 |
| #define SMPH_20 20 // MCU Semaphore 20 |
| #define SMPH_21 21 // MCU Semaphore 21 |
| #define SMPH_22 22 // MCU Semaphore 22 |
| #define SMPH_23 23 // MCU Semaphore 23 |
| #define SMPH_24 24 // MCU Semaphore 24 |
| #define SMPH_25 25 // MCU Semaphore 25 |
| #define SMPH_26 26 // MCU Semaphore 26 |
| #define SMPH_27 27 // MCU Semaphore 27 |
| #define SMPH_28 28 // MCU Semaphore 28 |
| #define SMPH_29 29 // MCU Semaphore 29 |
| #define SMPH_30 30 // MCU Semaphore 30 |
| #define SMPH_31 31 // MCU Semaphore 31 |
| |
| //***************************************************************************** |
| // |
| // API Functions and prototypes |
| // |
| //***************************************************************************** |
| |
| //***************************************************************************** |
| // |
| //! \brief Acquire a semaphore. |
| //! |
| //! This function acquires the given semaphore, blocking the call until |
| //! the semaphore is available. |
| //! |
| //! \param ui32Semaphore is the semaphore number. |
| //! - \ref SMPH_0 |
| //! - \ref SMPH_1 |
| //! - ... |
| //! - \ref SMPH_31 |
| //! |
| //! \return None |
| // |
| //***************************************************************************** |
| extern void SMPHAcquire(uint32_t ui32Semaphore); |
| |
| //***************************************************************************** |
| // |
| //! \brief Try to Acquire a semaphore. |
| //! |
| //! This function tries to acquire the given semaphore, if the semaphore |
| //! could not be claimed the function returns false. |
| //! |
| //! \param ui32Semaphore is the semaphore number. |
| //! - \ref SMPH_0 |
| //! - \ref SMPH_1 |
| //! - ... |
| //! - \ref SMPH_31 |
| //! |
| //! \return Returns if a semaphore was acquired |
| //! - \c true : Semaphore acquired. |
| //! - \c false : Semaphore \b not acquired. |
| // |
| //***************************************************************************** |
| __STATIC_INLINE bool |
| SMPHTryAcquire(uint32_t ui32Semaphore) |
| { |
| uint32_t ui32SemaReg; |
| |
| // |
| // Check the arguments. |
| // |
| ASSERT((ui32Semaphore == SMPH_0) || |
| (ui32Semaphore == SMPH_1) || |
| (ui32Semaphore == SMPH_2) || |
| (ui32Semaphore == SMPH_3) || |
| (ui32Semaphore == SMPH_4) || |
| (ui32Semaphore == SMPH_5) || |
| (ui32Semaphore == SMPH_6) || |
| (ui32Semaphore == SMPH_7) || |
| (ui32Semaphore == SMPH_8) || |
| (ui32Semaphore == SMPH_9) || |
| (ui32Semaphore == SMPH_10) || |
| (ui32Semaphore == SMPH_11) || |
| (ui32Semaphore == SMPH_12) || |
| (ui32Semaphore == SMPH_13) || |
| (ui32Semaphore == SMPH_14) || |
| (ui32Semaphore == SMPH_15) || |
| (ui32Semaphore == SMPH_16) || |
| (ui32Semaphore == SMPH_17) || |
| (ui32Semaphore == SMPH_18) || |
| (ui32Semaphore == SMPH_19) || |
| (ui32Semaphore == SMPH_20) || |
| (ui32Semaphore == SMPH_21) || |
| (ui32Semaphore == SMPH_22) || |
| (ui32Semaphore == SMPH_23) || |
| (ui32Semaphore == SMPH_24) || |
| (ui32Semaphore == SMPH_25) || |
| (ui32Semaphore == SMPH_26) || |
| (ui32Semaphore == SMPH_27) || |
| (ui32Semaphore == SMPH_28) || |
| (ui32Semaphore == SMPH_29) || |
| (ui32Semaphore == SMPH_30) || |
| (ui32Semaphore == SMPH_31)); |
| |
| // |
| // Semaphore register reads 1 if lock was acquired |
| // (i.e. SMPH_FREE). |
| // |
| ui32SemaReg = HWREG(SMPH_BASE + SMPH_O_SMPH0 + 4 * ui32Semaphore); |
| |
| return (ui32SemaReg == SMPH_FREE); |
| } |
| |
| //***************************************************************************** |
| // |
| //! \brief Release a semaphore. |
| //! |
| //! This function releases the given semaphore. |
| //! |
| //! \note It is up to the application to provide the convention for clearing |
| //! semaphore. |
| //! |
| //! \param ui32Semaphore is the semaphore number. |
| //! - \ref SMPH_0 |
| //! - \ref SMPH_1 |
| //! - ... |
| //! - \ref SMPH_31 |
| //! |
| //! \return None |
| // |
| //***************************************************************************** |
| __STATIC_INLINE void |
| SMPHRelease(uint32_t ui32Semaphore) |
| { |
| // |
| // Check the arguments. |
| // |
| ASSERT((ui32Semaphore == SMPH_0) || |
| (ui32Semaphore == SMPH_1) || |
| (ui32Semaphore == SMPH_2) || |
| (ui32Semaphore == SMPH_3) || |
| (ui32Semaphore == SMPH_4) || |
| (ui32Semaphore == SMPH_5) || |
| (ui32Semaphore == SMPH_6) || |
| (ui32Semaphore == SMPH_7) || |
| (ui32Semaphore == SMPH_8) || |
| (ui32Semaphore == SMPH_9) || |
| (ui32Semaphore == SMPH_10) || |
| (ui32Semaphore == SMPH_11) || |
| (ui32Semaphore == SMPH_12) || |
| (ui32Semaphore == SMPH_13) || |
| (ui32Semaphore == SMPH_14) || |
| (ui32Semaphore == SMPH_15) || |
| (ui32Semaphore == SMPH_16) || |
| (ui32Semaphore == SMPH_17) || |
| (ui32Semaphore == SMPH_18) || |
| (ui32Semaphore == SMPH_19) || |
| (ui32Semaphore == SMPH_20) || |
| (ui32Semaphore == SMPH_21) || |
| (ui32Semaphore == SMPH_22) || |
| (ui32Semaphore == SMPH_23) || |
| (ui32Semaphore == SMPH_24) || |
| (ui32Semaphore == SMPH_25) || |
| (ui32Semaphore == SMPH_26) || |
| (ui32Semaphore == SMPH_27) || |
| (ui32Semaphore == SMPH_28) || |
| (ui32Semaphore == SMPH_29) || |
| (ui32Semaphore == SMPH_30) || |
| (ui32Semaphore == SMPH_31)); |
| |
| // |
| // No check before release, it is up to the application to provide the |
| // conventions for who and when a semaphore can be released. |
| // |
| HWREG(SMPH_BASE + SMPH_O_SMPH0 + 4 * ui32Semaphore) = SMPH_FREE; |
| } |
| |
| //***************************************************************************** |
| // |
| // Support for DriverLib in ROM: |
| // Redirect to implementation in ROM when available. |
| // |
| //***************************************************************************** |
| #if !defined(DRIVERLIB_NOROM) && !defined(DOXYGEN) |
| #include <driverlib/rom.h> |
| #ifdef ROM_SMPHAcquire |
| #undef SMPHAcquire |
| #define SMPHAcquire ROM_SMPHAcquire |
| #endif |
| #endif |
| |
| //***************************************************************************** |
| // |
| // Mark the end of the C bindings section for C++ compilers. |
| // |
| //***************************************************************************** |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // __SMPH_H__ |
| |
| //***************************************************************************** |
| // |
| //! Close the Doxygen group. |
| //! @} |
| //! @} |
| // |
| //***************************************************************************** |