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