PeripheralDriver_Flagchip_F.../Inc/module_driver_eftu_tim.h

217 lines
6.1 KiB
C

/**
* @file module_driver_eftu_tim.h
* @author flagchip
* @brief eFTU tim driver type definition and API
* @version 2.0.0
* @date 2024-08-20
*
* SDK Version: 2.6.0
*
* @copyright Copyright (c) 2020-2024 Flagchip Semiconductors Co., Ltd.
*
* @details
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2023-12-15 Flagchip032 N/A First version for FC7300
* 2.0.0 2024-10-12 Flagchip070 N/A Change version and release
******************************************************************************** */
#ifndef DRIVER_INCLUDE_MODULE_DRIVER_EFTU_TIM_H_
#define DRIVER_INCLUDE_MODULE_DRIVER_EFTU_TIM_H_
#include "HwA_eftu_tim.h"
#include "module_driver_eftu.h"
#if defined(EFTU_INSTANCE_COUNT) && (EFTU_INSTANCE_COUNT > 0)
#define EFTU_TIM_MODULE_ID 2U
/**
* @name TIM API Service IDs
*
* @{
*/
#define EFTU_TIM_DETECT_ID 0U
#define EFTU_TIM_PWM_MEASUREMENT_ID 1U
/**
* @name TIM Dev Error Code
* @brief Error Code of calling TIM apis
*
* @{
*/
#define EFTU_TIM_E_PARAM_CHANNEL 0U
#define EFTU_TIM_E_PARAM_INVALID_EDGE 1U
/** @}*/
typedef enum
{
EFTU_TIM_INPUT_TIM_IN_X = 0U,
EFTU_TIM_INPUT_TIM_IN_X_1 = 1U,
EFTU_TIM_INPUT_TIM_IN_AUX_IN = 2U,
}EFTU_TIM_ChnInputSelectType;
typedef enum
{
EFTU_TIM_FILTERMODE_IMMEDIATEEDGEPROPAGATION = 0u, /**< \brief Immediate edge propagation mode */
EFTU_TIM_FILTERMODE_INDIVIDUALDEGLITCHTIMEUPDOWN = 1u, /**< \brief Individual deglitch time mode (Up Down) */
EFTU_TIM_FILTERMODE_INDIVIDUALDEGLITCHTIMEHOLD = 2u, /**< \brief Individual deglitch time mode (Hold) */
EFTU_TIM_FILTERMODE_RESETCOUNTR = 3u, /**< \brief Individual deglitch time mode (Reset)*/
} EFTU_TIM_FilterMode;
typedef enum
{
EFTU_TIM_CH_0 = 0U,
EFTU_TIM_CH_1 = 1U,
EFTU_TIM_CH_2 = 2U,
EFTU_TIM_CH_3 = 3U,
EFTU_TIM_CH_4 = 4U,
EFTU_TIM_CH_5 = 5U,
EFTU_TIM_CH_6 = 6U,
EFTU_TIM_CH_7 = 7U,
}EFTU_TIM_ChannelIndex;
typedef struct _EFTU_TIM_HandleType
{
EFTU_InstanceType eInstance;
EFTU_TIM_Type *pTim;
struct
{
boolean bGlitchIrqStatus;
boolean bEcntOverflowIrqStatus;
boolean bGprOverflowIrqStatus;
boolean bTimeOutIrqStatus;
boolean bOverflowCntIrqStatus;
boolean bNewDataIrqStatus;
uint32_t u32Gpr0Value;
uint32_t u32Gpr1Value;
uint32_t u32CntsValue;
uint32_t u32CntValue;
uint32_t u32DataCoherentStatus;
void(*pTimChannelIrqCallback)(struct _EFTU_TIM_HandleType *pHandle,uint8_t u8TimChannelIndex);
}tTimChnStatus[EFTU_TIM_CHANNEL_COUNT];
}EFTU_TIM_HandleType;
typedef struct
{
boolean bEnFilter;
EFTU_TIM_FltSrcType eFliterClock; /*Filter clock */
boolean bIrqOnGlitch;
EFTU_TIM_FilterMode eRisingEdgeMode;
EFTU_TIM_FilterMode eFallingEdgeMode;
uint8_t u8RisingEdgeFilterTime; /* in Ticks*/
uint8_t u8FallingEdgeFilterTime; /* in Ticks*/
}EFTU_TimFilterStruct;
typedef struct
{
boolean bIrqOnTimeout;
uint32_t u32Timeout;
EFTU_TIM_ClockSrcType eTimeOutClkSrc;
EFTU_TIM_TimeOutEdgeType eTimeOutSensitiveEgde;
}EFTU_TimeoutConfigStruct;
typedef struct
{
EFTU_TIM_ChannelIndex eChannelIndex;
EFTU_TimFilterStruct tFilterConfig;
EFTU_TimeoutConfigStruct tTimeouConfig;
boolean bIrqOnNewVal;
boolean bIrqOnCntOveflow;
boolean bIrqOnECntOveflow;
boolean bIrqOnGprDataOverflow;
boolean bExtCapEn;
EFTU_TIM_ChnInputSelectType eInputSrc;
EFTU_TIM_ClockSrcType eTimClockSrc;
EFTU_TIM_ActiveEdgeType eActiveEdge;
void(*pTimChannelIrqCallback)(struct _EFTU_TIM_HandleType *pHandle,uint8_t u8TimChannelIndex);
}EFTU_TimSignalDetectConfigStruct;
typedef struct
{
EFTU_TIM_ChannelIndex eChannelIndex;
EFTU_TimFilterStruct tFilterConfig;
EFTU_TimeoutConfigStruct tTimeouConfig;
boolean bIrqOnNewVal;
boolean bIrqOnCntOveflow;
boolean bIrqOnECntOveflow;
boolean bIrqOnGprDataOverflow;
boolean bExtCapEn;
boolean bSwap_Capture;
boolean bImmStart;
EFTU_TIM_ChnInputSelectType eInputSrc;
EFTU_TIM_ClockSrcType eTimClockSrc;
EFTU_TIM_ActiveEdgeType eActiveEdge;
EFTU_TIM_TbuTs0ResType eTimTbs0align;
void(*pTimChannelIrqCallback)(struct _EFTU_TIM_HandleType *pHandle,uint8_t u8TimChannelIndex);
}EFTU_TimSignalMeasurementConfigStruct;
/**
* @brief Config Tim edge detect function
* @param pTimHandle Tim processing handle
* @param pInitStruct Tim Signal Detect InitStruct
*/
void EFTU_Tim_EdgeDetectChannelInit(EFTU_TIM_HandleType *pTimHandle, const EFTU_TimSignalDetectConfigStruct *pInitStruct);
/**
* @brief Config Tim signal measurement function
* @param pTimHandle Tim processing handle
* @param pInitStruct Tim Signal measurement InitStruct
*/
void EFTU_Tim_PwmMeasurementInit(EFTU_TIM_HandleType *pTimHandle, const EFTU_TimSignalMeasurementConfigStruct *pInitStruct);
/**
* @brief Enable Tim channel function
* @param pTimHandle Tim processing handle
* @param eChannelIndex Tim channel Index
*/
void EFTU_Tim_EnableChannel(EFTU_TIM_HandleType *pTimHandle,const EFTU_TIM_ChannelIndex eChannelIndex);
/**
* @brief Disable Tim channel function
* @param pTimHandle Tim processing handle
* @param eChannelIndex Tim channel Index
*/
void EFTU_Tim_DisableChannel(EFTU_TIM_HandleType *pTimHandle,const EFTU_TIM_ChannelIndex eChannelIndex);
/**
* @brief Update Tim channel capture value.
* @param pTimHandle Tim processing handle
* @param eChannelIndex Tim channel Index
*/
void EFTU_TimUpdateNewValue(EFTU_TIM_HandleType *pTimHandle,const EFTU_TIM_ChannelIndex eChannelIndex);
/**
* @brief Tim Interrupt process.
* @param pTimHandle Tim processing handle
* @param u8StartChannelIndex Tim Irq start channel Index
*/
void EFTU_TIM_IrqHandler(EFTU_TIM_HandleType *pTimHandle, uint8_t u8StartChannelIndex);
#endif /* defined(EFTU_INSTANCE_COUNT) && (EFTU_INSTANCE_COUNT > 0) */
#endif /* DRIVER_INCLUDE_MODULE_DRIVER_EFTU_TIM_H_ */