1 /**
2 ******************************************************************************
3 * @filestm32wb0x_ll_pka.h
4 * @author MCD Application Team
5 * @brief Header file of PKA LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2024 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 STM32WB0x_LL_PKA_H
21 #define STM32WB0x_LL_PKA_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32wb0x.h"
29
30 /** @addtogroup STM32WB0x_LL_Driver
31 * @{
32 */
33
34 #if defined(PKA)
35
36 /** @defgroup PKA_LL PKA
37 * @{
38 */
39
40 /* Private variables ---------------------------------------------------------*/
41
42 /* Exported types ------------------------------------------------------------*/
43
44 /** @defgroup PKA_LL_ES_INIT PKA Exported Init structure
45 * @{
46 */
47
48 #if defined (STM32WB05)|| defined(STM32WB09)
49 /**
50 * @brief PKA Init structures definition
51 */
52 typedef struct
53 {
54 uint32_t Mode; /*!< Specifies the PKA operation mode.
55 This parameter can be a value of @ref PKA_LL_EC_MODE.
56 This feature can be modified afterwards using unitary function @ref LL_PKA_SetMode(). */
57 } LL_PKA_InitTypeDef;
58 #endif /* STM32WB05 || STM32WB09 */
59
60 /* Exported constants --------------------------------------------------------*/
61 /** @defgroup PKA_LL_Exported_Constants PKA Exported Constants
62 * @{
63 */
64
65 /** @defgroup PKA_LL_EC_GET_FLAG Get Flags Defines
66 * @brief Flags defines which can be used with LL_PKA_ReadReg function
67 * @{
68 */
69 #if defined (STM32WB06) || defined(STM32WB07)
70 #define LL_PKA_PROCEND PKA_ISR_PROC_END
71 #define LL_PKA_RAMERR PKA_ISR_RAM_ERR
72 #define LL_PKA_ADDRERR PKA_ISR_ADD_ERR
73 #endif /* STM32WB06 || STM32WB07 */
74 #if defined (STM32WB05)|| defined(STM32WB09)
75 #define LL_PKA_SR_ADDRERRF PKA_SR_ADDRERRF
76 #define LL_PKA_SR_RAMERRF PKA_SR_RAMERRF
77 #define LL_PKA_SR_PROCENDF PKA_SR_PROCENDF
78 #define LL_PKA_SR_BUSY PKA_SR_BUSY
79 #endif /* STM32WB05 || STM32WB09 */
80 /**
81 * @}
82 */
83
84 /** @defgroup PKA_LL_EC_IT IT Defines
85 * @brief IT defines which can be used with LL_PKA_ReadReg and LL_PKA_WriteReg functions
86 * @{
87 */
88 #define LL_PKA_CR_ADDRERRIE PKA_CR_ADDRERRIE
89 #define LL_PKA_CR_RAMERRIE PKA_CR_RAMERRIE
90 #define LL_PKA_CR_PROCENDIE PKA_CR_PROCENDIE
91 #define LL_PKA_CLRFR_PROCENDFC PKA_CLRFR_PROCENDFC
92 #define LL_PKA_CLRFR_RAMERRFC PKA_CLRFR_RAMERRFC
93 #define LL_PKA_CLRFR_ADDRERRFC PKA_CLRFR_ADDRERRFC
94 /**
95 * @}
96 */
97 #if defined (STM32WB05)|| defined(STM32WB09)
98 /** @defgroup PKA_LL_SECLVL Value Defines
99 * @brief IT defines which can be used with LL_PKA_SetSecurityLevel and LL_PKA_GetSecurityLevel functions
100 * @{
101 */
102 #define LL_PKA_SECURITY_LEVEL_NONE 0x00000000U
103 #define LL_PKA_SECURITY_LEVEL_ENABLE 0x00000001U
104 #endif /* STM32WB05 || STM32WB09 */
105 /**
106 * @}
107 */
108
109 /** @defgroup PKA_LL_EC_MODE Operation Mode
110 * @brief List of operation mode.
111 * @{
112 */
113
114 #if defined (STM32WB05)|| defined(STM32WB09)
115 #define LL_PKA_MODE_MONTGOMERY_PARAM_MOD_EXP ((uint32_t)0x00000000U) /*!< Compute Montgomery parameter and modular exponentiation */
116 #define LL_PKA_MODE_MONTGOMERY_PARAM ((uint32_t)0x00000001U) /*!< Compute Montgomery parameter only */
117 #define LL_PKA_MODE_MODULAR_EXP ((uint32_t)0x00000002U) /*!< Compute modular exponentiation only (Montgomery parameter should be loaded) */
118 #define LL_PKA_MODE_MONTGOMERY_PARAM_ECC ((uint32_t)0x00000020U) /*!< Compute Montgomery parameter and compute ECC kP operation */
119 #define LL_PKA_MODE_ECC_KP_PRIMITIVE ((uint32_t)0x00000022U) /*!< Compute the ECC kP primitive only (Montgomery parameter should be loaded) */
120 #define LL_PKA_MODE_ECDSA_SIGNATURE ((uint32_t)0x00000024U) /*!< ECDSA signature */
121 #define LL_PKA_MODE_POINT_CHECK ((uint32_t)0x00000028U) /*!< Point check */
122 #define LL_PKA_MODE_RSA_CRT_EXP ((uint32_t)0x00000007U) /*!< RSA CRT exponentiation */
123 #define LL_PKA_MODE_MODULAR_INV ((uint32_t)0x00000008U) /*!< Modular inversion */
124 #define LL_PKA_MODE_ARITHMETIC_ADD ((uint32_t)0x00000009U) /*!< Arithmetic addition */
125 #define LL_PKA_MODE_ARITHMETIC_SUB ((uint32_t)0x0000000AU) /*!< Arithmetic subtraction */
126 #define LL_PKA_MODE_ARITHMETIC_MUL ((uint32_t)0x0000000BU) /*!< Arithmetic multiplication */
127 #define LL_PKA_MODE_COMPARISON ((uint32_t)0x0000000CU) /*!< Comparison */
128 #define LL_PKA_MODE_MODULAR_REDUC ((uint32_t)0x0000000DU) /*!< Modular reduction */
129 #define LL_PKA_MODE_MODULAR_ADD ((uint32_t)0x0000000EU) /*!< Modular addition */
130 #define LL_PKA_MODE_MODULAR_SUB ((uint32_t)0x0000000FU) /*!< Modular subtraction */
131 #define LL_PKA_MODE_MONTGOMERY_MUL ((uint32_t)0x00000010U) /*!< Montgomery multiplication */
132 #endif /* STM32WB05 || STM32WB09 */
133
134 #if defined (STM32WB09)
135 #define LL_PKA_MODE_ECDSA_VERIFICATION ((uint32_t)0x00000025U) /*!< ECDSA verification */
136 #define LL_PKA_MODE_DOUBLE_BASE_LADDER ((uint32_t)0x00000027U) /*!< Double base ladder */
137 #define LL_PKA_MODE_ECC_COMPLETE_ADD ((uint32_t)0x00000023U) /*!< ECC complete addition */
138 #endif /* STM32WB09 */
139 #if defined (STM32WB05)
140 #define LL_PKA_MODE_ECDSA_VERIFICATION ((uint32_t)0x00000026U) /*!< ECDSA verification */
141 #endif /* STM32WB05 */
142
143
144 /**
145 * @}
146 */
147
148 /**
149 * @}
150 */
151
152 /* Exported macro ------------------------------------------------------------*/
153 /** @defgroup PKA_LL_Exported_Macros PKA Exported Macros
154 * @{
155 */
156
157 /** @defgroup PKA_LL_EM_WRITE_READ Common Write and read registers Macros
158 * @{
159 */
160
161 /**
162 * @brief Write a value in PKA register
163 * @param __INSTANCE__ PKA Instance
164 * @param __REG__ Register to be written
165 * @param __VALUE__ Value to be written in the register
166 * @retval None
167 */
168 #define LL_PKA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
169
170 /**
171 * @brief Read a value in PKA register
172 * @param __INSTANCE__ PKA Instance
173 * @param __REG__ Register to be read
174 * @retval Register value
175 */
176 #define LL_PKA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
177 /**
178 * @}
179 */
180
181 /**
182 * @}
183 */
184
185 /* Exported functions --------------------------------------------------------*/
186 /** @defgroup PKA_LL_Exported_Functions PKA Exported Functions
187 * @{
188 */
189
190 /** @defgroup PKA_LL_EF_Configuration Configuration
191 * @{
192 */
193 #if defined (STM32WB05)|| defined(STM32WB09)
194 /**
195 * @brief Configure PKA peripheral.
196 * @brief Set PKA operating mode.
197 * @rmtoll CR MODE LL_PKA_Config
198 * @param PKAx PKA Instance.
199 * @param Mode This parameter can be one of the following values:
200 * @arg @ref LL_PKA_MODE_MONTGOMERY_PARAM_MOD_EXP
201 * @arg @ref LL_PKA_MODE_MONTGOMERY_PARAM_ECC
202 * @arg @ref LL_PKA_MODE_MONTGOMERY_PARAM
203 * @arg @ref LL_PKA_MODE_MODULAR_EXP
204 * @arg @ref LL_PKA_MODE_ECC_KP_PRIMITIVE
205 * @arg @ref LL_PKA_MODE_ECDSA_SIGNATURE
206 * @arg @ref LL_PKA_MODE_ECDSA_VERIFICATION
207 * @arg @ref LL_PKA_MODE_POINT_CHECK
208 * @arg @ref LL_PKA_MODE_RSA_CRT_EXP
209 * @arg @ref LL_PKA_MODE_MODULAR_INV
210 * @arg @ref LL_PKA_MODE_ARITHMETIC_ADD
211 * @arg @ref LL_PKA_MODE_ARITHMETIC_SUB
212 * @arg @ref LL_PKA_MODE_ARITHMETIC_MUL
213 * @arg @ref LL_PKA_MODE_COMPARISON
214 * @arg @ref LL_PKA_MODE_MODULAR_REDUC
215 * @arg @ref LL_PKA_MODE_MODULAR_ADD
216 * @arg @ref LL_PKA_MODE_MODULAR_SUB
217 * @arg @ref LL_PKA_MODE_MONTGOMERY_MUL
218 * the next arguments are for stm32wb09 only
219 * @arg @ref LL_PKA_MODE_DOUBLE_BASE_LADDER
220 * @arg @ref LL_PKA_MODE_ECC_COMPLETE_ADD
221 */
222
LL_PKA_Config(PKA_TypeDef * PKAx,uint32_t Mode)223 __STATIC_INLINE void LL_PKA_Config(PKA_TypeDef *PKAx, uint32_t Mode)
224 {
225 MODIFY_REG(PKAx->CR, (PKA_CR_MODE), (Mode << PKA_CR_MODE_Pos));
226 }
227 #endif /* STM32WB05 || STM32WB09 */
228
229 #if defined (STM32WB05)|| defined(STM32WB09)
230 /**
231 * @brief Enable PKA peripheral.
232 * @rmtoll CR EN LL_PKA_Enable
233 * @param PKAx PKA Instance.
234 * @retval None
235 */
LL_PKA_Enable(PKA_TypeDef * PKAx)236 __STATIC_INLINE void LL_PKA_Enable(PKA_TypeDef *PKAx)
237 {
238 SET_BIT(PKAx->CR, PKA_CR_EN);
239 }
240
241 /**
242 * @brief Disable PKA peripheral.
243 * @rmtoll CR EN LL_PKA_Disable
244 * @param PKAx PKA Instance.
245 * @retval None
246 */
LL_PKA_Disable(PKA_TypeDef * PKAx)247 __STATIC_INLINE void LL_PKA_Disable(PKA_TypeDef *PKAx)
248 {
249 CLEAR_BIT(PKAx->CR, PKA_CR_EN);
250 }
251
252 /**
253 * @brief Check if the PKA peripheral is enabled or disabled.
254 * @rmtoll CR EN LL_PKA_IsEnabled
255 * @param PKAx PKA Instance.
256 * @retval State of bit (1 or 0).
257 */
LL_PKA_IsEnabled(const PKA_TypeDef * PKAx)258 __STATIC_INLINE uint32_t LL_PKA_IsEnabled(const PKA_TypeDef *PKAx)
259 {
260 return ((READ_BIT(PKAx->CR, PKA_CR_EN) == (PKA_CR_EN)) ? 1UL : 0UL);
261 }
262 #endif /* STM32WB05 || STM32WB09 */
263
264 #if defined (STM32WB05)|| defined(STM32WB09)
265 /**
266 * @brief Set PKA operating mode.
267 * @rmtoll CR MODE LL_PKA_SetMode
268 * @param PKAx PKA Instance.
269 * @param Mode This parameter can be one of the following values:
270 * @arg @ref LL_PKA_MODE_MONTGOMERY_PARAM_MOD_EXP
271 * @arg @ref LL_PKA_MODE_MONTGOMERY_PARAM_ECC
272 * @arg @ref LL_PKA_MODE_MONTGOMERY_PARAM
273 * @arg @ref LL_PKA_MODE_MODULAR_EXP
274 * @arg @ref LL_PKA_MODE_ECC_KP_PRIMITIVE
275 * @arg @ref LL_PKA_MODE_ECDSA_SIGNATURE
276 * @arg @ref LL_PKA_MODE_ECDSA_VERIFICATION
277 * @arg @ref LL_PKA_MODE_POINT_CHECK
278 * @arg @ref LL_PKA_MODE_RSA_CRT_EXP
279 * @arg @ref LL_PKA_MODE_MODULAR_INV
280 * @arg @ref LL_PKA_MODE_ARITHMETIC_ADD
281 * @arg @ref LL_PKA_MODE_ARITHMETIC_SUB
282 * @arg @ref LL_PKA_MODE_ARITHMETIC_MUL
283 * @arg @ref LL_PKA_MODE_COMPARISON
284 * @arg @ref LL_PKA_MODE_MODULAR_REDUC
285 * @arg @ref LL_PKA_MODE_MODULAR_ADD
286 * @arg @ref LL_PKA_MODE_MODULAR_SUB
287 * @arg @ref LL_PKA_MODE_MONTGOMERY_MUL
288 * @arg @ref LL_PKA_MODE_DOUBLE_BASE_LADDER
289 * @arg @ref LL_PKA_MODE_ECC_COMPLETE_ADD
290 * @retval None
291 */
292
LL_PKA_SetMode(PKA_TypeDef * PKAx,uint32_t Mode)293 __STATIC_INLINE void LL_PKA_SetMode(PKA_TypeDef *PKAx, uint32_t Mode)
294 {
295 MODIFY_REG(PKAx->CR, PKA_CR_MODE, Mode << PKA_CR_MODE_Pos);
296 }
297
298
299 /**
300 * @brief Get PKA operating mode.
301 * @rmtoll CR MODE LL_PKA_GetMode
302 * @param PKAx PKA Instance.
303 * @retval Returned value can be one of the following values:
304 * @arg @ref LL_PKA_MODE_MONTGOMERY_PARAM_MOD_EXP
305 * @arg @ref LL_PKA_MODE_MONTGOMERY_PARAM_ECC
306 * @arg @ref LL_PKA_MODE_MONTGOMERY_PARAM
307 * @arg @ref LL_PKA_MODE_MODULAR_EXP
308 * @arg @ref LL_PKA_MODE_ECC_KP_PRIMITIVE
309 * @arg @ref LL_PKA_MODE_ECDSA_SIGNATURE
310 * @arg @ref LL_PKA_MODE_ECDSA_VERIFICATION
311 * @arg @ref LL_PKA_MODE_POINT_CHECK
312 * @arg @ref LL_PKA_MODE_RSA_CRT_EXP
313 * @arg @ref LL_PKA_MODE_MODULAR_INV
314 * @arg @ref LL_PKA_MODE_ARITHMETIC_ADD
315 * @arg @ref LL_PKA_MODE_ARITHMETIC_SUB
316 * @arg @ref LL_PKA_MODE_ARITHMETIC_MUL
317 * @arg @ref LL_PKA_MODE_COMPARISON
318 * @arg @ref LL_PKA_MODE_MODULAR_REDUC
319 * @arg @ref LL_PKA_MODE_MODULAR_ADD
320 * @arg @ref LL_PKA_MODE_MODULAR_SUB
321 * @arg @ref LL_PKA_MODE_MONTGOMERY_MUL
322
323 * @arg @ref LL_PKA_MODE_DOUBLE_BASE_LADDER
324 * @arg @ref LL_PKA_MODE_ECC_COMPLETE_ADD
325 */
326
LL_PKA_GetMode(const PKA_TypeDef * PKAx)327 __STATIC_INLINE uint32_t LL_PKA_GetMode(const PKA_TypeDef *PKAx)
328 {
329 return (uint32_t)(READ_BIT(PKAx->CR, PKA_CR_MODE) >> PKA_CR_MODE_Pos);
330 }
331
332 /**
333 * @brief Set the Security level.
334 * @rmtoll CR SECLVL LL_PKA_SetSecurityLevel
335 * @param arg This parameter can be one of the following values:
336 * @arg @ref LL_PKA_SECURITY_LEVEL_NONE
337 * @arg @ref LL_PKA_SECURITY_LEVEL_ENABLE
338 * @param PKAx PKA Instance.
339 * @retval NONE
340 */
LL_PKA_SetSecurityLevel(PKA_TypeDef * PKAx,uint32_t arg)341 __STATIC_INLINE void LL_PKA_SetSecurityLevel(PKA_TypeDef *PKAx, uint32_t arg)
342 {
343 MODIFY_REG(PKAx->CR, PKA_CR_SECLVL, (arg << PKA_CR_SECLVL_Pos));
344 }
345
346 /**
347 * @brief Get the Security level.
348 * @rmtoll CR SECLVL LL_PKA_GetSecurityLevel
349 * @param PKAx PKA Instance.
350 * @retval Returned value can be one of the following values:
351 * @arg @ref LL_PKA_SECURITY_LEVEL_NONE
352 * @arg @ref LL_PKA_SECURITY_LEVEL_ENABLE
353 */
LL_PKA_GetSecurityLevel(PKA_TypeDef * PKAx)354 __STATIC_INLINE void LL_PKA_GetSecurityLevel(PKA_TypeDef *PKAx)
355 {
356 SET_BIT(PKAx->CR, PKA_CR_SECLVL);
357 }
358 #endif /* STM32WB05 || STM32WB09 */
359
360 #if defined (STM32WB06) || defined(STM32WB07)
361 /**
362 * @brief Starts the operation for the PKA peripheral.
363 * @rmtoll CSR GO LL_PKA_Start
364 * @param PKAx PKA Instance.
365 * @retval None
366 */
LL_PKA_Start(PKA_TypeDef * PKAx)367 __STATIC_INLINE void LL_PKA_Start(PKA_TypeDef *PKAx)
368 {
369 SET_BIT(PKAx->CSR, PKA_CSR_GO);
370 /* The Bit GO must be reset before the end of calculation */
371 CLEAR_BIT(PKAx->CSR, PKA_CSR_GO);
372 }
373 #endif /* STM32WB06 || STM32WB07 */
374 #if defined (STM32WB05)|| defined(STM32WB09)
375 /**
376 * @brief Start the operation selected using LL_PKA_SetMode.
377 * @rmtoll CR START LL_PKA_Start
378 * @param PKAx PKA Instance.
379 * @retval None
380 */
LL_PKA_Start(PKA_TypeDef * PKAx)381 __STATIC_INLINE void LL_PKA_Start(PKA_TypeDef *PKAx)
382 {
383 SET_BIT(PKAx->CR, PKA_CR_START);
384 }
385 #endif /* STM32WB05 || STM32WB09 */
386 /**
387 * @}
388 */
389
390 /** @defgroup PKA_LL_EF_IT_Management IT_Management
391 * @{
392 */
393 #if defined (STM32WB06) || defined(STM32WB07)
394
395 /**
396 * @brief Enable address error interrupt.
397 * @rmtoll IEN ADDERR_EN LL_PKA_EnableIT_ADDRERR
398 * @param PKAx PKA Instance.
399 * @retval None
400 */
LL_PKA_EnableIT_ADDRERR(PKA_TypeDef * PKAx)401 __STATIC_INLINE void LL_PKA_EnableIT_ADDRERR(PKA_TypeDef *PKAx)
402 {
403 SET_BIT(PKAx->IEN, PKA_IEN_ADDERR_EN);
404 }
405
406 /**
407 * @brief Enable RAM error interrupt.
408 * @rmtoll IEN RAMERR_EN LL_PKA_EnableIT_RAMERR
409 * @param PKAx PKA Instance.
410 * @retval None
411 */
LL_PKA_EnableIT_RAMERR(PKA_TypeDef * PKAx)412 __STATIC_INLINE void LL_PKA_EnableIT_RAMERR(PKA_TypeDef *PKAx)
413 {
414 SET_BIT(PKAx->IEN, PKA_IEN_RAMERR_EN);
415 }
416
417 /**
418 * @brief Enable end of operation interrupt.
419 * @rmtoll IEN READY_EN LL_PKA_EnableIT_PROCEND
420 * @param PKAx PKA Instance.
421 * @retval None
422 */
LL_PKA_EnableIT_PROCEND(PKA_TypeDef * PKAx)423 __STATIC_INLINE void LL_PKA_EnableIT_PROCEND(PKA_TypeDef *PKAx)
424 {
425 SET_BIT(PKAx->IEN, PKA_IEN_READY_EN);
426 }
427
428 /**
429 * @brief Disable address error interrupt.
430 * @rmtoll IEN ADDERR_EN LL_PKA_DisableIT_ADDRERR
431 * @param PKAx PKA Instance.
432 * @retval None
433 */
LL_PKA_DisableIT_ADDRERR(PKA_TypeDef * PKAx)434 __STATIC_INLINE void LL_PKA_DisableIT_ADDRERR(PKA_TypeDef *PKAx)
435 {
436 CLEAR_BIT(PKAx->IEN, PKA_IEN_ADDERR_EN);
437 }
438
439 /**
440 * @brief Disable RAM error interrupt.
441 * @rmtoll IEN RAMERR_EN LL_PKA_DisableIT_RAMERR
442 * @param PKAx PKA Instance.
443 * @retval None
444 */
LL_PKA_DisableIT_RAMERR(PKA_TypeDef * PKAx)445 __STATIC_INLINE void LL_PKA_DisableIT_RAMERR(PKA_TypeDef *PKAx)
446 {
447 CLEAR_BIT(PKAx->IEN, PKA_IEN_RAMERR_EN);
448 }
449
450 /**
451 * @brief Disable End of operation interrupt.
452 * @rmtoll IEN READY_EN LL_PKA_DisableIT_PROCEND
453 * @param PKAx PKA Instance.
454 * @retval None
455 */
LL_PKA_DisableIT_PROCEND(PKA_TypeDef * PKAx)456 __STATIC_INLINE void LL_PKA_DisableIT_PROCEND(PKA_TypeDef *PKAx)
457 {
458 CLEAR_BIT(PKAx->IEN, PKA_IEN_READY_EN);
459 }
460
461 /**
462 * @brief Check if address error interrupt is enabled.
463 * @rmtoll IEN ADDERR_EN LL_PKA_IsEnabledIT_ADDRERR
464 * @param PKAx PKA Instance.
465 * @retval State of bit (1 or 0).
466 */
LL_PKA_IsEnabledIT_ADDRERR(PKA_TypeDef * PKAx)467 __STATIC_INLINE uint32_t LL_PKA_IsEnabledIT_ADDRERR(PKA_TypeDef *PKAx)
468 {
469 return ((READ_BIT(PKAx->IEN, PKA_IEN_ADDERR_EN) == (PKA_IEN_ADDERR_EN)) ? 1UL : 0UL);
470 }
471
472 /**
473 * @brief Check if RAM error interrupt is enabled.
474 * @rmtoll IEN RAMERR_EN LL_PKA_IsEnabledIT_RAMERR
475 * @param PKAx PKA Instance.
476 * @retval State of bit (1 or 0).
477 */
LL_PKA_IsEnabledIT_RAMERR(PKA_TypeDef * PKAx)478 __STATIC_INLINE uint32_t LL_PKA_IsEnabledIT_RAMERR(PKA_TypeDef *PKAx)
479 {
480 return ((READ_BIT(PKAx->IEN, PKA_IEN_RAMERR_EN) == (PKA_IEN_RAMERR_EN)) ? 1UL : 0UL);
481 }
482
483 /**
484 * @brief Check if end of operation interrupt is enabled.
485 * @rmtoll IEN READY_EN LL_PKA_IsEnabledIT_PROCEND
486 * @param PKAx PKA Instance.
487 * @retval State of bit (1 or 0).
488 */
LL_PKA_IsEnabledIT_PROCEND(PKA_TypeDef * PKAx)489 __STATIC_INLINE uint32_t LL_PKA_IsEnabledIT_PROCEND(PKA_TypeDef *PKAx)
490 {
491 return ((READ_BIT(PKAx->IEN, PKA_IEN_READY_EN) == (PKA_IEN_READY_EN)) ? 1UL : 0UL);
492 }
493
494 #endif /* STM32WB06 || STM32WB07 */
495 #if defined (STM32WB05)|| defined(STM32WB09)
496 /**
497 * @brief Enable address error interrupt.
498 * @rmtoll CR ADDRERRIE LL_PKA_EnableIT_ADDRERR
499 * @param PKAx PKA Instance.
500 * @retval None
501 */
LL_PKA_EnableIT_ADDRERR(PKA_TypeDef * PKAx)502 __STATIC_INLINE void LL_PKA_EnableIT_ADDRERR(PKA_TypeDef *PKAx)
503 {
504 SET_BIT(PKAx->CR, PKA_CR_ADDRERRIE);
505 }
506
507 /**
508 * @brief Enable RAM error interrupt.
509 * @rmtoll CR RAMERRIE LL_PKA_EnableIT_RAMERR
510 * @param PKAx PKA Instance.
511 * @retval None
512 */
LL_PKA_EnableIT_RAMERR(PKA_TypeDef * PKAx)513 __STATIC_INLINE void LL_PKA_EnableIT_RAMERR(PKA_TypeDef *PKAx)
514 {
515 SET_BIT(PKAx->CR, PKA_CR_RAMERRIE);
516 }
517
518 /**
519 * @brief Enable end of operation interrupt.
520 * @rmtoll CR PROCENDIE LL_PKA_EnableIT_PROCEND
521 * @param PKAx PKA Instance.
522 * @retval None
523 */
LL_PKA_EnableIT_PROCEND(PKA_TypeDef * PKAx)524 __STATIC_INLINE void LL_PKA_EnableIT_PROCEND(PKA_TypeDef *PKAx)
525 {
526 SET_BIT(PKAx->CR, PKA_CR_PROCENDIE);
527 }
528
529 /**
530 * @brief Disable address error interrupt.
531 * @rmtoll CR ADDRERRIE LL_PKA_DisableIT_ADDRERR
532 * @param PKAx PKA Instance.
533 * @retval None
534 */
LL_PKA_DisableIT_ADDRERR(PKA_TypeDef * PKAx)535 __STATIC_INLINE void LL_PKA_DisableIT_ADDRERR(PKA_TypeDef *PKAx)
536 {
537 CLEAR_BIT(PKAx->CR, PKA_CR_ADDRERRIE);
538 }
539
540 /**
541 * @brief Disable RAM error interrupt.
542 * @rmtoll CR RAMERRIE LL_PKA_DisableIT_RAMERR
543 * @param PKAx PKA Instance.
544 * @retval None
545 */
LL_PKA_DisableIT_RAMERR(PKA_TypeDef * PKAx)546 __STATIC_INLINE void LL_PKA_DisableIT_RAMERR(PKA_TypeDef *PKAx)
547 {
548 CLEAR_BIT(PKAx->CR, PKA_CR_RAMERRIE);
549 }
550
551 /**
552 * @brief Disable End of operation interrupt.
553 * @rmtoll CR PROCENDIE LL_PKA_DisableIT_PROCEND
554 * @param PKAx PKA Instance.
555 * @retval None
556 */
LL_PKA_DisableIT_PROCEND(PKA_TypeDef * PKAx)557 __STATIC_INLINE void LL_PKA_DisableIT_PROCEND(PKA_TypeDef *PKAx)
558 {
559 CLEAR_BIT(PKAx->CR, PKA_CR_PROCENDIE);
560 }
561
562
563 /**
564 * @brief Check if address error interrupt is enabled.
565 * @rmtoll CR ADDRERRIE LL_PKA_IsEnabledIT_ADDRERR
566 * @param PKAx PKA Instance.
567 * @retval State of bit (1 or 0).
568 */
LL_PKA_IsEnabledIT_ADDRERR(const PKA_TypeDef * PKAx)569 __STATIC_INLINE uint32_t LL_PKA_IsEnabledIT_ADDRERR(const PKA_TypeDef *PKAx)
570 {
571 return ((READ_BIT(PKAx->CR, PKA_CR_ADDRERRIE) == (PKA_CR_ADDRERRIE)) ? 1UL : 0UL);
572 }
573
574 /**
575 * @brief Check if RAM error interrupt is enabled.
576 * @rmtoll CR RAMERRIE LL_PKA_IsEnabledIT_RAMERR
577 * @param PKAx PKA Instance.
578 * @retval State of bit (1 or 0).
579 */
LL_PKA_IsEnabledIT_RAMERR(const PKA_TypeDef * PKAx)580 __STATIC_INLINE uint32_t LL_PKA_IsEnabledIT_RAMERR(const PKA_TypeDef *PKAx)
581 {
582 return ((READ_BIT(PKAx->CR, PKA_CR_RAMERRIE) == (PKA_CR_RAMERRIE)) ? 1UL : 0UL);
583 }
584
585 /**
586 * @brief Check if end of operation interrupt is enabled.
587 * @rmtoll CR PROCENDIE LL_PKA_IsEnabledIT_PROCEND
588 * @param PKAx PKA Instance.
589 * @retval State of bit (1 or 0).
590 */
LL_PKA_IsEnabledIT_PROCEND(const PKA_TypeDef * PKAx)591 __STATIC_INLINE uint32_t LL_PKA_IsEnabledIT_PROCEND(const PKA_TypeDef *PKAx)
592 {
593 return ((READ_BIT(PKAx->CR, PKA_CR_PROCENDIE) == (PKA_CR_PROCENDIE)) ? 1UL : 0UL);
594 }
595 #endif /* STM32WB05 || STM32WB09 */
596 /**
597 * @}
598 */
599
600 /** @defgroup PKA_LL_EF_FLAG_Management PKA flag management
601 * @{
602 */
603 #if defined (STM32WB06) || defined(STM32WB07)
604 /**
605 * @brief Get PKA address error flag.
606 * @rmtoll ISR ADD_ERR LL_PKA_IsActiveFlag_ADDRERR
607 * @param PKAx PKA Instance.
608 * @retval State of bit (1 or 0).
609 */
LL_PKA_IsActiveFlag_ADDRERR(PKA_TypeDef * PKAx)610 __STATIC_INLINE uint32_t LL_PKA_IsActiveFlag_ADDRERR(PKA_TypeDef *PKAx)
611 {
612 return ((READ_BIT(PKAx->ISR, PKA_ISR_ADD_ERR) == (PKA_ISR_ADD_ERR)) ? 1UL : 0UL);
613 }
614
615 /**
616 * @brief Get PKA RAM error flag.
617 * @rmtoll ISR RAM_ERR LL_PKA_IsActiveFlag_RAMERR
618 * @param PKAx PKA Instance.
619 * @retval State of bit (1 or 0).
620 */
LL_PKA_IsActiveFlag_RAMERR(PKA_TypeDef * PKAx)621 __STATIC_INLINE uint32_t LL_PKA_IsActiveFlag_RAMERR(PKA_TypeDef *PKAx)
622 {
623 return ((READ_BIT(PKAx->ISR, PKA_ISR_RAM_ERR) == (PKA_ISR_RAM_ERR)) ? 1UL : 0UL);
624 }
625
626 /**
627 * @brief Get PKA end of operation flag.
628 * @rmtoll ISR PROC_END LL_PKA_IsActiveFlag_PROCEND
629 * @param PKAx PKA Instance.
630 * @retval State of bit (1 or 0).
631 */
LL_PKA_IsActiveFlag_PROCEND(PKA_TypeDef * PKAx)632 __STATIC_INLINE uint32_t LL_PKA_IsActiveFlag_PROCEND(PKA_TypeDef *PKAx)
633 {
634 return ((READ_BIT(PKAx->ISR, PKA_ISR_PROC_END) == (PKA_ISR_PROC_END)) ? 1UL : 0UL);
635 }
636
637 /**
638 * @brief Clear PKA address error flag.
639 * @rmtoll ISR ADD_ERR LL_PKA_ClearFlag_ADDRERR
640 * @param PKAx PKA Instance.
641 * @retval None
642 */
LL_PKA_ClearFlag_ADDRERR(PKA_TypeDef * PKAx)643 __STATIC_INLINE void LL_PKA_ClearFlag_ADDRERR(PKA_TypeDef *PKAx)
644 {
645 /* To clear the pending interrupt,
646 * the user must write this bit to 1
647 * and clear it just after by writing 0.
648 */
649 SET_BIT(PKAx->ISR, PKA_ISR_ADD_ERR);
650 CLEAR_BIT(PKAx->ISR, PKA_ISR_ADD_ERR);
651 }
652
653 /**
654 * @brief Clear PKA RAM error flag.
655 * @rmtoll ISR RAM_ERR LL_PKA_ClearFlag_RAMERR
656 * @param PKAx PKA Instance.
657 * @retval None
658 */
LL_PKA_ClearFlag_RAMERR(PKA_TypeDef * PKAx)659 __STATIC_INLINE void LL_PKA_ClearFlag_RAMERR(PKA_TypeDef *PKAx)
660 {
661 /* To clear the pending interrupt,
662 * the user must write this bit to 1
663 * and clear it just after by writing 0.
664 */
665 SET_BIT(PKAx->ISR, PKA_ISR_RAM_ERR);
666 CLEAR_BIT(PKAx->ISR, PKA_ISR_RAM_ERR);
667 }
668
669 /**
670 * @brief Clear PKA end of operation flag.
671 * @rmtoll ISR PROC_END LL_PKA_ClearFlag_PROCEND
672 * @param PKAx PKA Instance.
673 * @retval None
674 */
LL_PKA_ClearFlag_PROCEND(PKA_TypeDef * PKAx)675 __STATIC_INLINE void LL_PKA_ClearFlag_PROCEND(PKA_TypeDef *PKAx)
676 {
677 /* To clear the pending interrupt,
678 * the user must write this bit to 1
679 * and clear it just after by writing 0.
680 */
681 SET_BIT(PKAx->ISR, PKA_ISR_PROC_END);
682 CLEAR_BIT(PKAx->ISR, PKA_ISR_PROC_END);
683 }
684 #endif /* STM32WB06 || STM32WB07 */
685
686 #if defined (STM32WB05)|| defined(STM32WB09)
687 /**
688 * @brief Get PKA address error flag.
689 * @rmtoll SR ADDRERRF LL_PKA_IsActiveFlag_ADDRERR
690 * @param PKAx PKA Instance.
691 * @retval State of bit (1 or 0).
692 */
LL_PKA_IsActiveFlag_ADDRERR(const PKA_TypeDef * PKAx)693 __STATIC_INLINE uint32_t LL_PKA_IsActiveFlag_ADDRERR(const PKA_TypeDef *PKAx)
694 {
695 return ((READ_BIT(PKAx->SR, PKA_SR_ADDRERRF) == (PKA_SR_ADDRERRF)) ? 1UL : 0UL);
696 }
697
698 /**
699 * @brief Get PKA RAM error flag.
700 * @rmtoll SR RAMERRF LL_PKA_IsActiveFlag_RAMERR
701 * @param PKAx PKA Instance.
702 * @retval State of bit (1 or 0).
703 */
LL_PKA_IsActiveFlag_RAMERR(const PKA_TypeDef * PKAx)704 __STATIC_INLINE uint32_t LL_PKA_IsActiveFlag_RAMERR(const PKA_TypeDef *PKAx)
705 {
706 return ((READ_BIT(PKAx->SR, PKA_SR_RAMERRF) == (PKA_SR_RAMERRF)) ? 1UL : 0UL);
707 }
708
709 /**
710 * @brief Get PKA end of operation flag.
711 * @rmtoll SR PROCENDF LL_PKA_IsActiveFlag_PROCEND
712 * @param PKAx PKA Instance.
713 * @retval State of bit (1 or 0).
714 */
LL_PKA_IsActiveFlag_PROCEND(const PKA_TypeDef * PKAx)715 __STATIC_INLINE uint32_t LL_PKA_IsActiveFlag_PROCEND(const PKA_TypeDef *PKAx)
716 {
717 return ((READ_BIT(PKAx->SR, PKA_SR_PROCENDF) == (PKA_SR_PROCENDF)) ? 1UL : 0UL);
718 }
719
720 /**
721 * @brief Get PKA busy flag.
722 * @rmtoll SR BUSY LL_PKA_IsActiveFlag_BUSY
723 * @param PKAx PKA Instance.
724 * @retval State of bit (1 or 0).
725 */
LL_PKA_IsActiveFlag_BUSY(const PKA_TypeDef * PKAx)726 __STATIC_INLINE uint32_t LL_PKA_IsActiveFlag_BUSY(const PKA_TypeDef *PKAx)
727 {
728 return ((READ_BIT(PKAx->SR, PKA_SR_BUSY) == (PKA_SR_BUSY)) ? 1UL : 0UL);
729 }
730
731 /**
732 * @brief Clear PKA address error flag.
733 * @rmtoll CLRFR ADDRERRFC LL_PKA_ClearFlag_ADDRERR
734 * @param PKAx PKA Instance.
735 * @retval None
736 */
LL_PKA_ClearFlag_ADDRERR(PKA_TypeDef * PKAx)737 __STATIC_INLINE void LL_PKA_ClearFlag_ADDRERR(PKA_TypeDef *PKAx)
738 {
739 SET_BIT(PKAx->CLRFR, PKA_CLRFR_ADDRERRFC);
740 }
741
742 /**
743 * @brief Clear PKA RAM error flag.
744 * @rmtoll CLRFR RAMERRFC LL_PKA_ClearFlag_RAMERR
745 * @param PKAx PKA Instance.
746 * @retval None
747 */
LL_PKA_ClearFlag_RAMERR(PKA_TypeDef * PKAx)748 __STATIC_INLINE void LL_PKA_ClearFlag_RAMERR(PKA_TypeDef *PKAx)
749 {
750 SET_BIT(PKAx->CLRFR, PKA_CLRFR_RAMERRFC);
751 }
752
753 /**
754 * @brief Clear PKA end of operation flag.
755 * @rmtoll CLRFR PROCENDFC LL_PKA_ClearFlag_PROCEND
756 * @param PKAx PKA Instance.
757 * @retval None
758 */
LL_PKA_ClearFlag_PROCEND(PKA_TypeDef * PKAx)759 __STATIC_INLINE void LL_PKA_ClearFlag_PROCEND(PKA_TypeDef *PKAx)
760 {
761 SET_BIT(PKAx->CLRFR, PKA_CLRFR_PROCENDFC);
762 }
763 #endif /* STM32WB05 || STM32WB09 */
764
765 /**
766 * @}
767 */
768 #if defined(USE_FULL_LL_DRIVER)
769 /** @defgroup PKA_LL_EF_Init Initialization and de-initialization functions
770 * @{
771 */
772
773 ErrorStatus LL_PKA_DeInit(const PKA_TypeDef *PKAx);
774 #if defined (STM32WB05)|| defined(STM32WB09)
775 ErrorStatus LL_PKA_Init(PKA_TypeDef *PKAx, LL_PKA_InitTypeDef *PKA_InitStruct);
776 void LL_PKA_StructInit(LL_PKA_InitTypeDef *PKA_InitStruct);
777 #endif /* STM32WB05 || STM32WB09 */
778
779 /**
780 * @}
781 */
782 #endif /* USE_FULL_LL_DRIVER */
783 /**
784 * @}
785 */
786
787 /**
788 * @}
789 */
790
791 #endif /* defined(PKA) */
792
793 /**
794 * @}
795 */
796
797 #ifdef __cplusplus
798 }
799 #endif
800
801 #endif /* STM32WB0x_LL_PKA_H */
802