1 /** 2 ****************************************************************************** 3 * @file stm32l0xx_hal_rng.h 4 5 * @author MCD Application Team 6 * @brief Header file of RNG HAL module. 7 ****************************************************************************** 8 * @attention 9 * 10 * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> 11 * 12 * Redistribution and use in source and binary forms, with or without modification, 13 * are permitted provided that the following conditions are met: 14 * 1. Redistributions of source code must retain the above copyright notice, 15 * this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright notice, 17 * this list of conditions and the following disclaimer in the documentation 18 * and/or other materials provided with the distribution. 19 * 3. Neither the name of STMicroelectronics nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 * 34 ****************************************************************************** 35 */ 36 37 /* Define to prevent recursive inclusion -------------------------------------*/ 38 #ifndef __STM32L0xx_HAL_RNG_H 39 #define __STM32L0xx_HAL_RNG_H 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 #if defined (STM32L052xx) || defined (STM32L053xx) || defined (STM32L062xx) || defined (STM32L063xx) || \ 46 defined (STM32L072xx) || defined (STM32L073xx) || defined (STM32L082xx) || defined (STM32L083xx) 47 48 /* Includes ------------------------------------------------------------------*/ 49 #include "stm32l0xx_hal_def.h" 50 51 /** @addtogroup STM32L0xx_HAL_Driver 52 * @{ 53 */ 54 55 /** @defgroup RNG RNG 56 * @brief RNG HAL module driver 57 * @{ 58 */ 59 60 /* Exported types ------------------------------------------------------------*/ 61 62 /** @defgroup RNG_Exported_Types RNG Exported Types 63 * @{ 64 */ 65 66 /** @defgroup RNG_Exported_Types_Group1 RNG State Structure definition 67 * @{ 68 */ 69 typedef enum 70 { 71 HAL_RNG_STATE_RESET = 0x00U, /*!< RNG not yet initialized or disabled */ 72 HAL_RNG_STATE_READY = 0x01U, /*!< RNG initialized and ready for use */ 73 HAL_RNG_STATE_BUSY = 0x02U, /*!< RNG internal process is ongoing */ 74 HAL_RNG_STATE_TIMEOUT = 0x03U, /*!< RNG timeout state */ 75 HAL_RNG_STATE_ERROR = 0x04U /*!< RNG error state */ 76 77 }HAL_RNG_StateTypeDef; 78 79 /** 80 * @} 81 */ 82 83 /** @defgroup RNG_Exported_Types_Group2 RNG Handle Structure definition 84 * @{ 85 */ 86 typedef struct 87 { 88 RNG_TypeDef *Instance; /*!< Register base address */ 89 90 HAL_LockTypeDef Lock; /*!< RNG locking object */ 91 92 __IO HAL_RNG_StateTypeDef State; /*!< RNG communication state */ 93 94 uint32_t RandomNumber; /*!< Last Generated RNG Data */ 95 96 }RNG_HandleTypeDef; 97 98 /** 99 * @} 100 */ 101 102 /** 103 * @} 104 */ 105 106 /* Exported constants --------------------------------------------------------*/ 107 108 /** @defgroup RNG_Exported_Constants RNG Exported Constants 109 * @{ 110 */ 111 112 /** @defgroup RNG_Exported_Constants_Group1 RNG Interrupt definition 113 * @{ 114 */ 115 #define RNG_IT_DRDY ((uint32_t)RNG_SR_DRDY) /*!< Data ready interrupt */ 116 #define RNG_IT_CEI ((uint32_t)RNG_SR_CEIS) /*!< Clock error interrupt */ 117 #define RNG_IT_SEI ((uint32_t)RNG_SR_SEIS) /*!< Seed error interrupt */ 118 119 120 /** 121 * @} 122 */ 123 124 /** @defgroup RNG_Exported_Constants_Group2 RNG Flag definition 125 * @{ 126 */ 127 #define RNG_FLAG_DRDY ((uint32_t)RNG_SR_DRDY) /*!< Data ready */ 128 #define RNG_FLAG_CECS ((uint32_t)RNG_SR_CECS) /*!< Clock error current status */ 129 #define RNG_FLAG_SECS ((uint32_t)RNG_SR_SECS) /*!< Seed error current status */ 130 131 /** 132 * @} 133 */ 134 135 /** 136 * @} 137 */ 138 139 /* Exported macros -----------------------------------------------------------*/ 140 /** @defgroup RNG_Exported_Macros RNG Exported Macros 141 * @{ 142 */ 143 144 /** @brief Reset RNG handle state 145 * @param __HANDLE__: RNG Handle 146 * @retval None 147 */ 148 #define __HAL_RNG_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_RNG_STATE_RESET) 149 150 /** 151 * @brief Enables the RNG peripheral. 152 * @param __HANDLE__: RNG Handle 153 * @retval None 154 */ 155 #define __HAL_RNG_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= RNG_CR_RNGEN) 156 157 /** 158 * @brief Disables the RNG peripheral. 159 * @param __HANDLE__: RNG Handle 160 * @retval None 161 */ 162 #define __HAL_RNG_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~RNG_CR_RNGEN) 163 164 /** 165 * @brief Check the selected RNG flag status. 166 * @param __HANDLE__: RNG Handle 167 * @param __FLAG__: RNG flag 168 * This parameter can be one of the following values: 169 * @arg RNG_FLAG_DRDY: Data ready 170 * @arg RNG_FLAG_CECS: Clock error current status 171 * @arg RNG_FLAG_SECS: Seed error current status 172 * @retval The new state of __FLAG__ (SET or RESET). 173 */ 174 #define __HAL_RNG_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) 175 176 177 /** 178 * @brief Clears the selected RNG flag status. 179 * @param __HANDLE__: RNG handle 180 * @param __FLAG__: RNG flag to clear 181 * @note WARNING: This is a dummy macro for HAL code alignment, 182 * flags RNG_FLAG_DRDY, RNG_FLAG_CECS and RNG_FLAG_SECS are read-only. 183 * @retval None 184 */ 185 #define __HAL_RNG_CLEAR_FLAG(__HANDLE__, __FLAG__) /* dummy macro */ 186 187 188 189 /** 190 * @brief Enables the RNG interrupts. 191 * @param __HANDLE__: RNG Handle 192 * @retval None 193 */ 194 #define __HAL_RNG_ENABLE_IT(__HANDLE__) ((__HANDLE__)->Instance->CR |= RNG_CR_IE) 195 196 /** 197 * @brief Disables the RNG interrupts. 198 * @param __HANDLE__: RNG Handle 199 * @retval None 200 */ 201 #define __HAL_RNG_DISABLE_IT(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~RNG_CR_IE) 202 203 /** 204 * @brief Checks whether the specified RNG interrupt has occurred or not. 205 * @param __HANDLE__: RNG Handle 206 * @param __INTERRUPT__: specifies the RNG interrupt status flag to check. 207 * This parameter can be one of the following values: 208 * @arg RNG_IT_DRDY: Data ready interrupt 209 * @arg RNG_IT_CEI: Clock error interrupt 210 * @arg RNG_IT_SEI: Seed error interrupt 211 * @retval The new state of __INTERRUPT__ (SET or RESET). 212 */ 213 #define __HAL_RNG_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->SR & (__INTERRUPT__)) == (__INTERRUPT__)) 214 215 /** 216 * @brief Clears the RNG interrupt status flags. 217 * @param __HANDLE__: RNG Handle 218 * @param __INTERRUPT__: specifies the RNG interrupt status flag to clear. 219 * This parameter can be one of the following values: 220 * @arg RNG_IT_CEI: Clock error interrupt 221 * @arg RNG_IT_SEI: Seed error interrupt 222 * @note RNG_IT_DRDY flag is read-only, reading RNG_DR register automatically clears RNG_IT_DRDY. 223 * @retval None 224 */ 225 #define __HAL_RNG_CLEAR_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->SR) = ~(__INTERRUPT__)) 226 227 /** 228 * @} 229 */ 230 231 /* Exported functions --------------------------------------------------------*/ 232 /** @defgroup RNG_Exported_Functions RNG Exported Functions 233 * @{ 234 */ 235 236 /* Initialization and de-initialization functions ******************************/ 237 /** @defgroup RNG_Exported_Functions_Group1 Initialization and de-initialization functions 238 * @{ 239 */ 240 HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng); 241 HAL_StatusTypeDef HAL_RNG_DeInit (RNG_HandleTypeDef *hrng); 242 void HAL_RNG_MspInit(RNG_HandleTypeDef *hrng); 243 void HAL_RNG_MspDeInit(RNG_HandleTypeDef *hrng); 244 245 /** 246 * @} 247 */ 248 249 /* Peripheral Control functions ************************************************/ 250 /** @defgroup RNG_Exported_Functions_Group2 Peripheral Control functions 251 * @{ 252 */ 253 uint32_t HAL_RNG_GetRandomNumber(RNG_HandleTypeDef *hrng); /* Obsolete, use HAL_RNG_GenerateRandomNumber() instead */ 254 uint32_t HAL_RNG_GetRandomNumber_IT(RNG_HandleTypeDef *hrng); /* Obsolete, use HAL_RNG_GenerateRandomNumber_IT() instead */ 255 256 HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber(RNG_HandleTypeDef *hrng, uint32_t *random32bit); 257 HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber_IT(RNG_HandleTypeDef *hrng); 258 uint32_t HAL_RNG_ReadLastRandomNumber(RNG_HandleTypeDef *hrng); 259 260 void HAL_RNG_IRQHandler(RNG_HandleTypeDef *hrng); 261 void HAL_RNG_ErrorCallback(RNG_HandleTypeDef *hrng); 262 void HAL_RNG_ReadyDataCallback(RNG_HandleTypeDef* hrng, uint32_t random32bit); 263 264 /** 265 * @} 266 */ 267 268 /* Peripheral State functions **************************************************/ 269 /** @defgroup RNG_Exported_Functions_Group3 Peripheral State functions 270 * @{ 271 */ 272 HAL_RNG_StateTypeDef HAL_RNG_GetState(RNG_HandleTypeDef *hrng); 273 /** 274 * @} 275 */ 276 277 /** 278 * @} 279 */ 280 281 /* Define the private group ***********************************/ 282 /**************************************************************/ 283 /** @defgroup RNG_Private RNG Private 284 * @{ 285 */ 286 /** 287 * @} 288 */ 289 /**************************************************************/ 290 291 /** 292 * @} 293 */ 294 295 /** 296 * @} 297 */ 298 #endif /* if defined (STM32L052xx) || defined (STM32L053xx) || defined (STM32L062xx) || defined (STM32L063xx) || \ 299 defined (STM32L072xx) || defined (STM32L073xx) || defined (STM32L082xx) || defined (STM32L083xx) */ 300 #ifdef __cplusplus 301 } 302 #endif 303 304 #endif /* __STM32L0xx_HAL_RNG_H */ 305 306 307 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 308 309