Subversion Repositories dashGPS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f1xx_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 "stm32f1xx_hal.h"
47
 
48
/** @addtogroup STM32F1xx_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
  */
95
HAL_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
  */
126
HAL_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
  */
227
uint32_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
  */
257
uint32_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
  */
306
HAL_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****/