mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Fri Aug 14 13:15:17 2015 +0100
Revision:
610:813dcc80987e
Parent:
573:ad23fe03a082
Synchronized with git revision 6d84db41c6833e0b9b024741eb0616a5f62d5599

Full URL: https://github.com/mbedmicro/mbed/commit/6d84db41c6833e0b9b024741eb0616a5f62d5599/

DISCO_F746NG - Improvements

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 573:ad23fe03a082 1 /**
mbed_official 573:ad23fe03a082 2 ******************************************************************************
mbed_official 573:ad23fe03a082 3 * @file stm32f7xx_hal_crc.c
mbed_official 573:ad23fe03a082 4 * @author MCD Application Team
mbed_official 610:813dcc80987e 5 * @version V1.0.1
mbed_official 610:813dcc80987e 6 * @date 25-June-2015
mbed_official 573:ad23fe03a082 7 * @brief CRC HAL module driver.
mbed_official 573:ad23fe03a082 8 * This file provides firmware functions to manage the following
mbed_official 573:ad23fe03a082 9 * functionalities of the Cyclic Redundancy Check (CRC) peripheral:
mbed_official 573:ad23fe03a082 10 * + Initialization and de-initialization functions
mbed_official 573:ad23fe03a082 11 * + Peripheral Control functions
mbed_official 573:ad23fe03a082 12 * + Peripheral State functions
mbed_official 573:ad23fe03a082 13 *
mbed_official 573:ad23fe03a082 14 @verbatim
mbed_official 573:ad23fe03a082 15 ===============================================================================
mbed_official 573:ad23fe03a082 16 ##### CRC How to use this driver #####
mbed_official 573:ad23fe03a082 17 ===============================================================================
mbed_official 573:ad23fe03a082 18 [..]
mbed_official 573:ad23fe03a082 19
mbed_official 573:ad23fe03a082 20 (#) Enable CRC AHB clock using __HAL_RCC_CRC_CLK_ENABLE();
mbed_official 573:ad23fe03a082 21
mbed_official 573:ad23fe03a082 22 (#) Initialize CRC calculator
mbed_official 573:ad23fe03a082 23 (++) specify generating polynomial (IP default or non-default one)
mbed_official 573:ad23fe03a082 24 (++) specify initialization value (IP default or non-default one)
mbed_official 573:ad23fe03a082 25 (++) specify input data format
mbed_official 573:ad23fe03a082 26 (++) specify input or output data inversion mode if any
mbed_official 573:ad23fe03a082 27
mbed_official 573:ad23fe03a082 28 (#) Use HAL_CRC_Accumulate() function to compute the CRC value of the
mbed_official 573:ad23fe03a082 29 input data buffer starting with the previously computed CRC as
mbed_official 573:ad23fe03a082 30 initialization value
mbed_official 573:ad23fe03a082 31
mbed_official 573:ad23fe03a082 32 (#) Use HAL_CRC_Calculate() function to compute the CRC value of the
mbed_official 573:ad23fe03a082 33 input data buffer starting with the defined initialization value
mbed_official 573:ad23fe03a082 34 (default or non-default) to initiate CRC calculation
mbed_official 573:ad23fe03a082 35
mbed_official 573:ad23fe03a082 36 @endverbatim
mbed_official 573:ad23fe03a082 37 ******************************************************************************
mbed_official 573:ad23fe03a082 38 * @attention
mbed_official 573:ad23fe03a082 39 *
mbed_official 573:ad23fe03a082 40 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 573:ad23fe03a082 41 *
mbed_official 573:ad23fe03a082 42 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 573:ad23fe03a082 43 * are permitted provided that the following conditions are met:
mbed_official 573:ad23fe03a082 44 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 573:ad23fe03a082 45 * this list of conditions and the following disclaimer.
mbed_official 573:ad23fe03a082 46 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 573:ad23fe03a082 47 * this list of conditions and the following disclaimer in the documentation
mbed_official 573:ad23fe03a082 48 * and/or other materials provided with the distribution.
mbed_official 573:ad23fe03a082 49 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 573:ad23fe03a082 50 * may be used to endorse or promote products derived from this software
mbed_official 573:ad23fe03a082 51 * without specific prior written permission.
mbed_official 573:ad23fe03a082 52 *
mbed_official 573:ad23fe03a082 53 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 573:ad23fe03a082 54 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 573:ad23fe03a082 55 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 573:ad23fe03a082 56 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 573:ad23fe03a082 57 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 573:ad23fe03a082 58 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 573:ad23fe03a082 59 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 573:ad23fe03a082 60 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 573:ad23fe03a082 61 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 573:ad23fe03a082 62 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 573:ad23fe03a082 63 *
mbed_official 573:ad23fe03a082 64 ******************************************************************************
mbed_official 573:ad23fe03a082 65 */
mbed_official 573:ad23fe03a082 66
mbed_official 573:ad23fe03a082 67 /* Includes ------------------------------------------------------------------*/
mbed_official 573:ad23fe03a082 68 #include "stm32f7xx_hal.h"
mbed_official 573:ad23fe03a082 69
mbed_official 573:ad23fe03a082 70 /** @addtogroup STM32F7xx_HAL_Driver
mbed_official 573:ad23fe03a082 71 * @{
mbed_official 573:ad23fe03a082 72 */
mbed_official 573:ad23fe03a082 73
mbed_official 573:ad23fe03a082 74 /** @defgroup CRC CRC
mbed_official 573:ad23fe03a082 75 * @brief CRC HAL module driver.
mbed_official 573:ad23fe03a082 76 * @{
mbed_official 573:ad23fe03a082 77 */
mbed_official 573:ad23fe03a082 78
mbed_official 573:ad23fe03a082 79 #ifdef HAL_CRC_MODULE_ENABLED
mbed_official 573:ad23fe03a082 80
mbed_official 573:ad23fe03a082 81 /* Private typedef -----------------------------------------------------------*/
mbed_official 573:ad23fe03a082 82 /* Private define ------------------------------------------------------------*/
mbed_official 573:ad23fe03a082 83 /* Private macro -------------------------------------------------------------*/
mbed_official 573:ad23fe03a082 84 /* Private variables ---------------------------------------------------------*/
mbed_official 573:ad23fe03a082 85 /* Private function prototypes -----------------------------------------------*/
mbed_official 573:ad23fe03a082 86 static uint32_t CRC_Handle_8(CRC_HandleTypeDef *hcrc, uint8_t pBuffer[], uint32_t BufferLength);
mbed_official 573:ad23fe03a082 87 static uint32_t CRC_Handle_16(CRC_HandleTypeDef *hcrc, uint16_t pBuffer[], uint32_t BufferLength);
mbed_official 573:ad23fe03a082 88 /* Exported functions --------------------------------------------------------*/
mbed_official 573:ad23fe03a082 89
mbed_official 573:ad23fe03a082 90 /** @defgroup CRC_Exported_Functions CRC Exported Functions
mbed_official 573:ad23fe03a082 91 * @{
mbed_official 573:ad23fe03a082 92 */
mbed_official 573:ad23fe03a082 93
mbed_official 573:ad23fe03a082 94 /** @defgroup HAL_CRC_Group1 Initialization/de-initialization functions
mbed_official 573:ad23fe03a082 95 * @brief Initialization and Configuration functions.
mbed_official 573:ad23fe03a082 96 *
mbed_official 573:ad23fe03a082 97 @verbatim
mbed_official 573:ad23fe03a082 98 ===============================================================================
mbed_official 573:ad23fe03a082 99 ##### Initialization and de-initialization functions #####
mbed_official 573:ad23fe03a082 100 ===============================================================================
mbed_official 573:ad23fe03a082 101 [..] This section provides functions allowing to:
mbed_official 573:ad23fe03a082 102 (+) Initialize the CRC according to the specified parameters
mbed_official 573:ad23fe03a082 103 in the CRC_InitTypeDef and create the associated handle
mbed_official 573:ad23fe03a082 104 (+) DeInitialize the CRC peripheral
mbed_official 573:ad23fe03a082 105 (+) Initialize the CRC MSP
mbed_official 573:ad23fe03a082 106 (+) DeInitialize CRC MSP
mbed_official 573:ad23fe03a082 107
mbed_official 573:ad23fe03a082 108 @endverbatim
mbed_official 573:ad23fe03a082 109 * @{
mbed_official 573:ad23fe03a082 110 */
mbed_official 573:ad23fe03a082 111
mbed_official 573:ad23fe03a082 112 /**
mbed_official 573:ad23fe03a082 113 * @brief Initializes the CRC according to the specified
mbed_official 573:ad23fe03a082 114 * parameters in the CRC_InitTypeDef and creates the associated handle.
mbed_official 573:ad23fe03a082 115 * @param hcrc: CRC handle
mbed_official 573:ad23fe03a082 116 * @retval HAL status
mbed_official 573:ad23fe03a082 117 */
mbed_official 573:ad23fe03a082 118 HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)
mbed_official 573:ad23fe03a082 119 {
mbed_official 573:ad23fe03a082 120 /* Check the CRC handle allocation */
mbed_official 573:ad23fe03a082 121 if(hcrc == NULL)
mbed_official 573:ad23fe03a082 122 {
mbed_official 573:ad23fe03a082 123 return HAL_ERROR;
mbed_official 573:ad23fe03a082 124 }
mbed_official 573:ad23fe03a082 125
mbed_official 573:ad23fe03a082 126 /* Check the parameters */
mbed_official 573:ad23fe03a082 127 assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
mbed_official 573:ad23fe03a082 128
mbed_official 573:ad23fe03a082 129 if(hcrc->State == HAL_CRC_STATE_RESET)
mbed_official 573:ad23fe03a082 130 {
mbed_official 573:ad23fe03a082 131 /* Allocate lock resource and initialize it */
mbed_official 573:ad23fe03a082 132 hcrc->Lock = HAL_UNLOCKED;
mbed_official 573:ad23fe03a082 133 /* Init the low level hardware */
mbed_official 573:ad23fe03a082 134 HAL_CRC_MspInit(hcrc);
mbed_official 573:ad23fe03a082 135 }
mbed_official 573:ad23fe03a082 136
mbed_official 573:ad23fe03a082 137 /* Change CRC peripheral state */
mbed_official 573:ad23fe03a082 138 hcrc->State = HAL_CRC_STATE_BUSY;
mbed_official 573:ad23fe03a082 139
mbed_official 573:ad23fe03a082 140 /* check whether or not non-default generating polynomial has been
mbed_official 573:ad23fe03a082 141 * picked up by user */
mbed_official 573:ad23fe03a082 142 assert_param(IS_DEFAULT_POLYNOMIAL(hcrc->Init.DefaultPolynomialUse));
mbed_official 573:ad23fe03a082 143 if (hcrc->Init.DefaultPolynomialUse == DEFAULT_POLYNOMIAL_ENABLE)
mbed_official 573:ad23fe03a082 144 {
mbed_official 573:ad23fe03a082 145 /* initialize IP with default generating polynomial */
mbed_official 573:ad23fe03a082 146 WRITE_REG(hcrc->Instance->POL, DEFAULT_CRC32_POLY);
mbed_official 573:ad23fe03a082 147 MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, CRC_POLYLENGTH_32B);
mbed_official 573:ad23fe03a082 148 }
mbed_official 573:ad23fe03a082 149 else
mbed_official 573:ad23fe03a082 150 {
mbed_official 573:ad23fe03a082 151 /* initialize CRC IP with generating polynomial defined by user */
mbed_official 573:ad23fe03a082 152 if (HAL_CRCEx_Polynomial_Set(hcrc, hcrc->Init.GeneratingPolynomial, hcrc->Init.CRCLength) != HAL_OK)
mbed_official 573:ad23fe03a082 153 {
mbed_official 573:ad23fe03a082 154 return HAL_ERROR;
mbed_official 573:ad23fe03a082 155 }
mbed_official 573:ad23fe03a082 156 }
mbed_official 573:ad23fe03a082 157
mbed_official 573:ad23fe03a082 158 /* check whether or not non-default CRC initial value has been
mbed_official 573:ad23fe03a082 159 * picked up by user */
mbed_official 573:ad23fe03a082 160 assert_param(IS_DEFAULT_INIT_VALUE(hcrc->Init.DefaultInitValueUse));
mbed_official 573:ad23fe03a082 161 if (hcrc->Init.DefaultInitValueUse == DEFAULT_INIT_VALUE_ENABLE)
mbed_official 573:ad23fe03a082 162 {
mbed_official 573:ad23fe03a082 163 WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE);
mbed_official 573:ad23fe03a082 164 }
mbed_official 573:ad23fe03a082 165 else
mbed_official 573:ad23fe03a082 166 {
mbed_official 573:ad23fe03a082 167 WRITE_REG(hcrc->Instance->INIT, hcrc->Init.InitValue);
mbed_official 573:ad23fe03a082 168 }
mbed_official 573:ad23fe03a082 169
mbed_official 573:ad23fe03a082 170
mbed_official 573:ad23fe03a082 171 /* set input data inversion mode */
mbed_official 573:ad23fe03a082 172 assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(hcrc->Init.InputDataInversionMode));
mbed_official 573:ad23fe03a082 173 MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode);
mbed_official 573:ad23fe03a082 174
mbed_official 573:ad23fe03a082 175 /* set output data inversion mode */
mbed_official 573:ad23fe03a082 176 assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(hcrc->Init.OutputDataInversionMode));
mbed_official 573:ad23fe03a082 177 MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode);
mbed_official 573:ad23fe03a082 178
mbed_official 573:ad23fe03a082 179 /* makes sure the input data format (bytes, halfwords or words stream)
mbed_official 573:ad23fe03a082 180 * is properly specified by user */
mbed_official 573:ad23fe03a082 181 assert_param(IS_CRC_INPUTDATA_FORMAT(hcrc->InputDataFormat));
mbed_official 573:ad23fe03a082 182
mbed_official 573:ad23fe03a082 183 /* Change CRC peripheral state */
mbed_official 573:ad23fe03a082 184 hcrc->State = HAL_CRC_STATE_READY;
mbed_official 573:ad23fe03a082 185
mbed_official 573:ad23fe03a082 186 /* Return function status */
mbed_official 573:ad23fe03a082 187 return HAL_OK;
mbed_official 573:ad23fe03a082 188 }
mbed_official 573:ad23fe03a082 189
mbed_official 573:ad23fe03a082 190 /**
mbed_official 573:ad23fe03a082 191 * @brief DeInitializes the CRC peripheral.
mbed_official 573:ad23fe03a082 192 * @param hcrc: CRC handle
mbed_official 573:ad23fe03a082 193 * @retval HAL status
mbed_official 573:ad23fe03a082 194 */
mbed_official 573:ad23fe03a082 195 HAL_StatusTypeDef HAL_CRC_DeInit(CRC_HandleTypeDef *hcrc)
mbed_official 573:ad23fe03a082 196 {
mbed_official 573:ad23fe03a082 197 /* Check the CRC handle allocation */
mbed_official 573:ad23fe03a082 198 if(hcrc == NULL)
mbed_official 573:ad23fe03a082 199 {
mbed_official 573:ad23fe03a082 200 return HAL_ERROR;
mbed_official 573:ad23fe03a082 201 }
mbed_official 573:ad23fe03a082 202
mbed_official 573:ad23fe03a082 203 /* Check the parameters */
mbed_official 573:ad23fe03a082 204 assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
mbed_official 573:ad23fe03a082 205
mbed_official 573:ad23fe03a082 206 /* Check the CRC peripheral state */
mbed_official 573:ad23fe03a082 207 if(hcrc->State == HAL_CRC_STATE_BUSY)
mbed_official 573:ad23fe03a082 208 {
mbed_official 573:ad23fe03a082 209 return HAL_BUSY;
mbed_official 573:ad23fe03a082 210 }
mbed_official 573:ad23fe03a082 211
mbed_official 573:ad23fe03a082 212 /* Change CRC peripheral state */
mbed_official 573:ad23fe03a082 213 hcrc->State = HAL_CRC_STATE_BUSY;
mbed_official 573:ad23fe03a082 214
mbed_official 573:ad23fe03a082 215 /* Reset CRC calculation unit */
mbed_official 573:ad23fe03a082 216 __HAL_CRC_DR_RESET(hcrc);
mbed_official 573:ad23fe03a082 217
mbed_official 573:ad23fe03a082 218 /* DeInit the low level hardware */
mbed_official 573:ad23fe03a082 219 HAL_CRC_MspDeInit(hcrc);
mbed_official 573:ad23fe03a082 220
mbed_official 573:ad23fe03a082 221 /* Change CRC peripheral state */
mbed_official 573:ad23fe03a082 222 hcrc->State = HAL_CRC_STATE_RESET;
mbed_official 573:ad23fe03a082 223
mbed_official 573:ad23fe03a082 224 /* Process unlocked */
mbed_official 573:ad23fe03a082 225 __HAL_UNLOCK(hcrc);
mbed_official 573:ad23fe03a082 226
mbed_official 573:ad23fe03a082 227 /* Return function status */
mbed_official 573:ad23fe03a082 228 return HAL_OK;
mbed_official 573:ad23fe03a082 229 }
mbed_official 573:ad23fe03a082 230
mbed_official 573:ad23fe03a082 231 /**
mbed_official 573:ad23fe03a082 232 * @brief Initializes the CRC MSP.
mbed_official 573:ad23fe03a082 233 * @param hcrc: CRC handle
mbed_official 573:ad23fe03a082 234 * @retval None
mbed_official 573:ad23fe03a082 235 */
mbed_official 573:ad23fe03a082 236 __weak void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)
mbed_official 573:ad23fe03a082 237 {
mbed_official 573:ad23fe03a082 238 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 573:ad23fe03a082 239 the HAL_CRC_MspInit can be implemented in the user file
mbed_official 573:ad23fe03a082 240 */
mbed_official 573:ad23fe03a082 241 }
mbed_official 573:ad23fe03a082 242
mbed_official 573:ad23fe03a082 243 /**
mbed_official 573:ad23fe03a082 244 * @brief DeInitializes the CRC MSP.
mbed_official 573:ad23fe03a082 245 * @param hcrc: CRC handle
mbed_official 573:ad23fe03a082 246 * @retval None
mbed_official 573:ad23fe03a082 247 */
mbed_official 573:ad23fe03a082 248 __weak void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc)
mbed_official 573:ad23fe03a082 249 {
mbed_official 573:ad23fe03a082 250 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 573:ad23fe03a082 251 the HAL_CRC_MspDeInit can be implemented in the user file
mbed_official 573:ad23fe03a082 252 */
mbed_official 573:ad23fe03a082 253 }
mbed_official 573:ad23fe03a082 254
mbed_official 573:ad23fe03a082 255 /**
mbed_official 573:ad23fe03a082 256 * @}
mbed_official 573:ad23fe03a082 257 */
mbed_official 573:ad23fe03a082 258
mbed_official 573:ad23fe03a082 259 /** @defgroup HAL_CRC_Group2 Peripheral Control functions
mbed_official 573:ad23fe03a082 260 * @brief Peripheral Control functions
mbed_official 573:ad23fe03a082 261 *
mbed_official 573:ad23fe03a082 262 @verbatim
mbed_official 573:ad23fe03a082 263 ==============================================================================
mbed_official 573:ad23fe03a082 264 ##### Peripheral Control functions #####
mbed_official 573:ad23fe03a082 265 ==============================================================================
mbed_official 573:ad23fe03a082 266 [..] This section provides functions allowing to:
mbed_official 573:ad23fe03a082 267 (+) Compute the 7, 8, 16 or 32-bit CRC value of an 8, 16 or 32-bit data buffer
mbed_official 573:ad23fe03a082 268 using combination of the previous CRC value and the new one.
mbed_official 573:ad23fe03a082 269
mbed_official 573:ad23fe03a082 270 or
mbed_official 573:ad23fe03a082 271
mbed_official 573:ad23fe03a082 272 (+) Compute the 7, 8, 16 or 32-bit CRC value of an 8, 16 or 32-bit data buffer
mbed_official 573:ad23fe03a082 273 independently of the previous CRC value.
mbed_official 573:ad23fe03a082 274
mbed_official 573:ad23fe03a082 275 @endverbatim
mbed_official 573:ad23fe03a082 276 * @{
mbed_official 573:ad23fe03a082 277 */
mbed_official 573:ad23fe03a082 278
mbed_official 573:ad23fe03a082 279 /**
mbed_official 573:ad23fe03a082 280 * @brief Compute the 7, 8, 16 or 32-bit CRC value of an 8, 16 or 32-bit data buffer
mbed_official 573:ad23fe03a082 281 * starting with the previously computed CRC as initialization value.
mbed_official 573:ad23fe03a082 282 * @param hcrc: CRC handle
mbed_official 573:ad23fe03a082 283 * @param pBuffer: pointer to the input data buffer, exact input data format is
mbed_official 573:ad23fe03a082 284 * provided by hcrc->InputDataFormat.
mbed_official 573:ad23fe03a082 285 * @param BufferLength: input data buffer length
mbed_official 573:ad23fe03a082 286 * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
mbed_official 573:ad23fe03a082 287 */
mbed_official 573:ad23fe03a082 288 uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
mbed_official 573:ad23fe03a082 289 {
mbed_official 573:ad23fe03a082 290 uint32_t index = 0; /* CRC input data buffer index */
mbed_official 573:ad23fe03a082 291 uint32_t temp = 0; /* CRC output (read from hcrc->Instance->DR register) */
mbed_official 573:ad23fe03a082 292
mbed_official 573:ad23fe03a082 293 /* Process locked */
mbed_official 573:ad23fe03a082 294 __HAL_LOCK(hcrc);
mbed_official 573:ad23fe03a082 295
mbed_official 573:ad23fe03a082 296 /* Change CRC peripheral state */
mbed_official 573:ad23fe03a082 297 hcrc->State = HAL_CRC_STATE_BUSY;
mbed_official 573:ad23fe03a082 298
mbed_official 573:ad23fe03a082 299 switch (hcrc->InputDataFormat)
mbed_official 573:ad23fe03a082 300 {
mbed_official 573:ad23fe03a082 301 case CRC_INPUTDATA_FORMAT_WORDS:
mbed_official 573:ad23fe03a082 302 /* Enter Data to the CRC calculator */
mbed_official 573:ad23fe03a082 303 for(index = 0; index < BufferLength; index++)
mbed_official 573:ad23fe03a082 304 {
mbed_official 573:ad23fe03a082 305 hcrc->Instance->DR = pBuffer[index];
mbed_official 573:ad23fe03a082 306 }
mbed_official 573:ad23fe03a082 307 temp = hcrc->Instance->DR;
mbed_official 573:ad23fe03a082 308 break;
mbed_official 573:ad23fe03a082 309
mbed_official 573:ad23fe03a082 310 case CRC_INPUTDATA_FORMAT_BYTES:
mbed_official 573:ad23fe03a082 311 temp = CRC_Handle_8(hcrc, (uint8_t*)pBuffer, BufferLength);
mbed_official 573:ad23fe03a082 312 break;
mbed_official 573:ad23fe03a082 313
mbed_official 573:ad23fe03a082 314 case CRC_INPUTDATA_FORMAT_HALFWORDS:
mbed_official 573:ad23fe03a082 315 temp = CRC_Handle_16(hcrc, (uint16_t*)pBuffer, BufferLength);
mbed_official 573:ad23fe03a082 316 break;
mbed_official 573:ad23fe03a082 317 default:
mbed_official 573:ad23fe03a082 318 break;
mbed_official 573:ad23fe03a082 319 }
mbed_official 573:ad23fe03a082 320
mbed_official 573:ad23fe03a082 321 /* Change CRC peripheral state */
mbed_official 573:ad23fe03a082 322 hcrc->State = HAL_CRC_STATE_READY;
mbed_official 573:ad23fe03a082 323
mbed_official 573:ad23fe03a082 324 /* Process unlocked */
mbed_official 573:ad23fe03a082 325 __HAL_UNLOCK(hcrc);
mbed_official 573:ad23fe03a082 326
mbed_official 573:ad23fe03a082 327 /* Return the CRC computed value */
mbed_official 573:ad23fe03a082 328 return temp;
mbed_official 573:ad23fe03a082 329 }
mbed_official 573:ad23fe03a082 330
mbed_official 573:ad23fe03a082 331
mbed_official 573:ad23fe03a082 332 /**
mbed_official 573:ad23fe03a082 333 * @brief Compute the 7, 8, 16 or 32-bit CRC value of an 8, 16 or 32-bit data buffer
mbed_official 573:ad23fe03a082 334 * starting with hcrc->Instance->INIT as initialization value.
mbed_official 573:ad23fe03a082 335 * @param hcrc: CRC handle
mbed_official 573:ad23fe03a082 336 * @param pBuffer: pointer to the input data buffer, exact input data format is
mbed_official 573:ad23fe03a082 337 * provided by hcrc->InputDataFormat.
mbed_official 573:ad23fe03a082 338 * @param BufferLength: input data buffer length
mbed_official 573:ad23fe03a082 339 * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
mbed_official 573:ad23fe03a082 340 */
mbed_official 573:ad23fe03a082 341 uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
mbed_official 573:ad23fe03a082 342 {
mbed_official 573:ad23fe03a082 343 uint32_t index = 0; /* CRC input data buffer index */
mbed_official 573:ad23fe03a082 344 uint32_t temp = 0; /* CRC output (read from hcrc->Instance->DR register) */
mbed_official 573:ad23fe03a082 345
mbed_official 573:ad23fe03a082 346 /* Process locked */
mbed_official 573:ad23fe03a082 347 __HAL_LOCK(hcrc);
mbed_official 573:ad23fe03a082 348
mbed_official 573:ad23fe03a082 349 /* Change CRC peripheral state */
mbed_official 573:ad23fe03a082 350 hcrc->State = HAL_CRC_STATE_BUSY;
mbed_official 573:ad23fe03a082 351
mbed_official 573:ad23fe03a082 352 /* Reset CRC Calculation Unit (hcrc->Instance->INIT is
mbed_official 573:ad23fe03a082 353 * written in hcrc->Instance->DR) */
mbed_official 573:ad23fe03a082 354 __HAL_CRC_DR_RESET(hcrc);
mbed_official 573:ad23fe03a082 355
mbed_official 573:ad23fe03a082 356 switch (hcrc->InputDataFormat)
mbed_official 573:ad23fe03a082 357 {
mbed_official 573:ad23fe03a082 358 case CRC_INPUTDATA_FORMAT_WORDS:
mbed_official 573:ad23fe03a082 359 /* Enter 32-bit input data to the CRC calculator */
mbed_official 573:ad23fe03a082 360 for(index = 0; index < BufferLength; index++)
mbed_official 573:ad23fe03a082 361 {
mbed_official 573:ad23fe03a082 362 hcrc->Instance->DR = pBuffer[index];
mbed_official 573:ad23fe03a082 363 }
mbed_official 573:ad23fe03a082 364 temp = hcrc->Instance->DR;
mbed_official 573:ad23fe03a082 365 break;
mbed_official 573:ad23fe03a082 366
mbed_official 573:ad23fe03a082 367 case CRC_INPUTDATA_FORMAT_BYTES:
mbed_official 573:ad23fe03a082 368 /* Specific 8-bit input data handling */
mbed_official 573:ad23fe03a082 369 temp = CRC_Handle_8(hcrc, (uint8_t*)pBuffer, BufferLength);
mbed_official 573:ad23fe03a082 370 break;
mbed_official 573:ad23fe03a082 371
mbed_official 573:ad23fe03a082 372 case CRC_INPUTDATA_FORMAT_HALFWORDS:
mbed_official 573:ad23fe03a082 373 /* Specific 16-bit input data handling */
mbed_official 573:ad23fe03a082 374 temp = CRC_Handle_16(hcrc, (uint16_t*)pBuffer, BufferLength);
mbed_official 573:ad23fe03a082 375 break;
mbed_official 573:ad23fe03a082 376 default:
mbed_official 573:ad23fe03a082 377 break;
mbed_official 573:ad23fe03a082 378 }
mbed_official 573:ad23fe03a082 379
mbed_official 573:ad23fe03a082 380 /* Change CRC peripheral state */
mbed_official 573:ad23fe03a082 381 hcrc->State = HAL_CRC_STATE_READY;
mbed_official 573:ad23fe03a082 382
mbed_official 573:ad23fe03a082 383 /* Process unlocked */
mbed_official 573:ad23fe03a082 384 __HAL_UNLOCK(hcrc);
mbed_official 573:ad23fe03a082 385
mbed_official 573:ad23fe03a082 386 /* Return the CRC computed value */
mbed_official 573:ad23fe03a082 387 return temp;
mbed_official 573:ad23fe03a082 388 }
mbed_official 573:ad23fe03a082 389
mbed_official 573:ad23fe03a082 390
mbed_official 573:ad23fe03a082 391
mbed_official 573:ad23fe03a082 392 /**
mbed_official 573:ad23fe03a082 393 * @brief Enter 8-bit input data to the CRC calculator.
mbed_official 573:ad23fe03a082 394 * Specific data handling to optimize processing time.
mbed_official 573:ad23fe03a082 395 * @param hcrc: CRC handle
mbed_official 573:ad23fe03a082 396 * @param pBuffer: pointer to the input data buffer
mbed_official 573:ad23fe03a082 397 * @param BufferLength: input data buffer length
mbed_official 573:ad23fe03a082 398 * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
mbed_official 573:ad23fe03a082 399 */
mbed_official 573:ad23fe03a082 400 static uint32_t CRC_Handle_8(CRC_HandleTypeDef *hcrc, uint8_t pBuffer[], uint32_t BufferLength)
mbed_official 573:ad23fe03a082 401 {
mbed_official 573:ad23fe03a082 402 uint32_t i = 0; /* input data buffer index */
mbed_official 573:ad23fe03a082 403
mbed_official 573:ad23fe03a082 404 /* Processing time optimization: 4 bytes are entered in a row with a single word write,
mbed_official 573:ad23fe03a082 405 * last bytes must be carefully fed to the CRC calculator to ensure a correct type
mbed_official 573:ad23fe03a082 406 * handling by the IP */
mbed_official 573:ad23fe03a082 407 for(i = 0; i < (BufferLength/4); i++)
mbed_official 573:ad23fe03a082 408 {
mbed_official 573:ad23fe03a082 409 hcrc->Instance->DR = (uint32_t)(((uint32_t)(pBuffer[4*i])<<24) | ((uint32_t)(pBuffer[4*i+1])<<16) | ((uint32_t)(pBuffer[4*i+2])<<8) | (uint32_t)(pBuffer[4*i+3]));
mbed_official 573:ad23fe03a082 410 }
mbed_official 573:ad23fe03a082 411 /* last bytes specific handling */
mbed_official 573:ad23fe03a082 412 if ((BufferLength%4) != 0)
mbed_official 573:ad23fe03a082 413 {
mbed_official 573:ad23fe03a082 414 if (BufferLength%4 == 1)
mbed_official 573:ad23fe03a082 415 {
mbed_official 573:ad23fe03a082 416 *(__IO uint8_t*) (&hcrc->Instance->DR) = pBuffer[4*i];
mbed_official 573:ad23fe03a082 417 }
mbed_official 573:ad23fe03a082 418 if (BufferLength%4 == 2)
mbed_official 573:ad23fe03a082 419 {
mbed_official 573:ad23fe03a082 420 *(__IO uint32_t*) (&hcrc->Instance->DR) = (uint16_t)(((uint32_t)(pBuffer[4*i])<<8) | (uint32_t)(pBuffer[4*i+1]));
mbed_official 573:ad23fe03a082 421 }
mbed_official 573:ad23fe03a082 422 if (BufferLength%4 == 3)
mbed_official 573:ad23fe03a082 423 {
mbed_official 573:ad23fe03a082 424 *(__IO uint32_t*) (&hcrc->Instance->DR) = (uint16_t)(((uint32_t)(pBuffer[4*i])<<8) | (uint32_t)(pBuffer[4*i+1]));
mbed_official 573:ad23fe03a082 425 *(__IO uint32_t*) (&hcrc->Instance->DR) = pBuffer[4*i+2];
mbed_official 573:ad23fe03a082 426 }
mbed_official 573:ad23fe03a082 427 }
mbed_official 573:ad23fe03a082 428
mbed_official 573:ad23fe03a082 429 /* Return the CRC computed value */
mbed_official 573:ad23fe03a082 430 return hcrc->Instance->DR;
mbed_official 573:ad23fe03a082 431 }
mbed_official 573:ad23fe03a082 432
mbed_official 573:ad23fe03a082 433
mbed_official 573:ad23fe03a082 434
mbed_official 573:ad23fe03a082 435 /**
mbed_official 573:ad23fe03a082 436 * @brief Enter 16-bit input data to the CRC calculator.
mbed_official 573:ad23fe03a082 437 * Specific data handling to optimize processing time.
mbed_official 573:ad23fe03a082 438 * @param hcrc: CRC handle
mbed_official 573:ad23fe03a082 439 * @param pBuffer: pointer to the input data buffer
mbed_official 573:ad23fe03a082 440 * @param BufferLength: input data buffer length
mbed_official 573:ad23fe03a082 441 * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
mbed_official 573:ad23fe03a082 442 */
mbed_official 573:ad23fe03a082 443 static uint32_t CRC_Handle_16(CRC_HandleTypeDef *hcrc, uint16_t pBuffer[], uint32_t BufferLength)
mbed_official 573:ad23fe03a082 444 {
mbed_official 573:ad23fe03a082 445 uint32_t i = 0; /* input data buffer index */
mbed_official 573:ad23fe03a082 446
mbed_official 573:ad23fe03a082 447 /* Processing time optimization: 2 HalfWords are entered in a row with a single word write,
mbed_official 573:ad23fe03a082 448 * in case of odd length, last HalfWord must be carefully fed to the CRC calculator to ensure
mbed_official 573:ad23fe03a082 449 * a correct type handling by the IP */
mbed_official 573:ad23fe03a082 450 for(i = 0; i < (BufferLength/2); i++)
mbed_official 573:ad23fe03a082 451 {
mbed_official 573:ad23fe03a082 452 hcrc->Instance->DR = (((uint32_t)(pBuffer[2*i])<<16) | (uint32_t)(pBuffer[2*i+1]));
mbed_official 573:ad23fe03a082 453 }
mbed_official 573:ad23fe03a082 454 if ((BufferLength%2) != 0)
mbed_official 573:ad23fe03a082 455 {
mbed_official 573:ad23fe03a082 456 *(__IO uint32_t*) (&hcrc->Instance->DR) = pBuffer[2*i];
mbed_official 573:ad23fe03a082 457 }
mbed_official 573:ad23fe03a082 458
mbed_official 573:ad23fe03a082 459 /* Return the CRC computed value */
mbed_official 573:ad23fe03a082 460 return hcrc->Instance->DR;
mbed_official 573:ad23fe03a082 461 }
mbed_official 573:ad23fe03a082 462
mbed_official 573:ad23fe03a082 463 /**
mbed_official 573:ad23fe03a082 464 * @}
mbed_official 573:ad23fe03a082 465 */
mbed_official 573:ad23fe03a082 466
mbed_official 573:ad23fe03a082 467 /** @defgroup HAL_CRC_Group3 Peripheral State functions
mbed_official 573:ad23fe03a082 468 * @brief Peripheral State functions.
mbed_official 573:ad23fe03a082 469 *
mbed_official 573:ad23fe03a082 470 @verbatim
mbed_official 573:ad23fe03a082 471 ==============================================================================
mbed_official 573:ad23fe03a082 472 ##### Peripheral State functions #####
mbed_official 573:ad23fe03a082 473 ==============================================================================
mbed_official 573:ad23fe03a082 474 [..]
mbed_official 573:ad23fe03a082 475 This subsection permits to get in run-time the status of the peripheral
mbed_official 573:ad23fe03a082 476 and the data flow.
mbed_official 573:ad23fe03a082 477
mbed_official 573:ad23fe03a082 478 @endverbatim
mbed_official 573:ad23fe03a082 479 * @{
mbed_official 573:ad23fe03a082 480 */
mbed_official 573:ad23fe03a082 481
mbed_official 573:ad23fe03a082 482 /**
mbed_official 573:ad23fe03a082 483 * @brief Returns the CRC state.
mbed_official 573:ad23fe03a082 484 * @param hcrc: CRC handle
mbed_official 573:ad23fe03a082 485 * @retval HAL state
mbed_official 573:ad23fe03a082 486 */
mbed_official 573:ad23fe03a082 487 HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc)
mbed_official 573:ad23fe03a082 488 {
mbed_official 573:ad23fe03a082 489 return hcrc->State;
mbed_official 573:ad23fe03a082 490 }
mbed_official 573:ad23fe03a082 491
mbed_official 573:ad23fe03a082 492 /**
mbed_official 573:ad23fe03a082 493 * @}
mbed_official 573:ad23fe03a082 494 */
mbed_official 573:ad23fe03a082 495
mbed_official 573:ad23fe03a082 496 /**
mbed_official 573:ad23fe03a082 497 * @}
mbed_official 573:ad23fe03a082 498 */
mbed_official 573:ad23fe03a082 499
mbed_official 573:ad23fe03a082 500 #endif /* HAL_CRC_MODULE_ENABLED */
mbed_official 573:ad23fe03a082 501 /**
mbed_official 573:ad23fe03a082 502 * @}
mbed_official 573:ad23fe03a082 503 */
mbed_official 573:ad23fe03a082 504
mbed_official 573:ad23fe03a082 505 /**
mbed_official 573:ad23fe03a082 506 * @}
mbed_official 573:ad23fe03a082 507 */
mbed_official 573:ad23fe03a082 508
mbed_official 573:ad23fe03a082 509 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/