aboutsummaryrefslogtreecommitdiff
path: root/inc/peripheral/rtl876x_enh_tim.h
diff options
context:
space:
mode:
Diffstat (limited to 'inc/peripheral/rtl876x_enh_tim.h')
-rw-r--r--inc/peripheral/rtl876x_enh_tim.h883
1 files changed, 883 insertions, 0 deletions
diff --git a/inc/peripheral/rtl876x_enh_tim.h b/inc/peripheral/rtl876x_enh_tim.h
new file mode 100644
index 0000000..dfa1c7c
--- /dev/null
+++ b/inc/peripheral/rtl876x_enh_tim.h
@@ -0,0 +1,883 @@
+/**
+*********************************************************************************************************
+* Copyright(c) 2020, Realtek Semiconductor Corporation. All rights reserved.
+*********************************************************************************************************
+* \file rtl876x_enh_tim.h
+* \brief The header file of the peripheral Enhance ENHTIMER driver.
+* \details This file provides all Enhance ENHTIMER firmware functions.
+* \author Yuan
+* \date 2020-10-19
+* \version v1.0.0
+* *********************************************************************************************************
+*/
+
+#ifndef _RTL876X_ENH_TIM_H_
+#define _RTL876X_ENH_TIM_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \addtogroup IO Peripheral Drivers
+ * \defgroup ENHTIM ENHTIM
+ * \brief Manage the ENHTIM peripheral functions.
+ * \ingroup IO
+ */
+
+/*============================================================================*
+ * Includes
+ *============================================================================*/
+#include "rtl876x.h"
+
+/*============================================================================*
+ * Constants
+ *============================================================================*/
+
+/* ENHTIM private defines */
+#define ENHTIM_PWM_DEADZONE_CR *((volatile uint32_t *)0x40000368UL)
+#define ENHTIM_LATCH_COUNT_CR *((volatile uint32_t *)0x40006028UL)
+
+/**
+ * \defgroup ENHTIM_Exported_Constants Macro Definitions
+ * \ingroup ENHTIM
+ */
+#define IS_ENHTIM_ALL_PERIPH(PERIPH) (((PERIPH) == ENH_ENHTIM0) || \
+ ((PERIPH) == ENH_ENHTIM1))
+
+/**
+ * \defgroup ENHTIM_Clock_Source ENHTIM Clock Source
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_TIMER_TOGGLE_OUTPUT ((uint16_t)0x1)
+#define ENHTIM_DIVIDER_CLOCK ((uint16_t)0x0)
+/** \} */
+#define IS_ENHTIM_CLOCK_SOURCE(src) (((src) == ENHTIM_TIMER_TOGGLE_OUTPUT) || \
+ ((src) == ENHTIM_DIVIDER_CLOCK))
+
+/**
+ * \defgroup ENHTIM_Latch_Count_En ENHTIM Latch Count Enable
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_LATCH_COUNT_ENABLE ((uint16_t)0x1)
+#define ENHTIM_LATCH_COUNT_DISABLE ((uint16_t)0x0)
+/** \} */
+#define IS_ENHTIM_LATCH_COUNT_En(mode) (((mode) == ENHTIM_LATCH_COUNT_ENABLE) || \
+ ((mode) == ENHTIM_LATCH_COUNT_DISABLE))
+
+/**
+ * \defgroup ENHTIM_LATCH_TRIGGER_Mode Latch Count Trigger Mode
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_LATCH_TRIGGER_BOTH_EDGE ((uint16_t)0x02)
+#define ENHTIM_LATCH_TRIGGER_FALLING_EDGE ((uint16_t)0x01)
+#define ENHTIM_LATCH_TRIGGER_RISING_EDGE ((uint16_t)0x00)
+/** \} */
+#define IS_ENHTIM_LATCH_TRIGGER_Mode(mode) (((mode) == ENHTIM_LATCH_TRIGGER_BOTH_EDGE) || \
+ ((mode) == ENHTIM_LATCH_TRIGGER_FALLING_EDGE) || \
+ ((mode) == ENHTIM_LATCH_TRIGGER_RISING_EDGE))
+
+/**
+ * \defgroup ENHTIM_PWM_En ENHTIM PWM Output Enable
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_PWM_ENABLE ((uint16_t)0x08)
+#define ENHTIM_PWM_DISABLE ((uint16_t)0x00)
+/** \} */
+#define IS_ENHTIM_PWM_En(mode) (((mode) == ENHTIM_PWM_ENABLE) || \
+ ((mode) == ENHTIM_PWM_DISABLE))
+
+/**
+ * \defgroup ENHTIM_PWM_Polarity ENHTIM PWM Polarity
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_PWM_START_WITH_HIGH ((uint16_t)0x04)
+#define ENHTIM_PWM_START_WITH_LOW ((uint16_t)0x00)
+/** \} */
+#define IS_ENHTIM_PWM_POLARITY(pola) (((pola) == ENHTIM_PWM_START_WITH_HIGH) || \
+ ((pola) == ENHTIM_PWM_START_WITH_LOW))
+
+/**
+ * \defgroup ENHTIM_Mode ENHTIM Mode
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_MODE_PWM_MANUAL ((uint16_t)0x02) /*!< User define pwm manual mode. */
+#define ENHTIM_MODE_PWM_AUTO ((uint16_t)0x01) /*!< User define pwm auto mode. */
+#define ENHTIM_MODE_FreeRun ((uint16_t)0x00) /*!< User define freerun mode. */
+/** \} */
+#define IS_ENHTIM_MODE(mode) (((mode) == ENHTIM_MODE_PWM_MANUAL) || \
+ ((mode) == ENHTIM_MODE_PWM_AUTO) || \
+ ((mode) == ENHTIM_MODE_UserDefine))
+
+/**
+ * \defgroup ENHTIM_Interrupts_Definition ENHTIM Interrupts Definition
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_INT_TIM (0x00)
+#define ENHTIM_INT_LATCH_CNT2_FIFO_FULL (0x40)
+#define ENHTIM_INT_LATCH_CNT2_FIFO_THD (0x42)
+/** \} */
+
+#define IS_ENHTIM_INT(INT) (((INT) == ENHTIM_INT_TIM) || \
+ ((INT) == ENHTIM_INT_LATCH_CNT2_FIFO_FULL) || \
+ ((INT) == ENHTIM_INT_LATCH_CNT2_FIFO_THD))
+
+/**
+ * \defgroup ENHTIM_FIFO_Flag ENHTIM FIFO Flag
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_FLAG_TIM1_LC_FIFO_EMPTY BIT(19)
+#define ENHTIM_FLAG_TIM0_LC_FIFO_EMPTY BIT(17)
+#define ENHTIM_FLAG_TIM1_CCR_FIFO_EMPTY BIT(3)
+#define ENHTIM_FLAG_TIM1_CCR_FIFO_FULL BIT(2)
+#define ENHTIM_FLAG_TIM0_CCR_FIFO_EMPTY BIT(1)
+#define ENHTIM_FLAG_TIM0_CCR_FIFO_FULL BIT(0)
+/** \} */
+#define IS_ENHTIM_CCR_FIFO_FLAG(flag) (((flag) == ENHTIM_FLAG_TIM1_LC_FIFO_EMPTY) || \
+ ((flag) == ENHTIM_FLAG_TIM0_LC_FIFO_EMPTY) || \
+ ((flag) == ENHTIM_FLAG_TIM1_CCR_FIFO_EMPTY) || \
+ ((flag) == ENHTIM_FLAG_TIM1_CCR_FIFO_FULL) || \
+ ((flag) == ENHTIM_FLAG_TIM0_CCR_FIFO_EMPTY) || \
+ ((flag) == ENHTIM_FLAG_TIM0_CCR_FIFO_FULL) ))
+
+/**
+ * \defgroup PWM_DeadZone_En PWM DeadZone enable
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_PWM_DEADZONE_ENABLE ((uint16_t)0x1)
+#define ENHTIM_PWM_DEADZONE_DISABLE ((uint16_t)0x0)
+/** \} */
+#define IS_ENHTIM_PWM_DEADZONE_EN(mode) (((mode) == ENHTIM_PWM_DEADZONE_ENABLE) || \
+ ((mode) == ENHTIM_PWM_DEADZONE_DISABLE))
+
+/**
+ * \defgroup PWM_DeadZone_En PWM DeadZone enable
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_PWM_DZCLKSRCE_ENHTIM ((uint32_t)0x80000)
+#define ENHTIM_PWM_DZCLKSRCE_5M ((uint32_t)0x10000)
+#define ENHTIM_PWM_DZCLKSRCE_32K ((uint32_t)0x0)
+/** \} */
+#define IS_ENHTIM_PWM_DEADZONE_EN(mode) (((mode) == ENHTIM_PWM_DEADZONE_ENABLE) || \
+ ((mode) == ENHTIM_PWM_DEADZONE_DISABLE))
+
+/**
+ * \defgroup ENHTIM_PWM_DeadZone_Stop_State ENHTIM PWM DeadZone Stop State
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_PWM_STOP_AT_HIGH ((uint16_t)0x1)
+#define ENHTIM_PWM_STOP_AT_LOW ((uint16_t)0x0)
+/** \} */
+
+/**
+ * \defgroup ENHTIM_FIFO_Clear_Flag ENHTIM FIFO Clear Flag
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+#define ENHTIM_FIFO_CLR_CCR (0)
+#define ENHTIM_FIFO_CLR_CNT2 (24)
+/** \} */
+
+/**
+ * \defgroup ENHTIM_Clock_Divider ENHTIM Clock Divider
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+typedef enum
+{
+ ENHTIM_CLOCK_DIVIDER_1 = 0x00,
+ ENHTIM_CLOCK_DIVIDER_125 = 0x03,
+ ENHTIM_CLOCK_DIVIDER_2 = 0x04,
+ ENHTIM_CLOCK_DIVIDER_4 = 0x05,
+ ENHTIM_CLOCK_DIVIDER_8 = 0x06,
+ ENHTIM_CLOCK_DIVIDER_40 = 0x07,
+} E_ENHTIM_CLKDIV;
+/** \} */
+
+/**
+ * \defgroup ENHTIM_Latch_Channel_Count ENHTIM Latch Channel Order Number
+ * \{
+ * \ingroup ENHTIM_Exported_Constants
+ */
+typedef enum
+{
+ LATCH_CNT_0 = 0,
+ LATCH_CNT_1 = 1,
+ LATCH_CNT_2 = 2,
+} E_ENHTIM_LATCHCNT;
+/** \} */
+
+/*============================================================================*
+ * Types
+ *============================================================================*/
+
+/**
+ * \defgroup ENHTIM_Exported_Types Init Params Struct
+ *
+ * \ingroup ENHTIM
+ */
+
+/**
+ * \brief ENHTIM init structure definition.
+ *
+ * \ingroup ENHTIM_Exported_Types
+ */
+typedef struct
+{
+ uint16_t ENHTIM_ClockSource; /*!< Specifies the ENHTIM clock source.*/
+ E_ENHTIM_CLKDIV ENHTIM_ClockDiv; /*!< Specifies the clock source div.
+ This parameter can be a value of \ref ENHTIM_Clock_Divider*/
+ uint16_t ENHTIM_Mode; /*!< Specifies the counter mode.
+ This parameter can be a value of \ref ENHTIM_Mode. */
+ uint16_t ENHTIM_PWMOutputEn; /*!< Enable EnhtimerN PWM oupput.
+ This parameter can be a value of DISABLE or ENABLE */
+ uint16_t ENHTIM_PWMStartPolarity; /*!< EnhtimerN toggle output polarity for user-define PWM mode.
+ This parameter can be a value of \ref ENHTIM_PWMStartPolarity. */
+ uint16_t ENHTIM_LatchCountEn[3]; /*!< Specifies enable EnhtimerN Latch_cnt.
+ This parameter can be a value of DISABLE or ENABLE */
+ uint16_t ENHTIM_LatchCountTrigger[3]; /*!< Specifies EnhtimerN counter latch trigger mode.
+ This parameter can be a value of \ref ENHTIM_LatchCountTrigger. */
+ uint16_t ENHTIM_LatchCount2Thd; /*!< Specifies EnhtimerN latched counter fifo threshold.
+ This parameter ranges from 1 to 4. */
+ uint16_t ENHTIM_LatchTriggerPad; /*!< User-defined GPIO trigger latch pin.*/
+ uint16_t ENHTIM_TimerGPIOTriggerEn; /*!< Timer GPIO trigger enable.
+ This parameter can be a value of DISABLE or ENABLE */
+ uint16_t ENHTIM_BTGPIOTriggerEn; /*!< Bluetooth GPIO trigger enable.
+ This parameter can be a value of DISABLE or ENABLE */
+ uint32_t ENHTIM_MaxCount; /*!< Specifies the Enhtimer max counter value for user-define PWM mode.
+ This parameter leagel value range is from 0 ~ 2^32-2. */
+ uint32_t ENHTIM_CCValue; /*!< Specifies the Enhtimer capture/compare value for user-define PWM mode.*/
+ uint16_t ENHTIM_PWMDeadZoneEn; /*!< PWM Deadzone enable, pwm0_pn: timer2, pwm1_pn:timer3
+ This parameter can be a value of ENABLE or DISABLE. */
+ uint32_t ENHTIM_PWMDeadZoneClockSource; /*!< Specifies ENHTIM Source depend.timer3 depend timer2 ,timer5 depend timer4, timer7 depend timer6.
+ This parameter can be a value of ENABLE or DISABLE */
+ uint16_t ENHTIM_PWMStopStateP; /*!< Specifies the PWM P stop state.
+ This parameter can be a value of \ref PWMDeadZone_Stop_state. */
+ uint16_t ENHTIM_PWMStopStateN; /*!< Specifies the PWM N stop state.
+ This parameter can be a value of \ref PWMDeadZone_Stop_state. */
+ uint32_t ENHTIM_DeadZoneSize; /*!< Size of deadzone time, DeadzoneTime=deadzonesize/32000 or 32768.
+ This parameter must range from 1 to 0xff. */
+} ENHTIM_InitTypeDef;
+
+/*============================================================================*
+ * Functions
+ *============================================================================*/
+
+/**
+ * \defgroup ENHTIM_Exported_Functions Peripheral APIs
+ * \{
+ * \ingroup ENHTIM
+ */
+
+/**
+ * \brief Initialize the ENHTIMx unit peripheral according to
+ * the specified parameters in ENHTIM_InitStruct.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIM peripheral.
+ * \param[in] ENHTIM_InitStruct: pointer to a ENHTIM_InitTypeDef structure
+ * that contains the configuration information for the specified ENHTIM peripheral.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void driver_enhance_timer_init(void)
+ * {
+ * RCC_PeriphClockCmd(APBPeriph_TIMER, APBPeriph_TIMER_CLOCK, ENABLE);
+ *
+ * ENHTIM_InitTypeDef ENHTIM_InitStruct;
+ * ENHTIM_StructInit(&ENHTIM_InitStruct);
+ *
+ * ENHTIM_InitStruct.ENHTIM_PWM_En = PWM_DISABLE;
+ * ENHTIM_InitStruct.ENHTIM_Period = 1000000 - 1 ;
+ * ENHTIM_InitStruct.ENHTIM_Mode = ENHTIM_Mode_UserDefine;
+ * ENHTIM_Init(ENHTIMER_NUM, &ENHTIM_InitStruct);
+ * }
+ * \endcode
+ */
+void ENHTIM_Init(ENHTIM_TypeDef *ENHTIMx, ENHTIM_InitTypeDef *ENHTIM_TimeBaseInitStruct);
+
+/**
+ * \brief Fills each ENHTIM_InitStruct member with its default value.
+ * \param[in] ENHTIM_TimeBaseInitStruct: Pointer to a ENHTIM_TimeBaseInitTypeDef structure which will be initialized.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void driver_enhance_timer_init(void)
+ * {
+ * RCC_PeriphClockCmd(APBPeriph_ENHTIMER, APBPeriph_ENHTIMER_CLOCK, ENABLE);
+ *
+ * ENHTIM_TimeBaseInitTypeDef ENHTIM_InitStruct;
+ * ENHTIM_StructInit(&ENHTIM_InitStruct);
+ *
+ * ENHTIM_InitStruct.ENHTIM_PWM_En = PWM_DISABLE;
+ * ENHTIM_InitStruct.ENHTIM_Period = 1000000 - 1;
+ * ENHTIM_InitStruct.ENHTIM_Mode = ENHTIM_Mode_UserDefine;
+ * ENHTIM_TimeBaseInit(ENH_TIM0, &ENHTIM_InitStruct);
+ * }
+ * \endcode
+ */
+void ENHTIM_StructInit(ENHTIM_InitTypeDef *ENHTIM_InitStruct);
+
+/**
+ * \brief Enables or disables the specified ENHTIM peripheral.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] NewState: New state of the ENHTIMx peripheral.
+ * This parameter can be: ENABLE or DISABLE.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void driver_enhance_timer_init(void)
+ * {
+ * RCC_PeriphClockCmd(APBPeriph_ENHTIMER, APBPeriph_ENHTIMER_CLOCK, ENABLE);
+ *
+ * ENHTIM_InitTypeDef ENHTIM_InitStruct;
+ * ENHTIM_StructInit(&ENHTIM_InitStruct);
+ *
+ * ENHTIM_InitStruct.ENHTIM_PWM_En = PWM_DISABLE;
+ * ENHTIM_InitStruct.ENHTIM_Period = 1000000 - 1;
+ * ENHTIM_InitStruct.ENHTIM_Mode = ENHTIM_Mode_UserDefine;
+ * ENHTIM_Init(ENH_TIM0, &ENHTIM_InitStruct);
+ * ENHTIM_Cmd(ENH_TIM0, ENABLE);
+ * }
+ * \endcode
+ */
+void ENHTIM_Cmd(ENHTIM_TypeDef *ENHTIMx, FunctionalState NewState);
+
+/**
+ * \brief Mask or unmask the latch count2 fifo interrupt.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] NewState: New state of the specified ENHTIMx peripheral latch count2 fifo interrupt.
+ * This parameter can be: ENABLE or DISABLE.
+ * \return None.
+ */
+void ENHTIM_LCFIFOMaskConfig(ENHTIM_TypeDef *ENHTIMx, FunctionalState NewState);
+
+/**
+ * \brief Enables or disables ENHTIMx interrupt.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] ENHTIM_INT: Specifies the ENHTIMx interrupt source which to be enabled or disabled.
+ * This parameter can be one of the following values:
+ * \arg ENHTIM_INT_TIM: Enhance Timer interrupt source.
+ * \arg ENHTIM_INT_LATCH_CNT2_FIFO_FULL: Enhance Timer latch count2 fifo full interrupt source.
+ * \arg ENHTIM_INT_LATCH_CNT2_FIFO_EMPTY: Enhance Timer latch count2 fifo empty interrupt source.
+ * \arg ENHTIM_INT_LATCH_CNT2_FIFO_THD: Enhance Timer latch count2 fifo threshold interrupt source.
+ * \param[in] NewState: New state of the ENHTIMx peripheral.
+ * This parameter can be: ENABLE or DISABLE.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void driver_enhance_timer_init(void)
+ * {
+ * RCC_PeriphClockCmd(APBPeriph_TIMER, APBPeriph_TIMER_CLOCK, ENABLE);
+ *
+ * ENHTIM_InitTypeDef ENHTIM_InitStruct;
+ * ENHTIM_StructInit(&ENHTIM_InitStruct);
+ *
+ * ENHTIM_InitStruct.ENHTIM_PWM_En = PWM_DISABLE;
+ * ENHTIM_InitStruct.ENHTIM_Period = 1000000 - 1;
+ * ENHTIM_InitStruct.ENHTIM_Mode = ENHTIM_Mode_UserDefine;
+ * ENHTIM_Init(ENH_TIM0, &ENHTIM_InitStruct);
+ * ENHTIM_ClearINT(ENH_TIM0);
+ * ENHTIM_INTConfig(ENH_TIM0, ENABLE);
+ */
+void ENHTIM_INTConfig(ENHTIM_TypeDef *ENHTIMx, uint8_t ENHTIM_INT, FunctionalState NewState);
+
+/**
+ * \brief Read ENHTIMx latch counter2 fifo data.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] length: Latch count2 fifo length, max 4.
+ * \pBuf[out] pBuf: FIFO data out buffer.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * uint8_t length = ENHTIM_GetLatchCount2FIFOLength(ENH_TIM0);
+ * }
+ * \endcode
+ */
+void ENHTIM_ReadLatchCount2FIFO(ENHTIM_TypeDef *ENHTIMx, uint32_t *pBuf, uint8_t length);
+
+/**
+ * \brief Check whether the ENHTIM interrupt has occurred or not.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \return The new state of the specified ENHTIMx peripheral
+ * latch count2 fifo interrupt(SET or RESET).
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * ITStatus int_status = ENHTIM_GetLCMaskINTStatus(ENH_TIM0);
+ * }
+ * \endcode
+ */
+ITStatus ENHTIM_GetLCFIFOMaskStatus(ENHTIM_TypeDef *ENHTIMx);
+
+/**
+ * \brief Check whether the ENHTIM interrupt has occurred or not.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] ENHTIM_INT: Specifies the ENHTIMx interrupt source which to be enabled or disabled.
+ * This parameter can be one of the following values:
+ * \arg ENHTIM_INT_TIM: Enhance Timer interrupt source.
+ * \arg ENHTIM_INT_LATCH_CNT2_FIFO_FULL: Enhance Timer latch count2 fifo full interrupt source.
+ * \arg ENHTIM_INT_LATCH_CNT2_FIFO_EMPTY: Enhance Timer latch count2 fifo empty interrupt source.
+ * \arg ENHTIM_INT_LATCH_CNT2_FIFO_THD: Enhance Timer latch count2 fifo threshold interrupt source.
+ * \return The new state of the ENHTIM_INT(SET or RESET).
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * ENHTIM_GetINTStatus(ENH_TIM0, ENHTIM_INT_TIM);
+ * }
+ * \endcode
+ */
+ITStatus ENHTIM_GetINTStatus(ENHTIM_TypeDef *ENHTIMx, uint8_t ENHTIM_INT);
+
+/**
+ * \brief Clear ENHTIMx interrupt.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] ENHTIM_INT: Specifies the ENHTIMx interrupt source which to be enabled or disabled.
+ * This parameter can be one of the following values:
+ * \arg ENHTIM_INT_TIM: Enhance Timer interrupt source.
+ * \arg ENHTIM_INT_LATCH_CNT2_FIFO_FULL: Enhance Timer latch count2 fifo full interrupt source.
+ * \arg ENHTIM_INT_LATCH_CNT2_FIFO_THD: Enhance Timer latch count2 fifo threshold interrupt source.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * ENHTIM_ClearINTPendingBit(ENH_TIM0, ENHTIM_INT_TIM);
+ * }
+ * \endcode
+ */
+void ENHTIM_ClearINTPendingBit(ENHTIM_TypeDef *ENHTIMx, uint8_t ENHTIM_INT);
+
+/**
+ * \brief Get ENHTIMx current value when timer is running.
+ * \param[in] ENHTIMx: where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \return The counter value.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * uint32_t cur_value = ENHTIM_GetCurrentValue(ENH_TIM0);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE uint32_t ENHTIM_GetCurrentCount(ENHTIM_TypeDef *ENHTIMx)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ return ENHTIMx->CUR_CNT;
+}
+
+/**
+ * \brief Set Max Count value.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] count: EnhtimerN max counter value for user-define PWM mode (leagel value range is from 0 ~
+2^32-2).
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * ENHTIM_SetMaxCount(ENH_TIM0, 0x10000);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE void ENHTIM_SetMaxCount(ENHTIM_TypeDef *ENHTIMx, uint32_t count)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ ENHTIMx->MAX_CNT = count & 0xFFFFFFFE;
+}
+
+/**
+ * \brief Set ENHTIMx capture/compare value for user-define PWM manual mode.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] value: .
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * ENHTIM_SetCCValue(ENH_TIM0, 0x1000);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE void ENHTIM_SetCCValue(ENHTIM_TypeDef *ENHTIMx, uint32_t value)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ ENHTIMx->CCR = value;
+}
+
+/**
+ * \brief Set ENHTIMx capture/compare value for user-define PWM auto mode.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] value: .
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * ENHTIM_WriteCCFIFO(ENH_TIM0,0x10000);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE void ENHTIM_WriteCCFIFO(ENHTIM_TypeDef *ENHTIMx, uint32_t value)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ ENHTIMx->CCR_FIFO = value;
+}
+
+///**
+// * \brief Check whether the specified ENHTIM CCR FIFO flag is set.
+// * \param[in] ENHTIM_FLAG: Specifies the flag to check.
+// * This parameter can be one of the following values:
+// * \arg ENHTIM_FLAG_TIM1_LC_FIFO_EMPTY: FIFO empty or not. If SET, CCR FIFO is empty.
+// * \arg ENHTIM_FLAG_TIM0_LC_FIFO_EMPTY: FIFO full or not. If SET, CCR FIFO is full.
+// * \return The new state of ENHTIM_FLAG (SET or RESET).
+// *
+// * <b>Example usage</b>
+// * \code{.c}
+// *
+// * void enhance_timer_demo(void)
+// * {
+// * FlagStatus flag_status = ENHTIM_GetCCRFIFOFlagStatus(ENHTIM_FLAG_FIFO_EMPTY);
+// * }
+// * \endcode
+// */
+//__STATIC_INLINE FlagStatus ENHTIM_GetLCFIFOFlagStatus(uint32_t ENHTIM_FLAG)
+//{
+// /* Check the parameters */
+// assert_param(IS_ENHTIM_LC_FIFO_FLAG(ENHTIM_FLAG));
+
+// FlagStatus bitstatus = RESET;
+
+// if (ENH_TIM_SHARE->FIFO_SR2 & ENHTIM_FLAG)
+// {
+// bitstatus = SET;
+// }
+
+// return bitstatus;
+//}
+
+///**
+// * \brief Check whether the specified ENHTIM CCR FIFO flag is set.
+// * \param[in] ENHTIM_FLAG: Specifies the flag to check.
+// * This parameter can be one of the following values:
+// * \arg ENHTIM_FLAG_TIM1_CCR_FIFO_EMPTY: FIFO empty or not. If SET, CCR FIFO is empty.
+// * \arg ENHTIM_FLAG_TIM1_CCR_FIFO_FULL: FIFO full or not. If SET, CCR FIFO is full.
+// * \arg ENHTIM_FLAG_TIM0_CCR_FIFO_EMPTY: FIFO empty or not. If SET, CCR FIFO is empty.
+// * \arg ENHTIM_FLAG_TIM0_CCR_FIFO_FULL: FIFO full or not. If SET, CCR FIFO is full.
+// * \return The new state of ENHTIM_FLAG (SET or RESET).
+// *
+// * <b>Example usage</b>
+// * \code{.c}
+// *
+// * void enhance_timer_demo(void)
+// * {
+// * FlagStatus flag_status = ENHTIM_GetCCRFIFOFlagStatus(ENHTIM_FLAG_FIFO_EMPTY);
+// * }
+// * \endcode
+// */
+//__STATIC_INLINE FlagStatus ENHTIM_GetCCRFIFOFlagStatus(uint32_t ENHTIM_FLAG)
+//{
+// /* Check the parameters */
+// assert_param(IS_ENHTIM_CCR_FIFO_FLAG(ENHTIM_FLAG));
+
+// FlagStatus bitstatus = RESET;
+
+// if (ENH_TIM_SHARE->FIFO_SR2 & ENHTIM_FLAG)
+// {
+// bitstatus = SET;
+// }
+
+// return bitstatus;
+//}
+
+/**
+ * \brief Check whether the specified ENHTIM CCR FIFO flag is set.
+ * \param[in] ENHTIM_FLAG: Specifies the flag to check.
+ * This parameter can be one of the following values:
+ * \arg ENHTIM_FLAG_TIM1_LC_FIFO_EMPTY: FIFO empty or not. If SET, CCR FIFO is empty.
+ * \arg ENHTIM_FLAG_TIM0_LC_FIFO_EMPTY: FIFO full or not. If SET, CCR FIFO is full.
+ * \arg ENHTIM_FLAG_TIM1_CCR_FIFO_EMPTY: FIFO empty or not. If SET, CCR FIFO is empty.
+ * \arg ENHTIM_FLAG_TIM1_CCR_FIFO_FULL: FIFO full or not. If SET, CCR FIFO is full.
+ * \arg ENHTIM_FLAG_TIM0_CCR_FIFO_EMPTY: FIFO empty or not. If SET, CCR FIFO is empty.
+ * \arg ENHTIM_FLAG_TIM0_CCR_FIFO_FULL: FIFO full or not. If SET, CCR FIFO is full.
+ * \return The new state of ENHTIM_FLAG (SET or RESET).
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * FlagStatus flag_status = ENHTIM_GetCCRFIFOFlagStatus(ENHTIM_FLAG_FIFO_EMPTY);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE FlagStatus ENHTIM_GetFIFOFlagStatus(uint32_t ENHTIM_FLAG)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_FIFO_FLAG(ENHTIM_FLAG));
+
+ FlagStatus bitstatus = RESET;
+
+ if (ENH_TIM_SHARE->FIFO_SR2 & ENHTIM_FLAG)
+ {
+ bitstatus = SET;
+ }
+
+ return bitstatus;
+}
+
+/**
+ * \brief Enable ENHTIMx latch counter.
+ * \param[in] ENHTIMx: where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] LatchCntIdx: E_ENHTIM_LATCHCNT enum value.
+ * This parameter can be one of follow.
+ * \arg LATCH_COUNT_0: Enhance timer latch count 0.
+ * \arg LATCH_COUNT_1: Enhance timer latch count 1.
+ * \arg LATCH_COUNT_2: Enhance timer latch count 2.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * uint32_t cur_value = ENHTIM_LatchCountEnable(ENH_TIM0, LATCH_COUNT_2);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE void ENHTIM_LatchCountEnable(ENHTIM_TypeDef *ENHTIMx, E_ENHTIM_LATCHCNT LatchCntIdx)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ ENHTIMx->CR |= BIT(LatchCntIdx + 10);
+}
+
+/**
+ * \brief Disable ENHTIMx latch counter.
+ * \param[in] ENHTIMx: where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] LatchCntIdx: E_ENHTIM_LATCHCNT enum value.
+ * This parameter can be one of follow.
+ * \arg LATCH_COUNT_0: Enhance timer latch count 0.
+ * \arg LATCH_COUNT_1: Enhance timer latch count 1.
+ * \arg LATCH_COUNT_2: Enhance timer latch count 2.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * uint32_t cur_value = ENHTIM_LatchCountDisable(ENH_TIM0, LATCH_COUNT_2);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE void ENHTIM_LatchCountDisable(ENHTIM_TypeDef *ENHTIMx,
+ E_ENHTIM_LATCHCNT LatchCntIdx)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ ENHTIMx->CR &= ~BIT(LatchCntIdx + 10);
+}
+
+/**
+ * \brief Get ENHTIMx latch count value.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] LatchCntIdx: E_ENHTIM_LATCHCNT enum value.
+ * This parameter can be one of follow.
+ * \arg LATCH_COUNT_0: Enhance timer latch count 0.
+ * \arg LATCH_COUNT_1: Enhance timer latch count 1.
+ * \arg LATCH_COUNT_2: Enhance timer latch count 2.
+ * \return The latch counter value.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * uint32_t count_value = ENHTIM_GetLatchCountValue(ENH_TIM0, LATCH_COUNT_0);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE uint32_t ENHTIM_GetLatchCount(ENHTIM_TypeDef *ENHTIMx,
+ E_ENHTIM_LATCHCNT LatchCntIdx)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ uint32_t count = 0;
+ count = *(volatile uint32_t *)(&(ENHTIMx->LATCH_CNT0) + LatchCntIdx);
+ return count;
+}
+
+/**
+ * \brief Get ENHTIMx latch counter2 fifo length.
+ * \param[in] ENHTIMx: where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \return FIFO data length.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * uint8_t length = ENHTIM_GetLatchCount2FIFOLength(ENH_TIM0);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE uint8_t ENHTIM_GetLatchCount2FIFOLength(ENHTIM_TypeDef *ENHTIMx)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ uint32_t enhtim_id = ((uint32_t)ENHTIMx - (uint32_t)ENH_TIM0) / 0X24;
+
+ return (uint8_t)(((*((volatile uint32_t *)(&(ENH_TIM_SHARE->LC_FIFO_LEVEL0) + enhtim_id))) >> 16) &
+ 0x1F);
+}
+
+/**
+ * \brief Clear capture/compare or latch count2 fifo.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \param[in] FIFO_CLR: Specifies the FIFO type which to be clear.
+ * This parameter can be one of the following values:
+ * \arg ENHTIM_FIFO_CLR_CCR: Enhance Timer CCR FIFO clear flag.
+ * \arg ENHTIM_FIFO_CLR_CNT2: Enhance Timer latch count2 FIFO clear flag.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * ENHTIM_ClearFIFO(ENH_TIM0, ENHTIM_FIFO_CLR_CCR);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE void ENHTIM_ClearFIFO(ENHTIM_TypeDef *ENHTIMx, uint8_t FIFO_CLR)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ uint32_t enhtim_id = ((uint32_t)ENHTIMx - (uint32_t)ENH_TIM0) / 0X24;
+
+ ENH_TIM_SHARE->FIFO_CLR |= (BIT(FIFO_CLR + enhtim_id));
+}
+
+/**
+ * \brief ENHTIM PWM complementary output emergency stop.
+ * \param None.
+ * \return None.
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * ENHTIM_PWMDeadZoneEMStop();
+ * }
+ * \endcode
+ */
+__STATIC_INLINE void ENHTIM_PWMDeadZoneEMStop(void)
+{
+ ENHTIM_PWM_DEADZONE_CR |= BIT(8);
+}
+
+/**
+ * \brief Get ENHTIM PWM output status.
+ * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+ * \return ENHTIM PWM output status(SET or RESET).
+ *
+ * <b>Example usage</b>
+ * \code{.c}
+ *
+ * void enhance_timer_demo(void)
+ * {
+ * FlagStatus status = ENHTIM_GetPWMOutputState(ENH_TIM0);
+ * }
+ * \endcode
+ */
+__STATIC_INLINE FlagStatus ENHTIM_GetPWMOutputState(ENHTIM_TypeDef *ENHTIMx)
+{
+ /* Check the parameters */
+ assert_param(IS_ENHTIM_ALL_PERIPH(ENHTIMx));
+
+ uint32_t enhtim_id = ((uint32_t)ENHTIMx - (uint32_t)ENH_TIM0) / 0X24;
+ uint32_t status = ENHTIM_LATCH_COUNT_CR & (0x1 << (enhtim_id + 6));
+ return (FlagStatus)(status >> (enhtim_id + 6));
+}
+
+///**
+// * \brief Check whether the ENHTIM interrupt has occurred or not.
+// * \param[in] ENHTIMx: Where x can be 0 to 1 to select the ENHTIMx peripheral.
+// * \return The new state of the ENHTIM_IT(SET or RESET).
+// *
+// * <b>Example usage</b>
+// * \code{.c}
+// *
+// * void enhance_timer_demo(void)
+// * {
+// * ITStatus int_status = ENHTIM_GetINTStatus(ENH_TIM0);
+// * }
+// * \endcode
+// */
+//__STATIC_INLINE uint32_t ENHTIM_GetAllINTStatus(void)
+//{
+// return ENH_TIM_SHARE->MASK_INT_SR;
+//}
+
+/** \} */ /* End of group ENHTIM_Exported_Functions */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_RTL876X_ENH_TIM_H_*/
+
+
+/******************* (C) COPYRIGHT 2020 Realtek Semiconductor Corporation *****END OF FILE****/