HwA_Flagchip_FC7240_V2/Inc/HwA_freqm.h

188 lines
4.8 KiB
C

/**
* @file HwA_freqm.h
* @author Flagchip0100
* @brief FREQM Module Register API
* @version 2.0.0
* @date 2024-08-20
*
* SDK Version: 2.6.0
*
* @copyright Copyright 2020-2024 Flagchip Semiconductors Co., Ltd.
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2023-12-15 Flagchip087 N/A First version for FC7300
* 2.0.0 2024-10-12 Flagchip100 N/A Change version and release
******************************************************************************** */
#ifndef _HWA_FREQM_H_
#define _HWA_FREQM_H_
#include "device_header.h"
#if (FREQM_INSTANCE_COUNT > 0U)
/**
* @defgroup HwA_freqm HwA_freqm
* @ingroup module_driver_freqm
* @{
*/
#if defined(__cplusplus)
extern "C" {
#endif
/**
* @defgroup HwA_freqm
* @{
*/
/*******************************************************************************
* Local inline function
******************************************************************************/
/**
* @brief Set the measured clock selection.
*
* @param pFreqm the base address of the FREQM.
* @param u8ClkSel the clock selection index.
*/
LOCAL_INLINE void FREQM_HWA_MesClkSel(FREQM_Type *const pFreqm, uint8_t u8ClkSel)
{
pFreqm->CTRL = (pFreqm->CTRL & ~((uint32_t)FREQM_CTRL_MES_CLK_SEL_MASK)) | FREQM_CTRL_MES_CLK_SEL(u8ClkSel);
}
/**
* @brief Set the clock selection.
*
* @param pFreqm the base address of the FREQM.
* @param u8PredivVal the measure clock prediv value.
*/
LOCAL_INLINE void FREQM_HWA_MesClk_PreDiv(FREQM_Type *const pFreqm, uint8_t u8PredivVal)
{
pFreqm->CTRL = (pFreqm->CTRL & ~((uint32_t)FREQM_CTRL_MES_CLK_PREDIV_MASK)) | FREQM_CTRL_MES_CLK_PREDIV(u8PredivVal);
}
/**
* @brief Enable count event interrupt.
*
* @param pFreqm the base address of the FREQM.
*/
LOCAL_INLINE void FREQM_HWA_EnableCntEventInterrupt(FREQM_Type *const pFreqm)
{
pFreqm->CTRL |= FREQM_CTRL_CNT_EVENT_IE_MASK;
}
/**
* @brief Disable count event interrupt.
*
* @param pFreqm the base address of the FREQM.
*/
LOCAL_INLINE void FREQM_HWA_DisableCntEventInterrupt(FREQM_Type *const pFreqm)
{
pFreqm->CTRL &= ~((uint32_t)FREQM_CTRL_CNT_EVENT_IE_MASK);
}
/**
* @brief Set counting length of measure counter.
*
* @param pFreqm the base address of the FREQM.
* @param u32MesLen counting length of measure counter.
*/
LOCAL_INLINE void FREQM_HWA_SetMesLength(FREQM_Type *const pFreqm, uint32_t u32MesLen)
{
pFreqm->MES_LENGTH = u32MesLen;
}
/**
* @brief Set timeout value of reference counter.
*
* @param pFreqm the base address of the FREQM.
* @param u32RefTo timeout value of reference counter.
*/
LOCAL_INLINE void FREQM_HWA_SetRefTimeout(FREQM_Type *const pFreqm, uint32_t u32RefTo)
{
pFreqm->REF_TIMEOUT = u32RefTo;
}
/**
* @brief Set value of reference counter.
*
* @param pFreqm the base address of the FREQM.
* @param u32RefCnt value of reference counter.
*/
LOCAL_INLINE void FREQM_HWA_SetRefCnt(FREQM_Type *const pFreqm, uint32_t u32RefCnt)
{
pFreqm->REF_CNT = u32RefCnt;
}
/**
* @brief Clear counter event interrupt flag.
*
* @param pFreqm the base address of the FREQM.
*/
LOCAL_INLINE void FREQM_HWA_ClearInterruptFlag(FREQM_Type *const pFreqm)
{
pFreqm->CNT_STATUS = FREQM_CNT_STATUS_CNT_EVENT_MASK;
}
/**
* @brief Get counter event interrupt flag
*
* @param pFreqm the base address of the FREQM
* @return false for disable, true for enable.
*/
LOCAL_INLINE bool FREQM_HWA_GetInterruptFlag(const FREQM_Type *const pFreqm)
{
return ((pFreqm->CNT_STATUS & FREQM_CNT_STATUS_CNT_EVENT_MASK) == FREQM_CNT_STATUS_CNT_EVENT_MASK) ? true : false;
}
/**
* @brief Get counter status
*
* @param pFreqm the base address of the FREQM
* @return Counter status.
*/
LOCAL_INLINE uint32_t FREQM_HWA_GetCntStatus(const FREQM_Type *const pFreqm)
{
return (pFreqm->CNT_STATUS & (FREQM_CNT_STATUS_MES_CNT_START_MASK | FREQM_CNT_STATUS_MES_CNT_STOP_MASK | FREQM_CNT_STATUS_REF_CNT_STOP_MASK));
}
/**
* @brief Set value of measure counter.
*
* @param pFreqm the base address of the FREQM.
* @param u32MesCnt value of measure counter.
*/
LOCAL_INLINE void FREQM_HWA_SetMesCnt(FREQM_Type *const pFreqm, uint32_t u32MesCnt)
{
pFreqm->MES_CNT = u32MesCnt;
}
/**
* @brief Get saved reference counter value.
*
* @param pFreqm the base address of the FREQM.
* @return saved reference counter value.
*/
LOCAL_INLINE uint32_t FREQM_HWA_GetRefCntSave(const FREQM_Type *const pFreqm)
{
return pFreqm->REF_CNT_SAVE;
}
/** @}*/ /* HwA_freqm */
#if defined(__cplusplus)
}
#endif
/** @}*/
#endif /* (FREQM_INSTANCE_COUNT > 0U) */
#endif /* _HWA_FREQM_H_ */