current_v/Drivers/FM33LG0xx_FL_Driver/Inc/fm33lg0xx_fl_divas.h

248 lines
7.2 KiB
C
Raw Permalink Normal View History

2025-12-31 08:21:43 +08:00
/**
*******************************************************************************************************
* @file fm33lg0xx_fl_divas.h
* @author FMSH Application Team
* @brief Head file of DIVAS FL Module
*******************************************************************************************************
* @attention
*
* Copyright (c) [2021] [Fudan Microelectronics]
* THIS SOFTWARE is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*
*******************************************************************************************************
*/
/* Define to prevent recursive inclusion---------------------------------------------------------------*/
#ifndef __FM33LG0XX_FL_DIVAS_H
#define __FM33LG0XX_FL_DIVAS_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes -------------------------------------------------------------------------------------------*/
#include "fm33lg0xx_fl_def.h"
/** @addtogroup FM33LG0XX_FL_Driver
* @{
*/
/** @defgroup DIVAS DIVAS
* @brief DIVAS FL driver
* @{
*/
/* Exported types -------------------------------------------------------------------------------------*/
/** @defgroup DIVAS_FL_ES_INIT DIVAS Exported Init structures
* @{
*/
/**
* @brief FL DIVAS Init Sturcture definition
*/
/**
* @}
*/
/* Exported constants ---------------------------------------------------------------------------------*/
/** @defgroup DIVAS_FL_Exported_Constants DIVAS Exported Constants
* @{
*/
#define FL_DIVAS_SR_BUSY_TIMEOUT (0xFFFU)
#define DIVAS_SR_DIV0_Pos (1U)
#define DIVAS_SR_DIV0_Msk (0x1U << DIVAS_SR_DIV0_Pos)
#define DIVAS_SR_DIV0 DIVAS_SR_DIV0_Msk
#define DIVAS_SR_BUSY_Pos (0U)
#define DIVAS_SR_BUSY_Msk (0x1U << DIVAS_SR_BUSY_Pos)
#define DIVAS_SR_BUSY DIVAS_SR_BUSY_Msk
#define DIVAS_CR_MODE_Pos (0U)
#define DIVAS_CR_MODE_Msk (0x1U << DIVAS_CR_MODE_Pos)
#define DIVAS_CR_MODE DIVAS_CR_MODE_Msk
#define FL_DIVAS_MODE_DIV (0x0U << DIVAS_CR_MODE_Pos)
#define FL_DIVAS_MODE_ROOT (0x1U << DIVAS_CR_MODE_Pos)
/**
* @}
*/
/* Exported functions ---------------------------------------------------------------------------------*/
/** @defgroup DIVAS_FL_Exported_Functions DIVAS Exported Functions
* @{
*/
/**
* @brief Write Operator Register
* @rmtoll OPRD FL_DIVAS_WriteOperand
* @param DIVASx DIVAS instance
* @param number
* @retval None
*/
__STATIC_INLINE void FL_DIVAS_WriteOperand(DIVAS_Type *DIVASx, uint32_t number)
{
WRITE_REG(DIVASx->OPRD, (number << 0U));
}
/**
* @brief Read Operator Register
* @rmtoll OPRD FL_DIVAS_ReadOperand
* @param DIVASx DIVAS instance
* @retval
*/
__STATIC_INLINE int32_t FL_DIVAS_ReadOperand(DIVAS_Type *DIVASx)
{
return (int32_t)(READ_REG(DIVASx->OPRD));
}
/**
* @brief Write 16bit Signed Dividend
* @rmtoll DIVSOR FL_DIVAS_WriteDivisor
* @param DIVASx DIVAS instance
* @param number
* @retval None
*/
__STATIC_INLINE void FL_DIVAS_WriteDivisor(DIVAS_Type *DIVASx, uint32_t number)
{
MODIFY_REG(DIVASx->DIVSOR, (0xffffU << 0U), (number << 0U));
}
/**
* @brief Read 16bit Signed Dividend
* @rmtoll DIVSOR FL_DIVAS_ReadDivisor
* @param DIVASx DIVAS instance
* @retval
*/
__STATIC_INLINE int32_t FL_DIVAS_ReadDivisor(DIVAS_Type *DIVASx)
{
return (int32_t)(READ_BIT(DIVASx->DIVSOR, 0xffffU) >> 0U);
}
/**
* @brief Read 32bit Signed QUTO
* @rmtoll QUOT FL_DIVAS_ReadQuotient
* @param DIVASx DIVAS instance
* @retval
*/
__STATIC_INLINE int32_t FL_DIVAS_ReadQuotient(DIVAS_Type *DIVASx)
{
return (int32_t)(READ_REG(DIVASx->QUOT));
}
/**
* @brief Read 16bit Signed Reminder
* @rmtoll REMD FL_DIVAS_ReadResidue
* @param DIVASx DIVAS instance
* @retval
*/
__STATIC_INLINE int16_t FL_DIVAS_ReadResidue(DIVAS_Type *DIVASx)
{
return (int16_t)(READ_BIT(DIVASx->REMD, 0xffffU) >> 0U);
}
/**
* @brief Read 16bit Unsigned Square Root
* @rmtoll ROOT FL_DIVAS_ReadRoot
* @param DIVASx DIVAS instance
* @retval
*/
__STATIC_INLINE uint16_t FL_DIVAS_ReadRoot(DIVAS_Type *DIVASx)
{
return (uint16_t)(READ_BIT(DIVASx->ROOT, 0xffffU) >> 0U);
}
/**
* @brief Get divided by 0 flag
* @rmtoll SR DIV0 FL_DIVAS_IsActiveFlag_DividedZero
* @param DIVASx DIVAS instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_DIVAS_IsActiveFlag_DividedZero(DIVAS_Type *DIVASx)
{
return (uint32_t)(READ_BIT(DIVASx->SR, DIVAS_SR_DIV0_Msk) == (DIVAS_SR_DIV0_Msk));
}
/**
* @brief Get Busy flag
* @rmtoll SR BUSY FL_DIVAS_IsActiveFlag_Busy
* @param DIVASx DIVAS instance
* @retval State of bit (1 or 0).
*/
__STATIC_INLINE uint32_t FL_DIVAS_IsActiveFlag_Busy(DIVAS_Type *DIVASx)
{
return (uint32_t)(READ_BIT(DIVASx->SR, DIVAS_SR_BUSY_Msk) == (DIVAS_SR_BUSY_Msk));
}
/**
* @brief Set Work Mode
* @rmtoll CR MODE FL_DIVAS_SetMode
* @param DIVASx DIVAS instance
* @param mode This parameter can be one of the following values:
* @arg @ref FL_DIVAS_MODE_DIV
* @arg @ref FL_DIVAS_MODE_ROOT
* @retval None
*/
__STATIC_INLINE void FL_DIVAS_SetMode(DIVAS_Type *DIVASx, uint32_t mode)
{
MODIFY_REG(DIVASx->CR, DIVAS_CR_MODE_Msk, mode);
}
/**
* @brief Get Work Mode
* @rmtoll CR MODE FL_DIVAS_GetMode
* @param DIVASx DIVAS instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_DIVAS_MODE_DIV
* @arg @ref FL_DIVAS_MODE_ROOT
*/
__STATIC_INLINE uint32_t FL_DIVAS_GetMode(DIVAS_Type *DIVASx)
{
return (uint32_t)(READ_BIT(DIVASx->CR, DIVAS_CR_MODE_Msk));
}
/**
* @}
*/
/** @defgroup DIVAS_FL_EF_Init Initialization and de-initialization functions
* @{
*/
FL_ErrorStatus FL_DIVAS_DeInit(DIVAS_Type *DIVASx);
FL_ErrorStatus FL_DIVAS_Init(DIVAS_Type *DIVASx);
uint32_t FL_DIVAS_Hdiv_Calculation(DIVAS_Type *DIVASx, int32_t DivisorEnd, int16_t Divisor, int32_t *Quotient, int16_t *Residue);
uint32_t FL_DIVAS_Root_Calculation(DIVAS_Type *DIVASx, uint32_t Root, uint16_t *Result);
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __FM33LG0XX_FL_DIVAS_H*/
/*************************Py_Code_Generator Version: 0.1-0.11-0.1 @ 2020-09-14*************************/
/*************************(C) COPYRIGHT Fudan Microelectronics **** END OF FILE*************************/