STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
stm32f7xx_hal_crc_ex.c
Go to the documentation of this file.
1 
53 /* Includes ------------------------------------------------------------------*/
54 #include "stm32f7xx_hal.h"
55 
65 #ifdef HAL_CRC_MODULE_ENABLED
66 
67 /* Private typedef -----------------------------------------------------------*/
68 /* Private define ------------------------------------------------------------*/
69 /* Private macro -------------------------------------------------------------*/
70 /* Private variables ---------------------------------------------------------*/
71 /* Private function prototypes -----------------------------------------------*/
72 /* Private functions ---------------------------------------------------------*/
73 
109 HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength)
110 {
111  uint32_t msb = 31; /* polynomial degree is 32 at most, so msb is initialized to max value */
112 
113  /* Check the parameters */
114  assert_param(IS_CRC_POL_LENGTH(PolyLength));
115 
116  /* check polynomial definition vs polynomial size:
117  * polynomial length must be aligned with polynomial
118  * definition. HAL_ERROR is reported if Pol degree is
119  * larger than that indicated by PolyLength.
120  * Look for MSB position: msb will contain the degree of
121  * the second to the largest polynomial member. E.g., for
122  * X^7 + X^6 + X^5 + X^2 + 1, msb = 6. */
123  while (((Pol & ((uint32_t)(0x1) << msb)) == 0) && (msb-- > 0))
124  {
125  }
126 
127  switch (PolyLength)
128  {
129  case CRC_POLYLENGTH_7B:
130  if (msb >= HAL_CRC_LENGTH_7B)
131  {
132  return HAL_ERROR;
133  }
134  break;
135  case CRC_POLYLENGTH_8B:
136  if (msb >= HAL_CRC_LENGTH_8B)
137  {
138  return HAL_ERROR;
139  }
140  break;
141  case CRC_POLYLENGTH_16B:
142  if (msb >= HAL_CRC_LENGTH_16B)
143  {
144  return HAL_ERROR;
145  }
146  break;
147  case CRC_POLYLENGTH_32B:
148  /* no polynomial definition vs. polynomial length issue possible */
149  break;
150  default:
151  break;
152  }
153 
154  /* set generating polynomial */
155  WRITE_REG(hcrc->Instance->POL, Pol);
156 
157  /* set generating polynomial size */
158  MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength);
159 
160  /* Return function status */
161  return HAL_OK;
162 }
163 
175 HAL_StatusTypeDef HAL_CRCEx_Input_Data_Reverse(CRC_HandleTypeDef *hcrc, uint32_t InputReverseMode)
176 {
177  /* Check the parameters */
179 
180  /* Change CRC peripheral state */
181  hcrc->State = HAL_CRC_STATE_BUSY;
182 
183  /* set input data inversion mode */
184  MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, InputReverseMode);
185  /* Change CRC peripheral state */
186  hcrc->State = HAL_CRC_STATE_READY;
187 
188  /* Return function status */
189  return HAL_OK;
190 }
191 
201 HAL_StatusTypeDef HAL_CRCEx_Output_Data_Reverse(CRC_HandleTypeDef *hcrc, uint32_t OutputReverseMode)
202 {
203  /* Check the parameters */
205 
206  /* Change CRC peripheral state */
207  hcrc->State = HAL_CRC_STATE_BUSY;
208 
209  /* set output data inversion mode */
210  MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, OutputReverseMode);
211 
212  /* Change CRC peripheral state */
213  hcrc->State = HAL_CRC_STATE_READY;
214 
215  /* Return function status */
216  return HAL_OK;
217 }
218 
219 
220 
221 
232 #endif /* HAL_CRC_MODULE_ENABLED */
233 
241 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
242 
#define MODIFY_REG(REG, CLEARMASK, SETMASK)
Definition: stm32f7xx.h:190
#define assert_param(expr)
Include module&#39;s header file.
#define HAL_CRC_LENGTH_16B
#define CRC_CR_POLYSIZE
Definition: stm32f745xx.h:3070
#define IS_CRC_POL_LENGTH(__LENGTH__)
#define WRITE_REG(REG, VAL)
Definition: stm32f7xx.h:186
__IO uint32_t POL
Definition: stm32f745xx.h:329
CRC_TypeDef * Instance
#define HAL_CRC_LENGTH_8B
#define IS_CRC_OUTPUTDATA_INVERSION_MODE(__MODE__)
#define CRC_CR_REV_IN
Definition: stm32f745xx.h:3073
This file contains all the functions prototypes for the HAL module driver.
#define HAL_CRC_LENGTH_7B
#define CRC_POLYLENGTH_16B
__IO HAL_CRC_StateTypeDef State
__IO uint32_t CR
Definition: stm32f745xx.h:326
#define CRC_POLYLENGTH_32B
HAL_StatusTypeDef HAL_CRCEx_Output_Data_Reverse(CRC_HandleTypeDef *hcrc, uint32_t OutputReverseMode)
HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength)
#define CRC_POLYLENGTH_7B
HAL_StatusTypeDef HAL_CRCEx_Input_Data_Reverse(CRC_HandleTypeDef *hcrc, uint32_t InputReverseMode)
#define CRC_POLYLENGTH_8B
#define CRC_CR_REV_OUT
Definition: stm32f745xx.h:3076
#define IS_CRC_INPUTDATA_INVERSION_MODE(__MODE__)
HAL_StatusTypeDef
HAL Status structures definition.