 /**   
  *******************************************************************************************************
  * @file    fm33lg0xx_fl_bstim16.h
  * @author  FMSH Application Team
  * @brief   Head file of BSTIM16 FL Module
  *******************************************************************************************************
  * @attention
  * 
  * Copyright (c) 2022, SHANGHAI FUDAN MICROELECTRONICS GROUP CO., LTD.(FUDAN MICROELECTRONICS./ FUDAN MICRO.)    
  * All rights reserved.    
  *    
  * Processor:                   FM33LG0xxA    
  * http:                        http://www.fmdevelopers.com.cn/    
  *    
  * Redistribution and use in source and binary forms, with or without    
  * modification, are permitted provided that the following conditions are met    
  *    
  * 1. Redistributions of source code must retain the above copyright notice,    
  *    this list of conditions and the following disclaimer.    
  *    
  * 2. Redistributions in binary form must reproduce the above copyright notice,    
  *    this list of conditions and the following disclaimer in the documentation    
  *    and/or other materials provided with the distribution.    
  *    
  * 3. Neither the name of the copyright holder nor the names of its contributors    
  *    may be used to endorse or promote products derived from this software    
  *    without specific prior written permission.    
  *    
  * 4. To provide the most up-to-date information, the revision of our documents     
  *    on the World Wide Web will be the most Current. Your printed copy may be      
  *    an earlier revision. To verify you have the latest information avaliable,    
  *    refer to: http://www.fmdevelopers.com.cn/.    
  *    
  * THIS SOFTWARE IS PROVIDED BY FUDAN MICRO "AS IS" AND ANY EXPRESSED     
  * ORIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES     
  * OF MERCHANTABILITY NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE    
  * ARE DISCLAIMED.IN NO EVENT SHALL FUDAN MICRO OR ITS CONTRIBUTORS BE LIABLE     
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL     
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS     
  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER    
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,     
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISINGIN ANY WAY OUT OF THE     
  * USE OF THIS SOFTWARE, EVEN IF ADVISED OFTHE POSSIBILITY OF SUCH DAMAGE.    
 */    



/* Define to prevent recursive inclusion---------------------------------------------------------------*/
#ifndef __FM33LG0XX_FL_BSTIM16_H
#define __FM33LG0XX_FL_BSTIM16_H

#ifdef __cplusplus
extern "C" {
#endif
/* Includes -------------------------------------------------------------------------------------------*/
#include "fm33lg0xx_fl_def.h"
/** @addtogroup FM33LG0XX_FL_Driver
  * @{
  */

/** @defgroup BSTIM16 BSTIM16 
  * @brief BSTIM16 FL driver
  * @{
  */

/* Exported types -------------------------------------------------------------------------------------*/
/** @defgroup BSTIM16_FL_ES_INIT BSTIM16 Exported Init structures
  * @{
  */

/**
  * @brief FL BSTIM16 Init Sturcture definition
  */

typedef struct
{
    /* 预分频系数 */
    uint32_t prescaler;
    /* 自动重装载值 */
    uint32_t autoReload;
    /* 自动重装载值 */
    uint32_t autoReloadState;

    uint32_t clockSource;

} FL_BSTIM16_InitTypeDef;

/**
  * @}
  */
/* Exported constants ---------------------------------------------------------------------------------*/
/** @defgroup BSTIM16_FL_Exported_Constants BSTIM16 Exported Constants
  * @{
  */

#define    BSTIM16_CR1_ARPE_Pos                                   (7U)
#define    BSTIM16_CR1_ARPE_Msk                                   (0x1U << BSTIM16_CR1_ARPE_Pos)
#define    BSTIM16_CR1_ARPE                                       BSTIM16_CR1_ARPE_Msk

#define    BSTIM16_CR1_OPM_Pos                                    (3U)
#define    BSTIM16_CR1_OPM_Msk                                    (0x1U << BSTIM16_CR1_OPM_Pos)
#define    BSTIM16_CR1_OPM                                        BSTIM16_CR1_OPM_Msk

#define    BSTIM16_CR1_URS_Pos                                    (2U)
#define    BSTIM16_CR1_URS_Msk                                    (0x1U << BSTIM16_CR1_URS_Pos)
#define    BSTIM16_CR1_URS                                        BSTIM16_CR1_URS_Msk

#define    BSTIM16_CR1_UDIS_Pos                                   (1U)
#define    BSTIM16_CR1_UDIS_Msk                                   (0x1U << BSTIM16_CR1_UDIS_Pos)
#define    BSTIM16_CR1_UDIS                                       BSTIM16_CR1_UDIS_Msk

#define    BSTIM16_CR1_CEN_Pos                                    (0U)
#define    BSTIM16_CR1_CEN_Msk                                    (0x1U << BSTIM16_CR1_CEN_Pos)
#define    BSTIM16_CR1_CEN                                        BSTIM16_CR1_CEN_Msk

#define    BSTIM16_CR2_MMS_Pos                                    (4U)
#define    BSTIM16_CR2_MMS_Msk                                    (0x7U << BSTIM16_CR2_MMS_Pos)
#define    BSTIM16_CR2_MMS                                        BSTIM16_CR2_MMS_Msk

#define    BSTIM16_IER_UIE_Pos                                    (0U)
#define    BSTIM16_IER_UIE_Msk                                    (0x1U << BSTIM16_IER_UIE_Pos)
#define    BSTIM16_IER_UIE                                        BSTIM16_IER_UIE_Msk

#define    BSTIM16_ISR_UIF_Pos                                    (0U)
#define    BSTIM16_ISR_UIF_Msk                                    (0x1U << BSTIM16_ISR_UIF_Pos)
#define    BSTIM16_ISR_UIF                                        BSTIM16_ISR_UIF_Msk

#define    BSTIM16_EGR_UG_Pos                                     (0U)
#define    BSTIM16_EGR_UG_Msk                                     (0x1U << BSTIM16_EGR_UG_Pos)
#define    BSTIM16_EGR_UG                                         BSTIM16_EGR_UG_Msk






#define    FL_BSTIM16_ONE_PULSE_MODE_CONTINUOUS                   (0x0U << BSTIM16_CR1_OPM_Pos)
#define    FL_BSTIM16_ONE_PULSE_MODE_SINGLE                       (0x1U << BSTIM16_CR1_OPM_Pos)


#define    FL_BSTIM16_UPDATE_SOURCE_REGULAR                       (0x0U << BSTIM16_CR1_URS_Pos)
#define    FL_BSTIM16_UPDATE_SOURCE_COUNTER                       (0x1U << BSTIM16_CR1_URS_Pos)


#define    FL_BSTIM16_TRGO_UG                                     (0x0U << BSTIM16_CR2_MMS_Pos)
#define    FL_BSTIM16_TRGO_ENABLE                                 (0x1U << BSTIM16_CR2_MMS_Pos)
#define    FL_BSTIM16_TRGO_UPDATE                                 (0x2U << BSTIM16_CR2_MMS_Pos)


/**
  * @}
  */
/* Exported functions ---------------------------------------------------------------------------------*/
/** @defgroup BSTIM16_FL_Exported_Functions BSTIM16 Exported Functions
  * @{
  */

/**
  * @brief    Auto-Reload preload enable
  * @rmtoll   CR1    ARPE    FL_BSTIM16_EnableARRPreload
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_EnableARRPreload(BSTIM16_Type *BSTIM16x)
{
    SET_BIT(BSTIM16x->CR1, BSTIM16_CR1_ARPE_Msk);
}

/**
  * @brief    Get Auto-Reload preload enable status
  * @rmtoll   CR1    ARPE    FL_BSTIM16_IsEnabledARRPreload
  * @param    BSTIM16x BSTIM16 instance
  * @retval   State of bit (1 or 0).
  */
__STATIC_INLINE uint32_t FL_BSTIM16_IsEnabledARRPreload(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->CR1, BSTIM16_CR1_ARPE_Msk) == BSTIM16_CR1_ARPE_Msk);
}

/**
  * @brief    Auto-Reload preload disable
  * @rmtoll   CR1    ARPE    FL_BSTIM16_DisableARRPreload
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_DisableARRPreload(BSTIM16_Type *BSTIM16x)
{
    CLEAR_BIT(BSTIM16x->CR1, BSTIM16_CR1_ARPE_Msk);
}

/**
  * @brief    Set one pulse mode
  * @rmtoll   CR1    OPM    FL_BSTIM16_SetOnePulseMode
  * @param    BSTIM16x BSTIM16 instance
  * @param    mode This parameter can be one of the following values:
  *           @arg @ref FL_BSTIM16_ONE_PULSE_MODE_CONTINUOUS
  *           @arg @ref FL_BSTIM16_ONE_PULSE_MODE_SINGLE
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_SetOnePulseMode(BSTIM16_Type *BSTIM16x, uint32_t mode)
{
    MODIFY_REG(BSTIM16x->CR1, BSTIM16_CR1_OPM_Msk, mode);
}

/**
  * @brief    Get one pulse mode
  * @rmtoll   CR1    OPM    FL_BSTIM16_GetOnePulseMode
  * @param    BSTIM16x BSTIM16 instance
  * @retval   Returned value can be one of the following values:
  *           @arg @ref FL_BSTIM16_ONE_PULSE_MODE_CONTINUOUS
  *           @arg @ref FL_BSTIM16_ONE_PULSE_MODE_SINGLE
  */
__STATIC_INLINE uint32_t FL_BSTIM16_GetOnePulseMode(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->CR1, BSTIM16_CR1_OPM_Msk));
}

/**
  * @brief    Set update request
  * @rmtoll   CR1    URS    FL_BSTIM16_SetUpdateSource
  * @param    BSTIM16x BSTIM16 instance
  * @param    source This parameter can be one of the following values:
  *           @arg @ref FL_BSTIM16_UPDATE_SOURCE_REGULAR
  *           @arg @ref FL_BSTIM16_UPDATE_SOURCE_COUNTER
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_SetUpdateSource(BSTIM16_Type *BSTIM16x, uint32_t source)
{
    MODIFY_REG(BSTIM16x->CR1, BSTIM16_CR1_URS_Msk, source);
}

/**
  * @brief    Get update request status
  * @rmtoll   CR1    URS    FL_BSTIM16_GetUpdateSource
  * @param    BSTIM16x BSTIM16 instance
  * @retval   Returned value can be one of the following values:
  *           @arg @ref FL_BSTIM16_UPDATE_SOURCE_REGULAR
  *           @arg @ref FL_BSTIM16_UPDATE_SOURCE_COUNTER
  */
__STATIC_INLINE uint32_t FL_BSTIM16_GetUpdateSource(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->CR1, BSTIM16_CR1_URS_Msk));
}

/**
  * @brief    Update event enable
  * @rmtoll   CR1    UDIS    FL_BSTIM16_EnableUpdateEvent
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_EnableUpdateEvent(BSTIM16_Type *BSTIM16x)
{
    CLEAR_BIT(BSTIM16x->CR1, BSTIM16_CR1_UDIS_Msk);
}

/**
  * @brief    Get update event disable status
  * @rmtoll   CR1    UDIS    FL_BSTIM16_IsEnabledUpdateEvent
  * @param    BSTIM16x BSTIM16 instance
  * @retval   State of bit (1 or 0).
  */
__STATIC_INLINE uint32_t FL_BSTIM16_IsEnabledUpdateEvent(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)!(READ_BIT(BSTIM16x->CR1, BSTIM16_CR1_UDIS_Msk) == BSTIM16_CR1_UDIS_Msk);
}

/**
  * @brief    Update event disable
  * @rmtoll   CR1    UDIS    FL_BSTIM16_DisableUpdateEvent
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_DisableUpdateEvent(BSTIM16_Type *BSTIM16x)
{
    SET_BIT(BSTIM16x->CR1, BSTIM16_CR1_UDIS_Msk);
}

/**
  * @brief    Counter enable
  * @rmtoll   CR1    CEN    FL_BSTIM16_Enable
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_Enable(BSTIM16_Type *BSTIM16x)
{
    SET_BIT(BSTIM16x->CR1, BSTIM16_CR1_CEN_Msk);
}

/**
  * @brief    Get counter enable status
  * @rmtoll   CR1    CEN    FL_BSTIM16_IsEnabled
  * @param    BSTIM16x BSTIM16 instance
  * @retval   State of bit (1 or 0).
  */
__STATIC_INLINE uint32_t FL_BSTIM16_IsEnabled(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->CR1, BSTIM16_CR1_CEN_Msk) == BSTIM16_CR1_CEN_Msk);
}

/**
  * @brief    Counter disable
  * @rmtoll   CR1    CEN    FL_BSTIM16_Disable
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_Disable(BSTIM16_Type *BSTIM16x)
{
    CLEAR_BIT(BSTIM16x->CR1, BSTIM16_CR1_CEN_Msk);
}

/**
  * @brief    Set master Trigger Output mode
  * @rmtoll   CR2    MMS    FL_BSTIM16_SetTriggerOutput
  * @param    BSTIM16x BSTIM16 instance
  * @param    triggerOutput This parameter can be one of the following values:
  *           @arg @ref FL_BSTIM16_TRGO_UG
  *           @arg @ref FL_BSTIM16_TRGO_ENABLE
  *           @arg @ref FL_BSTIM16_TRGO_UPDATE
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_SetTriggerOutput(BSTIM16_Type *BSTIM16x, uint32_t triggerOutput)
{
    MODIFY_REG(BSTIM16x->CR2, BSTIM16_CR2_MMS_Msk, triggerOutput);
}

/**
  * @brief    Get  master Trigger Output mode
  * @rmtoll   CR2    MMS    FL_BSTIM16_GetTriggerOutput
  * @param    BSTIM16x BSTIM16 instance
  * @retval   Returned value can be one of the following values:
  *           @arg @ref FL_BSTIM16_TRGO_UG
  *           @arg @ref FL_BSTIM16_TRGO_ENABLE
  *           @arg @ref FL_BSTIM16_TRGO_UPDATE
  */
__STATIC_INLINE uint32_t FL_BSTIM16_GetTriggerOutput(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->CR2, BSTIM16_CR2_MMS_Msk));
}

/**
  * @brief    Update event interrupt disable
  * @rmtoll   IER    UIE    FL_BSTIM16_DisableIT_Update
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_DisableIT_Update(BSTIM16_Type *BSTIM16x)
{
    CLEAR_BIT(BSTIM16x->IER, BSTIM16_IER_UIE_Msk);
}

/**
  * @brief    Update event interrupt enable
  * @rmtoll   IER    UIE    FL_BSTIM16_EnableIT_Update
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_EnableIT_Update(BSTIM16_Type *BSTIM16x)
{
    SET_BIT(BSTIM16x->IER, BSTIM16_IER_UIE_Msk);
}

/**
  * @brief    Get update event interrupt enable status
  * @rmtoll   IER    UIE    FL_BSTIM16_IsEnabledIT_Update
  * @param    BSTIM16x BSTIM16 instance
  * @retval   State of bit (1 or 0).
  */
__STATIC_INLINE uint32_t FL_BSTIM16_IsEnabledIT_Update(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->IER, BSTIM16_IER_UIE_Msk) == BSTIM16_IER_UIE_Msk);
}

/**
  * @brief    Get update event interrupt flag
  * @rmtoll   ISR    UIF    FL_BSTIM16_IsActiveFlag_Update
  * @param    BSTIM16x BSTIM16 instance
  * @retval   State of bit (1 or 0).
  */
__STATIC_INLINE uint32_t FL_BSTIM16_IsActiveFlag_Update(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->ISR, BSTIM16_ISR_UIF_Msk) == (BSTIM16_ISR_UIF_Msk));
}

/**
  * @brief    Clear update event interrupt flag
  * @rmtoll   ISR    UIF    FL_BSTIM16_ClearFlag_Update
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_ClearFlag_Update(BSTIM16_Type *BSTIM16x)
{
    WRITE_REG(BSTIM16x->ISR, BSTIM16_ISR_UIF_Msk);
}

/**
  * @brief    Software update event enable
  * @rmtoll   EGR    UG    FL_BSTIM16_GenerateUpdateEvent
  * @param    BSTIM16x BSTIM16 instance
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_GenerateUpdateEvent(BSTIM16_Type *BSTIM16x)
{
    SET_BIT(BSTIM16x->EGR, BSTIM16_EGR_UG_Msk);
}

/**
  * @brief    Set counter value
  * @rmtoll   CNT        FL_BSTIM16_WriteCounter
  * @param    BSTIM16x BSTIM16 instance
  * @param    count
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_WriteCounter(BSTIM16_Type *BSTIM16x, uint32_t count)
{
    MODIFY_REG(BSTIM16x->CNT, (0xffffU << 0U), (count << 0U));
}

/**
  * @brief    Get counter value
  * @rmtoll   CNT        FL_BSTIM16_ReadCounter
  * @param    BSTIM16x BSTIM16 instance
  * @retval
  */
__STATIC_INLINE uint32_t FL_BSTIM16_ReadCounter(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->CNT, 0xffffU) >> 0U);
}

/**
  * @brief    Set counter Clock prescaler value
  * @rmtoll   PSC        FL_BSTIM16_WritePrescaler
  * @param    BSTIM16x BSTIM16 instance
  * @param    psc
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_WritePrescaler(BSTIM16_Type *BSTIM16x, uint32_t psc)
{
    MODIFY_REG(BSTIM16x->PSC, (0xffffU << 0U), (psc << 0U));
}

/**
  * @brief    Get counter Clock prescaler value
  * @rmtoll   PSC        FL_BSTIM16_ReadPrescaler
  * @param    BSTIM16x BSTIM16 instance
  * @retval
  */
__STATIC_INLINE uint32_t FL_BSTIM16_ReadPrescaler(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->PSC, 0xffffU) >> 0U);
}

/**
  * @brief    Set Auto-Reload register value
  * @rmtoll   ARR        FL_BSTIM16_WriteAutoReload
  * @param    BSTIM16x BSTIM16 instance
  * @param    value
  * @retval   None
  */
__STATIC_INLINE void FL_BSTIM16_WriteAutoReload(BSTIM16_Type *BSTIM16x, uint32_t value)
{
    MODIFY_REG(BSTIM16x->ARR, (0xffffU << 0U), (value << 0U));
}

/**
  * @brief    Get  Auto-Reload register value
  * @rmtoll   ARR        FL_BSTIM16_ReadAutoReload
  * @param    BSTIM16x BSTIM16 instance
  * @retval
  */
__STATIC_INLINE uint32_t FL_BSTIM16_ReadAutoReload(BSTIM16_Type *BSTIM16x)
{
    return (uint32_t)(READ_BIT(BSTIM16x->ARR, 0xffffU) >> 0U);
}

/**
  * @}
  */

/** @defgroup BSTIM16_FL_EF_Init Initialization and de-initialization functions
  * @{
  */

FL_ErrorStatus FL_BSTIM16_DeInit(BSTIM16_Type *BSTIM16x);
FL_ErrorStatus FL_BSTIM16_Init(BSTIM16_Type *BSTIM16x, FL_BSTIM16_InitTypeDef *init);
void FL_BSTIM16_StructInit(FL_BSTIM16_InitTypeDef *init);

/**
  * @}
  */

/**
  * @}
  */

/**
  * @}
  */

#ifdef __cplusplus
}
#endif

#endif /* __FM33LG0XX_FL_BSTIM16_H*/

/*************************Py_Code_Generator Version: 0.1-0.11-0.1 @ 2020-09-12*************************/
/*************************(C) COPYRIGHT Fudan Microelectronics **** END OF FILE*************************/
