1 /** 2 ****************************************************************************** 3 * @file stm32h5xx_hal_rng_ex.h 4 * @author MCD Application Team 5 * @brief Header file of RNG HAL Extension module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2022 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32H5xx_HAL_RNG_EX_H 21 #define STM32H5xx_HAL_RNG_EX_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32h5xx_hal_def.h" 29 30 /** @addtogroup STM32H5xx_HAL_Driver 31 * @{ 32 */ 33 34 #if defined(RNG) 35 #if defined(RNG_CR_CONDRST) 36 37 /** @defgroup RNG_Ex RNG_Ex 38 * @brief RNG Extension HAL module driver 39 * @{ 40 */ 41 42 /* Exported types ------------------------------------------------------------*/ 43 /** @defgroup RNG_Ex_Exported_Types RNG_Ex Exported Types 44 * @brief RNG_Ex Exported types 45 * @{ 46 */ 47 48 /** 49 * @brief RNG_Ex Configuration Structure definition 50 */ 51 52 typedef struct 53 { 54 uint32_t Config1; /*!< Config1 must be a value between 0 and 0x3F */ 55 uint32_t Config2; /*!< Config2 must be a value between 0 and 0x7 */ 56 uint32_t Config3; /*!< Config3 must be a value between 0 and 0xF */ 57 uint32_t ClockDivider; /*!< Clock Divider factor.This parameter can 58 be a value of @ref RNG_Ex_Clock_Divider_Factor */ 59 uint32_t NistCompliance; /*!< NIST compliance.This parameter can be a 60 value of @ref RNG_Ex_NIST_Compliance */ 61 uint32_t AutoReset; /*!< automatic reset When a noise source error occurs 62 value of @ref RNG_Ex_Auto_Reset */ 63 uint32_t HealthTest; /*!< RNG health test control must be a value 64 between 0x0FFCABFF and 0x00005200 */ 65 } RNG_ConfigTypeDef; 66 67 /** 68 * @} 69 */ 70 71 /* Exported constants --------------------------------------------------------*/ 72 /** @defgroup RNG_Ex_Exported_Constants RNG_Ex Exported Constants 73 * @{ 74 */ 75 76 /** @defgroup RNG_Ex_Clock_Divider_Factor Value used to configure an internal 77 * programmable divider acting on the incoming RNG clock 78 * @{ 79 */ 80 #define RNG_CLKDIV_BY_1 (0x00000000UL) /*!< No clock division */ 81 #define RNG_CLKDIV_BY_2 (RNG_CR_CLKDIV_0) 82 /*!< 2 RNG clock cycles per internal RNG clock */ 83 #define RNG_CLKDIV_BY_4 (RNG_CR_CLKDIV_1) 84 /*!< 4 RNG clock cycles per internal RNG clock */ 85 #define RNG_CLKDIV_BY_8 (RNG_CR_CLKDIV_1 | RNG_CR_CLKDIV_0) 86 /*!< 8 RNG clock cycles per internal RNG clock */ 87 #define RNG_CLKDIV_BY_16 (RNG_CR_CLKDIV_2) 88 /*!< 16 RNG clock cycles per internal RNG clock */ 89 #define RNG_CLKDIV_BY_32 (RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_0) 90 /*!< 32 RNG clock cycles per internal RNG clock */ 91 #define RNG_CLKDIV_BY_64 (RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_1) 92 /*!< 64 RNG clock cycles per internal RNG clock */ 93 #define RNG_CLKDIV_BY_128 (RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_1 | RNG_CR_CLKDIV_0) 94 /*!< 128 RNG clock cycles per internal RNG clock */ 95 #define RNG_CLKDIV_BY_256 (RNG_CR_CLKDIV_3) 96 /*!< 256 RNG clock cycles per internal RNG clock */ 97 #define RNG_CLKDIV_BY_512 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_0) 98 /*!< 512 RNG clock cycles per internal RNG clock */ 99 #define RNG_CLKDIV_BY_1024 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_1) 100 /*!< 1024 RNG clock cycles per internal RNG clock */ 101 #define RNG_CLKDIV_BY_2048 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_1 | RNG_CR_CLKDIV_0) 102 /*!< 2048 RNG clock cycles per internal RNG clock */ 103 #define RNG_CLKDIV_BY_4096 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_2) 104 /*!< 4096 RNG clock cycles per internal RNG clock */ 105 #define RNG_CLKDIV_BY_8192 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_0) 106 /*!< 8192 RNG clock cycles per internal RNG clock */ 107 #define RNG_CLKDIV_BY_16384 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_1) 108 /*!< 16384 RNG clock cycles per internal RNG clock */ 109 #define RNG_CLKDIV_BY_32768 (RNG_CR_CLKDIV_3 | RNG_CR_CLKDIV_2 | RNG_CR_CLKDIV_1 | RNG_CR_CLKDIV_0) 110 /*!< 32768 RNG clock cycles per internal RNG clock */ 111 /** 112 * @} 113 */ 114 115 /** @defgroup RNG_Ex_NIST_Compliance NIST Compliance configuration 116 * @{ 117 */ 118 #define RNG_NIST_COMPLIANT (0x00000000UL) /*!< NIST compliant configuration*/ 119 #define RNG_CUSTOM_NIST (RNG_CR_NISTC) /*!< Custom NIST configuration */ 120 121 /** 122 * @} 123 */ 124 /** @defgroup RNG_Ex_Auto_Reset Auto Reset configuration 125 * @{ 126 */ 127 #define RNG_ARDIS_ENABLE (0x00000000UL) /*!< automatic reset after seed error*/ 128 #define RNG_ARDIS_DISABLE (RNG_CR_ARDIS) /*!< Disable automatic reset after seed error */ 129 130 /** 131 * @} 132 */ 133 134 /** 135 * @} 136 */ 137 138 /* Private types -------------------------------------------------------------*/ 139 /** @defgroup RNG_Ex_Private_Types RNG_Ex Private Types 140 * @{ 141 */ 142 143 /** 144 * @} 145 */ 146 147 /* Private variables ---------------------------------------------------------*/ 148 /** @defgroup RNG_Ex_Private_Variables RNG_Ex Private Variables 149 * @{ 150 */ 151 152 /** 153 * @} 154 */ 155 156 /* Private constants ---------------------------------------------------------*/ 157 /** @defgroup RNG_Ex_Private_Constants RNG_Ex Private Constants 158 * @{ 159 */ 160 161 /** 162 * @} 163 */ 164 165 /* Private macros ------------------------------------------------------------*/ 166 /** @defgroup RNG_Ex_Private_Macros RNG_Ex Private Macros 167 * @{ 168 */ 169 170 #define IS_RNG_CLOCK_DIVIDER(__CLOCK_DIV__) (((__CLOCK_DIV__) == RNG_CLKDIV_BY_1) || \ 171 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_2) || \ 172 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_4) || \ 173 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_8) || \ 174 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_16) || \ 175 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_32) || \ 176 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_64) || \ 177 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_128) || \ 178 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_256) || \ 179 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_512) || \ 180 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_1024) || \ 181 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_2048) || \ 182 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_4096) || \ 183 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_8192) || \ 184 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_16384) || \ 185 ((__CLOCK_DIV__) == RNG_CLKDIV_BY_32768)) 186 187 188 #define IS_RNG_NIST_COMPLIANCE(__NIST_COMPLIANCE__) (((__NIST_COMPLIANCE__) == RNG_NIST_COMPLIANT) || \ 189 ((__NIST_COMPLIANCE__) == RNG_CUSTOM_NIST)) 190 191 #define IS_RNG_CONFIG1(__CONFIG1__) ((__CONFIG1__) <= 0x3FUL) 192 193 #define IS_RNG_CONFIG2(__CONFIG2__) ((__CONFIG2__) <= 0x07UL) 194 195 #define IS_RNG_CONFIG3(__CONFIG3__) ((__CONFIG3__) <= 0xFUL) 196 #define IS_RNG_ARDIS(__ARDIS__) (((__ARDIS__) == RNG_ARDIS_ENABLE) || \ 197 ((__ARDIS__) == RNG_ARDIS_DISABLE)) 198 199 200 /** 201 * @} 202 */ 203 204 /* Private functions ---------------------------------------------------------*/ 205 /** @defgroup RNG_Ex_Private_Functions RNG_Ex Private Functions 206 * @{ 207 */ 208 209 /** 210 * @} 211 */ 212 213 /* Exported functions --------------------------------------------------------*/ 214 /** @defgroup RNG_Ex_Exported_Functions RNG_Ex Exported Functions 215 * @{ 216 */ 217 218 /** @addtogroup RNG_Ex_Exported_Functions_Group1 219 * @{ 220 */ 221 HAL_StatusTypeDef HAL_RNGEx_SetConfig(RNG_HandleTypeDef *hrng, RNG_ConfigTypeDef *pConf); 222 HAL_StatusTypeDef HAL_RNGEx_GetConfig(RNG_HandleTypeDef *hrng, RNG_ConfigTypeDef *pConf); 223 HAL_StatusTypeDef HAL_RNGEx_LockConfig(RNG_HandleTypeDef *hrng); 224 225 /** 226 * @} 227 */ 228 229 /** @addtogroup RNG_Ex_Exported_Functions_Group2 230 * @{ 231 */ 232 HAL_StatusTypeDef HAL_RNGEx_RecoverSeedError(RNG_HandleTypeDef *hrng); 233 234 /** 235 * @} 236 */ 237 238 /** 239 * @} 240 */ 241 242 /** 243 * @} 244 */ 245 246 /** 247 * @} 248 */ 249 250 #endif /* RNG_CR_CONDRST */ 251 #endif /* RNG */ 252 253 /** 254 * @} 255 */ 256 257 #ifdef __cplusplus 258 } 259 #endif 260 261 262 #endif /* STM32H5xx_HAL_RNG_EX_H */ 263 264