PeripheralDriver_Flagchip_F.../Src/module_driver_eftu_tbu.c

120 lines
3.5 KiB
C

#include "module_driver_eftu_tbu.h"
#if defined(EFTU_INSTANCE_COUNT) && (EFTU_INSTANCE_COUNT > 0)
static EFTU_TBU_Type *const s_pEftuTbuBasePtrs[EFTU_TBU_INSTANCE_COUNT] =
{
(EFTU_TBU_Type *)(EFTU0_BASE + EFTU_TBU_BASE)
};
/**
* @brief Set Timestamp Counter 0 configuration
* @param eInstance TBU Instance Index
* @param pConfig Timestamp 0 InitStruct
*/
void EFTU_TBU_SetTS0(EFTU_TBU_InstanceType eInstance, EFTU_TBU_Ts0ChannelConfigStruct *pConfig)
{
EFTU_TBU_Type *pTbu = s_pEftuTbuBasePtrs[eInstance];
EFTU_TBU_HWA_SetTs0Src(pTbu, pConfig->eClkSrc);
EFTU_TBU_HWA_SetChannel0BaseReg(pTbu, pConfig->eResolution);
EFTU_TBU_HWA_SetChannelTS0(pTbu, pConfig->u32InitialValue);
if (pConfig->bEnable == TRUE)
{
EFTU_TBU_HWA_EnableChannel(pTbu, (EFTU_TBU_ChnCntType)0U);
}
}
/**
* @brief Set Timestamp Counter 1/2 configuration
* @param eInstance TBU Instance Index
* @param pConfig Timestamp 1/2 InitStruct
*/
void EFTU_TBU_SetTS12(EFTU_TBU_InstanceType eInstance, EFTU_TBU_Ts12ChannelConfigStruct *pConfig)
{
EFTU_TBU_Type *pTbu = s_pEftuTbuBasePtrs[eInstance];
if (pConfig->eChannel == EFTU_TBU_CNT1)
{
EFTU_TBU_HWA_SetTs1Src(pTbu, pConfig->eClkSrc);
EFTU_TBU_HWA_SetChannelTS1(pTbu, pConfig->u32InitialValue);
}
else /*(pConfig->eChannel == EFTU_TBU_CNT2)*/
{
EFTU_TBU_HWA_SetTs2Src(pTbu, pConfig->eClkSrc);
EFTU_TBU_HWA_SetChannelTS2(pTbu, pConfig->u32InitialValue);
}
if (pConfig->bEnable == TRUE)
{
EFTU_TBU_HWA_EnableChannel(pTbu, pConfig->eChannel);
}
}
/**
* @brief Set Timestamp Counter 3 configuration
* @param eInstance TBU Instance Index
* @param pConfig Orthogonal decoding InitStruct
*/
void EFTU_TBU_SetQD(EFTU_TBU_InstanceType eInstance, EFTU_TBU_QDConfigStruct *pConfig)
{
EFTU_TBU_Type *pTbu = s_pEftuTbuBasePtrs[eInstance];
EFTU_TBU_HWA_SetChannel3Mode(pTbu, pConfig->TbuCnt3QDMode);
EFTU_TBU_HWA_SetChannel3Src(pTbu, pConfig->eTbuch3CounterSrc);
EFTU_TBU_HWA_SetChannel3MARK(pTbu, pConfig->u32Modulo);
}
/**
* @brief Get the QD Counter
* @param eInstance TBU Instance Index
* @return The QD counter
*/
uint32_t EFTU_TBU_GetQDCounter(EFTU_TBU_InstanceType eInstance)
{
EFTU_TBU_Type *pTbu = s_pEftuTbuBasePtrs[eInstance];
return EFTU_TBU_HWA_GetChannelTS3(pTbu);
}
/**
* @brief Get the QD Counter Capture Value.
* @param eInstance TBU Instance Index
* @return The QD Counter Capture Value.
*/
uint32_t EFTU_TBU_GetQDCapture(EFTU_TBU_InstanceType eInstance)
{
EFTU_TBU_Type *pTbu = s_pEftuTbuBasePtrs[eInstance];
return EFTU_TBU_HWA_GetChannel3Capture(pTbu);
}
#if EFTU_EAC_SUPPORT == STD_ON
void EFTU_TBU_EAC_Init(EFTU_TBU_InstanceType eInstance, EFTU_TBU_EAC_ConfigType *pConfig)
{
EFTU_TBU_Type *pTbu = s_pEftuTbuBasePtrs[eInstance];
uint32_t u32EacCtrl = 0U;
u32EacCtrl |= EFTU_TBU_EAC_CTRL_ANGLE_MODE_MASK;
if(pConfig->bUpdateErrCnt == TRUE)
{
u32EacCtrl |= EFTU_TBU_EAC_CTRL_CNT_NO_UP_MASK;
}
if(pConfig->bHaltInDebug == TRUE)
{
u32EacCtrl |= EFTU_TBU_EAC_CTRL_HALT_ENABLE_MASK;
}
u32EacCtrl |= EFTU_TBU_EAC_CTRL_EDGE_SEL(pConfig->activeEdge.eEacEdgeSelect);
u32EacCtrl |= EFTU_TBU_EAC_CTRL_PRESCALER(pConfig->activeEdge.eFpsck);
u32EacCtrl |= EFTU_TBU_EAC_CTRL_TCRCF(pConfig->activeEdge.eTcrDiv);
/*Clear counter*/
EFTU_TBU_HWA_EacSwClearCnt(pTbu);
EFTU_TBU_HWA_SetCtrl(pTbu,u32EacCtrl);
}
#endif
#endif /* defined(EFTU_INSTANCE_COUNT) && (EFTU_INSTANCE_COUNT > 0) */