2 ******************************************************************************
\r
3 * @file stm32h7xx_hal_hsem.h
\r
4 * @author MCD Application Team
\r
5 * @brief Header file of HSEM HAL module.
\r
6 ******************************************************************************
\r
9 * <h2><center>© Copyright (c) 2017 STMicroelectronics.
\r
10 * All rights reserved.</center></h2>
\r
12 * This software component is licensed by ST under BSD 3-Clause license,
\r
13 * the "License"; You may not use this file except in compliance with the
\r
14 * License. You may obtain a copy of the License at:
\r
15 * opensource.org/licenses/BSD-3-Clause
\r
17 ******************************************************************************
\r
20 /* Define to prevent recursive inclusion -------------------------------------*/
\r
21 #ifndef STM32H7xx_HAL_HSEM_H
\r
22 #define STM32H7xx_HAL_HSEM_H
\r
28 /* Includes ------------------------------------------------------------------*/
\r
29 #include "stm32h7xx_hal_def.h"
\r
31 /** @addtogroup STM32H7xx_HAL_Driver
\r
35 /** @addtogroup HSEM
\r
39 /* Exported macro ------------------------------------------------------------*/
\r
40 /** @defgroup HSEM_Exported_Macros HSEM Exported Macros
\r
45 * @brief SemID to mask helper Macro.
\r
46 * @param __SEMID__: semaphore ID from 0 to 31
\r
47 * @retval Semaphore Mask.
\r
49 #define __HAL_HSEM_SEMID_TO_MASK(__SEMID__) (1 << (__SEMID__))
\r
52 * @brief Enables the specified HSEM interrupts.
\r
53 * @param __SEM_MASK__: semaphores Mask
\r
56 #if defined(DUAL_CORE)
\r
57 #define __HAL_HSEM_ENABLE_IT(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \
\r
58 (HSEM->C1IER |= (__SEM_MASK__)) : \
\r
59 (HSEM->C2IER |= (__SEM_MASK__)))
\r
61 #define __HAL_HSEM_ENABLE_IT(__SEM_MASK__) (HSEM->IER |= (__SEM_MASK__))
\r
62 #endif /* DUAL_CORE */
\r
64 * @brief Disables the specified HSEM interrupts.
\r
65 * @param __SEM_MASK__: semaphores Mask
\r
68 #if defined(DUAL_CORE)
\r
69 #define __HAL_HSEM_DISABLE_IT(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \
\r
70 (HSEM->C1IER &= ~(__SEM_MASK__)) : \
\r
71 (HSEM->C2IER &= ~(__SEM_MASK__)))
\r
73 #define __HAL_HSEM_DISABLE_IT(__SEM_MASK__) (HSEM->IER &= ~(__SEM_MASK__))
\r
74 #endif /* DUAL_CORE */
\r
77 * @brief Checks whether interrupt has occurred or not for semaphores specified by a mask.
\r
78 * @param __SEM_MASK__: semaphores Mask
\r
79 * @retval semaphores Mask : Semaphores where an interrupt occurred.
\r
81 #if defined(DUAL_CORE)
\r
82 #define __HAL_HSEM_GET_IT(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \
\r
83 ((__SEM_MASK__) & HSEM->C1MISR) : \
\r
84 ((__SEM_MASK__) & HSEM->C2MISR1))
\r
86 #define __HAL_HSEM_GET_IT(__SEM_MASK__) ((__SEM_MASK__) & HSEM->MISR)
\r
87 #endif /* DUAL_CORE */
\r
90 * @brief Get the semaphores release status flags.
\r
91 * @param __SEM_MASK__: semaphores Mask
\r
92 * @retval semaphores Mask : Semaphores where Release flags rise.
\r
94 #if defined(DUAL_CORE)
\r
95 #define __HAL_HSEM_GET_FLAG(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \
\r
96 (__SEM_MASK__) & HSEM->C1ISR : \
\r
97 (__SEM_MASK__) & HSEM->C2ISR)
\r
99 #define __HAL_HSEM_GET_FLAG(__SEM_MASK__) ((__SEM_MASK__) & HSEM->ISR)
\r
100 #endif /* DUAL_CORE */
\r
103 * @brief Clears the HSEM Interrupt flags.
\r
104 * @param __SEM_MASK__: semaphores Mask
\r
107 #if defined(DUAL_CORE)
\r
108 #define __HAL_HSEM_CLEAR_FLAG(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \
\r
109 (HSEM->C1ICR |= (__SEM_MASK__)) : \
\r
110 (HSEM->C2ICR |= (__SEM_MASK__)))
\r
112 #define __HAL_HSEM_CLEAR_FLAG(__SEM_MASK__) (HSEM->ICR |= (__SEM_MASK__))
\r
113 #endif /* DUAL_CORE */
\r
119 /* Exported functions --------------------------------------------------------*/
\r
120 /** @defgroup HSEM_Exported_Functions HSEM Exported Functions
\r
124 /** @addtogroup HSEM_Exported_Functions_Group1 Take and Release functions
\r
125 * @brief HSEM Take and Release functions
\r
129 /* HSEM semaphore take (lock) using 2-Step method ****************************/
\r
130 HAL_StatusTypeDef HAL_HSEM_Take(uint32_t SemID, uint32_t ProcessID);
\r
131 /* HSEM semaphore fast take (lock) using 1-Step method ***********************/
\r
132 HAL_StatusTypeDef HAL_HSEM_FastTake(uint32_t SemID);
\r
133 /* HSEM Check semaphore state Taken or not **********************************/
\r
134 uint32_t HAL_HSEM_IsSemTaken(uint32_t SemID);
\r
135 /* HSEM Release **************************************************************/
\r
136 void HAL_HSEM_Release(uint32_t SemID, uint32_t ProcessID);
\r
137 /* HSEM Release All************************************************************/
\r
138 void HAL_HSEM_ReleaseAll(uint32_t Key, uint32_t CoreID);
\r
144 /** @addtogroup HSEM_Exported_Functions_Group2 HSEM Set and Get Key functions
\r
145 * @brief HSEM Set and Get Key functions.
\r
148 /* HSEM Set Clear Key *********************************************************/
\r
149 void HAL_HSEM_SetClearKey(uint32_t Key);
\r
150 /* HSEM Get Clear Key *********************************************************/
\r
151 uint32_t HAL_HSEM_GetClearKey(void);
\r
156 /** @addtogroup HSEM_Exported_Functions_Group3
\r
157 * @brief HSEM Notification functions
\r
160 /* HSEM Activate HSEM Notification (When a semaphore is released) ) *****************/
\r
161 void HAL_HSEM_ActivateNotification(uint32_t SemMask);
\r
162 /* HSEM Deactivate HSEM Notification (When a semaphore is released) ****************/
\r
163 void HAL_HSEM_DeactivateNotification(uint32_t SemMask);
\r
164 /* HSEM Free Callback (When a semaphore is released) *******************************/
\r
165 void HAL_HSEM_FreeCallback(uint32_t SemMask);
\r
166 /* HSEM IRQ Handler **********************************************************/
\r
167 void HAL_HSEM_IRQHandler(void);
\r
177 /* Private macros ------------------------------------------------------------*/
\r
178 /** @defgroup HSEM_Private_Macros HSEM Private Macros
\r
182 #define IS_HSEM_SEMID(__SEMID__) ((__SEMID__) <= HSEM_SEMID_MAX )
\r
184 #define IS_HSEM_PROCESSID(__PROCESSID__) ((__PROCESSID__) <= HSEM_PROCESSID_MAX )
\r
186 #define IS_HSEM_KEY(__KEY__) ((__KEY__) <= HSEM_CLEAR_KEY_MAX )
\r
188 #if defined(DUAL_CORE)
\r
189 #define IS_HSEM_COREID(__COREID__) (((__COREID__) == HSEM_CPU1_COREID) || \
\r
190 ((__COREID__) == HSEM_CPU2_COREID))
\r
192 #define IS_HSEM_COREID(__COREID__) ((__COREID__) == HSEM_CPU1_COREID)
\r
212 #endif /* STM32H7xx_HAL_HSEM_H */
\r
214 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
\r