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