/** * @file HwA_cmu.h * @author Flagchip085 * @brief FC7xxx CMU hardware access layer * @version 0.1.0 * @date 2024-01-12 * * @copyright Copyright (c) 2024 Flagchip Semiconductors Co., Ltd. * * @details */ /* ******************************************************************************** * Revision History: * * Version Date Initials CR# Descriptions * --------- ---------- ------------ ---------- --------------- * 0.1.0 2024-01-12 Flagchip085 N/A First version for FC7240 ******************************************************************************** */ #ifndef _HWA_CMU_H_ #define _HWA_CMU_H_ #include "device_header.h" /********* Local inline function ************/ /** * @brief Set Reference Window value. * @param pCmu CMU Instance. * @param u32Value Ref Window value. */ LOCAL_INLINE void CMU_HWA_SetRefWindow(CMU_Type *const pCmu, uint32_t u32Value) { pCmu->REF_WINDOW = CMU_REF_WINDOW_REF_WINDOW(u32Value); } /** * @brief Get Reference Window value. * @param pCmu CMU Instance. * @return Reference Window value. */ LOCAL_INLINE uint32_t CMU_HWA_GetRefWindow(const CMU_Type *const pCmu) { return (pCmu->REF_WINDOW & CMU_REF_WINDOW_REF_WINDOW_MASK) >> CMU_REF_WINDOW_REF_WINDOW_SHIFT; } /** * @brief Set Minimun Counter value * @param pCmu CMU Instance. * @param u32Value Min Count value. */ LOCAL_INLINE void CMU_HWA_SetMinCnts(CMU_Type *const pCmu, uint32_t u32Value) { pCmu->MIN = CMU_MIN_MIN(u32Value); } /** * @brief Get Minimun Counter value. * @param pCmu CMU Instance. * @return Min count value. */ LOCAL_INLINE uint32_t CMU_HWA_GetMinCnts(const CMU_Type *const pCmu) { return (pCmu->MIN & CMU_MIN_MIN_MASK) >> CMU_MIN_MIN_SHIFT; } /** * @brief Set Maximun Counter value. * @param pCmu CMU Instance. * @param u32Value Max count value. */ LOCAL_INLINE void CMU_HWA_SetMaxCnts(CMU_Type *const pCmu, uint32_t u32Value) { pCmu->MAX = CMU_MAX_MAX(u32Value); } /** * @brief Get Maximun Counter value. * @param pCmu CMU Instance. * @return Max count value. */ LOCAL_INLINE uint32_t CMU_HWA_GetMaxCnts(const CMU_Type *const pCmu) { return (pCmu->MAX & CMU_MAX_MAX_MASK) >> CMU_MAX_MAX_SHIFT; } /** * @brief Get Counter value. * @param pCmu CMU Instance. * @return Counter value. */ LOCAL_INLINE uint32_t CMU_HWA_GetCount(const CMU_Type *const pCmu) { return (pCmu->MON_CNT & CMU_MON_CNT_MON_CNT_MASK) >> CMU_MON_CNT_MON_CNT_SHIFT; } /** * @brief Set period window Counter. * @param pCmu CMU Instance. * @param u32Value Period value. */ LOCAL_INLINE void CMU_HWA_SetPeriodWindow(CMU_Type *const pCmu, uint32_t u32Value) { pCmu->PERIOD = (pCmu->PERIOD & ~CMU_PERIOD_WINDOW_MASK) | CMU_PERIOD_WINDOW(u32Value); } /** * @brief Set period enble bit. * * @param pCmu CMU Instance. * @param bEnable Set enable bit. */ LOCAL_INLINE void CMU_HWA_SetPeriodEnable(CMU_Type *const pCmu, bool bEnable) { pCmu->PERIOD = (pCmu->PERIOD & ~((uint32_t)CMU_PERIOD_EN_MASK)) | CMU_PERIOD_EN(bEnable); } /** * @brief Set control register value. * * @param pCmu CMU Instance. * @param u32Value Control value. */ LOCAL_INLINE void CMU_HWA_SETCTRL(CMU_Type *const pCmu, uint32_t u32Value) { pCmu->CTRL = u32Value; } /** * @brief return control register value. * * @param pCmu CMU Instance. * @return CMU Control register value */ LOCAL_INLINE uint32_t CMU_HWA_GetCTRL(const CMU_Type *const pCmu) { return pCmu->CTRL; } /** * @brief return status register value. * @param pCmu CMU Instance. * @return Status value. */ LOCAL_INLINE uint32_t CMU_HWA_GetST(const CMU_Type *const pCmu) { return pCmu->ST; } /** * @brief Clear clock monitor status * @param pCmu CMU Instance. */ LOCAL_INLINE void CMU_HWA_ClearST(CMU_Type *const pCmu) { pCmu->ST = (uint32_t)(CMU_ST_MIS_MASK | CMU_ST_LOC_MASK); } /** * @brief Set the Divider for Reference Clock * @param pCmu CMU Instance. * @param eDivider The Divider of Reference Clock */ LOCAL_INLINE void CMU_HWA_SetRefClockDiv(CMU_Type *const pCmu, uint8_t eDivider) { pCmu->CTRL = (pCmu->CTRL & ~((uint32_t)CMU_CTRL_REF_DIV_MASK)) | CMU_CTRL_REF_DIV(eDivider); } /** * @brief Get the Divider for Reference Clock * @param pCmu CMU Instance. * @return The Divider of Reference Clock */ LOCAL_INLINE uint8_t CMU_HWA_GetRefClockDiv(const CMU_Type *const pCmu) { uint32_t u32Temp = (pCmu->CTRL & (uint32_t)CMU_CTRL_REF_DIV_MASK) >> CMU_CTRL_REF_DIV_SHIFT; return (uint8_t)u32Temp; } /** * @brief Enable interrupt when LOC or MIS asserted * @param pCmu CMU Instance. * @param bEnable Enable or disable CMU interrupt */ LOCAL_INLINE void CMU_HWA_IrqEnable(CMU_Type *const pCmu, bool bEnable) { pCmu->CTRL = (pCmu->CTRL & (~((uint32_t)CMU_CTRL_IRQ_EN_MASK))) | CMU_CTRL_IRQ_EN(bEnable); } /** * @brief Get CMU interrupt enable flag * @param pCmu CMU Instance. * @return 1 : CMU interrupt enabled * 0 : CMU interrupt disabled */ LOCAL_INLINE uint8_t CMU_HWA_GetIrqEnableFlag(const CMU_Type *const pCmu) { uint32_t u32Temp = (pCmu->CTRL & (uint32_t)CMU_CTRL_IRQ_EN_MASK) >> CMU_CTRL_IRQ_EN_SHIFT; return (uint8_t)u32Temp; } /** * @brief Enable Standby mode * @param pCmu CMU Instance. * @param bEnable Enable mode */ LOCAL_INLINE void CMU_HWA_StanbyModeEnable(CMU_Type *const pCmu, bool bEnable) { pCmu->CTRL = (pCmu->CTRL & ~((uint32_t)CMU_CTRL_LP_EN_MASK)) | CMU_CTRL_LP_EN(bEnable); } /** * @brief Enable Stop mode * @param pCmu CMU Instance. * @param bEnable Enable mode */ LOCAL_INLINE void CMU_HWA_StopModeEnable(CMU_Type *const pCmu, bool bEnable) { pCmu->CTRL = (pCmu->CTRL & ~((uint32_t)CMU_CTRL_STOP_EN_MASK)) | CMU_CTRL_STOP_EN(bEnable); } /** * @brief Enable hardware restart CMU after exiting from the low-power mode * @param pCmu CMU Instance. * @param bEnable Enable mode */ LOCAL_INLINE void CMU_HWA_LPRestartEnable(CMU_Type *const pCmu, bool bEnable) { pCmu->CTRL = (pCmu->CTRL & ~((uint32_t)CMU_CTRL_RESTART_EN_MASK)) | CMU_CTRL_RESTART_EN(bEnable); } /** * @brief Software Reset the CMU * @param pCmu CMU Instance. */ LOCAL_INLINE void CMU_HWA_SoftwareReset(CMU_Type *const pCmu) { pCmu->CTRL |= CMU_CTRL_SW_RST_MASK; } /** * @brief Enable the CMU * @param pCmu CMU Instance. */ LOCAL_INLINE void CMU_HWA_Enable(CMU_Type *const pCmu) { pCmu->CTRL |= CMU_CTRL_ENABLE_MASK; } /** * @brief Disable the CMU * @param pCmu CMU Instance. */ LOCAL_INLINE void CMU_HWA_Disable(CMU_Type *const pCmu) { pCmu->CTRL &= ~(CMU_CTRL_ENABLE_MASK | CMU_CTRL_IRQ_EN_MASK); } /** * @brief Get the CMU enabled status * @param pCmu CMU Instance. * @return 1 : CMU is enabled * 0 : CMU is disabled */ LOCAL_INLINE uint8_t CMU_HWA_GetEnableStatus(const CMU_Type *const pCmu) { uint32_t u32Temp = (pCmu->CTRL & (uint32_t)CMU_CTRL_ENABLE_MASK) >> CMU_CTRL_ENABLE_SHIFT; return (uint8_t)u32Temp; } #endif /* #ifndef _HWA_CMU_H_ */