mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_STM/TARGET_STM32H7/device/stm32h7xx_hal_hsem.c@189:f392fc9709a3, 2019-02-20 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Feb 20 22:31:08 2019 +0000
- Revision:
- 189:f392fc9709a3
mbed library release version 165
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 189:f392fc9709a3 | 1 | /** |
AnnaBridge | 189:f392fc9709a3 | 2 | ****************************************************************************** |
AnnaBridge | 189:f392fc9709a3 | 3 | * @file stm32h7xx_hal_hsem.c |
AnnaBridge | 189:f392fc9709a3 | 4 | * @author MCD Application Team |
AnnaBridge | 189:f392fc9709a3 | 5 | * @brief HSEM HAL module driver. |
AnnaBridge | 189:f392fc9709a3 | 6 | * This file provides firmware functions to manage the following |
AnnaBridge | 189:f392fc9709a3 | 7 | * functionalities of the semaphore peripheral: |
AnnaBridge | 189:f392fc9709a3 | 8 | * + Semaphore Take function (2-Step Procedure) , non blocking |
AnnaBridge | 189:f392fc9709a3 | 9 | * + Semaphore FastTake function (1-Step Procedure) , non blocking |
AnnaBridge | 189:f392fc9709a3 | 10 | * + Semaphore Status check |
AnnaBridge | 189:f392fc9709a3 | 11 | * + Semaphore Clear Key Set and Get |
AnnaBridge | 189:f392fc9709a3 | 12 | * + Release and release all functions |
AnnaBridge | 189:f392fc9709a3 | 13 | * + Semaphore notification enabling and disabling and callback functions |
AnnaBridge | 189:f392fc9709a3 | 14 | * + IRQ handler management |
AnnaBridge | 189:f392fc9709a3 | 15 | * |
AnnaBridge | 189:f392fc9709a3 | 16 | * |
AnnaBridge | 189:f392fc9709a3 | 17 | @verbatim |
AnnaBridge | 189:f392fc9709a3 | 18 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 19 | ##### How to use this driver ##### |
AnnaBridge | 189:f392fc9709a3 | 20 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 21 | [..] |
AnnaBridge | 189:f392fc9709a3 | 22 | (#)Take a semaphore In 2-Step mode Using function HAL_HSEM_Take. This function takes as parameters : |
AnnaBridge | 189:f392fc9709a3 | 23 | (++) the semaphore ID from 0 to 31 |
AnnaBridge | 189:f392fc9709a3 | 24 | (++) the process ID from 0 to 255 |
AnnaBridge | 189:f392fc9709a3 | 25 | (#) Fast Take semaphore In 1-Step mode Using function HAL_HSEM_FastTake. This function takes as parameter : |
AnnaBridge | 189:f392fc9709a3 | 26 | (++) the semaphore ID from 0_ID to 31. Note that the process ID value is implicitly assumed as zero |
AnnaBridge | 189:f392fc9709a3 | 27 | (#) Check if a semaphore is Taken using function HAL_HSEM_IsSemTaken. This function takes as parameter : |
AnnaBridge | 189:f392fc9709a3 | 28 | (++) the semaphore ID from 0_ID to 31 |
AnnaBridge | 189:f392fc9709a3 | 29 | (++) It returns 1 if the given semaphore is taken otherwise (Free) zero |
AnnaBridge | 189:f392fc9709a3 | 30 | (#)Release a semaphore using function with HAL_HSEM_Release. This function takes as parameters : |
AnnaBridge | 189:f392fc9709a3 | 31 | (++) the semaphore ID from 0 to 31 |
AnnaBridge | 189:f392fc9709a3 | 32 | (++) the process ID from 0 to 255: |
AnnaBridge | 189:f392fc9709a3 | 33 | (++) Note: If ProcessID and MasterID match, semaphore is freed, and an interrupt |
AnnaBridge | 189:f392fc9709a3 | 34 | may be generated when enabled (notification activated). If ProcessID or MasterID does not match, |
AnnaBridge | 189:f392fc9709a3 | 35 | semaphore remains taken (locked) |
AnnaBridge | 189:f392fc9709a3 | 36 | |
AnnaBridge | 189:f392fc9709a3 | 37 | (#)Release all semaphores at once taken by a given Master using function HAL_HSEM_Release_All |
AnnaBridge | 189:f392fc9709a3 | 38 | This function takes as parameters : |
AnnaBridge | 189:f392fc9709a3 | 39 | (++) the Release Key (value from 0 to 0xFFFF) can be Set or Get respectively by |
AnnaBridge | 189:f392fc9709a3 | 40 | HAL_HSEM_SetClearKey() or HAL_HSEM_GetClearKey functions |
AnnaBridge | 189:f392fc9709a3 | 41 | (++) the Master ID: |
AnnaBridge | 189:f392fc9709a3 | 42 | (++) Note: If the Key and MasterID match, all semaphores taken by the given CPU that corresponds |
AnnaBridge | 189:f392fc9709a3 | 43 | to MasterID will be freed, and an interrupt may be generated when enabled (notification activated). If the |
AnnaBridge | 189:f392fc9709a3 | 44 | Key or the MasterID doesn't match, semaphores remains taken (locked) |
AnnaBridge | 189:f392fc9709a3 | 45 | |
AnnaBridge | 189:f392fc9709a3 | 46 | (#)Semaphores Release all key functions: |
AnnaBridge | 189:f392fc9709a3 | 47 | (++) HAL_HSEM_SetClearKey() to set semaphore release all Key |
AnnaBridge | 189:f392fc9709a3 | 48 | (++) HAL_HSEM_GetClearKey() to get release all Key |
AnnaBridge | 189:f392fc9709a3 | 49 | (#)Semaphores notification functions : |
AnnaBridge | 189:f392fc9709a3 | 50 | (++) HAL_HSEM_ActivateNotification to activate a notification callback on |
AnnaBridge | 189:f392fc9709a3 | 51 | a given semaphores Mask (bitfield). When one or more semaphores defined by the mask are released |
AnnaBridge | 189:f392fc9709a3 | 52 | the callback HAL_HSEM_FreeCallback will be asserted giving as parameters a mask of the released |
AnnaBridge | 189:f392fc9709a3 | 53 | semaphores (bitfield). |
AnnaBridge | 189:f392fc9709a3 | 54 | |
AnnaBridge | 189:f392fc9709a3 | 55 | (++) HAL_HSEM_DeactivateNotification to deactivate the notification of a given semaphores Mask (bitfield). |
AnnaBridge | 189:f392fc9709a3 | 56 | (++) See the description of the macro __HAL_HSEM_SEMID_TO_MASK to check how to calculate a semaphore mask |
AnnaBridge | 189:f392fc9709a3 | 57 | Used by the notification functions |
AnnaBridge | 189:f392fc9709a3 | 58 | *** HSEM HAL driver macros list *** |
AnnaBridge | 189:f392fc9709a3 | 59 | ============================================= |
AnnaBridge | 189:f392fc9709a3 | 60 | [..] Below the list of most used macros in HSEM HAL driver. |
AnnaBridge | 189:f392fc9709a3 | 61 | |
AnnaBridge | 189:f392fc9709a3 | 62 | (+) __HAL_HSEM_SEMID_TO_MASK: Helper macro to convert a Semaphore ID to a Mask. |
AnnaBridge | 189:f392fc9709a3 | 63 | [..] Example of use : |
AnnaBridge | 189:f392fc9709a3 | 64 | [..] mask = __HAL_HSEM_SEMID_TO_MASK(8) | __HAL_HSEM_SEMID_TO_MASK(21) | __HAL_HSEM_SEMID_TO_MASK(25). |
AnnaBridge | 189:f392fc9709a3 | 65 | [..] All next macros take as parameter a semaphore Mask (bitfiled) that can be constructed using __HAL_HSEM_SEMID_TO_MASK as the above example. |
AnnaBridge | 189:f392fc9709a3 | 66 | (+) __HAL_HSEM_ENABLE_IT: Enable the specified semaphores Mask interrupts. |
AnnaBridge | 189:f392fc9709a3 | 67 | (+) __HAL_HSEM_DISABLE_IT: Disable the specified semaphores Mask interrupts. |
AnnaBridge | 189:f392fc9709a3 | 68 | (+) __HAL_HSEM_GET_IT: Checks whether the specified semaphore interrupt has occurred or not. |
AnnaBridge | 189:f392fc9709a3 | 69 | (+) __HAL_HSEM_GET_FLAG: Get the semaphores status release flags. |
AnnaBridge | 189:f392fc9709a3 | 70 | (+) __HAL_HSEM_CLEAR_FLAG: Clear the semaphores status release flags. |
AnnaBridge | 189:f392fc9709a3 | 71 | |
AnnaBridge | 189:f392fc9709a3 | 72 | @endverbatim |
AnnaBridge | 189:f392fc9709a3 | 73 | ****************************************************************************** |
AnnaBridge | 189:f392fc9709a3 | 74 | * @attention |
AnnaBridge | 189:f392fc9709a3 | 75 | * |
AnnaBridge | 189:f392fc9709a3 | 76 | * <h2><center>© Copyright (c) 2017 STMicroelectronics. |
AnnaBridge | 189:f392fc9709a3 | 77 | * All rights reserved.</center></h2> |
AnnaBridge | 189:f392fc9709a3 | 78 | * |
AnnaBridge | 189:f392fc9709a3 | 79 | * This software component is licensed by ST under BSD 3-Clause license, |
AnnaBridge | 189:f392fc9709a3 | 80 | * the "License"; You may not use this file except in compliance with the |
AnnaBridge | 189:f392fc9709a3 | 81 | * License. You may obtain a copy of the License at: |
AnnaBridge | 189:f392fc9709a3 | 82 | * opensource.org/licenses/BSD-3-Clause |
AnnaBridge | 189:f392fc9709a3 | 83 | * |
AnnaBridge | 189:f392fc9709a3 | 84 | ****************************************************************************** |
AnnaBridge | 189:f392fc9709a3 | 85 | */ |
AnnaBridge | 189:f392fc9709a3 | 86 | |
AnnaBridge | 189:f392fc9709a3 | 87 | /* Includes ------------------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 88 | #include "stm32h7xx_hal.h" |
AnnaBridge | 189:f392fc9709a3 | 89 | |
AnnaBridge | 189:f392fc9709a3 | 90 | /** @addtogroup STM32H7xx_HAL_Driver |
AnnaBridge | 189:f392fc9709a3 | 91 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 92 | */ |
AnnaBridge | 189:f392fc9709a3 | 93 | |
AnnaBridge | 189:f392fc9709a3 | 94 | /** @defgroup HSEM HSEM |
AnnaBridge | 189:f392fc9709a3 | 95 | * @brief HSEM HAL module driver |
AnnaBridge | 189:f392fc9709a3 | 96 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 97 | */ |
AnnaBridge | 189:f392fc9709a3 | 98 | |
AnnaBridge | 189:f392fc9709a3 | 99 | #ifdef HAL_HSEM_MODULE_ENABLED |
AnnaBridge | 189:f392fc9709a3 | 100 | |
AnnaBridge | 189:f392fc9709a3 | 101 | /* Private typedef -----------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 102 | /* Private define ------------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 103 | /* Private macro -------------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 104 | /* Private variables ---------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 105 | /* Private function prototypes -----------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 106 | /* Private functions ---------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 107 | /* Exported functions --------------------------------------------------------*/ |
AnnaBridge | 189:f392fc9709a3 | 108 | |
AnnaBridge | 189:f392fc9709a3 | 109 | /** @defgroup HSEM_Exported_Functions HSEM Exported Functions |
AnnaBridge | 189:f392fc9709a3 | 110 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 111 | */ |
AnnaBridge | 189:f392fc9709a3 | 112 | |
AnnaBridge | 189:f392fc9709a3 | 113 | /** @defgroup HSEM_Exported_Functions_Group1 Take and Release functions |
AnnaBridge | 189:f392fc9709a3 | 114 | * @brief HSEM Take and Release functions |
AnnaBridge | 189:f392fc9709a3 | 115 | * |
AnnaBridge | 189:f392fc9709a3 | 116 | @verbatim |
AnnaBridge | 189:f392fc9709a3 | 117 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 118 | ##### HSEM Take and Release functions ##### |
AnnaBridge | 189:f392fc9709a3 | 119 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 120 | [..] This section provides functions allowing to: |
AnnaBridge | 189:f392fc9709a3 | 121 | (+) Take a semaphore with 2 Step method |
AnnaBridge | 189:f392fc9709a3 | 122 | (+) Fast Take a semaphore with 1 Step method |
AnnaBridge | 189:f392fc9709a3 | 123 | (+) Check semaphore state Taken or not |
AnnaBridge | 189:f392fc9709a3 | 124 | (+) Release a semaphore |
AnnaBridge | 189:f392fc9709a3 | 125 | (+) Release all semaphore at once |
AnnaBridge | 189:f392fc9709a3 | 126 | |
AnnaBridge | 189:f392fc9709a3 | 127 | @endverbatim |
AnnaBridge | 189:f392fc9709a3 | 128 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 129 | */ |
AnnaBridge | 189:f392fc9709a3 | 130 | |
AnnaBridge | 189:f392fc9709a3 | 131 | |
AnnaBridge | 189:f392fc9709a3 | 132 | /** |
AnnaBridge | 189:f392fc9709a3 | 133 | * @brief Take a semaphore in 2 Step mode. |
AnnaBridge | 189:f392fc9709a3 | 134 | * @param SemID: semaphore ID from 0 to 31 |
AnnaBridge | 189:f392fc9709a3 | 135 | * @param ProcessID: Process ID from 0 to 255 |
AnnaBridge | 189:f392fc9709a3 | 136 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 137 | */ |
AnnaBridge | 189:f392fc9709a3 | 138 | HAL_StatusTypeDef HAL_HSEM_Take(uint32_t SemID, uint32_t ProcessID) |
AnnaBridge | 189:f392fc9709a3 | 139 | { |
AnnaBridge | 189:f392fc9709a3 | 140 | /* Check the parameters */ |
AnnaBridge | 189:f392fc9709a3 | 141 | assert_param(IS_HSEM_SEMID(SemID)); |
AnnaBridge | 189:f392fc9709a3 | 142 | assert_param(IS_HSEM_PROCESSID(ProcessID)); |
AnnaBridge | 189:f392fc9709a3 | 143 | |
AnnaBridge | 189:f392fc9709a3 | 144 | /* First step write R register with MasterID, processID and take bit=1*/ |
AnnaBridge | 189:f392fc9709a3 | 145 | HSEM->R[SemID] = (ProcessID | HSEM_CR_COREID_CURRENT | HSEM_R_LOCK); |
AnnaBridge | 189:f392fc9709a3 | 146 | |
AnnaBridge | 189:f392fc9709a3 | 147 | /* second step : read the R register . Take achieved if MasterID and processID match and take bit set to 1 */ |
AnnaBridge | 189:f392fc9709a3 | 148 | if (HSEM->R[SemID] == (ProcessID | HSEM_CR_COREID_CURRENT | HSEM_R_LOCK)) |
AnnaBridge | 189:f392fc9709a3 | 149 | { |
AnnaBridge | 189:f392fc9709a3 | 150 | /*take success when MasterID and ProcessID match and take bit set*/ |
AnnaBridge | 189:f392fc9709a3 | 151 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 152 | } |
AnnaBridge | 189:f392fc9709a3 | 153 | |
AnnaBridge | 189:f392fc9709a3 | 154 | /* Semaphore take fails*/ |
AnnaBridge | 189:f392fc9709a3 | 155 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 156 | } |
AnnaBridge | 189:f392fc9709a3 | 157 | |
AnnaBridge | 189:f392fc9709a3 | 158 | /** |
AnnaBridge | 189:f392fc9709a3 | 159 | * @brief Fast Take a semaphore with 1 Step mode. |
AnnaBridge | 189:f392fc9709a3 | 160 | * @param SemID: semaphore ID from 0 to 31 |
AnnaBridge | 189:f392fc9709a3 | 161 | * @retval HAL status |
AnnaBridge | 189:f392fc9709a3 | 162 | */ |
AnnaBridge | 189:f392fc9709a3 | 163 | HAL_StatusTypeDef HAL_HSEM_FastTake(uint32_t SemID) |
AnnaBridge | 189:f392fc9709a3 | 164 | { |
AnnaBridge | 189:f392fc9709a3 | 165 | /* Check the parameters */ |
AnnaBridge | 189:f392fc9709a3 | 166 | assert_param(IS_HSEM_SEMID(SemID)); |
AnnaBridge | 189:f392fc9709a3 | 167 | |
AnnaBridge | 189:f392fc9709a3 | 168 | /* Read the RLR register to take the semaphore */ |
AnnaBridge | 189:f392fc9709a3 | 169 | if (HSEM->RLR[SemID] == (HSEM_CR_COREID_CURRENT | HSEM_RLR_LOCK)) |
AnnaBridge | 189:f392fc9709a3 | 170 | { |
AnnaBridge | 189:f392fc9709a3 | 171 | /*take success when MasterID match and take bit set*/ |
AnnaBridge | 189:f392fc9709a3 | 172 | return HAL_OK; |
AnnaBridge | 189:f392fc9709a3 | 173 | } |
AnnaBridge | 189:f392fc9709a3 | 174 | |
AnnaBridge | 189:f392fc9709a3 | 175 | /* Semaphore take fails */ |
AnnaBridge | 189:f392fc9709a3 | 176 | return HAL_ERROR; |
AnnaBridge | 189:f392fc9709a3 | 177 | } |
AnnaBridge | 189:f392fc9709a3 | 178 | /** |
AnnaBridge | 189:f392fc9709a3 | 179 | * @brief Check semaphore state Taken or not. |
AnnaBridge | 189:f392fc9709a3 | 180 | * @param SemID: semaphore ID |
AnnaBridge | 189:f392fc9709a3 | 181 | * @retval HAL HSEM state |
AnnaBridge | 189:f392fc9709a3 | 182 | */ |
AnnaBridge | 189:f392fc9709a3 | 183 | uint32_t HAL_HSEM_IsSemTaken(uint32_t SemID) |
AnnaBridge | 189:f392fc9709a3 | 184 | { |
AnnaBridge | 189:f392fc9709a3 | 185 | return (((HSEM->R[SemID] & HSEM_R_LOCK) != 0U) ? 1UL : 0UL); |
AnnaBridge | 189:f392fc9709a3 | 186 | } |
AnnaBridge | 189:f392fc9709a3 | 187 | |
AnnaBridge | 189:f392fc9709a3 | 188 | |
AnnaBridge | 189:f392fc9709a3 | 189 | /** |
AnnaBridge | 189:f392fc9709a3 | 190 | * @brief Release a semaphore. |
AnnaBridge | 189:f392fc9709a3 | 191 | * @param SemID: semaphore ID from 0 to 31 |
AnnaBridge | 189:f392fc9709a3 | 192 | * @param ProcessID: Process ID from 0 to 255 |
AnnaBridge | 189:f392fc9709a3 | 193 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 194 | */ |
AnnaBridge | 189:f392fc9709a3 | 195 | void HAL_HSEM_Release(uint32_t SemID, uint32_t ProcessID) |
AnnaBridge | 189:f392fc9709a3 | 196 | { |
AnnaBridge | 189:f392fc9709a3 | 197 | /* Check the parameters */ |
AnnaBridge | 189:f392fc9709a3 | 198 | assert_param(IS_HSEM_SEMID(SemID)); |
AnnaBridge | 189:f392fc9709a3 | 199 | assert_param(IS_HSEM_PROCESSID(ProcessID)); |
AnnaBridge | 189:f392fc9709a3 | 200 | |
AnnaBridge | 189:f392fc9709a3 | 201 | /* Clear the semaphore by writing to the R register : the MasterID , the processID and take bit = 0 */ |
AnnaBridge | 189:f392fc9709a3 | 202 | HSEM->R[SemID] = (ProcessID | HSEM_CR_COREID_CURRENT); |
AnnaBridge | 189:f392fc9709a3 | 203 | |
AnnaBridge | 189:f392fc9709a3 | 204 | } |
AnnaBridge | 189:f392fc9709a3 | 205 | |
AnnaBridge | 189:f392fc9709a3 | 206 | /** |
AnnaBridge | 189:f392fc9709a3 | 207 | * @brief Release All semaphore used by a given Master . |
AnnaBridge | 189:f392fc9709a3 | 208 | * @param Key: Semaphore Key , value from 0 to 0xFFFF |
AnnaBridge | 189:f392fc9709a3 | 209 | * @param CoreID: CoreID of the CPU that is using semaphores to be released |
AnnaBridge | 189:f392fc9709a3 | 210 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 211 | */ |
AnnaBridge | 189:f392fc9709a3 | 212 | void HAL_HSEM_ReleaseAll(uint32_t Key, uint32_t CoreID) |
AnnaBridge | 189:f392fc9709a3 | 213 | { |
AnnaBridge | 189:f392fc9709a3 | 214 | assert_param(IS_HSEM_KEY(Key)); |
AnnaBridge | 189:f392fc9709a3 | 215 | assert_param(IS_HSEM_COREID(CoreID)); |
AnnaBridge | 189:f392fc9709a3 | 216 | |
AnnaBridge | 189:f392fc9709a3 | 217 | HSEM->CR = ((Key << HSEM_CR_KEY_Pos) | (CoreID << HSEM_CR_COREID_Pos)); |
AnnaBridge | 189:f392fc9709a3 | 218 | } |
AnnaBridge | 189:f392fc9709a3 | 219 | |
AnnaBridge | 189:f392fc9709a3 | 220 | /** |
AnnaBridge | 189:f392fc9709a3 | 221 | * @} |
AnnaBridge | 189:f392fc9709a3 | 222 | */ |
AnnaBridge | 189:f392fc9709a3 | 223 | |
AnnaBridge | 189:f392fc9709a3 | 224 | /** @defgroup HSEM_Exported_Functions_Group2 HSEM Set and Get Key functions |
AnnaBridge | 189:f392fc9709a3 | 225 | * @brief HSEM Set and Get Key functions. |
AnnaBridge | 189:f392fc9709a3 | 226 | * |
AnnaBridge | 189:f392fc9709a3 | 227 | @verbatim |
AnnaBridge | 189:f392fc9709a3 | 228 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 229 | ##### HSEM Set and Get Key functions ##### |
AnnaBridge | 189:f392fc9709a3 | 230 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 231 | [..] This section provides functions allowing to: |
AnnaBridge | 189:f392fc9709a3 | 232 | (+) Set semaphore Key |
AnnaBridge | 189:f392fc9709a3 | 233 | (+) Get semaphore Key |
AnnaBridge | 189:f392fc9709a3 | 234 | @endverbatim |
AnnaBridge | 189:f392fc9709a3 | 235 | |
AnnaBridge | 189:f392fc9709a3 | 236 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 237 | */ |
AnnaBridge | 189:f392fc9709a3 | 238 | |
AnnaBridge | 189:f392fc9709a3 | 239 | /** |
AnnaBridge | 189:f392fc9709a3 | 240 | * @brief Set semaphore Key . |
AnnaBridge | 189:f392fc9709a3 | 241 | * @param Key: Semaphore Key , value from 0 to 0xFFFF |
AnnaBridge | 189:f392fc9709a3 | 242 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 243 | */ |
AnnaBridge | 189:f392fc9709a3 | 244 | void HAL_HSEM_SetClearKey(uint32_t Key) |
AnnaBridge | 189:f392fc9709a3 | 245 | { |
AnnaBridge | 189:f392fc9709a3 | 246 | assert_param(IS_HSEM_KEY(Key)); |
AnnaBridge | 189:f392fc9709a3 | 247 | |
AnnaBridge | 189:f392fc9709a3 | 248 | MODIFY_REG(HSEM->KEYR, HSEM_KEYR_KEY, (Key << HSEM_KEYR_KEY_Pos)); |
AnnaBridge | 189:f392fc9709a3 | 249 | |
AnnaBridge | 189:f392fc9709a3 | 250 | } |
AnnaBridge | 189:f392fc9709a3 | 251 | |
AnnaBridge | 189:f392fc9709a3 | 252 | /** |
AnnaBridge | 189:f392fc9709a3 | 253 | * @brief Get semaphore Key . |
AnnaBridge | 189:f392fc9709a3 | 254 | * @retval Semaphore Key , value from 0 to 0xFFFF |
AnnaBridge | 189:f392fc9709a3 | 255 | */ |
AnnaBridge | 189:f392fc9709a3 | 256 | uint32_t HAL_HSEM_GetClearKey(void) |
AnnaBridge | 189:f392fc9709a3 | 257 | { |
AnnaBridge | 189:f392fc9709a3 | 258 | return (HSEM->KEYR >> HSEM_KEYR_KEY_Pos); |
AnnaBridge | 189:f392fc9709a3 | 259 | } |
AnnaBridge | 189:f392fc9709a3 | 260 | |
AnnaBridge | 189:f392fc9709a3 | 261 | /** |
AnnaBridge | 189:f392fc9709a3 | 262 | * @} |
AnnaBridge | 189:f392fc9709a3 | 263 | */ |
AnnaBridge | 189:f392fc9709a3 | 264 | |
AnnaBridge | 189:f392fc9709a3 | 265 | /** @defgroup HSEM_Exported_Functions_Group3 HSEM IRQ handler management |
AnnaBridge | 189:f392fc9709a3 | 266 | * @brief HSEM Notification functions. |
AnnaBridge | 189:f392fc9709a3 | 267 | * |
AnnaBridge | 189:f392fc9709a3 | 268 | @verbatim |
AnnaBridge | 189:f392fc9709a3 | 269 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 270 | ##### HSEM IRQ handler management and Notification functions ##### |
AnnaBridge | 189:f392fc9709a3 | 271 | ============================================================================== |
AnnaBridge | 189:f392fc9709a3 | 272 | [..] This section provides HSEM IRQ handler and Notification function. |
AnnaBridge | 189:f392fc9709a3 | 273 | |
AnnaBridge | 189:f392fc9709a3 | 274 | @endverbatim |
AnnaBridge | 189:f392fc9709a3 | 275 | * @{ |
AnnaBridge | 189:f392fc9709a3 | 276 | */ |
AnnaBridge | 189:f392fc9709a3 | 277 | |
AnnaBridge | 189:f392fc9709a3 | 278 | /** |
AnnaBridge | 189:f392fc9709a3 | 279 | * @brief Activate Semaphore release Notification for a given Semaphores Mask . |
AnnaBridge | 189:f392fc9709a3 | 280 | * @param SemMask: Mask of Released semaphores |
AnnaBridge | 189:f392fc9709a3 | 281 | * @retval Semaphore Key |
AnnaBridge | 189:f392fc9709a3 | 282 | */ |
AnnaBridge | 189:f392fc9709a3 | 283 | void HAL_HSEM_ActivateNotification(uint32_t SemMask) |
AnnaBridge | 189:f392fc9709a3 | 284 | { |
AnnaBridge | 189:f392fc9709a3 | 285 | HSEM_COMMON->IER |= SemMask; |
AnnaBridge | 189:f392fc9709a3 | 286 | } |
AnnaBridge | 189:f392fc9709a3 | 287 | |
AnnaBridge | 189:f392fc9709a3 | 288 | /** |
AnnaBridge | 189:f392fc9709a3 | 289 | * @brief Deactivate Semaphore release Notification for a given Semaphores Mask . |
AnnaBridge | 189:f392fc9709a3 | 290 | * @param SemMask: Mask of Released semaphores |
AnnaBridge | 189:f392fc9709a3 | 291 | * @retval Semaphore Key |
AnnaBridge | 189:f392fc9709a3 | 292 | */ |
AnnaBridge | 189:f392fc9709a3 | 293 | void HAL_HSEM_DeactivateNotification(uint32_t SemMask) |
AnnaBridge | 189:f392fc9709a3 | 294 | { |
AnnaBridge | 189:f392fc9709a3 | 295 | HSEM_COMMON->IER &= ~SemMask; |
AnnaBridge | 189:f392fc9709a3 | 296 | } |
AnnaBridge | 189:f392fc9709a3 | 297 | |
AnnaBridge | 189:f392fc9709a3 | 298 | /** |
AnnaBridge | 189:f392fc9709a3 | 299 | * @brief This function handles HSEM interrupt request |
AnnaBridge | 189:f392fc9709a3 | 300 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 301 | */ |
AnnaBridge | 189:f392fc9709a3 | 302 | void HAL_HSEM_IRQHandler(void) |
AnnaBridge | 189:f392fc9709a3 | 303 | { |
AnnaBridge | 189:f392fc9709a3 | 304 | uint32_t statusreg; |
AnnaBridge | 189:f392fc9709a3 | 305 | |
AnnaBridge | 189:f392fc9709a3 | 306 | /* Get the list of masked freed semaphores*/ |
AnnaBridge | 189:f392fc9709a3 | 307 | statusreg = HSEM_COMMON->MISR; |
AnnaBridge | 189:f392fc9709a3 | 308 | |
AnnaBridge | 189:f392fc9709a3 | 309 | /*Disable Interrupts*/ |
AnnaBridge | 189:f392fc9709a3 | 310 | HSEM_COMMON->IER &= ~((uint32_t)statusreg); |
AnnaBridge | 189:f392fc9709a3 | 311 | |
AnnaBridge | 189:f392fc9709a3 | 312 | /*Clear Flags*/ |
AnnaBridge | 189:f392fc9709a3 | 313 | HSEM_COMMON->ICR = ((uint32_t)statusreg); |
AnnaBridge | 189:f392fc9709a3 | 314 | |
AnnaBridge | 189:f392fc9709a3 | 315 | /* Call FreeCallback */ |
AnnaBridge | 189:f392fc9709a3 | 316 | HAL_HSEM_FreeCallback(statusreg); |
AnnaBridge | 189:f392fc9709a3 | 317 | } |
AnnaBridge | 189:f392fc9709a3 | 318 | |
AnnaBridge | 189:f392fc9709a3 | 319 | /** |
AnnaBridge | 189:f392fc9709a3 | 320 | * @brief Semaphore Released Callback. |
AnnaBridge | 189:f392fc9709a3 | 321 | * @param SemMask: Mask of Released semaphores |
AnnaBridge | 189:f392fc9709a3 | 322 | * @retval None |
AnnaBridge | 189:f392fc9709a3 | 323 | */ |
AnnaBridge | 189:f392fc9709a3 | 324 | __weak void HAL_HSEM_FreeCallback(uint32_t SemMask) |
AnnaBridge | 189:f392fc9709a3 | 325 | { |
AnnaBridge | 189:f392fc9709a3 | 326 | /* Prevent unused argument(s) compilation warning */ |
AnnaBridge | 189:f392fc9709a3 | 327 | UNUSED(SemMask); |
AnnaBridge | 189:f392fc9709a3 | 328 | |
AnnaBridge | 189:f392fc9709a3 | 329 | /* NOTE : This function should not be modified, when the callback is needed, |
AnnaBridge | 189:f392fc9709a3 | 330 | the HAL_HSEM_FreeCallback can be implemented in the user file |
AnnaBridge | 189:f392fc9709a3 | 331 | */ |
AnnaBridge | 189:f392fc9709a3 | 332 | } |
AnnaBridge | 189:f392fc9709a3 | 333 | |
AnnaBridge | 189:f392fc9709a3 | 334 | /** |
AnnaBridge | 189:f392fc9709a3 | 335 | * @} |
AnnaBridge | 189:f392fc9709a3 | 336 | */ |
AnnaBridge | 189:f392fc9709a3 | 337 | |
AnnaBridge | 189:f392fc9709a3 | 338 | /** |
AnnaBridge | 189:f392fc9709a3 | 339 | * @} |
AnnaBridge | 189:f392fc9709a3 | 340 | */ |
AnnaBridge | 189:f392fc9709a3 | 341 | |
AnnaBridge | 189:f392fc9709a3 | 342 | #endif /* HAL_HSEM_MODULE_ENABLED */ |
AnnaBridge | 189:f392fc9709a3 | 343 | /** |
AnnaBridge | 189:f392fc9709a3 | 344 | * @} |
AnnaBridge | 189:f392fc9709a3 | 345 | */ |
AnnaBridge | 189:f392fc9709a3 | 346 | |
AnnaBridge | 189:f392fc9709a3 | 347 | /** |
AnnaBridge | 189:f392fc9709a3 | 348 | * @} |
AnnaBridge | 189:f392fc9709a3 | 349 | */ |
AnnaBridge | 189:f392fc9709a3 | 350 | |
AnnaBridge | 189:f392fc9709a3 | 351 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |