/** | |
****************************************************************************** | |
* @file stm32h7xx_hal_hsem.h | |
* @author MCD Application Team | |
* @brief Header file of HSEM HAL module. | |
****************************************************************************** | |
* @attention | |
* | |
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |
* All rights reserved.</center></h2> | |
* | |
* This software component is licensed by ST under BSD 3-Clause license, | |
* the "License"; You may not use this file except in compliance with the | |
* License. You may obtain a copy of the License at: | |
* opensource.org/licenses/BSD-3-Clause | |
* | |
****************************************************************************** | |
*/ | |
/* Define to prevent recursive inclusion -------------------------------------*/ | |
#ifndef STM32H7xx_HAL_HSEM_H | |
#define STM32H7xx_HAL_HSEM_H | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
/* Includes ------------------------------------------------------------------*/ | |
#include "stm32h7xx_hal_def.h" | |
/** @addtogroup STM32H7xx_HAL_Driver | |
* @{ | |
*/ | |
/** @addtogroup HSEM | |
* @{ | |
*/ | |
/* Exported macro ------------------------------------------------------------*/ | |
/** @defgroup HSEM_Exported_Macros HSEM Exported Macros | |
* @{ | |
*/ | |
/** | |
* @brief SemID to mask helper Macro. | |
* @param __SEMID__: semaphore ID from 0 to 31 | |
* @retval Semaphore Mask. | |
*/ | |
#define __HAL_HSEM_SEMID_TO_MASK(__SEMID__) (1 << (__SEMID__)) | |
/** | |
* @brief Enables the specified HSEM interrupts. | |
* @param __SEM_MASK__: semaphores Mask | |
* @retval None. | |
*/ | |
#if defined(DUAL_CORE) | |
#define __HAL_HSEM_ENABLE_IT(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \ | |
(HSEM->C1IER |= (__SEM_MASK__)) : \ | |
(HSEM->C2IER |= (__SEM_MASK__))) | |
#else | |
#define __HAL_HSEM_ENABLE_IT(__SEM_MASK__) (HSEM->IER |= (__SEM_MASK__)) | |
#endif /* DUAL_CORE */ | |
/** | |
* @brief Disables the specified HSEM interrupts. | |
* @param __SEM_MASK__: semaphores Mask | |
* @retval None. | |
*/ | |
#if defined(DUAL_CORE) | |
#define __HAL_HSEM_DISABLE_IT(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \ | |
(HSEM->C1IER &= ~(__SEM_MASK__)) : \ | |
(HSEM->C2IER &= ~(__SEM_MASK__))) | |
#else | |
#define __HAL_HSEM_DISABLE_IT(__SEM_MASK__) (HSEM->IER &= ~(__SEM_MASK__)) | |
#endif /* DUAL_CORE */ | |
/** | |
* @brief Checks whether interrupt has occurred or not for semaphores specified by a mask. | |
* @param __SEM_MASK__: semaphores Mask | |
* @retval semaphores Mask : Semaphores where an interrupt occurred. | |
*/ | |
#if defined(DUAL_CORE) | |
#define __HAL_HSEM_GET_IT(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \ | |
((__SEM_MASK__) & HSEM->C1MISR) : \ | |
((__SEM_MASK__) & HSEM->C2MISR1)) | |
#else | |
#define __HAL_HSEM_GET_IT(__SEM_MASK__) ((__SEM_MASK__) & HSEM->MISR) | |
#endif /* DUAL_CORE */ | |
/** | |
* @brief Get the semaphores release status flags. | |
* @param __SEM_MASK__: semaphores Mask | |
* @retval semaphores Mask : Semaphores where Release flags rise. | |
*/ | |
#if defined(DUAL_CORE) | |
#define __HAL_HSEM_GET_FLAG(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \ | |
(__SEM_MASK__) & HSEM->C1ISR : \ | |
(__SEM_MASK__) & HSEM->C2ISR) | |
#else | |
#define __HAL_HSEM_GET_FLAG(__SEM_MASK__) ((__SEM_MASK__) & HSEM->ISR) | |
#endif /* DUAL_CORE */ | |
/** | |
* @brief Clears the HSEM Interrupt flags. | |
* @param __SEM_MASK__: semaphores Mask | |
* @retval None. | |
*/ | |
#if defined(DUAL_CORE) | |
#define __HAL_HSEM_CLEAR_FLAG(__SEM_MASK__) ((((SCB->CPUID & 0x000000F0) >> 4 )== 0x7) ? \ | |
(HSEM->C1ICR |= (__SEM_MASK__)) : \ | |
(HSEM->C2ICR |= (__SEM_MASK__))) | |
#else | |
#define __HAL_HSEM_CLEAR_FLAG(__SEM_MASK__) (HSEM->ICR |= (__SEM_MASK__)) | |
#endif /* DUAL_CORE */ | |
/** | |
* @} | |
*/ | |
/* Exported functions --------------------------------------------------------*/ | |
/** @defgroup HSEM_Exported_Functions HSEM Exported Functions | |
* @{ | |
*/ | |
/** @addtogroup HSEM_Exported_Functions_Group1 Take and Release functions | |
* @brief HSEM Take and Release functions | |
* @{ | |
*/ | |
/* HSEM semaphore take (lock) using 2-Step method ****************************/ | |
HAL_StatusTypeDef HAL_HSEM_Take(uint32_t SemID, uint32_t ProcessID); | |
/* HSEM semaphore fast take (lock) using 1-Step method ***********************/ | |
HAL_StatusTypeDef HAL_HSEM_FastTake(uint32_t SemID); | |
/* HSEM Check semaphore state Taken or not **********************************/ | |
uint32_t HAL_HSEM_IsSemTaken(uint32_t SemID); | |
/* HSEM Release **************************************************************/ | |
void HAL_HSEM_Release(uint32_t SemID, uint32_t ProcessID); | |
/* HSEM Release All************************************************************/ | |
void HAL_HSEM_ReleaseAll(uint32_t Key, uint32_t CoreID); | |
/** | |
* @} | |
*/ | |
/** @addtogroup HSEM_Exported_Functions_Group2 HSEM Set and Get Key functions | |
* @brief HSEM Set and Get Key functions. | |
* @{ | |
*/ | |
/* HSEM Set Clear Key *********************************************************/ | |
void HAL_HSEM_SetClearKey(uint32_t Key); | |
/* HSEM Get Clear Key *********************************************************/ | |
uint32_t HAL_HSEM_GetClearKey(void); | |
/** | |
* @} | |
*/ | |
/** @addtogroup HSEM_Exported_Functions_Group3 | |
* @brief HSEM Notification functions | |
* @{ | |
*/ | |
/* HSEM Activate HSEM Notification (When a semaphore is released) ) *****************/ | |
void HAL_HSEM_ActivateNotification(uint32_t SemMask); | |
/* HSEM Deactivate HSEM Notification (When a semaphore is released) ****************/ | |
void HAL_HSEM_DeactivateNotification(uint32_t SemMask); | |
/* HSEM Free Callback (When a semaphore is released) *******************************/ | |
void HAL_HSEM_FreeCallback(uint32_t SemMask); | |
/* HSEM IRQ Handler **********************************************************/ | |
void HAL_HSEM_IRQHandler(void); | |
/** | |
* @} | |
*/ | |
/** | |
* @} | |
*/ | |
/* Private macros ------------------------------------------------------------*/ | |
/** @defgroup HSEM_Private_Macros HSEM Private Macros | |
* @{ | |
*/ | |
#define IS_HSEM_SEMID(__SEMID__) ((__SEMID__) <= HSEM_SEMID_MAX ) | |
#define IS_HSEM_PROCESSID(__PROCESSID__) ((__PROCESSID__) <= HSEM_PROCESSID_MAX ) | |
#define IS_HSEM_KEY(__KEY__) ((__KEY__) <= HSEM_CLEAR_KEY_MAX ) | |
#if defined(DUAL_CORE) | |
#define IS_HSEM_COREID(__COREID__) (((__COREID__) == HSEM_CPU1_COREID) || \ | |
((__COREID__) == HSEM_CPU2_COREID)) | |
#else | |
#define IS_HSEM_COREID(__COREID__) ((__COREID__) == HSEM_CPU1_COREID) | |
#endif | |
/** | |
* @} | |
*/ | |
/** | |
* @} | |
*/ | |
/** | |
* @} | |
*/ | |
#ifdef __cplusplus | |
} | |
#endif | |
#endif /* STM32H7xx_HAL_HSEM_H */ | |
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |