You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

359 lines
15 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32h7xx_hal_ramecc.h
  4. * @author MCD Application Team
  5. * @brief Header file of RAMECC HAL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. /* Define to prevent recursive inclusion -------------------------------------*/
  20. #ifndef STM32H7xx_HAL_RAMECC_H
  21. #define STM32H7xx_HAL_RAMECC_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. /* Includes ------------------------------------------------------------------*/
  26. #include "stm32h7xx_hal_def.h"
  27. /** @addtogroup STM32H7xx_HAL_Driver
  28. * @{
  29. */
  30. /** @addtogroup RAMECC
  31. * @{
  32. */
  33. /* Exported types ------------------------------------------------------------*/
  34. /** @defgroup RAMECC_Exported_Types RAMECC Exported Types
  35. * @brief RAMECC Exported Types
  36. * @{
  37. */
  38. /**
  39. * @brief HAL RAMECC State structures definition
  40. */
  41. typedef enum
  42. {
  43. HAL_RAMECC_STATE_RESET = 0x00U, /*!< RAMECC not yet initialized or disabled */
  44. HAL_RAMECC_STATE_READY = 0x01U, /*!< RAMECC initialized and ready for use */
  45. HAL_RAMECC_STATE_BUSY = 0x02U, /*!< RAMECC process is ongoing */
  46. HAL_RAMECC_STATE_ERROR = 0x03U, /*!< RAMECC error state */
  47. }HAL_RAMECC_StateTypeDef;
  48. /**
  49. * @brief RAMECC handle Structure definition
  50. */
  51. typedef struct __RAMECC_HandleTypeDef
  52. {
  53. RAMECC_MonitorTypeDef *Instance; /*!< Register base address */
  54. __IO HAL_RAMECC_StateTypeDef State; /*!< RAMECC state */
  55. __IO uint32_t ErrorCode; /*!< RAMECC Error Code */
  56. void (* DetectErrorCallback)( struct __RAMECC_HandleTypeDef *hramecc); /*!< RAMECC error detect callback */
  57. }RAMECC_HandleTypeDef;
  58. /**
  59. * @}
  60. */
  61. /* Exported constants --------------------------------------------------------*/
  62. /** @defgroup RAMECC_Error_Codes RAMECC Error Codes
  63. * @{
  64. */
  65. #define HAL_RAMECC_ERROR_NONE 0x00000000U /*!< RAMECC No Error */
  66. #define HAL_RAMECC_ERROR_TIMEOUT 0x00000001U /*!< RAMECC Timeout Error */
  67. #define HAL_RAMECC_ERROR_BUSY 0x00000002U /*!< RAMECC Busy Error */
  68. #define HAL_RAMECC_ERROR_INVALID_CALLBACK 0x00000003U /*!< Invalid Callback error */
  69. /**
  70. * @}
  71. */
  72. /** @defgroup RAMECC_Interrupt RAMECC interrupts
  73. * @{
  74. */
  75. #define RAMECC_IT_GLOBAL_ID 0x10000000UL
  76. #define RAMECC_IT_MONITOR_ID 0x20000000UL
  77. #define RAMECC_IT_GLOBAL_ENABLE (RAMECC_IT_GLOBAL_ID | RAMECC_IER_GIE)
  78. #define RAMECC_IT_GLOBAL_SINGLEERR_R (RAMECC_IT_GLOBAL_ID | RAMECC_IER_GECCSEIE)
  79. #define RAMECC_IT_GLOBAL_DOUBLEERR_R (RAMECC_IT_GLOBAL_ID | RAMECC_IER_GECCDEIE)
  80. #define RAMECC_IT_GLOBAL_DOUBLEERR_W (RAMECC_IT_GLOBAL_ID | RAMECC_IER_GECCDEBWIE)
  81. #define RAMECC_IT_GLOBAL_ALL (RAMECC_IT_GLOBAL_ID | RAMECC_IER_GIE | RAMECC_IER_GECCSEIE | RAMECC_IER_GECCDEIE | RAMECC_IER_GECCDEBWIE)
  82. #define RAMECC_IT_MONITOR_SINGLEERR_R (RAMECC_IT_MONITOR_ID | RAMECC_CR_ECCSEIE)
  83. #define RAMECC_IT_MONITOR_DOUBLEERR_R (RAMECC_IT_MONITOR_ID | RAMECC_CR_ECCDEIE)
  84. #define RAMECC_IT_MONITOR_DOUBLEERR_W (RAMECC_IT_MONITOR_ID | RAMECC_CR_ECCDEBWIE)
  85. #define RAMECC_IT_MONITOR_ALL (RAMECC_IT_MONITOR_ID | RAMECC_CR_ECCDEBWIE | RAMECC_CR_ECCDEIE | RAMECC_CR_ECCSEIE)
  86. /**
  87. * @}
  88. */
  89. /** @defgroup RAMECC_FLAG RAMECC Monitor flags
  90. * @{
  91. */
  92. #define RAMECC_FLAG_SINGLEERR_R RAMECC_SR_SEDCF
  93. #define RAMECC_FLAG_DOUBLEERR_R RAMECC_SR_DEDF
  94. #define RAMECC_FLAG_DOUBLEERR_W RAMECC_SR_DEBWDF
  95. #define RAMECC_FLAGS_ALL (RAMECC_SR_SEDCF | RAMECC_SR_DEDF | RAMECC_SR_DEBWDF)
  96. /**
  97. * @}
  98. */
  99. /* Exported macro ------------------------------------------------------------*/
  100. /** @defgroup RAMECC_Exported_Macros RAMECC Exported Macros
  101. * @{
  102. */
  103. #define __HAL_RAMECC_ENABLE_GLOBAL_IT(__HANDLE__, __INTERRUPT__) ((((RAMECC_TypeDef *)((uint32_t)(__HANDLE__)->Instance & 0xFFFFFF00U))->IER) |= ((__INTERRUPT__) & ~RAMECC_IT_GLOBAL_ID))
  104. #define __HAL_RAMECC_ENABLE_MONITOR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR |= ((__INTERRUPT__) & ~RAMECC_IT_MONITOR_ID))
  105. /**
  106. * @brief Enable the specified RAMECC interrupts.
  107. * @param __HANDLE__ : RAMECC handle.
  108. * @param __INTERRUPT__: specifies the RAMECC interrupt sources to be enabled or disabled.
  109. * This parameter can be one of the following values:
  110. * @arg RAMECC_IT_GLOBAL_E : Global interrupt enable mask.
  111. * @arg RAMECC_IT_GLOBAL_SEE : Global ECC single error interrupt enable.
  112. * @arg RAMECC_IT_GLOBAL_DEE : Global ECC double error interrupt enable.
  113. * @arg RAMECC_IT_GLOBAL_DEBWE : Global ECC double error on byte write (BW) interrupt enable.
  114. * @arg RAMECC_IT_GLOBAL_ALL : All Global ECC interrupts enable mask.
  115. * @arg RAMECC_IT_MONITOR_SEE : Monitor ECC single error interrupt enable.
  116. * @arg RAMECC_IT_MONITOR_DEE : Monitor ECC double error interrupt enable.
  117. * @arg RAMECC_IT_MONITOR_DEBWE : Monitor ECC double error on byte write (BW) interrupt enable.
  118. * @arg RAMECC_IT_MONITOR_ALL : All Monitor ECC interrupts enable mask.
  119. * @retval None
  120. */
  121. #define __HAL_RAMECC_ENABLE_IT(__HANDLE__, __INTERRUPT__) ( \
  122. (IS_RAMECC_GLOBAL_INTERRUPT(__INTERRUPT__)) ? (__HAL_RAMECC_ENABLE_GLOBAL_IT((__HANDLE__), (__INTERRUPT__))) :\
  123. (__HAL_RAMECC_ENABLE_MONITOR_IT((__HANDLE__), (__INTERRUPT__))))
  124. #define __HAL_RAMECC_DISABLE_GLOBAL_IT(__HANDLE__, __INTERRUPT__) ((((RAMECC_TypeDef *)((uint32_t)(__HANDLE__)->Instance & 0xFFFFFF00U))->IER) &= ~((__INTERRUPT__) & ~RAMECC_IT_GLOBAL_ID))
  125. #define __HAL_RAMECC_DISABLE_MONITOR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR &= ~((__INTERRUPT__) & ~RAMECC_IT_MONITOR_ID))
  126. /**
  127. * @brief Disable the specified RAMECC interrupts.
  128. * @param __HANDLE__ : RAMECC handle.
  129. * @param __INTERRUPT__: specifies the RAMECC interrupt sources to be enabled or disabled.
  130. * This parameter can be one of the following values:
  131. * @arg RAMECC_IT_GLOBAL_E : Global interrupt enable mask.
  132. * @arg RAMECC_IT_GLOBAL_SEE : Global ECC single error interrupt enable.
  133. * @arg RAMECC_IT_GLOBAL_DEE : Global ECC double error interrupt enable.
  134. * @arg RAMECC_IT_GLOBAL_DEBWE : Global ECC double error on byte write (BW) interrupt enable.
  135. * @arg RAMECC_IT_GLOBAL_ALL : All Global ECC interrupts enable mask.
  136. * @arg RAMECC_IT_MONITOR_SEE : Monitor ECC single error interrupt enable.
  137. * @arg RAMECC_IT_MONITOR_DEE : Monitor ECC double error interrupt enable.
  138. * @arg RAMECC_IT_MONITOR_DEBWE : Monitor ECC double error on byte write (BW) interrupt enable.
  139. * @arg RAMECC_IT_MONITOR_ALL : All Monitor ECC interrupts enable mask.
  140. * @retval None
  141. */
  142. #define __HAL_RAMECC_DISABLE_IT(__HANDLE__, __INTERRUPT__) ( \
  143. (IS_RAMECC_GLOBAL_INTERRUPT(__INTERRUPT__)) ? (__HAL_RAMECC_DISABLE_GLOBAL_IT((__HANDLE__), (__INTERRUPT__))) :\
  144. (__HAL_RAMECC_DISABLE_MONITOR_IT((__HANDLE__), (__INTERRUPT__))))
  145. #define __HAL_RAMECC_GET_GLOBAL_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((((RAMECC_TypeDef *)((uint32_t)(__HANDLE__)->Instance & 0xFFFFFF00U))->IER) & ((__INTERRUPT__) & ~RAMECC_IT_GLOBAL_ID)) ? SET : RESET)
  146. #define __HAL_RAMECC_GET_MONITOR_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR) & ((__INTERRUPT__) & ~RAMECC_IT_GLOBAL_ID)) ? SET : RESET)
  147. /**
  148. * @brief Check whether the specified RAMECC interrupt source is enabled or not.
  149. * @param __HANDLE__ : Specifies the RAMECC Handle.
  150. * @param __INTERRUPT__ : Specifies the RAMECC interrupt source to check.
  151. * This parameter can be one of the following values:
  152. * @arg RAMECC_IT_GLOBAL_E : Global interrupt enable mask.
  153. * @arg RAMECC_IT_GLOBAL_SEE : Global ECC single error interrupt enable.
  154. * @arg RAMECC_IT_GLOBAL_DEE : Global ECC double error interrupt enable.
  155. * @arg RAMECC_IT_GLOBAL_DEBWE : Global ECC double error on byte write (BW) interrupt enable.
  156. * @arg RAMECC_IT_GLOBAL_ALL : All Global ECC interrupts enable mask.
  157. * @arg RAMECC_IT_MONITOR_SEE : Monitor ECC single error interrupt enable.
  158. * @arg RAMECC_IT_MONITOR_DEE : Monitor ECC double error interrupt enable.
  159. * @arg RAMECC_IT_MONITOR_DEBWE : Monitor ECC double error on byte write (BW) interrupt enable.
  160. * @arg RAMECC_IT_MONITOR_ALL : All Monitor ECC interrupts enable mask.
  161. * @retval The new state of __INTERRUPT__ (SET or RESET).
  162. */
  163. #define __HAL_RAMECC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ( \
  164. (IS_RAMECC_GLOBAL_INTERRUPT(__INTERRUPT__)) ? (__HAL_RAMECC_GET_GLOBAL_IT_SOURCE((__HANDLE__), (__INTERRUPT__))) :\
  165. (__HAL_RAMECC_GET_MONITOR_IT_SOURCE((__HANDLE__), (__INTERRUPT__))))
  166. /**
  167. * @brief Get the RAMECC pending flags.
  168. * @param __HANDLE__ : RAMECC handle.
  169. * @param __FLAG__ : specifies the flag to clear.
  170. * This parameter can be any combination of the following values:
  171. * @arg RAMECC_FLAG_SEDCF : RAMECC instance ECC single error detected and corrected flag.
  172. * @arg RAMECC_FLAG_DEDF : RAMECC instance ECC double error detected flag.
  173. * @arg RAMECC_FLAG_DEBWDF : RAMECC instance ECC double error on byte write (BW) detected flag.
  174. * @arg RAMECC_FLAGS_ALL : RAMECC instance all flag.
  175. * @retval The state of __FLAG__ (SET or RESET).
  176. */
  177. #define __HAL_RAMECC_GET_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR &= (__FLAG__))
  178. /**
  179. * @brief Clear the RAMECC pending flags.
  180. * @param __HANDLE__ : RAMECC handle.
  181. * @param __FLAG__ : specifies the flag to clear.
  182. * This parameter can be any combination of the following values:
  183. * @arg RAMECC_FLAG_SEDCF : RAMECC instance ECC single error detected and corrected flag.
  184. * @arg RAMECC_FLAG_DEDF : RAMECC instance ECC double error detected flag.
  185. * @arg RAMECC_FLAG_DEBWDF : RAMECC instance ECC double error on byte write (BW) detected flag.
  186. * @arg RAMECC_FLAGS_ALL : RAMECC instance all flag.
  187. * @retval None.
  188. */
  189. #define __HAL_RAMECC_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR &= ~(__FLAG__))
  190. /**
  191. * @brief Reset the RAMECC handle state.
  192. * @param __HANDLE__ : Specifies the RAMECC Handle.
  193. * @retval None.
  194. */
  195. #define __HAL_RAMECC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_RAMECC_STATE_RESET)
  196. /**
  197. * @}
  198. */
  199. /* Exported functions --------------------------------------------------------*/
  200. /** @defgroup RAMECC_Exported_Functions RAMECC Exported Functions
  201. * @brief RAMECC Exported functions
  202. * @{
  203. */
  204. /** @defgroup RAMECC_Exported_Functions_Group1 Initialization and de-initialization functions
  205. * @brief Initialization and de-initialization functions
  206. * @{
  207. */
  208. HAL_StatusTypeDef HAL_RAMECC_Init (RAMECC_HandleTypeDef *hramecc);
  209. HAL_StatusTypeDef HAL_RAMECC_DeInit (RAMECC_HandleTypeDef *hramecc);
  210. /**
  211. * @}
  212. */
  213. /** @defgroup RAMECC_Exported_Functions_Group2 monitoring operation functions
  214. * @brief monitoring operation functions
  215. * @{
  216. */
  217. HAL_StatusTypeDef HAL_RAMECC_StartMonitor (RAMECC_HandleTypeDef *hramecc);
  218. HAL_StatusTypeDef HAL_RAMECC_StopMonitor (RAMECC_HandleTypeDef *hramecc);
  219. HAL_StatusTypeDef HAL_RAMECC_EnableNotification (RAMECC_HandleTypeDef *hramecc, uint32_t Notifications);
  220. HAL_StatusTypeDef HAL_RAMECC_DisableNotification (RAMECC_HandleTypeDef *hramecc, uint32_t Notifications);
  221. void HAL_RAMECC_IRQHandler (RAMECC_HandleTypeDef *hramecc);
  222. HAL_StatusTypeDef HAL_RAMECC_RegisterCallback (RAMECC_HandleTypeDef *hramecc, void (* pCallback)(RAMECC_HandleTypeDef *_hramecc));
  223. HAL_StatusTypeDef HAL_RAMECC_UnRegisterCallback (RAMECC_HandleTypeDef *hramecc);
  224. /**
  225. * @}
  226. */
  227. /** @defgroup RAMECC_Exported_Functions_Group3 Error informations functions
  228. * @brief Error informations functions
  229. * @{
  230. */
  231. uint32_t HAL_RAMECC_GetFailingAddress (RAMECC_HandleTypeDef *hramecc);
  232. uint32_t HAL_RAMECC_GetFailingDataLow (RAMECC_HandleTypeDef *hramecc);
  233. uint32_t HAL_RAMECC_GetFailingDataHigh (RAMECC_HandleTypeDef *hramecc);
  234. uint32_t HAL_RAMECC_GetHammingErrorCode (RAMECC_HandleTypeDef *hramecc);
  235. uint32_t HAL_RAMECC_IsECCSingleErrorDetected (RAMECC_HandleTypeDef *hramecc);
  236. uint32_t HAL_RAMECC_IsECCDoubleErrorDetected (RAMECC_HandleTypeDef *hramecc);
  237. /**
  238. * @}
  239. */
  240. /** @defgroup RAMECC_Exported_Functions_Group3 Error informations functions
  241. * @brief Error informations functions
  242. * @{
  243. */
  244. HAL_RAMECC_StateTypeDef HAL_RAMECC_GetState (RAMECC_HandleTypeDef *hramecc);
  245. uint32_t HAL_RAMECC_GetError (RAMECC_HandleTypeDef *hramecc);
  246. /**
  247. * @}
  248. */
  249. /**
  250. * @}
  251. */
  252. /* Private Constants -------------------------------------------------------------*/
  253. /** @defgroup RAMECC_Private_Constants RAMECC Private Constants
  254. * @brief RAMECC private defines and constants
  255. * @{
  256. */
  257. /**
  258. * @}
  259. */
  260. /* Private macros ------------------------------------------------------------*/
  261. /** @defgroup RAMECC_Private_Macros RAMECC Private Macros
  262. * @brief RAMECC private macros
  263. * @{
  264. */
  265. #define IS_RAMECC_GLOBAL_INTERRUPT(INTERRUPT) (((INTERRUPT) == RAMECC_IT_GLOBAL_ENABLE) || \
  266. ((INTERRUPT) == RAMECC_IT_GLOBAL_SINGLEERR_R) || \
  267. ((INTERRUPT) == RAMECC_IT_GLOBAL_DOUBLEERR_R) || \
  268. ((INTERRUPT) == RAMECC_IT_GLOBAL_DOUBLEERR_W) || \
  269. ((INTERRUPT) == RAMECC_IT_GLOBAL_ALL))
  270. #define IS_RAMECC_MONITOR_INTERRUPT(INTERRUPT) (((INTERRUPT) == RAMECC_IT_MONITOR_SINGLEERR_R) || \
  271. ((INTERRUPT) == RAMECC_IT_MONITOR_DOUBLEERR_R) || \
  272. ((INTERRUPT) == RAMECC_IT_MONITOR_DOUBLEERR_W) || \
  273. ((INTERRUPT) == RAMECC_IT_MONITOR_ALL))
  274. #define IS_RAMECC_INTERRUPT(INTERRUPT) ((IS_RAMECC_GLOBAL_INTERRUPT(INTERRUPT)) || \
  275. (IS_RAMECC_MONITOR_INTERRUPT(INTERRUPT)))
  276. /**
  277. * @}
  278. */
  279. /** @defgroup RAMECC_FLAG RAMECC Monitor flags
  280. * @{
  281. */
  282. /* Private functions ---------------------------------------------------------*/
  283. /** @defgroup RAMECC_Private_Functions RAMECC Private Functions
  284. * @brief RAMECC private functions
  285. * @{
  286. */
  287. /**
  288. * @}
  289. */
  290. /**
  291. * @}
  292. */
  293. /**
  294. * @}
  295. */
  296. /**
  297. * @}
  298. */
  299. #ifdef __cplusplus
  300. }
  301. #endif
  302. #endif /* STM32H7xx_HAL_RAMECC_H */
  303. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/