/** ******************************************************************************* * @file hc32_ll_fcg.c * @brief This file provides firmware functions to manage the Function Clock * Gate (FCG). @verbatim Change Logs: Date Author Notes 2022-03-31 CDT First version @endverbatim ******************************************************************************* * Copyright (C) 2022-2023, Xiaohua Semiconductor Co., Ltd. All rights reserved. * * This software component is licensed by XHSC 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 * ******************************************************************************* */ /******************************************************************************* * Include files ******************************************************************************/ #include "hc32_ll_fcg.h" #include "hc32_ll_utility.h" /** * @addtogroup LL_Driver * @{ */ /** * @defgroup LL_FCG FCG * @brief FCG Driver Library * @{ */ #if (LL_FCG_ENABLE == DDL_ON) /******************************************************************************* * Local type definitions ('typedef') ******************************************************************************/ /******************************************************************************* * Local pre-processor symbols/macros ('#define') ******************************************************************************/ /** * @defgroup FCG_Local_Macros FCG Local Macros * @{ */ #define IS_FCG0_UNLOCKED() ((CM_PWC->FCG0PC & PWC_FCG0PC_PRT0) == PWC_FCG0PC_PRT0) /** * @defgroup FCG_Check_Parameters_Validity FCG Check Parameters Validity * @{ */ /* Parameter validity check for peripheral in fcg0. */ #define IS_FCG0_PERIPH(per) \ ( ((per) != 0x00UL) && \ (((per) | FCG_FCG0_PERIPH_MASK) == FCG_FCG0_PERIPH_MASK)) /* Parameter validity check for peripheral in fcg1. */ #define IS_FCG1_PERIPH(per) \ ( ((per) != 0x00UL) && \ (((per) | FCG_FCG1_PERIPH_MASK) == FCG_FCG1_PERIPH_MASK)) /* Parameter validity check for peripheral in fcg2. */ #define IS_FCG2_PERIPH(per) \ ( ((per) != 0x00UL) && \ (((per) | FCG_FCG2_PERIPH_MASK) == FCG_FCG2_PERIPH_MASK)) /* Parameter validity check for peripheral in fcg3. */ #define IS_FCG3_PERIPH(per) \ ( ((per) != 0x00UL) && \ (((per) | FCG_FCG3_PERIPH_MASK) == FCG_FCG3_PERIPH_MASK)) /** * @} */ /** * @} */ /******************************************************************************* * Global variable definitions (declared in header file with 'extern') ******************************************************************************/ /******************************************************************************* * Local function prototypes ('static') ******************************************************************************/ /******************************************************************************* * Local variable definitions ('static') ******************************************************************************/ /******************************************************************************* * Function implementation - global ('extern') and local ('static') ******************************************************************************/ /** * @defgroup FCG_Global_Functions FCG Global Functions * @{ */ /** * @brief Enable or disable the FCG0 peripheral clock. * @param [in] u32Fcg0Periph The peripheral in FCG0 @ref FCG_FCG0_Peripheral. * @param [in] enNewState An @ref en_functional_state_t enumeration value. * @retval None */ void FCG_Fcg0PeriphClockCmd(uint32_t u32Fcg0Periph, en_functional_state_t enNewState) { DDL_ASSERT(IS_FCG0_PERIPH(u32Fcg0Periph)); DDL_ASSERT(IS_FUNCTIONAL_STATE(enNewState)); DDL_ASSERT(IS_FCG0_UNLOCKED()); if (ENABLE == enNewState) { CLR_REG32_BIT(CM_PWC->FCG0, u32Fcg0Periph); } else { SET_REG32_BIT(CM_PWC->FCG0, u32Fcg0Periph); } } /** * @brief Enable or disable the FCG1 peripheral clock. * @param [in] u32Fcg1Periph The peripheral in FCG1 @ref FCG_FCG1_Peripheral. * @param [in] enNewState An @ref en_functional_state_t enumeration value. * @retval None */ void FCG_Fcg1PeriphClockCmd(uint32_t u32Fcg1Periph, en_functional_state_t enNewState) { DDL_ASSERT(IS_FCG1_PERIPH(u32Fcg1Periph)); DDL_ASSERT(IS_FUNCTIONAL_STATE(enNewState)); if (ENABLE == enNewState) { CLR_REG32_BIT(CM_PWC->FCG1, u32Fcg1Periph); } else { SET_REG32_BIT(CM_PWC->FCG1, u32Fcg1Periph); } } /** * @brief Enable or disable the FCG2 peripheral clock. * @param [in] u32Fcg2Periph The peripheral in FCG2 @ref FCG_FCG2_Peripheral. * @param [in] enNewState An @ref en_functional_state_t enumeration value. * @retval None */ void FCG_Fcg2PeriphClockCmd(uint32_t u32Fcg2Periph, en_functional_state_t enNewState) { DDL_ASSERT(IS_FCG2_PERIPH(u32Fcg2Periph)); DDL_ASSERT(IS_FUNCTIONAL_STATE(enNewState)); if (ENABLE == enNewState) { CLR_REG32_BIT(CM_PWC->FCG2, u32Fcg2Periph); } else { SET_REG32_BIT(CM_PWC->FCG2, u32Fcg2Periph); } } /** * @brief Enable or disable the FCG3 peripheral clock. * @param [in] u32Fcg3Periph The peripheral in FCG3 @ref FCG_FCG3_Peripheral. * @param [in] enNewState An @ref en_functional_state_t enumeration value. * @retval None */ void FCG_Fcg3PeriphClockCmd(uint32_t u32Fcg3Periph, en_functional_state_t enNewState) { DDL_ASSERT(IS_FCG3_PERIPH(u32Fcg3Periph)); DDL_ASSERT(IS_FUNCTIONAL_STATE(enNewState)); if (ENABLE == enNewState) { CLR_REG32_BIT(CM_PWC->FCG3, u32Fcg3Periph); } else { SET_REG32_BIT(CM_PWC->FCG3, u32Fcg3Periph); } } #endif /* LL_FCG_ENABLE */ /** * @} */ /** * @} */ /** * @} */ /****************************************************************************** * EOF (not truncated) *****************************************************************************/