source: S-port/trunk/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_crc.c

Last change on this file was 1, checked in by AlexLir, 3 years ago
File size: 9.9 KB
Line 
1/**
2 ******************************************************************************
3 * @file stm32f4xx_hal_crc.c
4 * @author MCD Application Team
5 * @brief CRC HAL module driver.
6 * This file provides firmware functions to manage the following
7 * functionalities of the Cyclic Redundancy Check (CRC) peripheral:
8 * + Initialization and de-initialization functions
9 * + Peripheral Control functions
10 * + Peripheral State functions
11 *
12 @verbatim
13 ===============================================================================
14 ##### How to use this driver #####
15 ===============================================================================
16 [..]
17 (+) Enable CRC AHB clock using __HAL_RCC_CRC_CLK_ENABLE();
18 (+) Initialize CRC calculator
19 (++) specify generating polynomial (peripheral default or non-default one)
20 (++) specify initialization value (peripheral default or non-default one)
21 (++) specify input data format
22 (++) specify input or output data inversion mode if any
23 (+) Use HAL_CRC_Accumulate() function to compute the CRC value of the
24 input data buffer starting with the previously computed CRC as
25 initialization value
26 (+) Use HAL_CRC_Calculate() function to compute the CRC value of the
27 input data buffer starting with the defined initialization value
28 (default or non-default) to initiate CRC calculation
29
30 @endverbatim
31 ******************************************************************************
32 * @attention
33 *
34 * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
35 * All rights reserved.</center></h2>
36 *
37 * This software component is licensed by ST under BSD 3-Clause license,
38 * the "License"; You may not use this file except in compliance with the
39 * License. You may obtain a copy of the License at:
40 * opensource.org/licenses/BSD-3-Clause
41 *
42 ******************************************************************************
43 */
44
45/* Includes ------------------------------------------------------------------*/
46#include "stm32f4xx_hal.h"
47
48/** @addtogroup STM32F4xx_HAL_Driver
49 * @{
50 */
51
52/** @defgroup CRC CRC
53 * @brief CRC HAL module driver.
54 * @{
55 */
56
57#ifdef HAL_CRC_MODULE_ENABLED
58
59/* Private typedef -----------------------------------------------------------*/
60/* Private define ------------------------------------------------------------*/
61/* Private macro -------------------------------------------------------------*/
62/* Private variables ---------------------------------------------------------*/
63/* Private function prototypes -----------------------------------------------*/
64
65/* Exported functions --------------------------------------------------------*/
66
67/** @defgroup CRC_Exported_Functions CRC Exported Functions
68 * @{
69 */
70
71/** @defgroup CRC_Exported_Functions_Group1 Initialization and de-initialization functions
72 * @brief Initialization and Configuration functions.
73 *
74@verbatim
75 ===============================================================================
76 ##### Initialization and de-initialization functions #####
77 ===============================================================================
78 [..] This section provides functions allowing to:
79 (+) Initialize the CRC according to the specified parameters
80 in the CRC_InitTypeDef and create the associated handle
81 (+) DeInitialize the CRC peripheral
82 (+) Initialize the CRC MSP (MCU Specific Package)
83 (+) DeInitialize the CRC MSP
84
85@endverbatim
86 * @{
87 */
88
89/**
90 * @brief Initialize the CRC according to the specified
91 * parameters in the CRC_InitTypeDef and create the associated handle.
92 * @param hcrc CRC handle
93 * @retval HAL status
94 */
95HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)
96{
97 /* Check the CRC handle allocation */
98 if (hcrc == NULL)
99 {
100 return HAL_ERROR;
101 }
102
103 /* Check the parameters */
104 assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
105
106 if (hcrc->State == HAL_CRC_STATE_RESET)
107 {
108 /* Allocate lock resource and initialize it */
109 hcrc->Lock = HAL_UNLOCKED;
110 /* Init the low level hardware */
111 HAL_CRC_MspInit(hcrc);
112 }
113
114 /* Change CRC peripheral state */
115 hcrc->State = HAL_CRC_STATE_READY;
116
117 /* Return function status */
118 return HAL_OK;
119}
120
121/**
122 * @brief DeInitialize the CRC peripheral.
123 * @param hcrc CRC handle
124 * @retval HAL status
125 */
126HAL_StatusTypeDef HAL_CRC_DeInit(CRC_HandleTypeDef *hcrc)
127{
128 /* Check the CRC handle allocation */
129 if (hcrc == NULL)
130 {
131 return HAL_ERROR;
132 }
133
134 /* Check the parameters */
135 assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
136
137 /* Check the CRC peripheral state */
138 if (hcrc->State == HAL_CRC_STATE_BUSY)
139 {
140 return HAL_BUSY;
141 }
142
143 /* Change CRC peripheral state */
144 hcrc->State = HAL_CRC_STATE_BUSY;
145
146 /* Reset CRC calculation unit */
147 __HAL_CRC_DR_RESET(hcrc);
148
149 /* Reset IDR register content */
150 CLEAR_BIT(hcrc->Instance->IDR, CRC_IDR_IDR);
151
152 /* DeInit the low level hardware */
153 HAL_CRC_MspDeInit(hcrc);
154
155 /* Change CRC peripheral state */
156 hcrc->State = HAL_CRC_STATE_RESET;
157
158 /* Process unlocked */
159 __HAL_UNLOCK(hcrc);
160
161 /* Return function status */
162 return HAL_OK;
163}
164
165/**
166 * @brief Initializes the CRC MSP.
167 * @param hcrc CRC handle
168 * @retval None
169 */
170__weak void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)
171{
172 /* Prevent unused argument(s) compilation warning */
173 UNUSED(hcrc);
174
175 /* NOTE : This function should not be modified, when the callback is needed,
176 the HAL_CRC_MspInit can be implemented in the user file
177 */
178}
179
180/**
181 * @brief DeInitialize the CRC MSP.
182 * @param hcrc CRC handle
183 * @retval None
184 */
185__weak void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc)
186{
187 /* Prevent unused argument(s) compilation warning */
188 UNUSED(hcrc);
189
190 /* NOTE : This function should not be modified, when the callback is needed,
191 the HAL_CRC_MspDeInit can be implemented in the user file
192 */
193}
194
195/**
196 * @}
197 */
198
199/** @defgroup CRC_Exported_Functions_Group2 Peripheral Control functions
200 * @brief management functions.
201 *
202@verbatim
203 ===============================================================================
204 ##### Peripheral Control functions #####
205 ===============================================================================
206 [..] This section provides functions allowing to:
207 (+) compute the 32-bit CRC value of a 32-bit data buffer
208 using combination of the previous CRC value and the new one.
209
210 [..] or
211
212 (+) compute the 32-bit CRC value of a 32-bit data buffer
213 independently of the previous CRC value.
214
215@endverbatim
216 * @{
217 */
218
219/**
220 * @brief Compute the 32-bit CRC value of a 32-bit data buffer
221 * starting with the previously computed CRC as initialization value.
222 * @param hcrc CRC handle
223 * @param pBuffer pointer to the input data buffer.
224 * @param BufferLength input data buffer length (number of uint32_t words).
225 * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
226 */
227uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
228{
229 uint32_t index; /* CRC input data buffer index */
230 uint32_t temp = 0U; /* CRC output (read from hcrc->Instance->DR register) */
231
232 /* Change CRC peripheral state */
233 hcrc->State = HAL_CRC_STATE_BUSY;
234
235 /* Enter Data to the CRC calculator */
236 for (index = 0U; index < BufferLength; index++)
237 {
238 hcrc->Instance->DR = pBuffer[index];
239 }
240 temp = hcrc->Instance->DR;
241
242 /* Change CRC peripheral state */
243 hcrc->State = HAL_CRC_STATE_READY;
244
245 /* Return the CRC computed value */
246 return temp;
247}
248
249/**
250 * @brief Compute the 32-bit CRC value of a 32-bit data buffer
251 * starting with hcrc->Instance->INIT as initialization value.
252 * @param hcrc CRC handle
253 * @param pBuffer pointer to the input data buffer.
254 * @param BufferLength input data buffer length (number of uint32_t words).
255 * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
256 */
257uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
258{
259 uint32_t index; /* CRC input data buffer index */
260 uint32_t temp = 0U; /* CRC output (read from hcrc->Instance->DR register) */
261
262 /* Change CRC peripheral state */
263 hcrc->State = HAL_CRC_STATE_BUSY;
264
265 /* Reset CRC Calculation Unit (hcrc->Instance->INIT is
266 * written in hcrc->Instance->DR) */
267 __HAL_CRC_DR_RESET(hcrc);
268
269 /* Enter 32-bit input data to the CRC calculator */
270 for (index = 0U; index < BufferLength; index++)
271 {
272 hcrc->Instance->DR = pBuffer[index];
273 }
274 temp = hcrc->Instance->DR;
275
276 /* Change CRC peripheral state */
277 hcrc->State = HAL_CRC_STATE_READY;
278
279 /* Return the CRC computed value */
280 return temp;
281}
282
283/**
284 * @}
285 */
286
287/** @defgroup CRC_Exported_Functions_Group3 Peripheral State functions
288 * @brief Peripheral State functions.
289 *
290@verbatim
291 ===============================================================================
292 ##### Peripheral State functions #####
293 ===============================================================================
294 [..]
295 This subsection permits to get in run-time the status of the peripheral.
296
297@endverbatim
298 * @{
299 */
300
301/**
302 * @brief Return the CRC handle state.
303 * @param hcrc CRC handle
304 * @retval HAL state
305 */
306HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc)
307{
308 /* Return CRC handle state */
309 return hcrc->State;
310}
311
312/**
313 * @}
314 */
315
316/**
317 * @}
318 */
319
320
321#endif /* HAL_CRC_MODULE_ENABLED */
322/**
323 * @}
324 */
325
326/**
327 * @}
328 */
329
330/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Note: See TracBrowser for help on using the repository browser.