223 lines
5.6 KiB
C
223 lines
5.6 KiB
C
/**
|
|
* @file HwA_tstmp.h
|
|
* @author Flagchip
|
|
* @brief FC7xxx TSTMP hardware access layer
|
|
* @version 0.1.0
|
|
* @date 2024-01-14
|
|
*
|
|
* @copyright Copyright (c) 2023 Flagchip Semiconductors Co., Ltd.
|
|
*
|
|
* @details
|
|
*/
|
|
|
|
/********************************************************************************
|
|
* Revision History:
|
|
*
|
|
* Version Date Initials CR# Descriptions
|
|
* --------- ---------- ------------ ---------- ---------------
|
|
* 0.1.0 2024-01-14 Flagchip0122 N/A FC7xxx internal release version
|
|
********************************************************************************/
|
|
|
|
|
|
#ifndef _HWA_TSTMP_H_
|
|
#define _HWA_TSTMP_H_
|
|
|
|
#include "device_header.h"
|
|
/********* Local typedef ************/
|
|
/** @brief Tstmp modulate number */
|
|
typedef enum
|
|
{
|
|
TSTMP_MOD0 = 0U,
|
|
TSTMP_MOD1,
|
|
TSTMP_MOD2,
|
|
TSTMP_MOD3,
|
|
} TSTMP_ModulateType;
|
|
|
|
/** @brief Tstmp running mode */
|
|
typedef enum
|
|
{
|
|
TSTMP_MODE_ALWAYS_RUNNING = 0U,
|
|
TSTMP_MODE_PERIOD_RUNNING = 1U
|
|
} TSTMP_ModeCounterRunningMode;
|
|
|
|
typedef enum
|
|
{
|
|
TSTMP_SIRC1M_CLK = 0U,
|
|
TSTMP_AON_CLK = 1U
|
|
} TSTMP_ClockSourceType;
|
|
/********* Local inline function ************/
|
|
/**
|
|
* @brief Read TSTMP value
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @return TSTMP value
|
|
*/
|
|
LOCAL_INLINE uint64_t TSTMP_HWA_ReadTstmpValue(TSTMP_Type *pTstmp)
|
|
{
|
|
uint32_t u32TstmpL, u32TstmpH;
|
|
uint64_t u64TempValue;
|
|
u32TstmpL = pTstmp->VALL;
|
|
u32TstmpH = pTstmp->VALH;
|
|
|
|
u64TempValue = u32TstmpH;
|
|
u64TempValue = (u64TempValue << 32U) + u32TstmpL;
|
|
return u64TempValue;
|
|
}
|
|
|
|
/**
|
|
* @brief Read TSTMP interrupt enable bits
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @return TSTMP interrupt enable bits
|
|
*/
|
|
LOCAL_INLINE uint32_t TSTMP_HWA_ReadTstmpInterruptEnable(TSTMP_Type *pTstmp)
|
|
{
|
|
return (uint32_t)pTstmp->MOD_INTEN;
|
|
}
|
|
|
|
/**
|
|
* @brief Enable TSTMP MOD(n) match interrupt
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @param eMod MOD number
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_EnableModMatchInterrupt(TSTMP_Type *pTstmp, TSTMP_ModulateType eMod)
|
|
{
|
|
pTstmp->MOD_INTEN |= ((uint32_t)1U << (uint32_t)eMod);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable TSTMP MOD(n) match interrupt
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @param eMod MOD number
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_DisableModMatchInterrupt(TSTMP_Type *pTstmp, TSTMP_ModulateType eMod)
|
|
{
|
|
pTstmp->MOD_INTEN &= ~((uint32_t)1U << (uint32_t)eMod);
|
|
}
|
|
|
|
/**
|
|
* @brief Set the counting modes of TSTMP MOD(n)
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @param eMod MOD number
|
|
* @param eCounterMode Counting mode set
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_SetModCounterMode(TSTMP_Type *pTstmp, TSTMP_ModulateType eMod, TSTMP_ModeCounterRunningMode eCounterMode)
|
|
{
|
|
pTstmp->MOD_INTEN = (pTstmp->MOD_INTEN & ~((uint32_t)0x100U << (uint32_t)eMod)) |
|
|
(((uint32_t)eCounterMode << TSTMP_MOD_INTEN_MOD0_MODE_SHIFT) << (uint32_t)eMod);
|
|
}
|
|
|
|
/**
|
|
* @brief Enable TSTMP MOD(n) counter
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @param eMod MOD number
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_EnableModCounter(TSTMP_Type *pTstmp, TSTMP_ModulateType eMod)
|
|
{
|
|
pTstmp->MOD_INTEN |= (TSTMP_MOD_INTEN_MOD0_ENABLE_MASK << (uint32_t)eMod);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable TSTMP MOD(n) counter
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @param eMod MOD number
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_DisableModCounter(TSTMP_Type *pTstmp, TSTMP_ModulateType eMod)
|
|
{
|
|
pTstmp->MOD_INTEN &= ~(TSTMP_MOD_INTEN_MOD0_ENABLE_MASK << (uint32_t)eMod);
|
|
}
|
|
|
|
/**
|
|
* @brief Select TSTMP MOD(n) clock source
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @param eMod MOD number
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_SelectClkSource(TSTMP_Type *pTstmp, TSTMP_ModulateType eMod, TSTMP_ClockSourceType eClk)
|
|
{
|
|
pTstmp->MOD_INTEN |= (((uint32_t)eClk) << (TSTMP_MOD_INTEN_MOD0_CLK_SHIFT + (uint32_t)eMod));
|
|
}
|
|
|
|
/**
|
|
* @brief Read TSTMP all MOD match flag
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @return TSTMP all MOD match flag
|
|
*/
|
|
LOCAL_INLINE uint32_t TSTMP_HWA_ReadModMatchFlag(TSTMP_Type *pTstmp)
|
|
{
|
|
return ((uint32_t)(pTstmp->MOD_STATUS) & (uint32_t)(TSTMP_MOD_STATUS_MOD0_MATCH_MASK | TSTMP_MOD_STATUS_MOD1_MATCH_MASK
|
|
| TSTMP_MOD_STATUS_MOD2_MATCH_MASK | TSTMP_MOD_STATUS_MOD3_MATCH_MASK));
|
|
}
|
|
|
|
/**
|
|
* @brief Clear TSTMP all MOD(0) match flag
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_ClearMod0MatchFlag(TSTMP_Type *pTstmp)
|
|
{
|
|
pTstmp->MOD_STATUS = (uint32_t)(TSTMP_MOD_STATUS_MOD0_MATCH_MASK);
|
|
}
|
|
|
|
/**
|
|
* @brief Clear TSTMP all MOD(1,2,3) match flag
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_ClearAllMod123MatchFlag(TSTMP_Type *pTstmp)
|
|
{
|
|
pTstmp->MOD_STATUS = (uint32_t)(TSTMP_MOD_STATUS_MOD1_MATCH_MASK | TSTMP_MOD_STATUS_MOD2_MATCH_MASK |
|
|
TSTMP_MOD_STATUS_MOD3_MATCH_MASK);
|
|
}
|
|
|
|
/**
|
|
* @brief Clear TSTMP single MOD(1,2,3) match flag
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @param eMod MOD number
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_ClearSingleMod123MatchFlag(TSTMP_Type *pTstmp, TSTMP_ModulateType eMod)
|
|
{
|
|
pTstmp->MOD_STATUS = ((uint32_t)1U << (uint32_t)eMod);
|
|
}
|
|
|
|
/**
|
|
* @brief Set MOD match value
|
|
*
|
|
* @param pTstmp TSTMP instance
|
|
* @param eMod MOD number
|
|
* @param u32ModValue MOD value
|
|
*/
|
|
LOCAL_INLINE void TSTMP_HWA_SetModMatchValue(TSTMP_Type *pTstmp, TSTMP_ModulateType eMod, uint32_t u32ModValue)
|
|
{
|
|
switch(eMod)
|
|
{
|
|
case TSTMP_MOD0:
|
|
pTstmp->MOD0_SETVAL = u32ModValue;
|
|
break;
|
|
|
|
case TSTMP_MOD1:
|
|
pTstmp->MOD1_SETVAL = u32ModValue;
|
|
break;
|
|
|
|
case TSTMP_MOD2:
|
|
pTstmp->MOD2_SETVAL = u32ModValue;
|
|
break;
|
|
|
|
case TSTMP_MOD3:
|
|
pTstmp->MOD3_SETVAL = u32ModValue;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endif /* #ifndef _HWA_TSTMP_H_ */
|