1 /** 2 ****************************************************************************** 3 * @file stm32h5xx_hal_ramcfg.h 4 * @author MCD Application Team 5 * @brief Header file of RAMCFG HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2023 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 STM32H5xx_HAL_RAMCFG_H 21 #define STM32H5xx_HAL_RAMCFG_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32h5xx_hal_def.h" 29 30 /** @addtogroup STM32H5xx_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_Keys RAMCFG Keys 144 * @brief RAMCFG Keys 145 * @{ 146 */ 147 #define RAMCFG_ERASE_KEY1 (0xCAU) /*!< RAMCFG launch Erase Key 1 */ 148 #define RAMCFG_ERASE_KEY2 (0x53U) /*!< RAMCFG launch Erase Key 2 */ 149 150 #define RAMCFG_ECC_KEY1 (0xAEU) /*!< RAMCFG launch ECC Key 1 */ 151 #define RAMCFG_ECC_KEY2 (0x75U) /*!< RAMCFG launch ECC Key 2 */ 152 /** 153 * @} 154 */ 155 /** 156 * @} 157 */ 158 159 160 /* Exported macro ------------------------------------------------------------*/ 161 162 /** @defgroup RAMCFG_Exported_Macros RAMCFG Exported Macros 163 * @brief RAMCFG Exported Macros 164 * @{ 165 */ 166 167 /** 168 * @brief Enable the specified RAMCFG interrupts. 169 * @param __HANDLE__ : Specifies RAMCFG handle. 170 * @param __INTERRUPT__: Specifies the RAMCFG interrupt sources to be enabled. 171 * This parameter can be one of the following values: 172 * @arg RAMCFG_IT_SINGLEERR : Single Error Interrupt Mask. 173 * @arg RAMCFG_IT_DOUBLEERR : Double Error Interrupt Mask. 174 * @arg RAMCFG_IT_NMIERR : Double Error Interrupt redirection to NMI Mask. 175 * @arg RAMCFG_IT_ALL : All Interrupt Mask. 176 * @retval None 177 */ 178 #define __HAL_RAMCFG_ENABLE_IT(__HANDLE__, __INTERRUPT__) \ 179 ((__HANDLE__)->Instance->IER |= (__INTERRUPT__)) 180 181 /** 182 * @brief Disable the specified RAMCFG interrupts. 183 * @note This macros is used only to disable RAMCFG_IT_SINGLEERR and RAMCFG_IT_DOUBLEERR 184 * interrupts. RAMCFG_IT_NMIERR interrupt can only be disabled by global peripheral reset or system reset. 185 * @param __HANDLE__ : Specifies RAMCFG handle. 186 * @param __INTERRUPT__: Specifies the RAMCFG interrupt sources to be disabled. 187 * This parameter can be one of the following values: 188 * @arg RAMCFG_IT_SINGLEERR : Single Error Interrupt Mask. 189 * @arg RAMCFG_IT_DOUBLEERR : Double Error Interrupt Mask. 190 * @retval None 191 */ 192 #define __HAL_RAMCFG_DISABLE_IT(__HANDLE__, __INTERRUPT__) \ 193 ((__HANDLE__)->Instance->IER &= ~(__INTERRUPT__)) 194 195 /** 196 * @brief Check whether the specified RAMCFG interrupt source is enabled or not. 197 * @param __HANDLE__ : Specifies the RAMCFG Handle. 198 * @param __INTERRUPT__ : Specifies the RAMCFG interrupt source to check. 199 * This parameter can be one of the following values: 200 * @arg RAMCFG_IT_SINGLEERR : Single Error Interrupt Mask. 201 * @arg RAMCFG_IT_DOUBLEERR : Double Error Interrupt Mask. 202 * @arg RAMCFG_IT_NMIERR : Double Error Interrupt Redirection to NMI Mask. 203 * @retval The new state of __INTERRUPT__ (SET or RESET). 204 */ 205 #define __HAL_RAMCFG_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \ 206 ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? 1U : 0U) 207 208 /** 209 * @brief Get the RAMCFG pending flags. 210 * @param __HANDLE__ : Specifies RAMCFG handle. 211 * @param __FLAG__ : Specifies the flag to be checked. 212 * This parameter can be one of the following values: 213 * @arg RAMCFG_FLAG_SINGLEERR : Single Error Detected and Corrected Flag. 214 * @arg RAMCFG_FLAG_DOUBLEERR : Double Error Detected Flag. 215 * @arg RAMCFG_FLAG_SRAMBUSY : SRAM Busy Flag. 216 * @retval The state of FLAG (SET or RESET). 217 */ 218 #define __HAL_RAMCFG_GET_FLAG(__HANDLE__, __FLAG__) \ 219 (READ_BIT((__HANDLE__)->Instance->ISR, (__FLAG__)) == (__FLAG__)) 220 221 /** 222 * @brief Clear the RAMCFG pending flags. 223 * @param __HANDLE__ : Specifies RAMCFG handle. 224 * @param __FLAG__ : Specifies the flag to be cleared. 225 * This parameter can be any combination of the following values: 226 * @arg RAMCFG_FLAG_SINGLEERR : Single Error Detected and Corrected Flag. 227 * @arg RAMCFG_FLAG_DOUBLEERR : Double Error Detected Flag. 228 * @retval None. 229 */ 230 #define __HAL_RAMCFG_CLEAR_FLAG(__HANDLE__, __FLAG__) \ 231 ((__HANDLE__)->Instance->ICR |= (__FLAG__)) 232 233 /** @brief Reset the RAMCFG handle state. 234 * @param __HANDLE__ : Specifies the RAMCFG Handle. 235 * @retval None. 236 */ 237 #if (USE_HAL_RAMCFG_REGISTER_CALLBACKS == 1) 238 #define __HAL_RAMCFG_RESET_HANDLE_STATE(__HANDLE__) \ 239 do{\ 240 (__HANDLE__)->State = HAL_RAMCFG_STATE_RESET; \ 241 (__HANDLE__)->MspInitCallback = NULL; \ 242 (__HANDLE__)->MspDeInitCallback = NULL; \ 243 }while(0) 244 #else 245 #define __HAL_RAMCFG_RESET_HANDLE_STATE(__HANDLE__) \ 246 do{\ 247 (__HANDLE__)->State = HAL_RAMCFG_STATE_RESET; \ 248 }while(0) 249 #endif /* USE_HAL_RAMCFG_REGISTER_CALLBACKS */ 250 251 /** 252 * @} 253 */ 254 255 /* Exported functions --------------------------------------------------------*/ 256 257 /** @defgroup RAMCFG_Exported_Functions RAMCFG Exported Functions 258 * @brief RAMCFG Exported Functions 259 * @{ 260 */ 261 262 /** @defgroup RAMCFG_Exported_Functions_Group1 Initialization and De-Initialization Functions 263 * @brief Initialization and De-Initialization Functions 264 * @{ 265 */ 266 HAL_StatusTypeDef HAL_RAMCFG_Init(RAMCFG_HandleTypeDef *hramcfg); 267 HAL_StatusTypeDef HAL_RAMCFG_DeInit(RAMCFG_HandleTypeDef *hramcfg); 268 void HAL_RAMCFG_MspInit(RAMCFG_HandleTypeDef *hramcfg); 269 void HAL_RAMCFG_MspDeInit(RAMCFG_HandleTypeDef *hramcfg); 270 /** 271 * @} 272 */ 273 274 /** @defgroup RAMCFG_Exported_Functions_Group2 ECC Operation Functions 275 * @brief ECC Operation Functions 276 * @{ 277 */ 278 HAL_StatusTypeDef HAL_RAMCFG_StartECC(RAMCFG_HandleTypeDef *hramcfg); 279 HAL_StatusTypeDef HAL_RAMCFG_StopECC(RAMCFG_HandleTypeDef *hramcfg); 280 HAL_StatusTypeDef HAL_RAMCFG_EnableNotification(RAMCFG_HandleTypeDef *hramcfg, uint32_t Notifications); 281 HAL_StatusTypeDef HAL_RAMCFG_DisableNotification(RAMCFG_HandleTypeDef *hramcfg, uint32_t Notifications); 282 uint32_t HAL_RAMCFG_IsECCSingleErrorDetected(const RAMCFG_HandleTypeDef *hramcfg); 283 uint32_t HAL_RAMCFG_IsECCDoubleErrorDetected(const RAMCFG_HandleTypeDef *hramcfg); 284 uint32_t HAL_RAMCFG_GetSingleErrorAddress(const RAMCFG_HandleTypeDef *hramcfg); 285 uint32_t HAL_RAMCFG_GetDoubleErrorAddress(const RAMCFG_HandleTypeDef *hramcfg); 286 /** 287 * @} 288 */ 289 290 /** @defgroup RAMCFG_Exported_Functions_Group4 Write Protection Functions 291 * @brief Write Protection Functions 292 * @{ 293 */ 294 HAL_StatusTypeDef HAL_RAMCFG_EnableWriteProtection(RAMCFG_HandleTypeDef *hramcfg, uint32_t StartPage, uint32_t NbPage); 295 /** 296 * @} 297 */ 298 299 /** @defgroup RAMCFG_Exported_Functions_Group5 Erase Operation Functions 300 * @brief Erase Operation Functions 301 * @{ 302 */ 303 HAL_StatusTypeDef HAL_RAMCFG_Erase(RAMCFG_HandleTypeDef *hramcfg); 304 /** 305 * @} 306 */ 307 308 /** @defgroup RAMCFG_Exported_Functions_Group6 Handle Interrupt and Callbacks Functions 309 * @brief Handle Interrupt and Callbacks Functions 310 * @{ 311 */ 312 void HAL_RAMCFG_IRQHandler(RAMCFG_HandleTypeDef *hramcfg); 313 void HAL_RAMCFG_DetectSingleErrorCallback(RAMCFG_HandleTypeDef *hramcfg); 314 void HAL_RAMCFG_DetectDoubleErrorCallback(RAMCFG_HandleTypeDef *hramcfg); 315 #if (USE_HAL_RAMCFG_REGISTER_CALLBACKS == 1) 316 HAL_StatusTypeDef HAL_RAMCFG_RegisterCallback(RAMCFG_HandleTypeDef *hramcfg, 317 HAL_RAMCFG_CallbackIDTypeDef CallbackID, 318 void (* pCallback)(RAMCFG_HandleTypeDef *_hramcfg)); 319 HAL_StatusTypeDef HAL_RAMCFG_UnRegisterCallback(RAMCFG_HandleTypeDef *hramcfg, HAL_RAMCFG_CallbackIDTypeDef CallbackID); 320 #endif /* USE_HAL_RAMCFG_REGISTER_CALLBACKS */ 321 /** 322 * @} 323 */ 324 325 /** @defgroup RAMCFG_Exported_Functions_Group7 State and Error Functions 326 * @brief State and Error Functions 327 * @{ 328 */ 329 uint32_t HAL_RAMCFG_GetError(const RAMCFG_HandleTypeDef *hramcfg); 330 HAL_RAMCFG_StateTypeDef HAL_RAMCFG_GetState(const RAMCFG_HandleTypeDef *hramcfg); 331 /** 332 * @} 333 */ 334 335 336 /** 337 * @} 338 */ 339 340 341 /* Private Constants ---------------------------------------------------------*/ 342 343 /** @defgroup RAMCFG_Private_Constants RAMCFG Private Defines and Constants 344 * @brief RAMCFG Private Defines and Constants 345 * @{ 346 */ 347 /** 348 * @} 349 */ 350 351 352 /* Private macros ------------------------------------------------------------*/ 353 354 /** @defgroup RAMCFG_Private_Macros RAMCFG Private Macros 355 * @brief RAMCFG Private Macros 356 * @{ 357 */ 358 #define IS_RAMCFG_INTERRUPT(INTERRUPT) \ 359 (((INTERRUPT) != 0U) && (((INTERRUPT) & ~(RAMCFG_IT_SINGLEERR | RAMCFG_IT_DOUBLEERR | RAMCFG_IT_NMIERR)) == 0U)) 360 361 362 #if defined (RAMCFG_WPR3_P64WP) 363 #define IS_RAMCFG_WRITEPROTECTION_PAGE(PAGE) ((PAGE) <= 80U) 364 #else 365 #define IS_RAMCFG_WRITEPROTECTION_PAGE(PAGE) ((PAGE) <= 64U) 366 #endif /* RAMCFG_WPR3_P64WP*/ 367 368 369 /** 370 * @} 371 */ 372 373 374 /* Private functions ---------------------------------------------------------*/ 375 376 /** @defgroup RAMCFG_Private_Functions RAMCFG Private Functions 377 * @brief RAMCFG Private Functions 378 * @{ 379 */ 380 /** 381 * @} 382 */ 383 384 /** 385 * @} 386 */ 387 388 /** 389 * @} 390 */ 391 392 #ifdef __cplusplus 393 } 394 #endif 395 396 #endif /* STM32H5xx_HAL_RAMCFG_H */ 397