You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
264 lines
8.6 KiB
C
264 lines
8.6 KiB
C
4 weeks ago
|
/**
|
||
|
******************************************************************************
|
||
|
* @file stm32u0xx_hal_rng_ex.h
|
||
|
* @author MCD Application Team
|
||
|
* @brief Header file of RNG HAL Extension module.
|
||
|
******************************************************************************
|
||
|
* @attention
|
||
|
*
|
||
|
* Copyright (c) 2023 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.
|
||
|
*
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
|
||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||
|
#ifndef STM32U0xx_HAL_RNG_EX_H
|
||
|
#define STM32U0xx_HAL_RNG_EX_H
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* Includes ------------------------------------------------------------------*/
|
||
|
#include "stm32u0xx_hal_def.h"
|
||
|
|
||
|
/** @addtogroup STM32U0xx_HAL_Driver
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
#if defined(RNG)
|
||
|
#if defined(RNG_CR_CONDRST)
|
||
|
|
||
|
/** @defgroup RNGEx RNGEx
|
||
|
* @brief RNG Extension HAL module driver
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/* Exported types ------------------------------------------------------------*/
|
||
|
/** @defgroup RNGEx_Exported_Types RNGEx Exported Types
|
||
|
* @brief RNGEx Exported types
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @brief RNGEx Configuration Structure definition
|
||
|
*/
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
uint32_t Config1; /*!< Config1 must be a value between 0 and 0x3F */
|
||
|
uint32_t Config2; /*!< Config2 must be a value between 0 and 0x7 */
|
||
|
uint32_t Config3; /*!< Config3 must be a value between 0 and 0xF */
|
||
|
uint32_t ClockDivider; /*!< Clock Divider factor.This parameter can
|
||
|
be a value of @ref RNGEx_Clock_Divider_Factor */
|
||
|
uint32_t NistCompliance; /*!< NIST compliance.This parameter can be a
|
||
|
value of @ref RNGEx_NIST_Compliance */
|
||
|
uint32_t AutoReset; /*!< automatic reset When a noise source error occurs
|
||
|
value of @ref RNGEx_Auto_Reset */
|
||
|
uint32_t HealthTest; /*!< RNG health test control must be a value
|
||
|
between 0x0FFCABFF and 0x00005200 */
|
||
|
} RNG_ConfigTypeDef;
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Exported constants --------------------------------------------------------*/
|
||
|
/** @defgroup RNGEx_Exported_Constants RNGEx Exported Constants
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/** @defgroup RNGEx_Clock_Divider_Factor Value used to configure an internal
|
||
|
* programmable divider acting on the incoming RNG clock
|
||
|
* @{
|
||
|
*/
|
||
|
#define RNG_CLKDIV_BY_1 (0x00000000UL) /*!< No clock division */
|
||
|
#define RNG_CLKDIV_BY_2 (RNG_CR_CLKDIV_0)
|
||
|
/*!< 2 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_4 (RNG_CR_CLKDIV_1)
|
||
|
/*!< 4 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_8 (RNG_CR_CLKDIV_1 | RNG_CR_CLKDIV_0)
|
||
|
/*!< 8 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_16 (RNG_CR_CLKDIV_2)
|
||
|
/*!< 16 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_32 (RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_0)
|
||
|
/*!< 32 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_64 (RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_1)
|
||
|
/*!< 64 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_128 (RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_1 | RNG_CR_CLKDIV_0)
|
||
|
/*!< 128 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_256 (RNG_CR_CLKDIV_3)
|
||
|
/*!< 256 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_512 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_0)
|
||
|
/*!< 512 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_1024 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_1)
|
||
|
/*!< 1024 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_2048 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_1 | RNG_CR_CLKDIV_0)
|
||
|
/*!< 2048 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_4096 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_2)
|
||
|
/*!< 4096 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_8192 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_0)
|
||
|
/*!< 8192 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_16384 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_1)
|
||
|
/*!< 16384 RNG clock cycles per internal RNG clock */
|
||
|
#define RNG_CLKDIV_BY_32768 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_1 | RNG_CR_CLKDIV_0)
|
||
|
/*!< 32768 RNG clock cycles per internal RNG clock */
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup RNGEx_NIST_Compliance NIST Compliance configuration
|
||
|
* @{
|
||
|
*/
|
||
|
#define RNG_NIST_COMPLIANT (0x00000000UL) /*!< NIST compliant configuration*/
|
||
|
#define RNG_CUSTOM_NIST (RNG_CR_NISTC) /*!< Custom NIST configuration */
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
/** @defgroup RNGEx_Auto_Reset Auto Reset configuration
|
||
|
* @{
|
||
|
*/
|
||
|
#define RNG_ARDIS_ENABLE (0x00000000UL) /*!< automatic reset after seed error*/
|
||
|
#define RNG_ARDIS_DISABLE (RNG_CR_ARDIS) /*!< Disable automatic reset after seed error */
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Private types -------------------------------------------------------------*/
|
||
|
/** @defgroup RNGEx_Private_Types RNGEx Private Types
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Private variables ---------------------------------------------------------*/
|
||
|
/** @defgroup RNGEx_Private_Variables RNGEx Private Variables
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Private constants ---------------------------------------------------------*/
|
||
|
/** @defgroup RNGEx_Private_Constants RNGEx Private Constants
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Private macros ------------------------------------------------------------*/
|
||
|
/** @defgroup RNGEx_Private_Macros RNGEx Private Macros
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
#define IS_RNG_CLOCK_DIVIDER(__CLOCK_DIV__) (((__CLOCK_DIV__) == RNG_CLKDIV_BY_1) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_2) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_4) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_8) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_16) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_32) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_64) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_128) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_256) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_512) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_1024) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_2048) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_4096) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_8192) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_16384) || \
|
||
|
((__CLOCK_DIV__) == RNG_CLKDIV_BY_32768))
|
||
|
|
||
|
|
||
|
#define IS_RNG_NIST_COMPLIANCE(__NIST_COMPLIANCE__) (((__NIST_COMPLIANCE__) == RNG_NIST_COMPLIANT) || \
|
||
|
((__NIST_COMPLIANCE__) == RNG_CUSTOM_NIST))
|
||
|
|
||
|
#define IS_RNG_CONFIG1(__CONFIG1__) ((__CONFIG1__) <= 0x3FUL)
|
||
|
|
||
|
#define IS_RNG_CONFIG2(__CONFIG2__) ((__CONFIG2__) <= 0x07UL)
|
||
|
|
||
|
#define IS_RNG_CONFIG3(__CONFIG3__) ((__CONFIG3__) <= 0xFUL)
|
||
|
#define IS_RNG_ARDIS(__ARDIS__) (((__ARDIS__) == RNG_ARDIS_ENABLE) || \
|
||
|
((__ARDIS__) == RNG_ARDIS_DISABLE))
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Private functions ---------------------------------------------------------*/
|
||
|
/** @defgroup RNGEx_Private_Functions RNGEx Private Functions
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Exported functions --------------------------------------------------------*/
|
||
|
/** @addtogroup RNGEx_Exported_Functions
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup RNGEx_Exported_Functions_Group1
|
||
|
* @{
|
||
|
*/
|
||
|
HAL_StatusTypeDef HAL_RNGEx_SetConfig(RNG_HandleTypeDef *hrng, const RNG_ConfigTypeDef *pConf);
|
||
|
HAL_StatusTypeDef HAL_RNGEx_GetConfig(RNG_HandleTypeDef *hrng, RNG_ConfigTypeDef *pConf);
|
||
|
HAL_StatusTypeDef HAL_RNGEx_LockConfig(RNG_HandleTypeDef *hrng);
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup RNGEx_Exported_Functions_Group2
|
||
|
* @{
|
||
|
*/
|
||
|
HAL_StatusTypeDef HAL_RNGEx_RecoverSeedError(RNG_HandleTypeDef *hrng);
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
#endif /* RNG_CR_CONDRST */
|
||
|
#endif /* RNG */
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#endif /* STM32U0xx_HAL_RNG_EX_H */
|
||
|
|