/** * @file HwA_fcsmu.h * @author Flagchip0100 * @brief FCSMU 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 Flagchip052 N/A First version for FC7300 * 2.0.0 2024-10-12 Flagchip100 N/A Change version and release ******************************************************************************** */ #ifndef _HWA_FCSMU_H_ #define _HWA_FCSMU_H_ #include "device_header.h" #if (FCSMU_INSTANCE_COUNT > 0U) #if defined(__cplusplus) extern "C" { #endif /** * @defgroup HwA_fcsmu HwA_fcsmu * @ingroup module_driver_fcsmu * @{ */ /******************************************************************************* * Local inline function ******************************************************************************/ /** * @brief Set the fcsmu CTRL register * * @param pFcsmu FCSMU Instance * @param u32Value The register value */ LOCAL_INLINE void FCSMU_HWA_SetCrtl(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->CTRL = u32Value; } /** * @brief Get the fcsmu CTRL register * * @param pFcsmu FCSMU Instance * @return CTRL register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetCtrl(const FCSMU_Type *const pFcsmu) { return pFcsmu->CTRL; } /** * @brief Get the fcsmu CTRL register OPS * * @param pFcsmu FCSMU Instance * @return CTRL register OPS value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetCtrlOps(const FCSMU_Type *const pFcsmu) { return ((pFcsmu->CTRL & FCSMU_CTRL_OPS_MASK) >> FCSMU_CTRL_OPS_SHIFT); } /** * @brief Set the fcsmu OPRK register * * @param pFcsmu FCSMU Instance * @param u32Value The register value */ LOCAL_INLINE void FCSMU_HWA_SetOprk(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->OPRK = u32Value; } /** * @brief Set the fcsmu SOCTRL register * * @param pFcsmu FCSMU Instance * @param u32Value The register value */ LOCAL_INLINE void FCSMU_HWA_SetSoctrl(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->SOCTRL = u32Value; } /** * @brief Get the fcsmu SOCTRL register * * @param pFcsmu FCSMU Instance * @return SOCTRL register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetSoctrl(const FCSMU_Type *const pFcsmu) { return pFcsmu->SOCTRL; } /** * @brief Set the fcsmu FCCR0 register * * @param pFcsmu FCSMU Instance * @param u32Value FCCR0 register value */ LOCAL_INLINE void FCSMU_HWA_SetFccr0(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->FCCR0 = u32Value; } /** * @brief Get the fcsmu FCCR0 register * * @param pFcsmu FCSMU Instance * @return FCCR0 register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetFccr0(const FCSMU_Type *const pFcsmu) { return pFcsmu->FCCR0; } /** * @brief Set the fcsmu FRST0 register * * @param pFcsmu FCSMU Instance * @param u32Value FRST0 register value */ LOCAL_INLINE void FCSMU_HWA_SetFrst0(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->FRST0 = u32Value; } /** * @brief Get the fcsmu FRST0 register * * @param pFcsmu FCSMU Instance * @return FRST0 register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetFrst0(const FCSMU_Type *const pFcsmu) { return pFcsmu->FRST0; } /** * @brief Set the fcsmu FST0 register * * @param pFcsmu FCSMU Instance * @param u32Value FST0 register value */ LOCAL_INLINE void FCSMU_HWA_SetFst0(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->FST0 = u32Value; } /** * @brief Get the fcsmu FST0 register * * @param pFcsmu FCSMU Instance * @return FST0 register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetFst0(const FCSMU_Type *const pFcsmu) { return pFcsmu->FST0; } /** * @brief Set the fcsmu FST_UNLK register * * @param pFcsmu FCSMU Instance * @param u32Value FST_UNLK register value */ LOCAL_INLINE void FCSMU_HWA_SetFstUnlk(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->FST_UNLK = u32Value; } /** * @brief Set the fcsmu FE0 register * * @param pFcsmu FCSMU Instance * @param u32Value FE0 register value */ LOCAL_INLINE void FCSMU_HWA_SetFe0(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->FE0 = u32Value; } /** * @brief Get the fcsmu FE0 register * * @param pFcsmu FCSMU Instance * @return FE0 register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetFe0(const FCSMU_Type *const pFcsmu) { return pFcsmu->FE0; } /** * @brief Set the fcsmu WARNING_EN0 register * * @param pFcsmu FCSMU Instance * @param u32Value WARNING_EN0 register value */ LOCAL_INLINE void FCSMU_HWA_SetWarningEn0(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->WARNING_EN0 = u32Value; } /** * @brief Get the fcsmu WARNING_EN0 register * * @param pFcsmu FCSMU Instance * @return WARNING_EN0 register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetWarningEn0(const FCSMU_Type *const pFcsmu) { return pFcsmu->WARNING_EN0; } /** * @brief Set the fcsmu WARNING_TO register * * @param pFcsmu FCSMU Instance * @param u32Value WARNING_TO register value */ LOCAL_INLINE void FCSMU_HWA_SetWarningTo(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->WARNING_TO = u32Value; } /** * @brief Get the fcsmu WARNING_TO register * * @param pFcsmu FCSMU Instance * @return WARNING_TO register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetWarningTo(const FCSMU_Type *const pFcsmu) { return pFcsmu->WARNING_TO; } /** * @brief Set the fcsmu CFG_TO register * * @param pFcsmu FCSMU Instance * @param u32Value CFG_TO register value */ LOCAL_INLINE void FCSMU_HWA_SetCfgTo(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->CFG_TO = u32Value; } /** * @brief Get the fcsmu CFG_TO register * * @param pFcsmu FCSMU Instance * @return CFG_TO register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetCfgTo(const FCSMU_Type *const pFcsmu) { return pFcsmu->CFG_TO; } /** * @brief Set the fcsmu SOUT_DIAG register * * @param pFcsmu FCSMU Instance * @param u32Value SOUT_DIAG register value */ LOCAL_INLINE void FCSMU_HWA_SetSoutDiag(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->SOUT_DIAG = u32Value; } /** * @brief Get the fcsmu SOUT_DIAG register * * @param pFcsmu FCSMU Instance * @return SOUT_DIAG register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetSoutDiag(const FCSMU_Type *const pFcsmu) { return pFcsmu->SOUT_DIAG; } /** * @brief Get the fcsmu STATUS register * * @param pFcsmu FCSMU Instance * @return STATUS register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetStatus(const FCSMU_Type *const pFcsmu) { return pFcsmu->STATUS; } /** * @brief Get the fcsmu STATUS register FIF value * * @param pFcsmu FCSMU Instance * @return STATUS register FIF value */ LOCAL_INLINE bool FCSMU_HWA_GetFaultState(const FCSMU_Type *const pFcsmu) { return ((pFcsmu->STATUS & FCSMU_STATUS_FIF_MASK) == FCSMU_STATUS_FIF_MASK) ? true : false; } /** * @brief Get the fcsmu STATUS register STAT value * * @param pFcsmu FCSMU Instance * @return STATUS register STAT value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetFcsmuState(const FCSMU_Type *const pFcsmu) { return ((pFcsmu->STATUS & FCSMU_STATUS_STAT_MASK) >> FCSMU_STATUS_STAT_SHIFT); } /** * @brief Get the fcsmu NTW register * * @param pFcsmu FCSMU Instance * @return NTW register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetNtw(const FCSMU_Type *const pFcsmu) { return pFcsmu->NTW; } /** * @brief Get the fcsmu WTF register * * @param pFcsmu FCSMU Instance * @return WTF register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetWtf(const FCSMU_Type *const pFcsmu) { return pFcsmu->WTF; } /** * @brief Get the fcsmu NTF register * * @param pFcsmu FCSMU Instance * @return NTF register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetNtf(const FCSMU_Type *const pFcsmu) { return pFcsmu->NTF; } /** * @brief Get the fcsmu FTW register * * @param pFcsmu FCSMU Instance * @return FTW register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetFtw(const FCSMU_Type *const pFcsmu) { return pFcsmu->FTW; } /** * @brief Set the fcsmu INJECT register * * @param pFcsmu FCSMU Instance * @param u32Value INJECT register value */ LOCAL_INLINE void FCSMU_HWA_SetInject(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->INJECT = u32Value; } /** * @brief Get the fcsmu IRQ_STAT register * * @param pFcsmu FCSMU Instance * @return IRQ_STAT register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetIrqStat(const FCSMU_Type *const pFcsmu) { return pFcsmu->IRQ_STAT; } /** * @brief Clear the fcsmu IRQ_STAT register * * @param pFcsmu FCSMU Instance */ LOCAL_INLINE void FCSMU_HWA_ClearCfgToIrq(FCSMU_Type *const pFcsmu) { pFcsmu->IRQ_STAT = FCSMU_IRQ_STAT_CFG_TO_IRQ_MASK; } /** * @brief Set the fcsmu IRQ_EN register * * @param pFcsmu FCSMU Instance * @param bEnable IRQ_EN register value */ LOCAL_INLINE void FCSMU_HWA_EnableCfgToIrq(FCSMU_Type *const pFcsmu, bool bEnable) { pFcsmu->IRQ_EN = FCSMU_IRQ_EN_CFG_TO_IEN(bEnable); } /** * @brief Set the fcsmu TEMP_UNLK register * * @param pFcsmu FCSMU Instance * @param u32Value TEMP_UNLK register value */ LOCAL_INLINE void FCSMU_HWA_SetTempUnlk(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->TEMP_UNLK = u32Value; } /** * @brief Set the fcsmu PERMNT_LOCK register * * @param pFcsmu FCSMU Instance * @param u32Value PERMNT_LOCK register value */ LOCAL_INLINE void FCSMU_HWA_SetPermntLock(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->PERMNT_LOCK = u32Value; } /** * @brief Set the fcsmu STMR register * * @param pFcsmu FCSMU Instance * @param u32Value STMR register value */ LOCAL_INLINE void FCSMU_HWA_SetStmr(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->STMR = u32Value; } /** * @brief Set the fcsmu WARNING_IEN0 register * * @param pFcsmu FCSMU Instance * @param u32Value WARNING_IEN0 register value */ LOCAL_INLINE void FCSMU_HWA_SetWarningIen0(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->WARNING_IEN0 = u32Value; } /** * @brief Set the fcsmu FAULT_IEN0 register * * @param pFcsmu FCSMU Instance * @param u32Value FAULT_IEN0 register value */ LOCAL_INLINE void FCSMU_HWA_SetFaultIen0(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->FAULT_IEN0 = u32Value; } /** * @brief Set the fcsmu SOUT_EN0 register * * @param pFcsmu FCSMU Instance * @param u32Value SOUT_EN0 register value */ LOCAL_INLINE void FCSMU_HWA_SetSoutEn0(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->SOUT_EN0 = u32Value; } /** * @brief Get the fcsmu WARNING_TMR register * * @param pFcsmu FCSMU Instance * @return WARNING_TMR register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetWarningTmr(const FCSMU_Type *const pFcsmu) { return pFcsmu->WARNING_TMR; } /** * @brief Get the fcsmu SM_TMR register * * @param pFcsmu FCSMU Instance * @return SM_TMR register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetSafeModeTmr(const FCSMU_Type *const pFcsmu) { return pFcsmu->SM_TMR; } /** * @brief Get the fcsmu CFG_TMR register * * @param pFcsmu FCSMU Instance * @return CFG_TMR register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetCfgTmr(const FCSMU_Type *const pFcsmu) { return pFcsmu->CFG_TMR; } /** * @brief Get the fcsmu SOUT_TMR register * * @param pFcsmu FCSMU Instance * @return SOUT_TMR register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetSoutTmr(const FCSMU_Type *const pFcsmu) { return pFcsmu->SOUT_TMR; } /** * @brief Set the fcsmu CRC_CTRL register * * @param pFcsmu FCSMU Instance * @param u32Value CRC_CTRL register value */ LOCAL_INLINE void FCSMU_HWA_SetCrcCtrl(FCSMU_Type *const pFcsmu, uint32_t u32Value) { pFcsmu->CRC_CTRL = u32Value; } /** * @brief Get the fcsmu CRC_CTRL register BUSY value * * @param pFcsmu FCSMU Instance * @return BUSY value */ LOCAL_INLINE bool FCSMU_HWA_GetCrcBusy(const FCSMU_Type *const pFcsmu) { bool bRet = false; #ifdef FCSMU_CRC_CTRL_DONE_SUPPORT bRet = ((pFcsmu->CRC_CTRL & FCSMU_CRC_CTRL_DONE_MASK) == FCSMU_CRC_CTRL_DONE_MASK) ? false : true; #else bRet = ((pFcsmu->CRC_CTRL & FCSMU_CRC_CTRL_BUSY_MASK) == FCSMU_CRC_CTRL_BUSY_MASK) ? true : false; #endif /* FCSMU_CRC_CTRL_DONE_SUPPORT */ return bRet; } /** * @brief Get the fcsmu CRC_CTRL register EF value * * @param pFcsmu FCSMU Instance * @return EF value */ LOCAL_INLINE bool FCSMU_HWA_GetCrcErrorFlag(const FCSMU_Type *const pFcsmu) { return ((pFcsmu->CRC_CTRL & FCSMU_CRC_CTRL_EF_MASK) == FCSMU_CRC_CTRL_EF_MASK) ? true : false; } /** * @brief Clear the fcsmu CRC_CTRL register EF * * @param pFcsmu FCSMU Instance */ LOCAL_INLINE void FCSMU_HWA_ClearCrcErrorFlag(FCSMU_Type *const pFcsmu) { uint32_t u32RegValue = pFcsmu->CRC_CTRL; /* Reserve RW bits */ u32RegValue = u32RegValue & (FCSMU_CRC_CTRL_EOEN_MASK | FCSMU_CRC_CTRL_CHKEN_MASK | FCSMU_CRC_CTRL_TRGEN_MASK); u32RegValue = u32RegValue | FCSMU_CRC_CTRL_EF_MASK; pFcsmu->CRC_CTRL = u32RegValue; } #ifdef FCSMU_CRC_CTRL_DONE_SUPPORT /** * @brief Clear the fcsmu CRC_CTRL register DONE * * @param pFcsmu FCSMU Instance */ LOCAL_INLINE void FCSMU_HWA_ClearCrcDoneFlag(FCSMU_Type *const pFcsmu) { uint32_t u32RegValue = pFcsmu->CRC_CTRL; /* Reserve RW bits */ u32RegValue = u32RegValue & (FCSMU_CRC_CTRL_EOEN_MASK | FCSMU_CRC_CTRL_CHKEN_MASK | FCSMU_CRC_CTRL_TRGEN_MASK); u32RegValue = u32RegValue | FCSMU_CRC_CTRL_DONE_MASK; pFcsmu->CRC_CTRL = u32RegValue; } #endif /** * @brief Set the fcsmu CRC_CTRL register * * @param pFcsmu FCSMU Instance * @param bEnable Enable or Disable CRC_CTRL register EOEN bit value */ LOCAL_INLINE void FCSMU_HWA_EnableErrorOutput(FCSMU_Type *const pFcsmu, bool bEnable) { uint32_t u32RegValue = pFcsmu->CRC_CTRL; /* Reserve RW bits */ u32RegValue = u32RegValue & (FCSMU_CRC_CTRL_CHKEN_MASK | FCSMU_CRC_CTRL_TRGEN_MASK); u32RegValue = (u32RegValue & ~FCSMU_CRC_CTRL_EOEN_MASK) | FCSMU_CRC_CTRL_EOEN(bEnable); pFcsmu->CRC_CTRL = u32RegValue; } /** * @brief Get the fcsmu CRC_CTRL register EOEN value * * @param pFcsmu FCSMU Instance * @return EOEN value */ LOCAL_INLINE bool FCSMU_HWA_GetCrcErrorOutputEnable(const FCSMU_Type *const pFcsmu) { return ((pFcsmu->CRC_CTRL & FCSMU_CRC_CTRL_EOEN_MASK) == FCSMU_CRC_CTRL_EOEN_MASK) ? true : false; } /** * @brief Set the fcsmu CRC_CTRL register * * @param pFcsmu FCSMU Instance * @param bEnable CRC_CTRL register value */ LOCAL_INLINE void FCSMU_HWA_EnableCrcChecker(FCSMU_Type *const pFcsmu, bool bEnable) { pFcsmu->CRC_CTRL = (pFcsmu->CRC_CTRL & ~FCSMU_CRC_CTRL_CHKEN_MASK) | FCSMU_CRC_CTRL_CHKEN(bEnable); } /** * @brief Get the fcsmu CRC_CTRL register CHKEN value * * @param pFcsmu FCSMU Instance * @return CHKEN value */ LOCAL_INLINE bool FCSMU_HWA_GetCrcCheckerEnable(const FCSMU_Type *const pFcsmu) { return ((pFcsmu->CRC_CTRL & FCSMU_CRC_CTRL_CHKEN_MASK) == FCSMU_CRC_CTRL_CHKEN_MASK) ? true : false; } /** * @brief Set the fcsmu CRC_CTRL register * * @param pFcsmu FCSMU Instance * @param bEnable CRC_CTRL register value */ LOCAL_INLINE void FCSMU_HWA_EnableTrigger(FCSMU_Type *const pFcsmu, bool bEnable) { pFcsmu->CRC_CTRL = (pFcsmu->CRC_CTRL & ~FCSMU_CRC_CTRL_TRGEN_MASK) | FCSMU_CRC_CTRL_TRGEN(bEnable); } /** * @brief Get the fcsmu CRC_CTRL register TRGEN value * * @param pFcsmu FCSMU Instance * @return TRGEN value */ LOCAL_INLINE bool FCSMU_HWA_GetTriggerEnable(const FCSMU_Type *const pFcsmu) { return ((pFcsmu->CRC_CTRL & FCSMU_CRC_CTRL_TRGEN_MASK) == FCSMU_CRC_CTRL_TRGEN_MASK) ? true : false; } /** * @brief Set the fcsmu CRC_CTRL register * * @param pFcsmu FCSMU Instance */ LOCAL_INLINE void FCSMU_HWA_GenerateCrc(FCSMU_Type *const pFcsmu) { uint32_t u32RegValue = pFcsmu->CRC_CTRL; /* Reserve RW bits */ u32RegValue = u32RegValue & (FCSMU_CRC_CTRL_EOEN_MASK | FCSMU_CRC_CTRL_CHKEN_MASK | FCSMU_CRC_CTRL_TRGEN_MASK); u32RegValue = u32RegValue | FCSMU_CRC_CTRL_GEN(1U); pFcsmu->CRC_CTRL = u32RegValue; } /** * @brief Get the fcsmu CRC_RES register * * @param pFcsmu FCSMU Instance * @return CRC_RES register value */ LOCAL_INLINE uint32_t FCSMU_HWA_GetCrcResult(const FCSMU_Type *const pFcsmu) { return pFcsmu->CRC_RES; } #if defined(__cplusplus) } #endif /** @}*/ #endif /* (FCSMU_INSTANCE_COUNT > 0U) */ #endif /* _HWA_FCSMU_H_ */