HwA_Flagchip_FC7240/Inc/HwA_ism.h

646 lines
18 KiB
C

/**
* @file HwA_ism.h
* @author Flagchip084
* @brief FC7xxx ISM hardware access layer
* @version 0.2.0
* @date 2023-02-13
*
* @copyright Copyright (c) 2023 Flagchip Semiconductors Co., Ltd.
*
* @details
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2022-11-18 Flagchip084 N/A First version for FC7xxx
* 0.2.0 2023-02-13 Flagchip084 N/A FC7xxx release version
******************************************************************************** */
#ifndef _HWA_ISM_H_
#define _HWA_ISM_H_
#include "device_header.h"
/**
* @addtogroup HwA_ism
* @{
*
*/
/********* macros ************/
/********* Local typedef ************/
typedef struct
{
__IO uint32_t FPC_STATUS;
__IO uint32_t FPC_CTRL;
__IO uint32_t FPC_CONFIG;
__IO uint32_t FPC_TIMER;
} FPC_Type, *FPC_MemMapPtr;
typedef struct
{
__IO uint32_t LAM_STATUS;
__IO uint32_t LAM_CTRL;
__IO uint32_t LAM_CONFIG;
__IO uint32_t LAM_CONTER;
} LAM_Type, *LAM_MemMapPtr;
typedef enum
{
ISM_FPC_DETECT_NO_FILTER = 0U, /*No filter mode. Copy input to SOUT directly, which is LAM input.*/
ISM_FPC_DETECT_IMMI_FILTER = 1U, /*Immediate filter mode.*/
ISM_FPC_DETECT_DELAY_MODE = 2U, /*Delay mode.*/
ISM_FPC_DETECT_PRESCALER_MODE = 3U /*Prescaler mode.*/
} ISM_FPC_EdgeDetectModeType;
typedef enum
{
ISM_FPC_DELAY_FIXED0 = 0U, /*Fixed delay mode.*/
ISM_FPC_DELAY_FIXED1 = 1U, /*Fixed delay mode.*/
ISM_FPC_DELAY_SMART_DELAY0 = 2U, /*Smart delay mode. The counter is decremented when a glitch happens.*/
ISM_FPC_DELAY_SMART_DELAY1 = 3U /*Smart delay mode. The counter is reset when a glitch happens.*/
} ISM_FPC_EdgeDelayModeType;
typedef enum
{
ISM_LAM_EVT_WIN_NON_INVERT = 0U, /*Event window non-inverted.*/
ISM_LAM_EVT_WIN_INVERT = 1U /*Event window inverted.*/
} ISM_LAM_InvertEventWindowType;
typedef enum
{
ISM_LAM_NTR_CLEAR_NTR_GATE = 0U, /*Neither edge used to clear the event window counter. Neither edge used to gate event generation.*/
ISM_LAM_POS_CLEAR_NTR_GATE = 1U, /*Positive edge used to clear the event window counter. Neither edge used to gate event generation.*/
ISM_LAM_NEG_CLEAR_NTR_GATE = 2U, /*Negative edge used to clear the event window counter. Neither edge used to gate event generation.*/
ISM_LAM_ETR_CLEAR_NTR_GATE = 3U, /*Either edge used to clear the event window counter. Neither edge used to gate event generation.*/
ISM_LAM_NTR_CLEAR_POS_GATE = 4U, /*Neither edge used to clear the event window counter. Positive edge used to gate event generation.*/
ISM_LAM_POS_CLEAR_POS_GATE = 5U, /*Positive edge used to clear the event window counter. Positive edge used to gate event generation.*/
ISM_LAM_NEG_CLEAR_POS_GATE = 6U, /*Negative edge used to clear the event window counter. Positive edge used to gate event generation.*/
ISM_LAM_ETR_CLEAR_POS_GATE = 7U, /*Either edge used to clear the event window counter. Positive edge used to gate event generation.*/
ISM_LAM_NTR_CLEAR_NEG_GATE = 8U, /*Neither edge used to clear the event window counter. Negative edge used to gate event generation.*/
ISM_LAM_POS_CLEAR_NEG_GATE = 9U, /*Positive edge used to clear the event window counter. Negative edge used to gate event generation.*/
ISM_LAM_NEG_CLEAR_NEG_GATE = 10U, /*Negative edge used to clear the event window counter. Negative edge used to gate event generation.*/
ISM_LAM_ETR_CLEAR_NEG_GATE = 11U, /*Either edge used to clear the event window counter. Negative edge used to gate event generation.*/
ISM_LAM_NTR_CLEAR_ETR_GATE = 12U, /*Neither edge used to clear the event window counter. Either edge used to gate event generation.*/
ISM_LAM_POS_CLEAR_ETR_GATE = 13U, /*Positive edge used to clear the event window counter. Either edge used to gate event generation.*/
ISM_LAM_NEG_CLEAR_ETR_GATE = 14U, /*Negative edge used to clear the event window counter. Either edge used to gate event generation.*/
ISM_LAM_ETR_CLEAR_ETR_GATE = 15U /*Either edge used to clear the event window counter. Either edge used to gate event generation.*/
} ISM_LAM_EventWindowEdgeType;
typedef enum
{
ISM_LAM_EVT_WIN_SEL_REF = 0U, /*Event window generation is determined from the reference signal.*/
ISM_LAM_EVT_WIN_SEL_MON = 1U /*Event window generation is determined from the monitor signal.*/
} ISM_LAM_EventWindowSelectType;
typedef enum
{
ISM_LAM_RUN_FREE = 0U, /*Event window generation is free-running.*/
ISM_LAM_RUN_GATED = 1U /*Event window generation is gated with the monitor or reference signal.*/
} ISM_LAM_RunModeSelectType;
typedef enum
{
ISM_LAM_SRC_FPC_MON = 0U, /* Monitor signal is sourced directly from FPC monitor channel.*/
ISM_LAM_SRC_EXORD_FPC_REF = 1U /* Monitor signal is EXOR'd with FPC reference channel.*/
} ISM_LAM_MonitorSourceType;
typedef enum
{
ISM_LAM_FPC_MON_NON_INVERT = 0U, /* Do not invert the monitor signal from FPC.*/
ISM_LAM_FPC_MON_INVERT = 1U /* Invert the monitor signal from FPC.*/
} ISM_LAM_InvertMonitorType;
typedef enum
{
ISM_LAM_FPC_REF_NON_INVERT = 0U, /* Do not invert the reference signal from FPC.*/
ISM_LAM_FPC_REF_INVERT = 1U /* Invert the reference signal from FPC.*/
} ISM_LAM_InvertReferenceType;
/********* Local inline function ************/
/********* ISM Register interface ************/
/**
* @brief Get ISM ECM count
*
* @param pIsm ISM Instance
* @return ECM count
*/
LOCAL_INLINE uint8_t ISM_HWA_PARAM_ECMC(ISM_Type *const pIsm)
{
return (uint8_t)((pIsm->PARAM & ISM_PARAM_ECMC_MASK) >> ISM_PARAM_ECMC_SHIFT);
}
/**
* @brief Get ISM FPC count
*
* @param pIsm ISM Instance
* @return FPC count
*/
LOCAL_INLINE uint8_t ISM_HWA_PARAM_FPC(ISM_Type *const pIsm)
{
return (uint8_t)((pIsm->PARAM & ISM_PARAM_FPC_MASK) >> ISM_PARAM_FPC_SHIFT);
}
/**
* @brief Get ISM LAM count
*
* @param pIsm ISM Instance
* @return LAM count
*/
LOCAL_INLINE uint8_t ISM_HWA_PARAM_LAM(ISM_Type *const pIsm)
{
return (uint8_t)((pIsm->PARAM & ISM_PARAM_LAM_MASK) >> ISM_PARAM_LAM_SHIFT);
}
/**
* @brief Enable ISM
*
* @param pIsm ISM Instance
* @param bEnable EN value
*/
LOCAL_INLINE void ISM_HWA_Enable(ISM_Type *const pIsm, bool bEnable)
{
pIsm->CTRL = (pIsm->CTRL & ~ISM_CTRL_EN_MASK) | ISM_CTRL_EN(bEnable);
}
/**
* @brief Enable ISM Interrupt
*
* @param pIsm ISM Instance
* @param bEnable IEN value
*/
LOCAL_INLINE void ISM_HWA_InterruptEnable(ISM_Type *const pIsm, bool bEnable)
{
pIsm->CTRL = (pIsm->CTRL & ~ISM_CTRL_IEN_MASK) | ISM_CTRL_IEN(bEnable);
}
/**
* @brief Get ECS of ISM_E_STATUS register
*
* @param pIsm ISM Instance
* @return ECS value
*/
LOCAL_INLINE uint8_t ISM_HWA_GetEcs(ISM_Type *const pIsm)
{
return (uint8_t)((pIsm->E_STATUS & ISM_E_STATUS_ECS_MASK) >> ISM_E_STATUS_ECS_SHIFT);
}
/**
* @brief Clear ECS of ISM_E_STATUS register
*
* @param pIsm ISM Instance
* @param u32Channels ECM channels
*/
LOCAL_INLINE void ISM_HWA_ClearEcs(ISM_Type *const pIsm, uint32_t u32Channels)
{
pIsm->E_STATUS = (u32Channels << ISM_E_STATUS_ECS_SHIFT) & ISM_E_STATUS_ECS_MASK;
}
/**
* @brief Get ES of ISM_E_STATUS register
*
* @param pIsm ISM Instance
* @return ES value
*/
LOCAL_INLINE uint16_t ISM_HWA_GetEs(ISM_Type *const pIsm)
{
return (uint16_t)((pIsm->E_STATUS & ISM_E_STATUS_ES_MASK) >> ISM_E_STATUS_ES_SHIFT);
}
/**
* @brief Clear ES of ISM_E_STATUS register
*
* @param pIsm ISM Instance
* @param u32Channels ECM channels
*/
LOCAL_INLINE void ISM_HWA_ClearEs(ISM_Type *const pIsm, uint32_t u32Channels)
{
pIsm->E_STATUS = (u32Channels << ISM_E_STATUS_ES_SHIFT) & ISM_E_STATUS_ES_MASK;
}
/**
* @brief Enable ISM ECM channels system event
*
* @param pIsm ISM Instance
* @param u32Channels ECM Channels
* @param bEnable enable value
*/
LOCAL_INLINE void ISM_HWA_EnableEcmSystemEvent(ISM_Type *const pIsm, uint32_t u32Channels, bool bEnable)
{
if (bEnable)
{
pIsm->E_CTRL = pIsm->E_CTRL | (u32Channels << ISM_E_CTRL_ECE_SHIFT);
}
else
{
pIsm->E_CTRL = pIsm->E_CTRL & ~(u32Channels << ISM_E_CTRL_ECE_SHIFT);
}
}
/**
* @brief Get Enabled ISM ECM channels system event
*
* @param pIsm ISM Instance
* @return Enabled ECM event
*/
LOCAL_INLINE uint8_t ISM_HWA_GetEnabledEcmSystemEvent(ISM_Type *const pIsm)
{
return (uint8_t)((pIsm->E_CTRL & ISM_E_CTRL_ECE_MASK) >> ISM_E_CTRL_ECE_SHIFT);
}
/**
* @brief Enable ISM LAM channels system event
*
* @param pIsm ISM Instance
* @param u32Channels LAM Channels
* @param bEnable enable value
*/
LOCAL_INLINE void ISM_HWA_EnableLamSystemEvent(ISM_Type *const pIsm, uint32_t u32Channels, bool bEnable)
{
if (bEnable)
{
pIsm->E_CTRL = pIsm->E_CTRL | (u32Channels << ISM_E_CTRL_EE_SHIFT);
}
else
{
pIsm->E_CTRL = pIsm->E_CTRL & ~(u32Channels << ISM_E_CTRL_EE_SHIFT);
}
}
/**
* @brief Get Enabled ISM LAM channels system event
*
* @param pIsm ISM Instance
* @return Enabled LAM event
*/
LOCAL_INLINE uint16_t ISM_HWA_GetEnabledLamSystemEvent(ISM_Type *const pIsm)
{
return (uint16_t)((pIsm->E_CTRL & ISM_E_CTRL_EE_MASK) >> ISM_E_CTRL_EE_SHIFT);
}
/**
* @brief Set the EC_CTRL register
*
* @param pIsm ISM Instance
* @param u32Value register Value
*/
LOCAL_INLINE void ISM_HWA_SetEcCtrl(ISM_Type *const pIsm, uint32_t u32Value)
{
pIsm->EC_CTRL = u32Value;
}
/**
* @brief Set THRL and LAM channel of ECM0
*
* @param pIsm ISM Instance
* @param u32Value THRL value
* @param u32LamChannel Lam channel
*/
LOCAL_INLINE void ISM_HWA_SetEcm0EcCtrl(ISM_Type *const pIsm, uint32_t u32Value, uint32_t u32LamChannel)
{
uint32_t u32TempValue = pIsm->EC_CTRL;
u32TempValue = (u32TempValue & ~ISM_EC_CTRL_SEL_0_MASK) | ISM_EC_CTRL_SEL_0(u32LamChannel);
u32TempValue = (u32TempValue & ~ISM_EC_CTRL_THRL_0_MASK) | ISM_EC_CTRL_THRL_0(u32Value);
pIsm->EC_CTRL = u32TempValue;
}
/**
* @brief Set THRL and LAM channel of ECM1
*
* @param pIsm ISM Instance
* @param u32Value THRL value
* @param u32LamChannel Lam channel
*/
LOCAL_INLINE void ISM_HWA_SetEcm1EcCtrl(ISM_Type *const pIsm, uint32_t u32Value, uint32_t u32LamChannel)
{
uint32_t u32TempValue = pIsm->EC_CTRL;
u32TempValue = (u32TempValue & ~ISM_EC_CTRL_SEL_1_MASK) | ISM_EC_CTRL_SEL_1(u32LamChannel);
u32TempValue = (u32TempValue & ~ISM_EC_CTRL_THRL_1_MASK) | ISM_EC_CTRL_THRL_1(u32Value);
pIsm->EC_CTRL = u32TempValue;
}
/**
* @brief Set THRL and LAM channel of ECM2
*
* @param pIsm ISM Instance
* @param u32Value THRL value
* @param u32LamChannel Lam channel
*/
LOCAL_INLINE void ISM_HWA_SetEcm2EcCtrl(ISM_Type *const pIsm, uint32_t u32Value, uint32_t u32LamChannel)
{
uint32_t u32TempValue = pIsm->EC_CTRL;
u32TempValue = (u32TempValue & ~ISM_EC_CTRL_SEL_2_MASK) | ISM_EC_CTRL_SEL_2(u32LamChannel);
u32TempValue = (u32TempValue & ~ISM_EC_CTRL_THRL_2_MASK) | ISM_EC_CTRL_THRL_2(u32Value);
pIsm->EC_CTRL = u32TempValue;
}
/**
* @brief Set THRL and LAM channel of ECM3
*
* @param pIsm ISM Instance
* @param u32Value THRL value
* @param u32LamChannel Lam channel
*/
LOCAL_INLINE void ISM_HWA_SetEcm3EcCtrl(ISM_Type *const pIsm, uint32_t u32Value, uint32_t u32LamChannel)
{
uint32_t u32TempValue = pIsm->EC_CTRL;
u32TempValue = (u32TempValue & ~ISM_EC_CTRL_SEL_3_MASK) | ISM_EC_CTRL_SEL_3(u32LamChannel);
u32TempValue = (u32TempValue & ~ISM_EC_CTRL_THRL_3_MASK) | ISM_EC_CTRL_THRL_3(u32Value);
pIsm->EC_CTRL = u32TempValue;
}
/**
* @brief Get the RGD value of FPC_STATUS
*
* @param pFpc FPC Instance
* @return RGD value
*/
LOCAL_INLINE bool ISM_HWA_GetFpcRgd(FPC_Type *const pFpc)
{
return (pFpc->FPC_STATUS & ISM_FPC_STATUS_RGD_MASK) == ISM_FPC_STATUS_RGD_MASK ? true : false;
}
/**
* @brief Clear the RGD value of FPC_STATUS
*
* @param pFpc FPC Instance
*/
LOCAL_INLINE void ISM_HWA_ClearFpcRgd(FPC_Type *const pFpc)
{
pFpc->FPC_STATUS = ISM_FPC_STATUS_RGD_MASK;
}
/**
* @brief Get the FGD value of FPC_STATUS
*
* @param pFpc FPC Instance
* @return FGD value
*/
LOCAL_INLINE bool ISM_HWA_GetFpcFgd(FPC_Type *const pFpc)
{
return (pFpc->FPC_STATUS & ISM_FPC_STATUS_FGD_MASK) == ISM_FPC_STATUS_FGD_MASK ? true : false;
}
/**
* @brief Clear the FGD value of FPC_STATUS
*
* @param pFpc FPC Instance
*/
LOCAL_INLINE void ISM_HWA_ClearFpcFgd(FPC_Type *const pFpc)
{
pFpc->FPC_STATUS = ISM_FPC_STATUS_FGD_MASK;
}
/**
* @brief Set the EN of FPC_CTRL
*
* @param pFpc FPC Instance
* @param bEnable EN value
*/
LOCAL_INLINE void ISM_HWA_SetFpcCtrlEn(FPC_Type *const pFpc, bool bEnable)
{
pFpc->FPC_CTRL = (pFpc->FPC_CTRL & ~ISM_FPC_CTRL_EN_MASK) | ISM_FPC_CTRL_EN(bEnable);
}
/**
* @brief Set the IEN of FPC_CTRL
*
* @param pFpc FPC Instance
* @param bEnable IEN value
*/
LOCAL_INLINE void ISM_HWA_SetFpcCtrlIen(FPC_Type *const pFpc, bool bEnable)
{
pFpc->FPC_CTRL = (pFpc->FPC_CTRL & ~ISM_FPC_CTRL_IEN_MASK) | ISM_FPC_CTRL_IEN(bEnable);
}
/**
* @brief Get the IEN of FPC_CTRL
*
* @param pFpc FPC Instance
* @return Interrupt enable bit
*/
LOCAL_INLINE bool ISM_HWA_GetFpcCtrlIen(FPC_Type *const pFpc)
{
return (pFpc->FPC_CTRL & ISM_FPC_CTRL_IEN_MASK) == ISM_FPC_CTRL_IEN_MASK ? true : false;
}
/**
* @brief Set the FEG of FPC_CONFIG
*
* @param pFpc FPC Instance
* @param eMode FEG mode
*/
LOCAL_INLINE void ISM_HWA_SetFpcFallingDetectMode(FPC_Type *const pFpc, ISM_FPC_EdgeDetectModeType eMode)
{
pFpc->FPC_CONFIG = (pFpc->FPC_CONFIG & ~ISM_FPC_CONFIG_FEG_MASK) | ISM_FPC_CONFIG_FEG(eMode);
}
/**
* @brief Set the FED of FPC_CONFIG
*
* @param pFpc FPC Instance
* @param eMode FED mode
*/
LOCAL_INLINE void ISM_HWA_SetFpcFallingDelayMode(FPC_Type *const pFpc, ISM_FPC_EdgeDelayModeType eMode)
{
pFpc->FPC_CONFIG = (pFpc->FPC_CONFIG & ~ISM_FPC_CONFIG_FED_MASK) | ISM_FPC_CONFIG_FED(eMode);
}
/**
* @brief Set the REG of FPC_CONFIG
*
* @param pFpc FPC Instance
* @param eMode REG mode
*/
LOCAL_INLINE void ISM_HWA_SetFpcRisingDetectMode(FPC_Type *const pFpc, ISM_FPC_EdgeDetectModeType eMode)
{
pFpc->FPC_CONFIG = (pFpc->FPC_CONFIG & ~ISM_FPC_CONFIG_REG_MASK) | ISM_FPC_CONFIG_REG(eMode);
}
/**
* @brief Set the RED of FPC_CONFIG
*
* @param pFpc FPC Instance
* @param eMode RED mode
*/
LOCAL_INLINE void ISM_HWA_SetFpcRisingDelayMode(FPC_Type *const pFpc, ISM_FPC_EdgeDelayModeType eMode)
{
pFpc->FPC_CONFIG = (pFpc->FPC_CONFIG & ~ISM_FPC_CONFIG_RED_MASK) | ISM_FPC_CONFIG_RED(eMode);
}
/**
* @brief Set the CMP of FPC_CONFIG
*
* @param pFpc FPC Instance
* @param u32Value FPC threshold value that is compared with the 16-bit timer.
*/
LOCAL_INLINE void ISM_HWA_SetFpcConfigCmp(FPC_Type *const pFpc, uint32_t u32Value)
{
pFpc->FPC_CONFIG = (pFpc->FPC_CONFIG & ~ISM_FPC_CONFIG_CMP_MASK) | ISM_FPC_CONFIG_CMP(u32Value);
}
/**
* @brief Set the value of FPC_CONFIG
*
* @param pFpc FPC Instance
* @param u32Value Register value
*/
LOCAL_INLINE void ISM_HWA_SetFpcConfig(FPC_Type *const pFpc, uint32_t u32Value)
{
pFpc->FPC_CONFIG = u32Value;
}
/**
* @brief Get the TIM of FPC_TIMER
*
* @param pFpc FPC Instance
* @return TIM value
*/
LOCAL_INLINE uint16_t ISM_HWA_GetFpcTimer(FPC_Type *const pFpc)
{
return (uint16_t)((pFpc->FPC_TIMER & ISM_FPC_TIMER_TIM_MASK) >> ISM_FPC_TIMER_TIM_SHIFT);
}
/**
* @brief Clear the TIM of FPC_TIMER
*
* @param pFpc FPC Instance
*/
LOCAL_INLINE void ISM_HWA_ClearFpcTimer(FPC_Type *const pFpc)
{
pFpc->FPC_TIMER = ISM_FPC_TIMER_TIM_MASK;
}
/**
* @brief Get the COUNT of LAM_STATUS
*
* @param pLam LAM Instance
* @return COUNT value
*/
LOCAL_INLINE uint32_t ISM_HWA_GetLamStatusCounter(LAM_Type *const pLam)
{
return (pLam->LAM_STATUS & ISM_LAM_STATUS_COUNT_MASK) >> ISM_LAM_STATUS_COUNT_SHIFT;
}
/**
* @brief Clear the COUNT of LAM_STATUS
*
* @param pLam LAM Instance
*/
LOCAL_INLINE void ISM_HWA_ClearLamStatusCounter(LAM_Type *const pLam)
{
pLam->LAM_STATUS = ISM_LAM_STATUS_COUNT_MASK;
}
/**
* @brief Get the OVFL of LAM_STATUS
*
* @param pLam LAM Instance
* @return OVFL value
*/
LOCAL_INLINE bool ISM_HWA_GetLamStatusOvfl(LAM_Type *const pLam)
{
return (pLam->LAM_STATUS & ISM_LAM_STATUS_OVFL_MASK) == ISM_LAM_STATUS_OVFL_MASK ? true : false;
}
/**
* @brief Clear the OVFL of LAM_STATUS
*
* @param pLam LAM Instance
*/
LOCAL_INLINE void ISM_HWA_ClearLamStatusOvfl(LAM_Type *const pLam)
{
pLam->LAM_STATUS = ISM_LAM_STATUS_OVFL_MASK;
}
/**
* @brief Set the IEN of LAM_CTRL
*
* @param pLam LAM Instance
* @param bEnable IEN value, LAM Channel Overflow Interrupt Enable
*/
LOCAL_INLINE void ISM_HWA_SetLamCtrIen(LAM_Type *const pLam, bool bEnable)
{
pLam->LAM_CTRL = (pLam->LAM_CTRL & ~ISM_LAM_CTRL_IEN_MASK) | ISM_LAM_CTRL_IEN(bEnable);
}
/**
* @brief Get the IEN of LAM_CTRL
*
* @param pLam LAM Instance
* @return LAM Channel Overflow Interrupt Enable bit
*/
LOCAL_INLINE bool ISM_HWA_GetLamCtrIen(LAM_Type *const pLam)
{
return (pLam->LAM_CTRL & ISM_LAM_CTRL_IEN_MASK) == ISM_LAM_CTRL_IEN_MASK ? true : false;
}
/**
* @brief Set the EN of LAM_CTRL
*
* @param pLam LAM Instance
* @param bEnable EN value, LAM Channel Enable
*/
LOCAL_INLINE void ISM_HWA_SetLamCtrEn(LAM_Type *const pLam, bool bEnable)
{
pLam->LAM_CTRL = (pLam->LAM_CTRL & ~ISM_LAM_CTRL_EN_MASK) | ISM_LAM_CTRL_EN(bEnable);
}
/**
* @brief Set the value of LAM_CONFIG
*
* @param pLam LAM Instance
* @param u32Value Reigster value
*/
LOCAL_INLINE void ISM_HWA_SetLamConfig(LAM_Type *const pLam, uint32_t u32Value)
{
pLam->LAM_CONFIG = u32Value;
}
/**
* @brief Set the value of LAM_COUNTER
*
* @param pLam LAM Instance
* @param u32Value Reigster value
*/
LOCAL_INLINE void ISM_HWA_SetLamCounter(LAM_Type *const pLam, uint32_t u32Value)
{
pLam->LAM_CONTER = u32Value;
}
/**
* @brief Get the FPC instance.
* @param pIsm ISM Instance
* @param u8FpcIndex FPC index
* @return FPC Instance
*/
LOCAL_INLINE FPC_Type *ISM_HWA_GetFpc(ISM_Type *const pIsm, uint8_t u8FpcIndex)
{
return (FPC_Type *)((uint32_t) & (pIsm->FPC_STATUS0) + (uint32_t)u8FpcIndex * 0x10U);
}
/**
* @brief Get the LAM instance.
* @param pIsm ISM Instance
* @param u8FpcIndex LAM index
* @return LAM Instance
*/
LOCAL_INLINE LAM_Type *ISM_HWA_GetLam(ISM_Type *const pIsm, uint8_t u8LamIndex)
{
return (LAM_Type *)((uint32_t) & (pIsm->LAM_STATUS0) + (uint32_t)u8LamIndex * 0x10U);
}
/** @}*/ /* HwA_ism */
#endif /* #ifndef _HWA_ISM_H_ */