forked from Imagelibrary/rtems
This patch updates STM32 H7 HAL source files. The files are taken from two STM projects from their github.com repositories: (i) https://github.com/STMicroelectronics/stm32h7xx_hal_driver.git The project files are still available under BSD-3 license and the version/commit used is: fec141ce999da655a48e1a15db83a72d564a1312 which represents Release v1.11.3 exactly. (ii) https://github.com/STMicroelectronics/cmsis_device_h7.git The project files are available under Apache 2.0 license. Fortunately the project does not contain NOTICE file so no need to do anything special when used in RTEMS. The project version/commit imported is: faccfec37f82f7a1319c21638111b0f7335de7fe which represents Release v1.10.4 exactly.
167 lines
4.7 KiB
C
167 lines
4.7 KiB
C
/**
|
|
******************************************************************************
|
|
* @file stm32h7xx_ll_rng.c
|
|
* @author MCD Application Team
|
|
* @brief RNG LL module driver.
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2017 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
#if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "stm32h7xx_ll_rng.h"
|
|
#include "stm32h7xx_ll_bus.h"
|
|
|
|
#ifdef USE_FULL_ASSERT
|
|
#include "stm32_assert.h"
|
|
#else
|
|
#define assert_param(expr) ((void)0U)
|
|
#endif /* USE_FULL_ASSERT */
|
|
|
|
/** @addtogroup STM32H7xx_LL_Driver
|
|
* @{
|
|
*/
|
|
|
|
#if defined (RNG)
|
|
|
|
/** @addtogroup RNG_LL
|
|
* @{
|
|
*/
|
|
|
|
/* Private types -------------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* Private constants ---------------------------------------------------------*/
|
|
/* Private macros ------------------------------------------------------------*/
|
|
/** @defgroup RNG_LL_Private_Macros RNG Private Macros
|
|
* @ingroup RTEMSBSPsARMSTM32H7
|
|
* @{
|
|
*/
|
|
#define IS_LL_RNG_CED(__MODE__) (((__MODE__) == LL_RNG_CED_ENABLE) || \
|
|
((__MODE__) == LL_RNG_CED_DISABLE))
|
|
|
|
#if defined(RNG_CR_CONDRST)
|
|
#define IS_LL_RNG_CLOCK_DIVIDER(__CLOCK_DIV__) ((__CLOCK_DIV__) <=0x0Fu)
|
|
|
|
|
|
#define IS_LL_RNG_NIST_COMPLIANCE(__NIST_COMPLIANCE__) (((__NIST_COMPLIANCE__) == LL_RNG_NIST_COMPLIANT) || \
|
|
((__NIST_COMPLIANCE__) == LL_RNG_NOTNIST_COMPLIANT))
|
|
|
|
#define IS_LL_RNG_CONFIG1 (__CONFIG1__) ((__CONFIG1__) <= 0x3FUL)
|
|
|
|
#define IS_LL_RNG_CONFIG2 (__CONFIG2__) ((__CONFIG2__) <= 0x07UL)
|
|
|
|
#define IS_LL_RNG_CONFIG3 (__CONFIG3__) ((__CONFIG3__) <= 0xFUL)
|
|
#endif /* RNG_CR_CONDRST */
|
|
/**
|
|
* @}
|
|
*/
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
|
|
/* Exported functions --------------------------------------------------------*/
|
|
/** @addtogroup RNG_LL_Exported_Functions
|
|
* @{
|
|
*/
|
|
|
|
/** @addtogroup RNG_LL_EF_Init
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief De-initialize RNG registers (Registers restored to their default values).
|
|
* @param RNGx RNG Instance
|
|
* @retval An ErrorStatus enumeration value:
|
|
* - SUCCESS: RNG registers are de-initialized
|
|
* - ERROR: not applicable
|
|
*/
|
|
ErrorStatus LL_RNG_DeInit(const RNG_TypeDef *RNGx)
|
|
{
|
|
ErrorStatus status = SUCCESS;
|
|
|
|
/* Check the parameters */
|
|
assert_param(IS_RNG_ALL_INSTANCE(RNGx));
|
|
if (RNGx == RNG)
|
|
{
|
|
/* Enable RNG reset state */
|
|
LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_RNG);
|
|
|
|
/* Release RNG from reset state */
|
|
LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_RNG);
|
|
}
|
|
else
|
|
{
|
|
status = ERROR;
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
/**
|
|
* @brief Initialize RNG registers according to the specified parameters in RNG_InitStruct.
|
|
* @param RNGx RNG Instance
|
|
* @param RNG_InitStruct pointer to a LL_RNG_InitTypeDef structure
|
|
* that contains the configuration information for the specified RNG peripheral.
|
|
* @retval An ErrorStatus enumeration value:
|
|
* - SUCCESS: RNG registers are initialized according to RNG_InitStruct content
|
|
* - ERROR: not applicable
|
|
*/
|
|
ErrorStatus LL_RNG_Init(RNG_TypeDef *RNGx, LL_RNG_InitTypeDef *RNG_InitStruct)
|
|
{
|
|
/* Check the parameters */
|
|
assert_param(IS_RNG_ALL_INSTANCE(RNGx));
|
|
assert_param(IS_LL_RNG_CED(RNG_InitStruct->ClockErrorDetection));
|
|
|
|
#if defined(RNG_CR_CONDRST)
|
|
/* Clock Error Detection Configuration when CONDRT bit is set to 1 */
|
|
MODIFY_REG(RNGx->CR, RNG_CR_CED | RNG_CR_CONDRST, RNG_InitStruct->ClockErrorDetection | RNG_CR_CONDRST);
|
|
/* Writing bits CONDRST=0*/
|
|
CLEAR_BIT(RNGx->CR, RNG_CR_CONDRST);
|
|
#else
|
|
/* Clock Error Detection configuration */
|
|
MODIFY_REG(RNGx->CR, RNG_CR_CED, RNG_InitStruct->ClockErrorDetection);
|
|
#endif /* RNG_CR_CONDRST */
|
|
|
|
return (SUCCESS);
|
|
}
|
|
|
|
/**
|
|
* @brief Set each @ref LL_RNG_InitTypeDef field to default value.
|
|
* @param RNG_InitStruct pointer to a @ref LL_RNG_InitTypeDef structure
|
|
* whose fields will be set to default values.
|
|
* @retval None
|
|
*/
|
|
void LL_RNG_StructInit(LL_RNG_InitTypeDef *RNG_InitStruct)
|
|
{
|
|
/* Set RNG_InitStruct fields to default values */
|
|
RNG_InitStruct->ClockErrorDetection = LL_RNG_CED_ENABLE;
|
|
|
|
}
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* RNG */
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* USE_FULL_LL_DRIVER */
|
|
|