243 lines
6.5 KiB
C
243 lines
6.5 KiB
C
/**
|
|
******************************************************************************
|
|
* @file py32f040_ll_div.h
|
|
* @author MCU Application Team
|
|
* @brief Header file of DIV LL module.
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* <h2><center>© Copyright (c) 2023 Puya Semiconductor Co.
|
|
* All rights reserved.</center></h2>
|
|
*
|
|
* This software component is licensed by Puya under BSD 3-Clause license,
|
|
* the "License"; You may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at:
|
|
* opensource.org/licenses/BSD-3-Clause
|
|
*
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* <h2><center>© Copyright (c) 2016 STMicroelectronics.
|
|
* All rights reserved.</center></h2>
|
|
*
|
|
* This software component is licensed by ST under BSD 3-Clause license,
|
|
* the "License"; You may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at:
|
|
* opensource.org/licenses/BSD-3-Clause
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
#ifndef PY32F040_LL_DIV_H
|
|
#define PY32F040_LL_DIV_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "py32f0xx.h"
|
|
|
|
/** @addtogroup PY32F040_LL_Driver
|
|
* @{
|
|
*/
|
|
|
|
#if defined (DIV)
|
|
|
|
/** @defgroup DIV_LL DIV
|
|
* @{
|
|
*/
|
|
|
|
/* Private types -------------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* Private constants ---------------------------------------------------------*/
|
|
/* Private macros ------------------------------------------------------------*/
|
|
/* Exported types ------------------------------------------------------------*/
|
|
/* Exported constants --------------------------------------------------------*/
|
|
/** @defgroup DIV_LL_Exported_Constants DIV Exported Constants
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup DIV_LL_EC_MODE Sign mode Selection
|
|
* @{
|
|
*/
|
|
#define LL_DIV_MODE_UNSIGNED 0x00000000U
|
|
#define LL_DIV_MODE_SIGNED DIV_SIGN_DIV_SIGN
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/* Exported macro ------------------------------------------------------------*/
|
|
/** @defgroup DIV_LL_Exported_Macros DIV Exported Macros
|
|
* @{
|
|
*/
|
|
/** @defgroup DIV_LL_EM_WRITE_READ Common Write and read registers macros
|
|
* @{
|
|
*/
|
|
/**
|
|
* @brief Write a value in DIV register
|
|
* @param __INSTANCE__ DIV Instance
|
|
* @param __REG__ Register to be written
|
|
* @param __VALUE__ Value to be written in the register
|
|
* @retval None
|
|
*/
|
|
#define LL_DIV_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
|
|
|
|
/**
|
|
* @brief Read a value in DIV register
|
|
* @param __INSTANCE__ DIV Instance
|
|
* @param __REG__ Register to be read
|
|
* @retval Register value
|
|
*/
|
|
#define LL_DIV_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/* Exported functions --------------------------------------------------------*/
|
|
/** @defgroup DIV_LL_Exported_Functions DIV Exported Functions
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Set the DIV sign.
|
|
* @param DIVx DIV Instance
|
|
* @param Sign This parameter can be one of the following values:
|
|
* @arg @ref LL_DIV_MODE_UNSIGNED
|
|
* @arg @ref LL_DIV_MODE_SIGNED
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_DIV_SetSign(DIV_TypeDef *DIVx, uint32_t Sign)
|
|
{
|
|
MODIFY_REG(DIVx->SIGN, DIV_SIGN_DIV_SIGN, Sign);
|
|
}
|
|
|
|
/**
|
|
* @brief Get the DIV sign.
|
|
* @param DIVx DIV Instance
|
|
* @retval Returned value can be one of the following values:
|
|
* @arg @ref LL_DIV_MODE_UNSIGNED
|
|
* @arg @ref LL_DIV_MODE_SIGNED
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_DIV_GetSign(DIV_TypeDef *DIVx)
|
|
{
|
|
return (uint32_t)(READ_BIT(DIVx->SIGN, DIV_SIGN_DIV_SIGN));
|
|
}
|
|
|
|
/**
|
|
* @brief Set the DIV Dividend value.
|
|
* @param DIVx DIV Instance
|
|
* @param Dividend This parameter must be a number between Min_Data = 0x00000000 and Max_Data = 0xFFFFFFFF
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_DIV_SetDividend(DIV_TypeDef *DIVx, int32_t Dividend)
|
|
{
|
|
WRITE_REG(DIVx->DEND, Dividend);
|
|
}
|
|
|
|
/**
|
|
* @brief Get the DIV Dividend value.
|
|
* @param DIVx DIV Instance
|
|
* @retval Returned value is a number between Min_Data = 0x00000000 and Max_Data = 0xFFFFFFFF
|
|
*/
|
|
__STATIC_INLINE int32_t LL_DIV_GetDividend(DIV_TypeDef *DIVx)
|
|
{
|
|
return (int32_t)(READ_REG(DIVx->DEND));
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Set the DIV Divisor value.
|
|
* @param DIVx DIV Instance
|
|
* @param Divisor This parameter must be a number between Min_Data = 0x00000000 and Max_Data = 0xFFFFFFFF
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_DIV_SetDivisor(DIV_TypeDef *DIVx, int32_t Divisor)
|
|
{
|
|
WRITE_REG(DIVx->SOR, Divisor);
|
|
}
|
|
|
|
/**
|
|
* @brief Get the DIV Divisor value.
|
|
* @param DIVx DIV Instance
|
|
* @retval Returned value is a number between Min_Data = 0x00000000 and Max_Data = 0xFFFFFFFF
|
|
*/
|
|
__STATIC_INLINE int32_t LL_DIV_GetDivisor(DIV_TypeDef *DIVx)
|
|
{
|
|
return (int32_t)(READ_REG(DIVx->SOR));
|
|
}
|
|
|
|
/**
|
|
* @brief Get the DIV Quotient value.
|
|
* @param DIVx DIV Instance
|
|
* @retval Returned value is a number between Min_Data = 0x00000000 and Max_Data = 0xFFFFFFFF
|
|
*/
|
|
__STATIC_INLINE int32_t LL_DIV_GetQuotient(DIV_TypeDef *DIVx)
|
|
{
|
|
return (int32_t)(READ_REG(DIVx->QUOT));
|
|
}
|
|
|
|
/**
|
|
* @brief Get the DIV Remainder value.
|
|
* @param DIVx DIV Instance
|
|
* @retval Returned value is a number between Min_Data = 0x00000000 and Max_Data = 0xFFFFFFFF
|
|
*/
|
|
__STATIC_INLINE int32_t LL_DIV_GetRemainder(DIV_TypeDef *DIVx)
|
|
{
|
|
return (int32_t)(READ_REG(DIVx->REMA));
|
|
}
|
|
|
|
/**
|
|
* @brief Check if Divide by zero warning flag bit is set.
|
|
* @param DIVx DIV Instance
|
|
* @retval State of bit (1 or 0).
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_DIV_IsActiveFlag_DIV_ZERO(DIV_TypeDef *DIVx)
|
|
{
|
|
return ((READ_BIT(DIVx->STAT, DIV_STAT_DIV_ZERO) == (DIV_STAT_DIV_ZERO)) ? 1UL : 0UL);
|
|
}
|
|
|
|
/**
|
|
* @brief Check if Division operation end flag bit is set.
|
|
* @param DIVx DIV Instance
|
|
* @retval State of bit (1 or 0).
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_DIV_IsActiveFlag_DIV_END(DIV_TypeDef *DIVx)
|
|
{
|
|
return ((READ_BIT(DIVx->STAT, DIV_STAT_DIV_END) == (DIV_STAT_DIV_END)) ? 1UL : 0UL);
|
|
}
|
|
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* DIV */
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* PY32F040_LL_DIV_H */
|
|
|
|
/************************ (C) COPYRIGHT Puya *****END OF FILE****/
|