HwA_Flagchip_FC7240/Inc/HwA_lu.h

249 lines
6.4 KiB
C

/**
* @file HwA_lu.h
* @author Flagchip0103
* @brief FC7xxx LU hardware access layer
* @version 0.1.0
* @date 2023-12-19
*
* @copyright Copyright (c) 2023 Flagchip Semiconductors Co., Ltd.
*
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2023-12-19 Flagchip0103 N/A First version for FC7240
******************************************************************************** */
#ifndef _HWA_LU_H_
#define _HWA_LU_H_
#include "device_header.h"
/********* Local typedef ************/
/** @brief LU LG instance */
typedef enum
{
LU_LG_0 = 0U,
LU_LG_1,
LU_LG_2,
LU_LG_3
} LU_LgType;
/** @brief LU AOI mode */
typedef enum
{
LU_NO_BYPASS = 0U,
LU_AOI0_BYPASS,
LU_AOI1_BYPASS,
LU_AOI0_AOI1_BYPASS
} LU_BypassModeType;
/** @brief LU FF mode */
typedef enum
{
LU_BYPASS_MODE0 = 0U,
LU_RS_MODE,
LU_TFF_MODE,
LU_DFF_MODE,
LU_JKFF_MODE,
LU_LATCH_MODE
} LU_ConfigModeType;
/** @brief LU Input(n) type */
typedef enum
{
LU_INPUT_N_A = 0U,
LU_INPUT_N_B,
LU_INPUT_N_C,
LU_INPUT_N_D
} LU_InputNType;
/********* Local inline function ************/
/**
* @brief Configure LU LG(n) AOI0 configuration
*
* @param pLu LU instance
* @param eLg LG instance
* @param u32RegValue AOI0 register value
*/
LOCAL_INLINE void LU_HWA_ConfigAOI0(LU_Type* pLu, LU_LgType eLg, uint32_t u32RegValue)
{
pLu->LG[eLg].AOI_0 = u32RegValue;
}
/**
* @brief Configure LU LG(n) AOI1 configuration
*
* @param pLu LU instance
* @param eLg LG instance
* @param u32RegValue AOI1 register value
*/
LOCAL_INLINE void LU_HWA_ConfigAOI1(LU_Type* pLu, LU_LgType eLg, uint32_t u32RegValue)
{
pLu->LG[eLg].AOI_1 = u32RegValue;
}
/**
* @brief Configure LU LG(n) contrl configuration
*
* @param pLu LU instance
* @param eLg LG instance
* @param u32RegValue CTRL register value
*/
LOCAL_INLINE void LU_HWA_ConfigCtrl(LU_Type* pLu, LU_LgType eLg, uint32_t u32RegValue)
{
pLu->LG[eLg].CTRL = u32RegValue;
}
/**
* @brief Configure LU LG(n) filter configuration
*
* @param pLu LU instance
* @param eLg LG instance
* @param u32RegValue FILT register value
*/
LOCAL_INLINE void LU_HWA_ConfigFilter(LU_Type* pLu, LU_LgType eLg, uint32_t u32RegValue)
{
pLu->LG[eLg].FILT = u32RegValue;
}
/**
* @brief Set LG bypass control
*
* @param pLu LU instance
* @param eLg LG instance
* @param eMode LG bypass control mode
*/
LOCAL_INLINE void LU_HWA_SetLgBypassControl(LU_Type* pLu, LU_LgType eLg, LU_BypassModeType eMode)
{
uint32_t u32TempRegValue = pLu->LG[eLg].CTRL;
pLu->LG[eLg].CTRL = ((u32TempRegValue & ~(uint32_t)LU_CTRL_BYPASS_MASK) | LU_CTRL_BYPASS(eMode));
}
/**
* @brief Set LG Flip-Flop mode
*
* @param pLu LU instance
* @param eLg LG instance
* @param eMode Flip-Flop mode
*/
LOCAL_INLINE void LU_HWA_SetLgFlipFlopMode(LU_Type* pLu, LU_LgType eLg, LU_ConfigModeType eMode)
{
uint32_t u32TempRegValue = pLu->LG[eLg].CTRL;
pLu->LG[eLg].CTRL = ((u32TempRegValue & ~(uint32_t)LU_CTRL_MOD_MASK) | LU_CTRL_MOD(eMode));
}
/**
* @brief Set LG inputs synchronous control
*
* @param pLu LU instance
* @param eLg LG instance
* @param u32Value LG input bit,0-3 bit indicate INPUT(n)A/INPUT(n)B/INPUT(n)C/INPUT(n)D
*/
LOCAL_INLINE void LU_HWA_SetLgInputsSyncCtrl(LU_Type* pLu, LU_LgType eLg, uint32_t u32Value)
{
uint32_t u32TempRegValue = pLu->LG[eLg].CTRL;
pLu->LG[eLg].CTRL = ((u32TempRegValue & ~(uint32_t)LU_CTRL_SYNC_MASK) | LU_CTRL_SYNC(u32Value));
}
/**
* @brief Set LG output feedback override control
*
* @param pLu LU instance
* @param eLg LG instance
* @param eInput Feedback to LG input
*/
LOCAL_INLINE void LU_HWA_SetLgFeedbackOverrideCtrl(LU_Type* pLu, LU_LgType eLg, LU_InputNType eInput)
{
uint32_t u32TempRegValue = pLu->LG[eLg].CTRL;
pLu->LG[eLg].CTRL = ((u32TempRegValue & ~(uint32_t)LU_CTRL_FB_OVRD_MASK) | LU_CTRL_FB_OVRD(eInput));
}
/**
* @brief Configure the output of flip-flop as "1"
*
* @param pLu LU instance
* @param eLg LG instance
*/
LOCAL_INLINE void LU_HWA_ConfigFlipFlopTo1(LU_Type* pLu, LU_LgType eLg)
{
pLu->LG[eLg].CTRL |= (uint32_t)LU_CTRL_FF_INIT_MASK;
}
/**
* @brief Generate enable pulse
*
* @param pLu LU instance
* @param eLg LG instance
*/
LOCAL_INLINE void LU_HWA_EnableControlFlipFlopInitOutput(LU_Type* pLu, LU_LgType eLg)
{
pLu->LG[eLg].CTRL |= (uint32_t)LU_CTRL_INIT_EN_MASK;
}
/**
* @brief Input filter sample count for AOI0
*
* @param pLu LU instance
* @param eLg LG instance
* @param u32Value Sample count value
*/
LOCAL_INLINE void LU_HWA_SetAOI0InputFilterSampleCount(LU_Type* pLu, LU_LgType eLg, uint32_t u32Value)
{
uint32_t u32TempRegValue = pLu->LG[eLg].FILT;
pLu->LG[eLg].FILT = ((u32TempRegValue & ~(uint32_t)LU_FILT_CNT0_MASK) | LU_FILT_CNT0(u32Value));
}
/**
* @brief Input filter sample period for AOI0
*
* @param pLu LU instance
* @param eLg LG instance
* @param u32Value Sample period value
*/
LOCAL_INLINE void LU_HWA_SetAOI0InputFilterSamplePeriod(LU_Type* pLu, LU_LgType eLg, uint32_t u32Value)
{
uint32_t u32TempRegValue = pLu->LG[eLg].FILT;
pLu->LG[eLg].FILT = ((u32TempRegValue & ~(uint32_t)LU_FILT_PRE0_MASK) | LU_FILT_PRE0(u32Value));
}
/**
* @brief Input filter sample count for AOI1
*
* @param pLu LU instance
* @param eLg LG instance
* @param u32Value Sample count value
*/
LOCAL_INLINE void LU_HWA_SetAOI1InputFilterSampleCount(LU_Type* pLu, LU_LgType eLg, uint32_t u32Value)
{
uint32_t u32TempRegValue = pLu->LG[eLg].FILT;
pLu->LG[eLg].FILT = ((u32TempRegValue & ~(uint32_t)LU_FILT_CNT1_MASK) | LU_FILT_CNT1(u32Value));
}
/**
* @brief Input filter sample period for AOI1
*
* @param pLu LU instance
* @param eLg LG instance
* @param u32Value Sample period value
*/
LOCAL_INLINE void LU_HWA_SetAOI1InputFilterSamplePeriod(LU_Type* pLu, LU_LgType eLg, uint32_t u32Value)
{
uint32_t u32TempRegValue = pLu->LG[eLg].FILT;
pLu->LG[eLg].FILT = ((u32TempRegValue & ~(uint32_t)LU_FILT_PRE1_MASK) | LU_FILT_PRE1(u32Value));
}
/**
* @brief Configure the output of flip-flop as "0"
*
* @param pLu LU instance
* @param eLg LG instance
*/
LOCAL_INLINE void LU_HWA_ConfigFlipFlopTo0(LU_Type* pLu, LU_LgType eLg)
{
pLu->LG[eLg].CTRL &= ~(uint32_t)LU_CTRL_FF_INIT_MASK;
}
#endif /* #ifndef _HWA_LU_H_ */