1 /**
2 ******************************************************************************
3 * @file stm32g4xx_ll_rng.h
4 * @author MCD Application Team
5 * @brief Header file of RNG LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2019 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 STM32G4xx_LL_RNG_H
21 #define STM32G4xx_LL_RNG_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32g4xx.h"
29
30 /** @addtogroup STM32G4xx_LL_Driver
31 * @{
32 */
33
34 #if defined (RNG)
35
36 /** @defgroup RNG_LL RNG
37 * @{
38 */
39
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43 /* Private macros ------------------------------------------------------------*/
44
45 /* Exported types ------------------------------------------------------------*/
46 #if defined(USE_FULL_LL_DRIVER)
47 /** @defgroup RNG_LL_ES_Init_Struct RNG Exported Init structures
48 * @{
49 */
50
51
52 /**
53 * @brief LL RNG Init Structure Definition
54 */
55 typedef struct
56 {
57 uint32_t ClockErrorDetection; /*!< Clock error detection.
58 This parameter can be one value of @ref RNG_LL_CED.
59 This parameter can be modified using unitary
60 functions @ref LL_RNG_EnableClkErrorDetect(). */
61 } LL_RNG_InitTypeDef;
62
63 /**
64 * @}
65 */
66 #endif /* USE_FULL_LL_DRIVER */
67 /* Exported constants --------------------------------------------------------*/
68 /** @defgroup RNG_LL_Exported_Constants RNG Exported Constants
69 * @{
70 */
71
72 /** @defgroup RNG_LL_CED Clock Error Detection
73 * @{
74 */
75 #define LL_RNG_CED_ENABLE 0x00000000U /*!< Clock error detection enabled */
76 #define LL_RNG_CED_DISABLE RNG_CR_CED /*!< Clock error detection disabled */
77 /**
78 * @}
79 */
80
81 /** @defgroup RNG_LL_EC_GET_FLAG Get Flags Defines
82 * @brief Flags defines which can be used with LL_RNG_ReadReg function
83 * @{
84 */
85 #define LL_RNG_SR_DRDY RNG_SR_DRDY /*!< Register contains valid random data */
86 #define LL_RNG_SR_CECS RNG_SR_CECS /*!< Clock error current status */
87 #define LL_RNG_SR_SECS RNG_SR_SECS /*!< Seed error current status */
88 #define LL_RNG_SR_CEIS RNG_SR_CEIS /*!< Clock error interrupt status */
89 #define LL_RNG_SR_SEIS RNG_SR_SEIS /*!< Seed error interrupt status */
90 /**
91 * @}
92 */
93
94 /** @defgroup RNG_LL_EC_IT IT Defines
95 * @brief IT defines which can be used with LL_RNG_ReadReg and LL_RNG_WriteReg macros
96 * @{
97 */
98 #define LL_RNG_CR_IE RNG_CR_IE /*!< RNG Interrupt enable */
99 /**
100 * @}
101 */
102
103 /**
104 * @}
105 */
106
107 /* Exported macro ------------------------------------------------------------*/
108 /** @defgroup RNG_LL_Exported_Macros RNG Exported Macros
109 * @{
110 */
111
112 /** @defgroup RNG_LL_EM_WRITE_READ Common Write and read registers Macros
113 * @{
114 */
115
116 /**
117 * @brief Write a value in RNG register
118 * @param __INSTANCE__ RNG Instance
119 * @param __REG__ Register to be written
120 * @param __VALUE__ Value to be written in the register
121 * @retval None
122 */
123 #define LL_RNG_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
124
125 /**
126 * @brief Read a value in RNG register
127 * @param __INSTANCE__ RNG Instance
128 * @param __REG__ Register to be read
129 * @retval Register value
130 */
131 #define LL_RNG_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
132 /**
133 * @}
134 */
135
136 /**
137 * @}
138 */
139
140
141 /* Exported functions --------------------------------------------------------*/
142 /** @defgroup RNG_LL_Exported_Functions RNG Exported Functions
143 * @{
144 */
145 /** @defgroup RNG_LL_EF_Configuration RNG Configuration functions
146 * @{
147 */
148
149 /**
150 * @brief Enable Random Number Generation
151 * @rmtoll CR RNGEN LL_RNG_Enable
152 * @param RNGx RNG Instance
153 * @retval None
154 */
LL_RNG_Enable(RNG_TypeDef * RNGx)155 __STATIC_INLINE void LL_RNG_Enable(RNG_TypeDef *RNGx)
156 {
157 SET_BIT(RNGx->CR, RNG_CR_RNGEN);
158 }
159
160 /**
161 * @brief Disable Random Number Generation
162 * @rmtoll CR RNGEN LL_RNG_Disable
163 * @param RNGx RNG Instance
164 * @retval None
165 */
LL_RNG_Disable(RNG_TypeDef * RNGx)166 __STATIC_INLINE void LL_RNG_Disable(RNG_TypeDef *RNGx)
167 {
168 CLEAR_BIT(RNGx->CR, RNG_CR_RNGEN);
169 }
170
171 /**
172 * @brief Check if Random Number Generator is enabled
173 * @rmtoll CR RNGEN LL_RNG_IsEnabled
174 * @param RNGx RNG Instance
175 * @retval State of bit (1 or 0).
176 */
LL_RNG_IsEnabled(RNG_TypeDef * RNGx)177 __STATIC_INLINE uint32_t LL_RNG_IsEnabled(RNG_TypeDef *RNGx)
178 {
179 return ((READ_BIT(RNGx->CR, RNG_CR_RNGEN) == (RNG_CR_RNGEN)) ? 1UL : 0UL);
180 }
181
182 /**
183 * @brief Enable Clock Error Detection
184 * @rmtoll CR CED LL_RNG_EnableClkErrorDetect
185 * @param RNGx RNG Instance
186 * @retval None
187 */
LL_RNG_EnableClkErrorDetect(RNG_TypeDef * RNGx)188 __STATIC_INLINE void LL_RNG_EnableClkErrorDetect(RNG_TypeDef *RNGx)
189 {
190 CLEAR_BIT(RNGx->CR, RNG_CR_CED);
191 }
192
193 /**
194 * @brief Disable RNG Clock Error Detection
195 * @rmtoll CR CED LL_RNG_DisableClkErrorDetect
196 * @param RNGx RNG Instance
197 * @retval None
198 */
LL_RNG_DisableClkErrorDetect(RNG_TypeDef * RNGx)199 __STATIC_INLINE void LL_RNG_DisableClkErrorDetect(RNG_TypeDef *RNGx)
200 {
201 SET_BIT(RNGx->CR, RNG_CR_CED);
202 }
203
204 /**
205 * @brief Check if RNG Clock Error Detection is enabled
206 * @rmtoll CR CED LL_RNG_IsEnabledClkErrorDetect
207 * @param RNGx RNG Instance
208 * @retval State of bit (1 or 0).
209 */
LL_RNG_IsEnabledClkErrorDetect(RNG_TypeDef * RNGx)210 __STATIC_INLINE uint32_t LL_RNG_IsEnabledClkErrorDetect(RNG_TypeDef *RNGx)
211 {
212 return ((READ_BIT(RNGx->CR, RNG_CR_CED) != (RNG_CR_CED)) ? 1UL : 0UL);
213 }
214
215 /**
216 * @}
217 */
218
219 /** @defgroup RNG_LL_EF_FLAG_Management FLAG Management
220 * @{
221 */
222
223 /**
224 * @brief Indicate if the RNG Data ready Flag is set or not
225 * @rmtoll SR DRDY LL_RNG_IsActiveFlag_DRDY
226 * @param RNGx RNG Instance
227 * @retval State of bit (1 or 0).
228 */
LL_RNG_IsActiveFlag_DRDY(RNG_TypeDef * RNGx)229 __STATIC_INLINE uint32_t LL_RNG_IsActiveFlag_DRDY(RNG_TypeDef *RNGx)
230 {
231 return ((READ_BIT(RNGx->SR, RNG_SR_DRDY) == (RNG_SR_DRDY)) ? 1UL : 0UL);
232 }
233
234 /**
235 * @brief Indicate if the Clock Error Current Status Flag is set or not
236 * @rmtoll SR CECS LL_RNG_IsActiveFlag_CECS
237 * @param RNGx RNG Instance
238 * @retval State of bit (1 or 0).
239 */
LL_RNG_IsActiveFlag_CECS(RNG_TypeDef * RNGx)240 __STATIC_INLINE uint32_t LL_RNG_IsActiveFlag_CECS(RNG_TypeDef *RNGx)
241 {
242 return ((READ_BIT(RNGx->SR, RNG_SR_CECS) == (RNG_SR_CECS)) ? 1UL : 0UL);
243 }
244
245 /**
246 * @brief Indicate if the Seed Error Current Status Flag is set or not
247 * @rmtoll SR SECS LL_RNG_IsActiveFlag_SECS
248 * @param RNGx RNG Instance
249 * @retval State of bit (1 or 0).
250 */
LL_RNG_IsActiveFlag_SECS(RNG_TypeDef * RNGx)251 __STATIC_INLINE uint32_t LL_RNG_IsActiveFlag_SECS(RNG_TypeDef *RNGx)
252 {
253 return ((READ_BIT(RNGx->SR, RNG_SR_SECS) == (RNG_SR_SECS)) ? 1UL : 0UL);
254 }
255
256 /**
257 * @brief Indicate if the Clock Error Interrupt Status Flag is set or not
258 * @rmtoll SR CEIS LL_RNG_IsActiveFlag_CEIS
259 * @param RNGx RNG Instance
260 * @retval State of bit (1 or 0).
261 */
LL_RNG_IsActiveFlag_CEIS(RNG_TypeDef * RNGx)262 __STATIC_INLINE uint32_t LL_RNG_IsActiveFlag_CEIS(RNG_TypeDef *RNGx)
263 {
264 return ((READ_BIT(RNGx->SR, RNG_SR_CEIS) == (RNG_SR_CEIS)) ? 1UL : 0UL);
265 }
266
267 /**
268 * @brief Indicate if the Seed Error Interrupt Status Flag is set or not
269 * @rmtoll SR SEIS LL_RNG_IsActiveFlag_SEIS
270 * @param RNGx RNG Instance
271 * @retval State of bit (1 or 0).
272 */
LL_RNG_IsActiveFlag_SEIS(RNG_TypeDef * RNGx)273 __STATIC_INLINE uint32_t LL_RNG_IsActiveFlag_SEIS(RNG_TypeDef *RNGx)
274 {
275 return ((READ_BIT(RNGx->SR, RNG_SR_SEIS) == (RNG_SR_SEIS)) ? 1UL : 0UL);
276 }
277
278 /**
279 * @brief Clear Clock Error interrupt Status (CEIS) Flag
280 * @rmtoll SR CEIS LL_RNG_ClearFlag_CEIS
281 * @param RNGx RNG Instance
282 * @retval None
283 */
LL_RNG_ClearFlag_CEIS(RNG_TypeDef * RNGx)284 __STATIC_INLINE void LL_RNG_ClearFlag_CEIS(RNG_TypeDef *RNGx)
285 {
286 WRITE_REG(RNGx->SR, ~RNG_SR_CEIS);
287 }
288
289 /**
290 * @brief Clear Seed Error interrupt Status (SEIS) Flag
291 * @rmtoll SR SEIS LL_RNG_ClearFlag_SEIS
292 * @param RNGx RNG Instance
293 * @retval None
294 */
LL_RNG_ClearFlag_SEIS(RNG_TypeDef * RNGx)295 __STATIC_INLINE void LL_RNG_ClearFlag_SEIS(RNG_TypeDef *RNGx)
296 {
297 WRITE_REG(RNGx->SR, ~RNG_SR_SEIS);
298 }
299
300 /**
301 * @}
302 */
303
304 /** @defgroup RNG_LL_EF_IT_Management IT Management
305 * @{
306 */
307
308 /**
309 * @brief Enable Random Number Generator Interrupt
310 * (applies for either Seed error, Clock Error or Data ready interrupts)
311 * @rmtoll CR IE LL_RNG_EnableIT
312 * @param RNGx RNG Instance
313 * @retval None
314 */
LL_RNG_EnableIT(RNG_TypeDef * RNGx)315 __STATIC_INLINE void LL_RNG_EnableIT(RNG_TypeDef *RNGx)
316 {
317 SET_BIT(RNGx->CR, RNG_CR_IE);
318 }
319
320 /**
321 * @brief Disable Random Number Generator Interrupt
322 * (applies for either Seed error, Clock Error or Data ready interrupts)
323 * @rmtoll CR IE LL_RNG_DisableIT
324 * @param RNGx RNG Instance
325 * @retval None
326 */
LL_RNG_DisableIT(RNG_TypeDef * RNGx)327 __STATIC_INLINE void LL_RNG_DisableIT(RNG_TypeDef *RNGx)
328 {
329 CLEAR_BIT(RNGx->CR, RNG_CR_IE);
330 }
331
332 /**
333 * @brief Check if Random Number Generator Interrupt is enabled
334 * (applies for either Seed error, Clock Error or Data ready interrupts)
335 * @rmtoll CR IE LL_RNG_IsEnabledIT
336 * @param RNGx RNG Instance
337 * @retval State of bit (1 or 0).
338 */
LL_RNG_IsEnabledIT(RNG_TypeDef * RNGx)339 __STATIC_INLINE uint32_t LL_RNG_IsEnabledIT(RNG_TypeDef *RNGx)
340 {
341 return ((READ_BIT(RNGx->CR, RNG_CR_IE) == (RNG_CR_IE)) ? 1UL : 0UL);
342 }
343
344 /**
345 * @}
346 */
347
348 /** @defgroup RNG_LL_EF_Data_Management Data Management
349 * @{
350 */
351
352 /**
353 * @brief Return32-bit Random Number value
354 * @rmtoll DR RNDATA LL_RNG_ReadRandData32
355 * @param RNGx RNG Instance
356 * @retval Generated 32-bit random value
357 */
LL_RNG_ReadRandData32(RNG_TypeDef * RNGx)358 __STATIC_INLINE uint32_t LL_RNG_ReadRandData32(RNG_TypeDef *RNGx)
359 {
360 return (uint32_t)(READ_REG(RNGx->DR));
361 }
362
363 /**
364 * @}
365 */
366
367 #if defined(USE_FULL_LL_DRIVER)
368 /** @defgroup RNG_LL_EF_Init Initialization and de-initialization functions
369 * @{
370 */
371 ErrorStatus LL_RNG_Init(RNG_TypeDef *RNGx, LL_RNG_InitTypeDef *RNG_InitStruct);
372 void LL_RNG_StructInit(LL_RNG_InitTypeDef *RNG_InitStruct);
373 ErrorStatus LL_RNG_DeInit(RNG_TypeDef *RNGx);
374
375 /**
376 * @}
377 */
378 #endif /* USE_FULL_LL_DRIVER */
379
380 /**
381 * @}
382 */
383
384 /**
385 * @}
386 */
387
388 #endif /* RNG */
389
390 /**
391 * @}
392 */
393
394 #ifdef __cplusplus
395 }
396 #endif
397
398 #endif /* __STM32G4xx_LL_RNG_H */
399
400