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