217 lines
6.1 KiB
C
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_ */
|