STM32L443xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_ll_crc.h 00004 * @author MCD Application Team 00005 * @brief Header file of CRC LL module. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2017 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 00019 /* Define to prevent recursive inclusion -------------------------------------*/ 00020 #ifndef STM32L4xx_LL_CRC_H 00021 #define STM32L4xx_LL_CRC_H 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /* Includes ------------------------------------------------------------------*/ 00028 #include "stm32l4xx.h" 00029 00030 /** @addtogroup STM32L4xx_LL_Driver 00031 * @{ 00032 */ 00033 00034 #if defined(CRC) 00035 00036 /** @defgroup CRC_LL CRC 00037 * @{ 00038 */ 00039 00040 /* Private types -------------------------------------------------------------*/ 00041 /* Private variables ---------------------------------------------------------*/ 00042 /* Private constants ---------------------------------------------------------*/ 00043 /* Private macros ------------------------------------------------------------*/ 00044 00045 /* Exported types ------------------------------------------------------------*/ 00046 /* Exported constants --------------------------------------------------------*/ 00047 /** @defgroup CRC_LL_Exported_Constants CRC Exported Constants 00048 * @{ 00049 */ 00050 00051 /** @defgroup CRC_LL_EC_POLYLENGTH Polynomial length 00052 * @{ 00053 */ 00054 #define LL_CRC_POLYLENGTH_32B 0x00000000U /*!< 32 bits Polynomial size */ 00055 #define LL_CRC_POLYLENGTH_16B CRC_CR_POLYSIZE_0 /*!< 16 bits Polynomial size */ 00056 #define LL_CRC_POLYLENGTH_8B CRC_CR_POLYSIZE_1 /*!< 8 bits Polynomial size */ 00057 #define LL_CRC_POLYLENGTH_7B (CRC_CR_POLYSIZE_1 | CRC_CR_POLYSIZE_0) /*!< 7 bits Polynomial size */ 00058 /** 00059 * @} 00060 */ 00061 00062 /** @defgroup CRC_LL_EC_INDATA_REVERSE Input Data Reverse 00063 * @{ 00064 */ 00065 #define LL_CRC_INDATA_REVERSE_NONE 0x00000000U /*!< Input Data bit order not affected */ 00066 #define LL_CRC_INDATA_REVERSE_BYTE CRC_CR_REV_IN_0 /*!< Input Data bit reversal done by byte */ 00067 #define LL_CRC_INDATA_REVERSE_HALFWORD CRC_CR_REV_IN_1 /*!< Input Data bit reversal done by half-word */ 00068 #define LL_CRC_INDATA_REVERSE_WORD (CRC_CR_REV_IN_1 | CRC_CR_REV_IN_0) /*!< Input Data bit reversal done by word */ 00069 /** 00070 * @} 00071 */ 00072 00073 /** @defgroup CRC_LL_EC_OUTDATA_REVERSE Output Data Reverse 00074 * @{ 00075 */ 00076 #define LL_CRC_OUTDATA_REVERSE_NONE 0x00000000U /*!< Output Data bit order not affected */ 00077 #define LL_CRC_OUTDATA_REVERSE_BIT CRC_CR_REV_OUT /*!< Output Data bit reversal done by bit */ 00078 /** 00079 * @} 00080 */ 00081 00082 /** @defgroup CRC_LL_EC_Default_Polynomial_Value Default CRC generating polynomial value 00083 * @brief Normal representation of this polynomial value is 00084 * X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 + X^4 + X^2 + X + 1 . 00085 * @{ 00086 */ 00087 #define LL_CRC_DEFAULT_CRC32_POLY 0x04C11DB7U /*!< Default CRC generating polynomial value */ 00088 /** 00089 * @} 00090 */ 00091 00092 /** @defgroup CRC_LL_EC_Default_InitValue Default CRC computation initialization value 00093 * @{ 00094 */ 00095 #define LL_CRC_DEFAULT_CRC_INITVALUE 0xFFFFFFFFU /*!< Default CRC computation initialization value */ 00096 /** 00097 * @} 00098 */ 00099 00100 /** 00101 * @} 00102 */ 00103 00104 /* Exported macro ------------------------------------------------------------*/ 00105 /** @defgroup CRC_LL_Exported_Macros CRC Exported Macros 00106 * @{ 00107 */ 00108 00109 /** @defgroup CRC_LL_EM_WRITE_READ Common Write and read registers Macros 00110 * @{ 00111 */ 00112 00113 /** 00114 * @brief Write a value in CRC register 00115 * @param __INSTANCE__ CRC Instance 00116 * @param __REG__ Register to be written 00117 * @param __VALUE__ Value to be written in the register 00118 * @retval None 00119 */ 00120 #define LL_CRC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, __VALUE__) 00121 00122 /** 00123 * @brief Read a value in CRC register 00124 * @param __INSTANCE__ CRC Instance 00125 * @param __REG__ Register to be read 00126 * @retval Register value 00127 */ 00128 #define LL_CRC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) 00129 /** 00130 * @} 00131 */ 00132 00133 /** 00134 * @} 00135 */ 00136 00137 00138 /* Exported functions --------------------------------------------------------*/ 00139 /** @defgroup CRC_LL_Exported_Functions CRC Exported Functions 00140 * @{ 00141 */ 00142 00143 /** @defgroup CRC_LL_EF_Configuration CRC Configuration functions 00144 * @{ 00145 */ 00146 00147 /** 00148 * @brief Reset the CRC calculation unit. 00149 * @note If Programmable Initial CRC value feature 00150 * is available, also set the Data Register to the value stored in the 00151 * CRC_INIT register, otherwise, reset Data Register to its default value. 00152 * @rmtoll CR RESET LL_CRC_ResetCRCCalculationUnit 00153 * @param CRCx CRC Instance 00154 * @retval None 00155 */ 00156 __STATIC_INLINE void LL_CRC_ResetCRCCalculationUnit(CRC_TypeDef *CRCx) 00157 { 00158 SET_BIT(CRCx->CR, CRC_CR_RESET); 00159 } 00160 00161 /** 00162 * @brief Configure size of the polynomial. 00163 * @rmtoll CR POLYSIZE LL_CRC_SetPolynomialSize 00164 * @param CRCx CRC Instance 00165 * @param PolySize This parameter can be one of the following values: 00166 * @arg @ref LL_CRC_POLYLENGTH_32B 00167 * @arg @ref LL_CRC_POLYLENGTH_16B 00168 * @arg @ref LL_CRC_POLYLENGTH_8B 00169 * @arg @ref LL_CRC_POLYLENGTH_7B 00170 * @retval None 00171 */ 00172 __STATIC_INLINE void LL_CRC_SetPolynomialSize(CRC_TypeDef *CRCx, uint32_t PolySize) 00173 { 00174 MODIFY_REG(CRCx->CR, CRC_CR_POLYSIZE, PolySize); 00175 } 00176 00177 /** 00178 * @brief Return size of the polynomial. 00179 * @rmtoll CR POLYSIZE LL_CRC_GetPolynomialSize 00180 * @param CRCx CRC Instance 00181 * @retval Returned value can be one of the following values: 00182 * @arg @ref LL_CRC_POLYLENGTH_32B 00183 * @arg @ref LL_CRC_POLYLENGTH_16B 00184 * @arg @ref LL_CRC_POLYLENGTH_8B 00185 * @arg @ref LL_CRC_POLYLENGTH_7B 00186 */ 00187 __STATIC_INLINE uint32_t LL_CRC_GetPolynomialSize(CRC_TypeDef *CRCx) 00188 { 00189 return (uint32_t)(READ_BIT(CRCx->CR, CRC_CR_POLYSIZE)); 00190 } 00191 00192 /** 00193 * @brief Configure the reversal of the bit order of the input data 00194 * @rmtoll CR REV_IN LL_CRC_SetInputDataReverseMode 00195 * @param CRCx CRC Instance 00196 * @param ReverseMode This parameter can be one of the following values: 00197 * @arg @ref LL_CRC_INDATA_REVERSE_NONE 00198 * @arg @ref LL_CRC_INDATA_REVERSE_BYTE 00199 * @arg @ref LL_CRC_INDATA_REVERSE_HALFWORD 00200 * @arg @ref LL_CRC_INDATA_REVERSE_WORD 00201 * @retval None 00202 */ 00203 __STATIC_INLINE void LL_CRC_SetInputDataReverseMode(CRC_TypeDef *CRCx, uint32_t ReverseMode) 00204 { 00205 MODIFY_REG(CRCx->CR, CRC_CR_REV_IN, ReverseMode); 00206 } 00207 00208 /** 00209 * @brief Return type of reversal for input data bit order 00210 * @rmtoll CR REV_IN LL_CRC_GetInputDataReverseMode 00211 * @param CRCx CRC Instance 00212 * @retval Returned value can be one of the following values: 00213 * @arg @ref LL_CRC_INDATA_REVERSE_NONE 00214 * @arg @ref LL_CRC_INDATA_REVERSE_BYTE 00215 * @arg @ref LL_CRC_INDATA_REVERSE_HALFWORD 00216 * @arg @ref LL_CRC_INDATA_REVERSE_WORD 00217 */ 00218 __STATIC_INLINE uint32_t LL_CRC_GetInputDataReverseMode(CRC_TypeDef *CRCx) 00219 { 00220 return (uint32_t)(READ_BIT(CRCx->CR, CRC_CR_REV_IN)); 00221 } 00222 00223 /** 00224 * @brief Configure the reversal of the bit order of the Output data 00225 * @rmtoll CR REV_OUT LL_CRC_SetOutputDataReverseMode 00226 * @param CRCx CRC Instance 00227 * @param ReverseMode This parameter can be one of the following values: 00228 * @arg @ref LL_CRC_OUTDATA_REVERSE_NONE 00229 * @arg @ref LL_CRC_OUTDATA_REVERSE_BIT 00230 * @retval None 00231 */ 00232 __STATIC_INLINE void LL_CRC_SetOutputDataReverseMode(CRC_TypeDef *CRCx, uint32_t ReverseMode) 00233 { 00234 MODIFY_REG(CRCx->CR, CRC_CR_REV_OUT, ReverseMode); 00235 } 00236 00237 /** 00238 * @brief Return type of reversal of the bit order of the Output data 00239 * @rmtoll CR REV_OUT LL_CRC_GetOutputDataReverseMode 00240 * @param CRCx CRC Instance 00241 * @retval Returned value can be one of the following values: 00242 * @arg @ref LL_CRC_OUTDATA_REVERSE_NONE 00243 * @arg @ref LL_CRC_OUTDATA_REVERSE_BIT 00244 */ 00245 __STATIC_INLINE uint32_t LL_CRC_GetOutputDataReverseMode(CRC_TypeDef *CRCx) 00246 { 00247 return (uint32_t)(READ_BIT(CRCx->CR, CRC_CR_REV_OUT)); 00248 } 00249 00250 /** 00251 * @brief Initialize the Programmable initial CRC value. 00252 * @note If the CRC size is less than 32 bits, the least significant bits 00253 * are used to write the correct value 00254 * @note LL_CRC_DEFAULT_CRC_INITVALUE could be used as value for InitCrc parameter. 00255 * @rmtoll INIT INIT LL_CRC_SetInitialData 00256 * @param CRCx CRC Instance 00257 * @param InitCrc Value to be programmed in Programmable initial CRC value register 00258 * @retval None 00259 */ 00260 __STATIC_INLINE void LL_CRC_SetInitialData(CRC_TypeDef *CRCx, uint32_t InitCrc) 00261 { 00262 WRITE_REG(CRCx->INIT, InitCrc); 00263 } 00264 00265 /** 00266 * @brief Return current Initial CRC value. 00267 * @note If the CRC size is less than 32 bits, the least significant bits 00268 * are used to read the correct value 00269 * @rmtoll INIT INIT LL_CRC_GetInitialData 00270 * @param CRCx CRC Instance 00271 * @retval Value programmed in Programmable initial CRC value register 00272 */ 00273 __STATIC_INLINE uint32_t LL_CRC_GetInitialData(CRC_TypeDef *CRCx) 00274 { 00275 return (uint32_t)(READ_REG(CRCx->INIT)); 00276 } 00277 00278 /** 00279 * @brief Initialize the Programmable polynomial value 00280 * (coefficients of the polynomial to be used for CRC calculation). 00281 * @note LL_CRC_DEFAULT_CRC32_POLY could be used as value for PolynomCoef parameter. 00282 * @note Please check Reference Manual and existing Errata Sheets, 00283 * regarding possible limitations for Polynomial values usage. 00284 * For example, for a polynomial of degree 7, X^7 + X^6 + X^5 + X^2 + 1 is written 0x65 00285 * @rmtoll POL POL LL_CRC_SetPolynomialCoef 00286 * @param CRCx CRC Instance 00287 * @param PolynomCoef Value to be programmed in Programmable Polynomial value register 00288 * @retval None 00289 */ 00290 __STATIC_INLINE void LL_CRC_SetPolynomialCoef(CRC_TypeDef *CRCx, uint32_t PolynomCoef) 00291 { 00292 WRITE_REG(CRCx->POL, PolynomCoef); 00293 } 00294 00295 /** 00296 * @brief Return current Programmable polynomial value 00297 * @note Please check Reference Manual and existing Errata Sheets, 00298 * regarding possible limitations for Polynomial values usage. 00299 * For example, for a polynomial of degree 7, X^7 + X^6 + X^5 + X^2 + 1 is written 0x65 00300 * @rmtoll POL POL LL_CRC_GetPolynomialCoef 00301 * @param CRCx CRC Instance 00302 * @retval Value programmed in Programmable Polynomial value register 00303 */ 00304 __STATIC_INLINE uint32_t LL_CRC_GetPolynomialCoef(CRC_TypeDef *CRCx) 00305 { 00306 return (uint32_t)(READ_REG(CRCx->POL)); 00307 } 00308 00309 /** 00310 * @} 00311 */ 00312 00313 /** @defgroup CRC_LL_EF_Data_Management Data_Management 00314 * @{ 00315 */ 00316 00317 /** 00318 * @brief Write given 32-bit data to the CRC calculator 00319 * @rmtoll DR DR LL_CRC_FeedData32 00320 * @param CRCx CRC Instance 00321 * @param InData value to be provided to CRC calculator between between Min_Data=0 and Max_Data=0xFFFFFFFF 00322 * @retval None 00323 */ 00324 __STATIC_INLINE void LL_CRC_FeedData32(CRC_TypeDef *CRCx, uint32_t InData) 00325 { 00326 WRITE_REG(CRCx->DR, InData); 00327 } 00328 00329 /** 00330 * @brief Write given 16-bit data to the CRC calculator 00331 * @rmtoll DR DR LL_CRC_FeedData16 00332 * @param CRCx CRC Instance 00333 * @param InData 16 bit value to be provided to CRC calculator between between Min_Data=0 and Max_Data=0xFFFF 00334 * @retval None 00335 */ 00336 __STATIC_INLINE void LL_CRC_FeedData16(CRC_TypeDef *CRCx, uint16_t InData) 00337 { 00338 __IO uint16_t *pReg; 00339 00340 pReg = (__IO uint16_t *)(__IO void *)(&CRCx->DR); /* Derogation MisraC2012 R.11.5 */ 00341 *pReg = InData; 00342 } 00343 00344 /** 00345 * @brief Write given 8-bit data to the CRC calculator 00346 * @rmtoll DR DR LL_CRC_FeedData8 00347 * @param CRCx CRC Instance 00348 * @param InData 8 bit value to be provided to CRC calculator between between Min_Data=0 and Max_Data=0xFF 00349 * @retval None 00350 */ 00351 __STATIC_INLINE void LL_CRC_FeedData8(CRC_TypeDef *CRCx, uint8_t InData) 00352 { 00353 *(uint8_t __IO *)(&CRCx->DR) = (uint8_t) InData; 00354 } 00355 00356 /** 00357 * @brief Return current CRC calculation result. 32 bits value is returned. 00358 * @rmtoll DR DR LL_CRC_ReadData32 00359 * @param CRCx CRC Instance 00360 * @retval Current CRC calculation result as stored in CRC_DR register (32 bits). 00361 */ 00362 __STATIC_INLINE uint32_t LL_CRC_ReadData32(CRC_TypeDef *CRCx) 00363 { 00364 return (uint32_t)(READ_REG(CRCx->DR)); 00365 } 00366 00367 /** 00368 * @brief Return current CRC calculation result. 16 bits value is returned. 00369 * @note This function is expected to be used in a 16 bits CRC polynomial size context. 00370 * @rmtoll DR DR LL_CRC_ReadData16 00371 * @param CRCx CRC Instance 00372 * @retval Current CRC calculation result as stored in CRC_DR register (16 bits). 00373 */ 00374 __STATIC_INLINE uint16_t LL_CRC_ReadData16(CRC_TypeDef *CRCx) 00375 { 00376 return (uint16_t)READ_REG(CRCx->DR); 00377 } 00378 00379 /** 00380 * @brief Return current CRC calculation result. 8 bits value is returned. 00381 * @note This function is expected to be used in a 8 bits CRC polynomial size context. 00382 * @rmtoll DR DR LL_CRC_ReadData8 00383 * @param CRCx CRC Instance 00384 * @retval Current CRC calculation result as stored in CRC_DR register (8 bits). 00385 */ 00386 __STATIC_INLINE uint8_t LL_CRC_ReadData8(CRC_TypeDef *CRCx) 00387 { 00388 return (uint8_t)READ_REG(CRCx->DR); 00389 } 00390 00391 /** 00392 * @brief Return current CRC calculation result. 7 bits value is returned. 00393 * @note This function is expected to be used in a 7 bits CRC polynomial size context. 00394 * @rmtoll DR DR LL_CRC_ReadData7 00395 * @param CRCx CRC Instance 00396 * @retval Current CRC calculation result as stored in CRC_DR register (7 bits). 00397 */ 00398 __STATIC_INLINE uint8_t LL_CRC_ReadData7(CRC_TypeDef *CRCx) 00399 { 00400 return (uint8_t)(READ_REG(CRCx->DR) & 0x7FU); 00401 } 00402 00403 /** 00404 * @brief Return data stored in the Independent Data(IDR) register. 00405 * @note This register can be used as a temporary storage location. 00406 * @note Refer to the Reference Manual to get the authorized data length in bits. 00407 * @rmtoll IDR IDR LL_CRC_Read_IDR 00408 * @param CRCx CRC Instance 00409 * @retval Value stored in CRC_IDR register 00410 */ 00411 __STATIC_INLINE uint32_t LL_CRC_Read_IDR(CRC_TypeDef *CRCx) 00412 { 00413 return (uint32_t)(READ_REG(CRCx->IDR)); 00414 } 00415 00416 /** 00417 * @brief Store data in the Independent Data(IDR) register. 00418 * @note This register can be used as a temporary storage location. 00419 * @note Refer to the Reference Manual to get the authorized data length in bits. 00420 * @rmtoll IDR IDR LL_CRC_Write_IDR 00421 * @param CRCx CRC Instance 00422 * @param InData value to be stored in CRC_IDR register 00423 * @retval None 00424 */ 00425 __STATIC_INLINE void LL_CRC_Write_IDR(CRC_TypeDef *CRCx, uint32_t InData) 00426 { 00427 #if (CRC_IDR_IDR == 0x0FFU) 00428 *((uint8_t __IO *)(&CRCx->IDR)) = (uint8_t) InData; 00429 #else 00430 WRITE_REG(CRCx->IDR, InData); 00431 #endif 00432 } 00433 /** 00434 * @} 00435 */ 00436 00437 #if defined(USE_FULL_LL_DRIVER) 00438 /** @defgroup CRC_LL_EF_Init Initialization and de-initialization functions 00439 * @{ 00440 */ 00441 00442 ErrorStatus LL_CRC_DeInit(CRC_TypeDef *CRCx); 00443 00444 /** 00445 * @} 00446 */ 00447 #endif /* USE_FULL_LL_DRIVER */ 00448 00449 /** 00450 * @} 00451 */ 00452 00453 /** 00454 * @} 00455 */ 00456 00457 #endif /* defined(CRC) */ 00458 00459 /** 00460 * @} 00461 */ 00462 00463 #ifdef __cplusplus 00464 } 00465 #endif 00466 00467 #endif /* STM32L4xx_LL_CRC_H */