1 /**
2   ******************************************************************************
3   * @file    stm32u5xx_hal_ramcfg.h
4   * @author  MCD Application Team
5   * @brief   Header file of RAMCFG HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2021 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 STM32U5xx_HAL_RAMCFG_H
21 #define STM32U5xx_HAL_RAMCFG_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32u5xx_hal_def.h"
29 
30 /** @addtogroup STM32U5xx_HAL_Driver
31   * @{
32   */
33 
34 /** @addtogroup RAMCFG
35   * @{
36   */
37 
38 
39 /* Exported types ------------------------------------------------------------*/
40 
41 /** @defgroup RAMCFG_Exported_Types RAMCFG Exported Types
42   * @brief    RAMCFG Exported Types
43   * @{
44   */
45 
46 /**
47   * @brief  HAL RAMCFG State Enumeration Definition
48   */
49 typedef enum
50 {
51   HAL_RAMCFG_STATE_RESET             = 0x00U,  /*!< RAMCFG not yet initialized or disabled */
52   HAL_RAMCFG_STATE_READY             = 0x01U,  /*!< RAMCFG initialized and ready for use   */
53   HAL_RAMCFG_STATE_BUSY              = 0x02U,  /*!< RAMCFG process is ongoing              */
54   HAL_RAMCFG_STATE_ERROR             = 0x03U,  /*!< RAMCFG error state                     */
55 } HAL_RAMCFG_StateTypeDef;
56 
57 #if (USE_HAL_RAMCFG_REGISTER_CALLBACKS == 1)
58 /**
59   * @brief  HAL RAMCFG Callbacks IDs Enumeration Definition
60   */
61 typedef enum
62 {
63   HAL_RAMCFG_MSPINIT_CB_ID           = 0x00U,  /*!< RAMCFG MSP Init Callback ID            */
64   HAL_RAMCFG_MSPDEINIT_CB_ID         = 0x01U,  /*!< RAMCFG MSP DeInit Callback ID          */
65   HAL_RAMCFG_SE_DETECT_CB_ID         = 0x02U,  /*!< RAMCFG Single Error Detect Callback ID */
66   HAL_RAMCFG_DE_DETECT_CB_ID         = 0x03U,  /*!< RAMCFG Double Error Detect Callback ID */
67   HAL_RAMCFG_ALL_CB_ID               = 0x04U,  /*!< RAMCFG All callback ID                 */
68 } HAL_RAMCFG_CallbackIDTypeDef;
69 #endif /* USE_HAL_RAMCFG_REGISTER_CALLBACKS */
70 
71 /**
72   * @brief  RAMCFG Handle Structure Definition
73   */
74 #if (USE_HAL_RAMCFG_REGISTER_CALLBACKS == 1)
75 typedef struct __RAMCFG_HandleTypeDef
76 #else
77 typedef struct
78 #endif /* (USE_HAL_RAMCFG_REGISTER_CALLBACKS) */
79 {
80   RAMCFG_TypeDef                  *Instance;                                 /*!< RAMCFG Register Base Address        */
81   __IO HAL_RAMCFG_StateTypeDef    State;                                     /*!< RAMCFG State                        */
82   __IO uint32_t                   ErrorCode;                                 /*!< RAMCFG Error Code                   */
83 #if (USE_HAL_RAMCFG_REGISTER_CALLBACKS == 1)
84   void (* MspInitCallback)(struct __RAMCFG_HandleTypeDef *hramcfg);          /*!< RAMCFG MSP Init Callback            */
85   void (* MspDeInitCallback)(struct __RAMCFG_HandleTypeDef *hramcfg);        /*!< RAMCFG MSP DeInit Callback          */
86   void (* DetectSingleErrorCallback)(struct __RAMCFG_HandleTypeDef *hramcfg);/*!< RAMCFG Single Error Detect Callback */
87   void (* DetectDoubleErrorCallback)(struct __RAMCFG_HandleTypeDef *hramcfg);/*!< RAMCFG Double Error Detect Callback */
88 #endif  /* USE_HAL_RAMCFG_REGISTER_CALLBACKS */
89 } RAMCFG_HandleTypeDef;
90 
91 /**
92   * @}
93   */
94 
95 
96 /* Exported constants --------------------------------------------------------*/
97 
98 /** @defgroup RAMCFG_Exported_Constants RAMCFG Exported Constants
99   * @brief    RAMCFG Exported Constants
100   * @{
101   */
102 
103 /** @defgroup RAMCFG_Error_Codes RAMCFG Error Codes
104   * @brief    RAMCFG Error Codes
105   * @{
106   */
107 #define HAL_RAMCFG_ERROR_NONE             0x00000000U  /*!< RAMCFG No Error         */
108 #define HAL_RAMCFG_ERROR_TIMEOUT          0x00000001U  /*!< RAMCFG Timeout Error    */
109 #define HAL_RAMCFG_ERROR_BUSY             0x00000002U  /*!< RAMCFG Busy Error       */
110 #if (USE_HAL_RAMCFG_REGISTER_CALLBACKS == 1)
111 #define HAL_RAMCFG_ERROR_INVALID_CALLBACK 0x00000003U  /*!< Invalid Callback error  */
112 #endif  /* USE_HAL_RAMCFG_REGISTER_CALLBACKS */
113 /**
114   * @}
115   */
116 
117 /** @defgroup RAMCFG_Interrupt RAMCFG Interrupts
118   * @brief    RAMCFG Interrupts
119   * @{
120   */
121 #define RAMCFG_IT_SINGLEERR   RAMCFG_IER_SEIE           /*!< RAMCFG Single Error Interrupt                   */
122 #define RAMCFG_IT_DOUBLEERR   RAMCFG_IER_DEIE           /*!< RAMCFG Double Error Interrupt                   */
123 #define RAMCFG_IT_NMIERR      RAMCFG_IER_ECCNMI         /*!< RAMCFG Double Error redirected to NMI Interrupt */
124 #define RAMCFG_IT_ALL \
125   (RAMCFG_IER_SEIE | RAMCFG_IER_DEIE |RAMCFG_IER_ECCNMI)  /*!< RAMCFG All RAMCFG interrupt                     */
126 /**
127   * @}
128   */
129 
130 /** @defgroup RAMCFG_FLAG RAMCFG Monitor Flags
131   * @brief    RAMCFG Monitor Flags
132   * @{
133   */
134 #define RAMCFG_FLAG_SINGLEERR   RAMCFG_ISR_SEDC            /*!< RAMCFG Single Error Detected and Corrected Flag */
135 #define RAMCFG_FLAG_DOUBLEERR   RAMCFG_ISR_DED             /*!< RAMCFG Double Error Detected Flag               */
136 #define RAMCFG_FLAG_SRAMBUSY    RAMCFG_ISR_SRAMBUSY        /*!< RAMCFG SRAM busy Flag                           */
137 #define RAMCFG_FLAGS_ALL \
138   (RAMCFG_ISR_SEDC | RAMCFG_ISR_DED  | RAMCFG_ISR_SRAMBUSY)  /*!< RAMCFG All Flags                                */
139 /**
140   * @}
141   */
142 
143 /** @defgroup RAMCFG_WaitState RAMCFG Wait State
144   * @brief    RAMCFG Wait State
145   * @{
146   */
147 #define RAMCFG_WAITSTATE_0   (0U)                                                  /*!< RAMCFG 0 Wait State */
148 #define RAMCFG_WAITSTATE_1   (RAMCFG_CR_WSC_0)                                     /*!< RAMCFG 1 Wait State */
149 #define RAMCFG_WAITSTATE_2   (RAMCFG_CR_WSC_1)                                     /*!< RAMCFG 2 Wait State */
150 #define RAMCFG_WAITSTATE_3   (RAMCFG_CR_WSC_0 | RAMCFG_CR_WSC_1)                   /*!< RAMCFG 3 Wait State */
151 #define RAMCFG_WAITSTATE_4   (RAMCFG_CR_WSC_2)                                     /*!< RAMCFG 4 Wait State */
152 #define RAMCFG_WAITSTATE_5   (RAMCFG_CR_WSC_0 | RAMCFG_CR_WSC_2)                   /*!< RAMCFG 5 Wait State */
153 #define RAMCFG_WAITSTATE_6   (RAMCFG_CR_WSC_1 | RAMCFG_CR_WSC_2)                   /*!< RAMCFG 6 Wait State */
154 #define RAMCFG_WAITSTATE_7   (RAMCFG_CR_WSC_0 | RAMCFG_CR_WSC_1 | RAMCFG_CR_WSC_2) /*!< RAMCFG 7 Wait State */
155 /**
156   * @}
157   */
158 
159 /** @defgroup RAMCFG_Keys RAMCFG Keys
160   * @brief    RAMCFG Keys
161   * @{
162   */
163 #define RAMCFG_ERASE_KEY1  (0xCAU) /*!< RAMCFG launch Erase Key 1 */
164 #define RAMCFG_ERASE_KEY2  (0x53U) /*!< RAMCFG launch Erase Key 2 */
165 
166 #define RAMCFG_ECC_KEY1    (0xAEU) /*!< RAMCFG launch ECC Key 1 */
167 #define RAMCFG_ECC_KEY2    (0x75U) /*!< RAMCFG launch ECC Key 2 */
168 /**
169   * @}
170   */
171 
172 
173 /**
174   * @}
175   */
176 
177 
178 /* Exported macro ------------------------------------------------------------*/
179 
180 /** @defgroup RAMCFG_Exported_Macros RAMCFG Exported Macros
181   * @brief    RAMCFG Exported Macros
182   * @{
183   */
184 
185 /**
186   * @brief  Enable the specified RAMCFG interrupts.
187   * @param  __HANDLE__   : Specifies RAMCFG handle.
188   * @param  __INTERRUPT__: Specifies the RAMCFG interrupt sources to be enabled.
189   *         This parameter can be one of the following values:
190   *           @arg RAMCFG_IT_SINGLEERR    : Single Error Interrupt Mask.
191   *           @arg RAMCFG_IT_DOUBLEERR    : Double Error Interrupt Mask.
192   *           @arg RAMCFG_IT_NMIERR       : Double Error Interrupt redirection to NMI Mask.
193   *           @arg RAMCFG_IT_ALL          : All Interrupt Mask.
194   * @retval None
195   */
196 #define __HAL_RAMCFG_ENABLE_IT(__HANDLE__, __INTERRUPT__) \
197   ((__HANDLE__)->Instance->IER |= (__INTERRUPT__))
198 
199 /**
200   * @brief  Disable the specified RAMCFG interrupts.
201   * @note   This macros is used only to disable RAMCFG_IT_SINGLEERR and RAMCFG_IT_DOUBLEERR
202   *         interrupts. RAMCFG_IT_NMIERR interrupt can only be disabled by global  peripheral reset or system reset.
203   * @param  __HANDLE__   : Specifies RAMCFG handle.
204   * @param  __INTERRUPT__: Specifies the RAMCFG interrupt sources to be disabled.
205   *         This parameter can be one of the following values:
206   *           @arg RAMCFG_IT_SINGLEERR    : Single Error Interrupt Mask.
207   *           @arg RAMCFG_IT_DOUBLEERR    : Double Error Interrupt Mask.
208   * @retval None
209   */
210 #define __HAL_RAMCFG_DISABLE_IT(__HANDLE__, __INTERRUPT__) \
211   ((__HANDLE__)->Instance->IER &= ~(__INTERRUPT__))
212 
213 /**
214   * @brief  Check whether the specified RAMCFG interrupt source is enabled or not.
215   * @param  __HANDLE__    : Specifies the RAMCFG Handle.
216   * @param  __INTERRUPT__ : Specifies the RAMCFG interrupt source to check.
217   *          This parameter can be one of the following values:
218   *           @arg RAMCFG_IT_SINGLEERR    : Single Error Interrupt Mask.
219   *           @arg RAMCFG_IT_DOUBLEERR    : Double Error Interrupt Mask.
220   *           @arg RAMCFG_IT_NMIERR       : Double Error Interrupt Redirection to NMI Mask.
221   * @retval The new state of __INTERRUPT__ (SET or RESET).
222   */
223 #define __HAL_RAMCFG_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \
224   ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? 1U : 0U)
225 
226 /**
227   * @brief  Get the RAMCFG pending flags.
228   * @param  __HANDLE__   : Specifies RAMCFG handle.
229   * @param  __FLAG__     : Specifies the flag to be checked.
230   *         This parameter can be one of the following values:
231   *            @arg RAMCFG_FLAG_SINGLEERR  : Single Error Detected and Corrected Flag.
232   *            @arg RAMCFG_FLAG_DOUBLEERR  : Double Error Detected Flag.
233   *            @arg RAMCFG_FLAG_SRAMBUSY   : SRAM Busy Flag.
234   * @retval The state of FLAG (SET or RESET).
235   */
236 #define __HAL_RAMCFG_GET_FLAG(__HANDLE__, __FLAG__) \
237   (READ_BIT((__HANDLE__)->Instance->ISR, (__FLAG__)) == (__FLAG__))
238 
239 /**
240   * @brief  Clear the RAMCFG pending flags.
241   * @param  __HANDLE__   : Specifies RAMCFG handle.
242   * @param  __FLAG__     : Specifies the flag to be cleared.
243   *          This parameter can be any combination of the following values:
244   *            @arg RAMCFG_FLAG_SINGLEERR  : Single Error Detected and Corrected Flag.
245   *            @arg RAMCFG_FLAG_DOUBLEERR  : Double Error Detected Flag.
246   * @retval None.
247   */
248 #define __HAL_RAMCFG_CLEAR_FLAG(__HANDLE__, __FLAG__) \
249   ((__HANDLE__)->Instance->ICR |= (__FLAG__))
250 
251 /** @brief  Reset the RAMCFG handle state.
252   * @param  __HANDLE__    : Specifies the RAMCFG Handle.
253   * @retval None.
254   */
255 #if (USE_HAL_RAMCFG_REGISTER_CALLBACKS == 1)
256 #define __HAL_RAMCFG_RESET_HANDLE_STATE(__HANDLE__) \
257   do{\
258     (__HANDLE__)->State = HAL_RAMCFG_STATE_RESET; \
259     (__HANDLE__)->MspInitCallback   = NULL;       \
260     (__HANDLE__)->MspDeInitCallback = NULL;       \
261   }while(0)
262 #else
263 #define __HAL_RAMCFG_RESET_HANDLE_STATE(__HANDLE__) \
264   do{\
265     (__HANDLE__)->State = HAL_RAMCFG_STATE_RESET; \
266   }while(0)
267 #endif /* USE_HAL_RAMCFG_REGISTER_CALLBACKS */
268 
269 /**
270   * @}
271   */
272 
273 /* Exported functions --------------------------------------------------------*/
274 
275 /** @defgroup RAMCFG_Exported_Functions RAMCFG Exported Functions
276   * @brief    RAMCFG Exported Functions
277   * @{
278   */
279 
280 /** @defgroup RAMCFG_Exported_Functions_Group1 Initialization and De-Initialization Functions
281   * @brief    Initialization and De-Initialization Functions
282   * @{
283   */
284 HAL_StatusTypeDef HAL_RAMCFG_Init(RAMCFG_HandleTypeDef *hramcfg);
285 HAL_StatusTypeDef HAL_RAMCFG_DeInit(RAMCFG_HandleTypeDef *hramcfg);
286 void HAL_RAMCFG_MspInit(RAMCFG_HandleTypeDef *hramcfg);
287 void HAL_RAMCFG_MspDeInit(RAMCFG_HandleTypeDef *hramcfg);
288 /**
289   * @}
290   */
291 
292 /** @defgroup RAMCFG_Exported_Functions_Group2 ECC Operation Functions
293   * @brief    ECC Operation Functions
294   * @{
295   */
296 HAL_StatusTypeDef HAL_RAMCFG_StartECC(RAMCFG_HandleTypeDef *hramcfg);
297 HAL_StatusTypeDef HAL_RAMCFG_StopECC(RAMCFG_HandleTypeDef *hramcfg);
298 HAL_StatusTypeDef HAL_RAMCFG_EnableNotification(RAMCFG_HandleTypeDef *hramcfg, uint32_t Notifications);
299 HAL_StatusTypeDef HAL_RAMCFG_DisableNotification(RAMCFG_HandleTypeDef *hramcfg, uint32_t Notifications);
300 uint32_t HAL_RAMCFG_IsECCSingleErrorDetected(const RAMCFG_HandleTypeDef *hramcfg);
301 uint32_t HAL_RAMCFG_IsECCDoubleErrorDetected(const RAMCFG_HandleTypeDef *hramcfg);
302 uint32_t HAL_RAMCFG_GetSingleErrorAddress(const RAMCFG_HandleTypeDef *hramcfg);
303 uint32_t HAL_RAMCFG_GetDoubleErrorAddress(const RAMCFG_HandleTypeDef *hramcfg);
304 /**
305   * @}
306   */
307 
308 /** @defgroup RAMCFG_Exported_Functions_Group3 Configure Wait State Functions
309   * @brief    Configure Wait State Functions
310   * @{
311   */
312 HAL_StatusTypeDef HAL_RAMCFG_ConfigWaitState(RAMCFG_HandleTypeDef *hramcfg, uint32_t WaitState);
313 uint32_t HAL_RAMCFG_GetWaitState(const RAMCFG_HandleTypeDef *hramcfg);
314 /**
315   * @}
316   */
317 
318 /** @defgroup RAMCFG_Exported_Functions_Group4 Write Protection Functions
319   * @brief    Write Protection Functions
320   * @{
321   */
322 HAL_StatusTypeDef HAL_RAMCFG_EnableWriteProtection(RAMCFG_HandleTypeDef *hramcfg, uint32_t StartPage, uint32_t NbPage);
323 /**
324   * @}
325   */
326 
327 /** @defgroup RAMCFG_Exported_Functions_Group5 Erase Operation Functions
328   * @brief    Erase Operation Functions
329   * @{
330   */
331 HAL_StatusTypeDef HAL_RAMCFG_Erase(RAMCFG_HandleTypeDef *hramcfg);
332 /**
333   * @}
334   */
335 
336 /** @defgroup RAMCFG_Exported_Functions_Group6 Handle Interrupt and Callbacks Functions
337   * @brief    Handle Interrupt and Callbacks Functions
338   * @{
339   */
340 void              HAL_RAMCFG_IRQHandler(RAMCFG_HandleTypeDef *hramcfg);
341 void              HAL_RAMCFG_DetectSingleErrorCallback(RAMCFG_HandleTypeDef *hramcfg);
342 void              HAL_RAMCFG_DetectDoubleErrorCallback(RAMCFG_HandleTypeDef *hramcfg);
343 #if (USE_HAL_RAMCFG_REGISTER_CALLBACKS == 1)
344 HAL_StatusTypeDef HAL_RAMCFG_RegisterCallback(RAMCFG_HandleTypeDef *hramcfg,
345                                               HAL_RAMCFG_CallbackIDTypeDef CallbackID,
346                                               void (* pCallback)(RAMCFG_HandleTypeDef *_hramcfg));
347 HAL_StatusTypeDef HAL_RAMCFG_UnRegisterCallback(RAMCFG_HandleTypeDef *hramcfg, HAL_RAMCFG_CallbackIDTypeDef CallbackID);
348 #endif /* USE_HAL_RAMCFG_REGISTER_CALLBACKS */
349 /**
350   * @}
351   */
352 
353 /** @defgroup RAMCFG_Exported_Functions_Group7 State and Error Functions
354   * @brief    State and Error Functions
355   * @{
356   */
357 uint32_t HAL_RAMCFG_GetError(const RAMCFG_HandleTypeDef *hramcfg);
358 HAL_RAMCFG_StateTypeDef HAL_RAMCFG_GetState(const RAMCFG_HandleTypeDef *hramcfg);
359 /**
360   * @}
361   */
362 
363 /**
364   * @}
365   */
366 
367 
368 /* Private Constants ---------------------------------------------------------*/
369 
370 /** @defgroup RAMCFG_Private_Constants RAMCFG Private Defines and Constants
371   * @brief    RAMCFG Private Defines and Constants
372   * @{
373   */
374 /**
375   * @}
376   */
377 
378 
379 /* Private macros ------------------------------------------------------------*/
380 
381 /** @defgroup RAMCFG_Private_Macros RAMCFG Private Macros
382   * @brief    RAMCFG Private Macros
383   * @{
384   */
385 #define IS_RAMCFG_INTERRUPT(INTERRUPT) \
386   (((INTERRUPT) != 0U) && (((INTERRUPT) & ~(RAMCFG_IT_SINGLEERR | RAMCFG_IT_DOUBLEERR | RAMCFG_IT_NMIERR)) == 0U))
387 
388 
389 #define IS_RAMCFG_WAITSTATE(WAITSTATE) \
390   (((WAITSTATE) == RAMCFG_WAITSTATE_0) || ((WAITSTATE) == RAMCFG_WAITSTATE_1) || \
391    ((WAITSTATE) == RAMCFG_WAITSTATE_2) || ((WAITSTATE) == RAMCFG_WAITSTATE_3) || \
392    ((WAITSTATE) == RAMCFG_WAITSTATE_4) || ((WAITSTATE) == RAMCFG_WAITSTATE_5) || \
393    ((WAITSTATE) == RAMCFG_WAITSTATE_6) || ((WAITSTATE) == RAMCFG_WAITSTATE_7))
394 
395 #define IS_RAMCFG_WRITEPROTECTION_PAGE(PAGE)   ((PAGE) <= 64U)
396 
397 
398 /**
399   * @}
400   */
401 
402 
403 /* Private functions ---------------------------------------------------------*/
404 
405 /** @defgroup RAMCFG_Private_Functions RAMCFG Private Functions
406   * @brief    RAMCFG Private Functions
407   * @{
408   */
409 /**
410   * @}
411   */
412 
413 /**
414   * @}
415   */
416 
417 /**
418   * @}
419   */
420 
421 #ifdef __cplusplus
422 }
423 #endif
424 
425 #endif /* STM32U5xx_HAL_RAMCFG_H */
426