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 Oct 31 11:00:10 2014 +0000
Revision:
376:cb4d9db17537
Synchronized with git revision 07b49da75eac883fc8916d3d6b6962664b8db29e

Full URL: https://github.com/mbedmicro/mbed/commit/07b49da75eac883fc8916d3d6b6962664b8db29e/

Targets: DISCO_L053C8 - new platform - STM32L0 Discovery board

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 376:cb4d9db17537 1 /**
mbed_official 376:cb4d9db17537 2 ******************************************************************************
mbed_official 376:cb4d9db17537 3 * @file stm32l0xx_hal_crc_ex.c
mbed_official 376:cb4d9db17537 4 * @author MCD Application Team
mbed_official 376:cb4d9db17537 5 * @version V1.1.0
mbed_official 376:cb4d9db17537 6 * @date 18-June-2014
mbed_official 376:cb4d9db17537 7 * @brief Extended CRC HAL module driver.
mbed_official 376:cb4d9db17537 8 *
mbed_official 376:cb4d9db17537 9 * This file provides firmware functions to manage the following
mbed_official 376:cb4d9db17537 10 * functionalities of the CRC peripheral:
mbed_official 376:cb4d9db17537 11 * + Initialization/de-initialization functions
mbed_official 376:cb4d9db17537 12 *
mbed_official 376:cb4d9db17537 13 @verbatim
mbed_official 376:cb4d9db17537 14 ==============================================================================
mbed_official 376:cb4d9db17537 15 ##### CRC specific features #####
mbed_official 376:cb4d9db17537 16 ==============================================================================
mbed_official 376:cb4d9db17537 17 [..]
mbed_official 376:cb4d9db17537 18 (#) Polynomial configuration.
mbed_official 376:cb4d9db17537 19
mbed_official 376:cb4d9db17537 20
mbed_official 376:cb4d9db17537 21 ##### How to use this driver #####
mbed_official 376:cb4d9db17537 22 ==============================================================================
mbed_official 376:cb4d9db17537 23 [..]
mbed_official 376:cb4d9db17537 24
mbed_official 376:cb4d9db17537 25 (#) Enable CRC AHB clock using __CRC_CLK_ENABLE();
mbed_official 376:cb4d9db17537 26
mbed_official 376:cb4d9db17537 27 (#) Initialize CRC calculator
mbed_official 376:cb4d9db17537 28 (++) specify generating polynomial (IP default or non-default one)
mbed_official 376:cb4d9db17537 29 (++) specify initialization value (IP default or non-default one)
mbed_official 376:cb4d9db17537 30 (++) specify input data format
mbed_official 376:cb4d9db17537 31 (++) specify input or output data inversion mode if any
mbed_official 376:cb4d9db17537 32
mbed_official 376:cb4d9db17537 33 (#) Use HAL_CRC_Accumulate() function to compute the CRC value of the
mbed_official 376:cb4d9db17537 34 input data buffer starting with the previously computed CRC as
mbed_official 376:cb4d9db17537 35 initialization value
mbed_official 376:cb4d9db17537 36
mbed_official 376:cb4d9db17537 37 (#) Use HAL_CRC_Calculate() function to compute the CRC value of the
mbed_official 376:cb4d9db17537 38 input data buffer starting with the defined initialization value
mbed_official 376:cb4d9db17537 39 (default or non-default) to initiate CRC calculation
mbed_official 376:cb4d9db17537 40
mbed_official 376:cb4d9db17537 41 @endverbatim
mbed_official 376:cb4d9db17537 42 ******************************************************************************
mbed_official 376:cb4d9db17537 43 * @attention
mbed_official 376:cb4d9db17537 44 *
mbed_official 376:cb4d9db17537 45 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 376:cb4d9db17537 46 *
mbed_official 376:cb4d9db17537 47 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 376:cb4d9db17537 48 * are permitted provided that the following conditions are met:
mbed_official 376:cb4d9db17537 49 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 376:cb4d9db17537 50 * this list of conditions and the following disclaimer.
mbed_official 376:cb4d9db17537 51 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 376:cb4d9db17537 52 * this list of conditions and the following disclaimer in the documentation
mbed_official 376:cb4d9db17537 53 * and/or other materials provided with the distribution.
mbed_official 376:cb4d9db17537 54 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 376:cb4d9db17537 55 * may be used to endorse or promote products derived from this software
mbed_official 376:cb4d9db17537 56 * without specific prior written permission.
mbed_official 376:cb4d9db17537 57 *
mbed_official 376:cb4d9db17537 58 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 376:cb4d9db17537 59 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 376:cb4d9db17537 60 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 376:cb4d9db17537 61 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 376:cb4d9db17537 62 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 376:cb4d9db17537 63 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 376:cb4d9db17537 64 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 376:cb4d9db17537 65 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 376:cb4d9db17537 66 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 376:cb4d9db17537 67 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 376:cb4d9db17537 68 *
mbed_official 376:cb4d9db17537 69 ******************************************************************************
mbed_official 376:cb4d9db17537 70 */
mbed_official 376:cb4d9db17537 71
mbed_official 376:cb4d9db17537 72 /* Includes ------------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 73 #include "stm32l0xx_hal.h"
mbed_official 376:cb4d9db17537 74
mbed_official 376:cb4d9db17537 75 /** @addtogroup STM32L0xx_HAL_Driver
mbed_official 376:cb4d9db17537 76 * @{
mbed_official 376:cb4d9db17537 77 */
mbed_official 376:cb4d9db17537 78
mbed_official 376:cb4d9db17537 79 /** @addtogroup CRCEx
mbed_official 376:cb4d9db17537 80 * @brief CRC driver modules
mbed_official 376:cb4d9db17537 81 * @{
mbed_official 376:cb4d9db17537 82 */
mbed_official 376:cb4d9db17537 83
mbed_official 376:cb4d9db17537 84 #ifdef HAL_CRC_MODULE_ENABLED
mbed_official 376:cb4d9db17537 85
mbed_official 376:cb4d9db17537 86 /* Private typedef -----------------------------------------------------------*/
mbed_official 376:cb4d9db17537 87 /* Private define ------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 88 /* Private macro -------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 89 /* Private variables ---------------------------------------------------------*/
mbed_official 376:cb4d9db17537 90 /* Private function prototypes -----------------------------------------------*/
mbed_official 376:cb4d9db17537 91 /* Private functions ---------------------------------------------------------*/
mbed_official 376:cb4d9db17537 92
mbed_official 376:cb4d9db17537 93
mbed_official 376:cb4d9db17537 94 /** @defgroup CRCEx_Group CRC Extended features functions
mbed_official 376:cb4d9db17537 95 * @brief CRC Extended features functions
mbed_official 376:cb4d9db17537 96 *
mbed_official 376:cb4d9db17537 97 @verbatim
mbed_official 376:cb4d9db17537 98 ===============================================================================
mbed_official 376:cb4d9db17537 99 ##### CRC Extended features functions #####
mbed_official 376:cb4d9db17537 100 ===============================================================================
mbed_official 376:cb4d9db17537 101 [..]
mbed_official 376:cb4d9db17537 102 This subsection provides function allowing to:
mbed_official 376:cb4d9db17537 103 (+) Set CRC polynomial if different from default one.
mbed_official 376:cb4d9db17537 104
mbed_official 376:cb4d9db17537 105 @endverbatim
mbed_official 376:cb4d9db17537 106 * @{
mbed_official 376:cb4d9db17537 107 */
mbed_official 376:cb4d9db17537 108
mbed_official 376:cb4d9db17537 109
mbed_official 376:cb4d9db17537 110 /**
mbed_official 376:cb4d9db17537 111 * @brief Initializes the CRC polynomial if different from default one.
mbed_official 376:cb4d9db17537 112 * @param hcrc: CRC handle
mbed_official 376:cb4d9db17537 113 * @param Pol: CRC generating polynomial (7, 8, 16 or 32-bit long)
mbed_official 376:cb4d9db17537 114 * This parameter is written in normal representation, e.g.
mbed_official 376:cb4d9db17537 115 * for a polynomial of degree 7, X^7 + X^6 + X^5 + X^2 + 1 is written 0x65
mbed_official 376:cb4d9db17537 116 * for a polynomial of degree 16, X^16 + X^12 + X^5 + 1 is written 0x1021
mbed_official 376:cb4d9db17537 117 * @param PolyLength: CRC polynomial length
mbed_official 376:cb4d9db17537 118 * This parameter can be one of the following values:
mbed_official 376:cb4d9db17537 119 * @arg CRC_POLYLENGTH_7B: 7-bit long CRC (generating polynomial of degree 7)
mbed_official 376:cb4d9db17537 120 * @arg CRC_POLYLENGTH_8B: 8-bit long CRC (generating polynomial of degree 8)
mbed_official 376:cb4d9db17537 121 * @arg CRC_POLYLENGTH_16B: 16-bit long CRC (generating polynomial of degree 16)
mbed_official 376:cb4d9db17537 122 * @arg CRC_POLYLENGTH_32B: 32-bit long CRC (generating polynomial of degree 32)
mbed_official 376:cb4d9db17537 123 * @retval HAL status
mbed_official 376:cb4d9db17537 124 */
mbed_official 376:cb4d9db17537 125 HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength)
mbed_official 376:cb4d9db17537 126 {
mbed_official 376:cb4d9db17537 127 uint32_t msb = 31; /* polynomial degree is 32 at most, so msb is initialized to max value */
mbed_official 376:cb4d9db17537 128
mbed_official 376:cb4d9db17537 129 /* Check the parameters */
mbed_official 376:cb4d9db17537 130 assert_param(IS_CRC_POL_LENGTH(PolyLength));
mbed_official 376:cb4d9db17537 131
mbed_official 376:cb4d9db17537 132 /* check polynomial definition vs polynomial size:
mbed_official 376:cb4d9db17537 133 * polynomial length must be aligned with polynomial
mbed_official 376:cb4d9db17537 134 * definition. HAL_ERROR is reported if Pol degree is
mbed_official 376:cb4d9db17537 135 * larger than that indicated by PolyLength.
mbed_official 376:cb4d9db17537 136 * Look for MSB position: msb will contain the degree of
mbed_official 376:cb4d9db17537 137 * the second to the largest polynomial member. E.g., for
mbed_official 376:cb4d9db17537 138 * X^7 + X^6 + X^5 + X^2 + 1, msb = 6. */
mbed_official 376:cb4d9db17537 139 while (((Pol & ((uint32_t)(0x1) << msb)) == 0) && (msb-- > 0))
mbed_official 376:cb4d9db17537 140 {
mbed_official 376:cb4d9db17537 141 }
mbed_official 376:cb4d9db17537 142
mbed_official 376:cb4d9db17537 143 switch (PolyLength)
mbed_official 376:cb4d9db17537 144 {
mbed_official 376:cb4d9db17537 145 case CRC_POLYLENGTH_7B:
mbed_official 376:cb4d9db17537 146 if (msb >= HAL_CRC_LENGTH_7B)
mbed_official 376:cb4d9db17537 147 {
mbed_official 376:cb4d9db17537 148 return HAL_ERROR;
mbed_official 376:cb4d9db17537 149 }
mbed_official 376:cb4d9db17537 150 break;
mbed_official 376:cb4d9db17537 151 case CRC_POLYLENGTH_8B:
mbed_official 376:cb4d9db17537 152 if (msb >= HAL_CRC_LENGTH_8B)
mbed_official 376:cb4d9db17537 153 {
mbed_official 376:cb4d9db17537 154 return HAL_ERROR;
mbed_official 376:cb4d9db17537 155 }
mbed_official 376:cb4d9db17537 156 break;
mbed_official 376:cb4d9db17537 157 case CRC_POLYLENGTH_16B:
mbed_official 376:cb4d9db17537 158 if (msb >= HAL_CRC_LENGTH_16B)
mbed_official 376:cb4d9db17537 159 {
mbed_official 376:cb4d9db17537 160 return HAL_ERROR;
mbed_official 376:cb4d9db17537 161 }
mbed_official 376:cb4d9db17537 162 break;
mbed_official 376:cb4d9db17537 163 case CRC_POLYLENGTH_32B:
mbed_official 376:cb4d9db17537 164 /* no polynomial definition vs. polynomial length issue possible */
mbed_official 376:cb4d9db17537 165 break;
mbed_official 376:cb4d9db17537 166 default:
mbed_official 376:cb4d9db17537 167 break;
mbed_official 376:cb4d9db17537 168 }
mbed_official 376:cb4d9db17537 169
mbed_official 376:cb4d9db17537 170 /* set generating polynomial */
mbed_official 376:cb4d9db17537 171 WRITE_REG(hcrc->Instance->POL, Pol);
mbed_official 376:cb4d9db17537 172
mbed_official 376:cb4d9db17537 173 /* set generating polynomial size */
mbed_official 376:cb4d9db17537 174 MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength);
mbed_official 376:cb4d9db17537 175
mbed_official 376:cb4d9db17537 176 /* Return function status */
mbed_official 376:cb4d9db17537 177 return HAL_OK;
mbed_official 376:cb4d9db17537 178 }
mbed_official 376:cb4d9db17537 179
mbed_official 376:cb4d9db17537 180 /**
mbed_official 376:cb4d9db17537 181 * @brief Set the Reverse Input data mode.
mbed_official 376:cb4d9db17537 182 * @param hcrc: CRC handle
mbed_official 376:cb4d9db17537 183 * @param InputReverseMode: Input Data inversion mode
mbed_official 376:cb4d9db17537 184 * This parameter can be one of the following values:
mbed_official 376:cb4d9db17537 185 * @arg CRC_INPUTDATA_INVERSION_NONE: no change in bit order (default value)
mbed_official 376:cb4d9db17537 186 * @arg CRC_INPUTDATA_INVERSION_BYTE: Byte-wise bit reversal
mbed_official 376:cb4d9db17537 187 * @arg CRC_INPUTDATA_INVERSION_HALFWORD: HalfWord-wise bit reversal
mbed_official 376:cb4d9db17537 188 * @arg CRC_INPUTDATA_INVERSION_WORD: Word-wise bit reversal
mbed_official 376:cb4d9db17537 189 * @retval HAL status
mbed_official 376:cb4d9db17537 190 */
mbed_official 376:cb4d9db17537 191 HAL_StatusTypeDef HAL_CRC_Input_Data_Reverse(CRC_HandleTypeDef *hcrc, uint32_t InputReverseMode)
mbed_official 376:cb4d9db17537 192 {
mbed_official 376:cb4d9db17537 193 /* Check the parameters */
mbed_official 376:cb4d9db17537 194 assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(InputReverseMode));
mbed_official 376:cb4d9db17537 195
mbed_official 376:cb4d9db17537 196 /* Change CRC peripheral state */
mbed_official 376:cb4d9db17537 197 hcrc->State = HAL_CRC_STATE_BUSY;
mbed_official 376:cb4d9db17537 198
mbed_official 376:cb4d9db17537 199 /* set input data inversion mode */
mbed_official 376:cb4d9db17537 200 MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, InputReverseMode);
mbed_official 376:cb4d9db17537 201 /* Change CRC peripheral state */
mbed_official 376:cb4d9db17537 202 hcrc->State = HAL_CRC_STATE_READY;
mbed_official 376:cb4d9db17537 203
mbed_official 376:cb4d9db17537 204 /* Return function status */
mbed_official 376:cb4d9db17537 205 return HAL_OK;
mbed_official 376:cb4d9db17537 206 }
mbed_official 376:cb4d9db17537 207
mbed_official 376:cb4d9db17537 208 /**
mbed_official 376:cb4d9db17537 209 * @brief Set the Reverse Output data mode.
mbed_official 376:cb4d9db17537 210 * @param hcrc: CRC handle
mbed_official 376:cb4d9db17537 211 * @param OutputReverseMode: Output Data inversion mode
mbed_official 376:cb4d9db17537 212 * This parameter can be one of the following values:
mbed_official 376:cb4d9db17537 213 * @arg CRC_OUTPUTDATA_INVERSION_DISABLED: no CRC inversion (default value)
mbed_official 376:cb4d9db17537 214 * @arg CRC_OUTPUTDATA_INVERSION_ENABLED: bit-level inversion (e.g for a 8-bit CRC: 0xB5 becomes 0xAD)
mbed_official 376:cb4d9db17537 215 * @retval HAL status
mbed_official 376:cb4d9db17537 216 */
mbed_official 376:cb4d9db17537 217 HAL_StatusTypeDef HAL_CRC_Output_Data_Reverse(CRC_HandleTypeDef *hcrc, uint32_t OutputReverseMode)
mbed_official 376:cb4d9db17537 218 {
mbed_official 376:cb4d9db17537 219 /* Check the parameters */
mbed_official 376:cb4d9db17537 220 assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(OutputReverseMode));
mbed_official 376:cb4d9db17537 221
mbed_official 376:cb4d9db17537 222 /* Change CRC peripheral state */
mbed_official 376:cb4d9db17537 223 hcrc->State = HAL_CRC_STATE_BUSY;
mbed_official 376:cb4d9db17537 224
mbed_official 376:cb4d9db17537 225 /* set output data inversion mode */
mbed_official 376:cb4d9db17537 226 MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, OutputReverseMode);
mbed_official 376:cb4d9db17537 227
mbed_official 376:cb4d9db17537 228 /* Change CRC peripheral state */
mbed_official 376:cb4d9db17537 229 hcrc->State = HAL_CRC_STATE_READY;
mbed_official 376:cb4d9db17537 230
mbed_official 376:cb4d9db17537 231 /* Return function status */
mbed_official 376:cb4d9db17537 232 return HAL_OK;
mbed_official 376:cb4d9db17537 233 }
mbed_official 376:cb4d9db17537 234
mbed_official 376:cb4d9db17537 235 /**
mbed_official 376:cb4d9db17537 236 * @}
mbed_official 376:cb4d9db17537 237 */
mbed_official 376:cb4d9db17537 238
mbed_official 376:cb4d9db17537 239
mbed_official 376:cb4d9db17537 240 #endif /* HAL_CRC_MODULE_ENABLED */
mbed_official 376:cb4d9db17537 241 /**
mbed_official 376:cb4d9db17537 242 * @}
mbed_official 376:cb4d9db17537 243 */
mbed_official 376:cb4d9db17537 244
mbed_official 376:cb4d9db17537 245 /**
mbed_official 376:cb4d9db17537 246 * @}
mbed_official 376:cb4d9db17537 247 */
mbed_official 376:cb4d9db17537 248
mbed_official 376:cb4d9db17537 249 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/