1 /** 2 ****************************************************************************** 3 * @file stm32u0xx_hal_crc_ex.h 4 * @author MCD Application Team 5 * @brief Header file of CRC HAL extended 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 STM32U0xx_HAL_CRC_EX_H 21 #define STM32U0xx_HAL_CRC_EX_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32u0xx_hal_def.h" 29 30 /** @addtogroup STM32U0xx_HAL_Driver 31 * @{ 32 */ 33 34 /** @addtogroup CRCEx 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 /* Exported constants --------------------------------------------------------*/ 40 /** @defgroup CRCEx_Exported_Constants CRC Extended Exported Constants 41 * @{ 42 */ 43 44 /** @defgroup CRCEx_Input_Data_Inversion Input Data Inversion Modes 45 * @{ 46 */ 47 #define CRC_INPUTDATA_INVERSION_NONE 0x00000000U /*!< No input data inversion */ 48 #define CRC_INPUTDATA_INVERSION_HALFWORD_BYWORD (CRC_CR_RTYPE_IN | CRC_CR_REV_IN_0) /*!< Input data half-word-reversal done by word */ 49 #define CRC_INPUTDATA_INVERSION_BYTE_BYWORD (CRC_CR_RTYPE_IN | CRC_CR_REV_IN_1) /*!< Input data byte-reversal done by word */ 50 #define CRC_INPUTDATA_INVERSION_BIT_BYBYTE CRC_CR_REV_IN_0 /*!< Input data bit-reversal done by byte */ 51 #define CRC_INPUTDATA_INVERSION_BIT_BYHALFWORD CRC_CR_REV_IN_1 /*!< Input data bit-reversal done by half-word */ 52 #define CRC_INPUTDATA_INVERSION_BIT_BYWORD CRC_CR_REV_IN /*!< Input data bit-reversal done by word */ 53 54 #define CRC_INPUTDATA_INVERSION_BYTE CRC_INPUTDATA_INVERSION_BIT_BYBYTE /*!< Definition for compatibility with legacy code */ 55 #define CRC_INPUTDATA_INVERSION_HALFWORD CRC_INPUTDATA_INVERSION_BIT_BYHALFWORD /*!< Definition for compatibility with legacy code */ 56 #define CRC_INPUTDATA_INVERSION_WORD CRC_INPUTDATA_INVERSION_BIT_BYWORD /*!< Definition for compatibility with legacy code */ 57 /** 58 * @} 59 */ 60 61 /** @defgroup CRCEx_Output_Data_Inversion Output Data Inversion Modes 62 * @{ 63 */ 64 #define CRC_OUTPUTDATA_INVERSION_DISABLE 0x00000000U /*!< No output data inversion */ 65 #define CRC_OUTPUTDATA_INVERSION_BIT CRC_CR_REV_OUT_0 /*!< Output data bit-reversal */ 66 #define CRC_OUTPUTDATA_INVERSION_HALFWORD (CRC_CR_RTYPE_OUT | CRC_CR_REV_OUT_0) /*!< Output data half-word-reversal done by word */ 67 #define CRC_OUTPUTDATA_INVERSION_BYTE (CRC_CR_RTYPE_OUT | CRC_CR_REV_OUT_1) /*!< Output data byte-reversal done by word */ 68 69 #define CRC_OUTPUTDATA_INVERSION_ENABLE CRC_OUTPUTDATA_INVERSION_BIT /*!< Definition for compatibility with legacy code */ 70 /** 71 * @} 72 */ 73 74 /** 75 * @} 76 */ 77 78 /* Exported macro ------------------------------------------------------------*/ 79 /** @defgroup CRCEx_Exported_Macros CRC Extended Exported Macros 80 * @{ 81 */ 82 83 /** 84 * @brief Set CRC output bit-reversal 85 * @param __HANDLE__ CRC handle 86 * @retval None 87 */ 88 #define __HAL_CRC_OUTPUTREVERSAL_BIT_ENABLE(__HANDLE__) MODIFY_REG(((__HANDLE__)->Instance->CR),\ 89 (CRC_CR_RTYPE_OUT | CRC_CR_REV_OUT),\ 90 CRC_CR_REV_OUT_0); 91 92 /** 93 * @brief Set CRC output halfword-reversal 94 * @param __HANDLE__ CRC handle 95 * @retval None 96 */ 97 #define __HAL_CRC_OUTPUTREVERSAL_HALFWORD_ENABLE(__HANDLE__) MODIFY_REG(((__HANDLE__)->Instance->CR),\ 98 (CRC_CR_RTYPE_OUT | CRC_CR_REV_OUT),\ 99 (CRC_CR_RTYPE_OUT | CRC_CR_REV_OUT_0)); 100 101 /** 102 * @brief Set CRC output byte-reversal 103 * @param __HANDLE__ CRC handle 104 * @retval None 105 */ 106 #define __HAL_CRC_OUTPUTREVERSAL_BYTE_ENABLE(__HANDLE__) MODIFY_REG(((__HANDLE__)->Instance->CR), \ 107 (CRC_CR_RTYPE_OUT | CRC_CR_REV_OUT), \ 108 (CRC_CR_RTYPE_OUT | CRC_CR_REV_OUT_1)); 109 110 /* Definition for compatibility with legacy code */ 111 #define __HAL_CRC_OUTPUTREVERSAL_ENABLE(__HANDLE__) __HAL_CRC_OUTPUTREVERSAL_BIT_ENABLE(__HANDLE__) 112 113 /** 114 * @brief Unset CRC output reversal 115 * @param __HANDLE__ CRC handle 116 * @retval None 117 */ 118 #define __HAL_CRC_OUTPUTREVERSAL_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~(CRC_CR_RTYPE_OUT |\ 119 CRC_CR_REV_OUT)) 120 121 /** 122 * @brief Set CRC non-default polynomial 123 * @param __HANDLE__ CRC handle 124 * @param __POLYNOMIAL__ 7, 8, 16 or 32-bit polynomial 125 * @retval None 126 */ 127 #define __HAL_CRC_POLYNOMIAL_CONFIG(__HANDLE__, __POLYNOMIAL__) ((__HANDLE__)->Instance->POL = (__POLYNOMIAL__)) 128 129 /** 130 * @} 131 */ 132 133 /* Private macros --------------------------------------------------------*/ 134 /** @defgroup CRCEx_Private_Macros CRC Extended Private Macros 135 * @{ 136 */ 137 138 #define IS_CRC_INPUTDATA_INVERSION_MODE(MODE) (((MODE) == CRC_INPUTDATA_INVERSION_NONE) || \ 139 ((MODE) == CRC_INPUTDATA_INVERSION_HALFWORD_BYWORD) || \ 140 ((MODE) == CRC_INPUTDATA_INVERSION_BYTE_BYWORD) || \ 141 ((MODE) == CRC_INPUTDATA_INVERSION_BIT_BYBYTE) || \ 142 ((MODE) == CRC_INPUTDATA_INVERSION_BIT_BYHALFWORD) || \ 143 ((MODE) == CRC_INPUTDATA_INVERSION_BIT_BYWORD)) 144 145 #define IS_CRC_OUTPUTDATA_INVERSION_MODE(MODE) (((MODE) == CRC_OUTPUTDATA_INVERSION_DISABLE) || \ 146 ((MODE) == CRC_OUTPUTDATA_INVERSION_BIT) || \ 147 ((MODE) == CRC_OUTPUTDATA_INVERSION_HALFWORD) || \ 148 ((MODE) == CRC_OUTPUTDATA_INVERSION_BYTE)) 149 150 /** 151 * @} 152 */ 153 154 /* Exported functions --------------------------------------------------------*/ 155 156 /** @addtogroup CRCEx_Exported_Functions 157 * @{ 158 */ 159 160 /** @addtogroup CRCEx_Exported_Functions_Group1 161 * @{ 162 */ 163 /* Initialization and de-initialization functions ****************************/ 164 HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength); 165 HAL_StatusTypeDef HAL_CRCEx_Input_Data_Reverse(CRC_HandleTypeDef *hcrc, uint32_t InputReverseMode); 166 HAL_StatusTypeDef HAL_CRCEx_Output_Data_Reverse(CRC_HandleTypeDef *hcrc, uint32_t OutputReverseMode); 167 168 /** 169 * @} 170 */ 171 172 /** 173 * @} 174 */ 175 176 /** 177 * @} 178 */ 179 180 /** 181 * @} 182 */ 183 184 #ifdef __cplusplus 185 } 186 #endif 187 188 #endif /* STM32U0xx_HAL_CRC_EX_H */ 189