HwA_Flagchip_FC7240/Inc/HwA_cmu.h

272 lines
6.8 KiB
C

/**
* @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_ */