Subversion Repositories DashDisplay

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
  * @version V1.0.1
6
  * @date    31-July-2015
7
  * @brief   CRC HAL module driver.
8
  *          This file provides firmware functions to manage the following
9
  *          functionalities of the Cyclic Redundancy Check (CRC) peripheral:
10
  *           + Initialization and de-initialization functions
11
  *           + Peripheral Control functions
12
  *           + Peripheral State functions
13
  *
14
  @verbatim
15
  ==============================================================================
16
                     ##### How to use this driver #####
17
  ==============================================================================
18
    [..]
19
      The CRC HAL driver can be used as follows:
20
 
21
      (#) Enable CRC AHB clock using __HAL_RCC_CRC_CLK_ENABLE();
22
 
23
      (#) Use HAL_CRC_Accumulate() function to compute the CRC value of
24
          a 32-bit data buffer using combination of the previous CRC value
25
          and the new one.
26
 
27
      (#) Use HAL_CRC_Calculate() function to compute the CRC Value of
28
          a new 32-bit data buffer. This function resets the CRC computation  
29
          unit before starting the computation to avoid getting wrong CRC values.
30
 
31
  @endverbatim
32
  ******************************************************************************
33
  * @attention
34
  *
35
  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
36
  *
37
  * Redistribution and use in source and binary forms, with or without modification,
38
  * are permitted provided that the following conditions are met:
39
  *   1. Redistributions of source code must retain the above copyright notice,
40
  *      this list of conditions and the following disclaimer.
41
  *   2. Redistributions in binary form must reproduce the above copyright notice,
42
  *      this list of conditions and the following disclaimer in the documentation
43
  *      and/or other materials provided with the distribution.
44
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
45
  *      may be used to endorse or promote products derived from this software
46
  *      without specific prior written permission.
47
  *
48
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
49
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
51
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
52
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
54
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
55
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
56
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
57
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
58
  *
59
  ******************************************************************************
60
  */
61
 
62
/* Includes ------------------------------------------------------------------*/
63
#include "stm32f1xx_hal.h"
64
 
65
/** @addtogroup STM32F1xx_HAL_Driver
66
  * @{
67
  */
68
 
69
/** @defgroup CRC CRC
70
  * @brief CRC HAL module driver.
71
  * @{
72
  */
73
 
74
#ifdef HAL_CRC_MODULE_ENABLED
75
 
76
/* Private typedef -----------------------------------------------------------*/
77
/* Private define ------------------------------------------------------------*/
78
/* Private macro -------------------------------------------------------------*/
79
/* Private variables ---------------------------------------------------------*/
80
/* Private function prototypes -----------------------------------------------*/
81
/* Private functions ---------------------------------------------------------*/
82
 
83
/** @defgroup CRC_Exported_Functions CRC Exported Functions
84
  * @{
85
  */
86
 
87
/** @defgroup CRC_Exported_Functions_Group1 Initialization and de-initialization functions
88
 *  @brief    Initialization and Configuration functions.
89
 *
90
@verbatim    
91
  ==============================================================================
92
            ##### Initialization and de-initialization functions #####
93
  ==============================================================================
94
    [..]  This section provides functions allowing to:
95
      (+) Initialize the CRC according to the specified parameters
96
          in the CRC_InitTypeDef and create the associated handle
97
      (+) DeInitialize the CRC peripheral
98
      (+) Initialize the CRC MSP
99
      (+) DeInitialize CRC MSP
100
 
101
@endverbatim
102
  * @{
103
  */
104
 
105
/**
106
  * @brief  Initializes the CRC according to the specified
107
  *         parameters in the CRC_InitTypeDef and creates the associated handle.
108
  * @param  hcrc: pointer to a CRC_HandleTypeDef structure that contains
109
  *         the configuration information for CRC
110
  * @retval HAL status
111
  */
112
HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)
113
{
114
  /* Check the CRC handle allocation */
115
  if(hcrc == NULL)
116
  {
117
    return HAL_ERROR;
118
  }
119
 
120
  /* Check the parameters */
121
  assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
122
 
123
  if(hcrc->State == HAL_CRC_STATE_RESET)
124
  {
125
    /* Allocate lock resource and initialize it */
126
    hcrc->Lock = HAL_UNLOCKED;
127
 
128
    /* Init the low level hardware */
129
    HAL_CRC_MspInit(hcrc);
130
  }
131
 
132
  /* Change CRC peripheral state */
133
  hcrc->State = HAL_CRC_STATE_READY;
134
 
135
  /* Return function status */
136
  return HAL_OK;
137
}
138
 
139
/**
140
  * @brief  DeInitializes the CRC peripheral.
141
  * @param  hcrc: pointer to a CRC_HandleTypeDef structure that contains
142
  *         the configuration information for CRC
143
  * @retval HAL status
144
  */
145
HAL_StatusTypeDef HAL_CRC_DeInit(CRC_HandleTypeDef *hcrc)
146
{
147
  /* Check the CRC handle allocation */
148
  if(hcrc == NULL)
149
  {
150
    return HAL_ERROR;
151
  }
152
 
153
  /* Check the parameters */
154
  assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
155
 
156
  /* Change CRC peripheral state */
157
  hcrc->State = HAL_CRC_STATE_BUSY;
158
 
159
  /* DeInit the low level hardware */
160
  HAL_CRC_MspDeInit(hcrc);
161
 
162
  /* Resets the CRC calculation unit and sets the data register to 0xFFFF FFFF */
163
  __HAL_CRC_DR_RESET(hcrc);
164
 
165
  /* Change CRC peripheral state */
166
  hcrc->State = HAL_CRC_STATE_RESET;
167
 
168
  /* Release Lock */
169
  __HAL_UNLOCK(hcrc);
170
 
171
  /* Return function status */
172
  return HAL_OK;
173
}
174
 
175
/**
176
  * @brief  Initializes the CRC MSP.
177
  * @param  hcrc: pointer to a CRC_HandleTypeDef structure that contains
178
  *         the configuration information for CRC
179
  * @retval None
180
  */
181
__weak void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)
182
{
183
  /* NOTE : This function Should not be modified, when the callback is needed,
184
            the HAL_CRC_MspInit could be implemented in the user file
185
   */
186
}
187
 
188
/**
189
  * @brief  DeInitializes the CRC MSP.
190
  * @param  hcrc: pointer to a CRC_HandleTypeDef structure that contains
191
  *         the configuration information for CRC
192
  * @retval None
193
  */
194
__weak void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc)
195
{
196
  /* NOTE : This function Should not be modified, when the callback is needed,
197
            the HAL_CRC_MspDeInit could be implemented in the user file
198
   */
199
}
200
 
201
/**
202
  * @}
203
  */
204
 
205
/** @defgroup CRC_Exported_Functions_Group2 Peripheral Control functions
206
 *  @brief    management functions.
207
 *
208
@verbatim  
209
  ==============================================================================
210
                      ##### Peripheral Control functions #####
211
  ==============================================================================  
212
    [..]  This section provides functions allowing to:
213
      (+) Compute the 32-bit CRC value of 32-bit data buffer,
214
          using combination of the previous CRC value and the new one.
215
      (+) Compute the 32-bit CRC value of 32-bit data buffer,
216
          independently of the previous CRC value.
217
 
218
@endverbatim
219
  * @{
220
  */
221
 
222
/**
223
  * @brief  Computes the 32-bit CRC of 32-bit data buffer using combination
224
  *         of the previous CRC value and the new one.
225
  * @param  hcrc: pointer to a CRC_HandleTypeDef structure that contains
226
  *         the configuration information for CRC
227
  * @param  pBuffer: pointer to the buffer containing the data to be computed
228
  * @param  BufferLength: length of the buffer to be computed (defined in word, 4 bytes)
229
  * @retval 32-bit CRC
230
  */
231
uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
232
{
233
  uint32_t index = 0;
234
 
235
  /* Process Locked */
236
  __HAL_LOCK(hcrc);
237
 
238
  /* Change CRC peripheral state */
239
  hcrc->State = HAL_CRC_STATE_BUSY;
240
 
241
  /* Enter Data to the CRC calculator */
242
  for(index = 0; index < BufferLength; index++)
243
  {
244
    hcrc->Instance->DR = pBuffer[index];
245
  }
246
 
247
  /* Change CRC peripheral state */
248
  hcrc->State = HAL_CRC_STATE_READY;
249
 
250
  /* Process Unlocked */
251
  __HAL_UNLOCK(hcrc);
252
 
253
  /* Return the CRC computed value */
254
  return hcrc->Instance->DR;
255
}
256
 
257
/**
258
  * @brief  Computes the 32-bit CRC of 32-bit data buffer independently
259
  *         of the previous CRC value.
260
  * @param  hcrc: pointer to a CRC_HandleTypeDef structure that contains
261
  *         the configuration information for CRC
262
  * @param  pBuffer: Pointer to the buffer containing the data to be computed
263
  * @param  BufferLength: Length of the buffer to be computed (defined in word, 4 bytes)
264
  * @retval 32-bit CRC
265
  */
266
uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
267
{
268
  uint32_t index = 0;
269
 
270
  /* Process Locked */
271
  __HAL_LOCK(hcrc);
272
 
273
  /* Change CRC peripheral state */
274
  hcrc->State = HAL_CRC_STATE_BUSY;
275
 
276
  /* Reset CRC Calculation Unit */
277
  __HAL_CRC_DR_RESET(hcrc);
278
 
279
  /* Enter Data to the CRC calculator */
280
  for(index = 0; index < BufferLength; index++)
281
  {
282
    hcrc->Instance->DR = pBuffer[index];
283
  }
284
 
285
  /* Change CRC peripheral state */
286
  hcrc->State = HAL_CRC_STATE_READY;
287
 
288
  /* Process Unlocked */
289
  __HAL_UNLOCK(hcrc);
290
 
291
  /* Return the CRC computed value */
292
  return hcrc->Instance->DR;
293
}
294
 
295
/**
296
  * @}
297
  */
298
 
299
/** @defgroup CRC_Exported_Functions_Group3 Peripheral State functions
300
 *  @brief    Peripheral State functions.
301
 *
302
@verbatim  
303
  ==============================================================================
304
                      ##### Peripheral State functions #####
305
  ==============================================================================  
306
    [..]
307
    This subsection permits to get in run-time the status of the peripheral.
308
 
309
@endverbatim
310
  * @{
311
  */
312
 
313
/**
314
  * @brief  Returns the CRC state.
315
  * @param  hcrc: pointer to a CRC_HandleTypeDef structure that contains
316
  *         the configuration information for CRC
317
  * @retval HAL state
318
  */
319
HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc)
320
{
321
  return hcrc->State;
322
}
323
 
324
/**
325
  * @}
326
  */
327
 
328
/**
329
  * @}
330
  */
331
 
332
#endif /* HAL_CRC_MODULE_ENABLED */
333
/**
334
  * @}
335
  */
336
 
337
/**
338
  * @}
339
  */
340
 
341
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/