![]() |
|
|||
File indexing completed on 2025-05-11 08:23:37
0001 /** 0002 ****************************************************************************** 0003 * @file stm32h7xx_ll_crc.h 0004 * @author MCD Application Team 0005 * @brief Header file of CRC LL module. 0006 ****************************************************************************** 0007 * @attention 0008 * 0009 * Copyright (c) 2017 STMicroelectronics. 0010 * All rights reserved. 0011 * 0012 * This software is licensed under terms that can be found in the LICENSE file 0013 * in the root directory of this software component. 0014 * If no LICENSE file comes with this software, it is provided AS-IS. 0015 * 0016 ****************************************************************************** 0017 */ 0018 0019 /* Define to prevent recursive inclusion -------------------------------------*/ 0020 #ifndef STM32H7xx_LL_CRC_H 0021 #define STM32H7xx_LL_CRC_H 0022 0023 #ifdef __cplusplus 0024 extern "C" { 0025 #endif 0026 0027 /* Includes ------------------------------------------------------------------*/ 0028 #include "stm32h7xx.h" 0029 0030 /** @addtogroup STM32H7xx_LL_Driver 0031 * @{ 0032 */ 0033 0034 #if defined(CRC) 0035 0036 /** @defgroup CRC_LL CRC 0037 * @ingroup RTEMSBSPsARMSTM32H7 0038 * @{ 0039 */ 0040 0041 /* Private types -------------------------------------------------------------*/ 0042 /* Private variables ---------------------------------------------------------*/ 0043 /* Private constants ---------------------------------------------------------*/ 0044 /* Private macros ------------------------------------------------------------*/ 0045 0046 /* Exported types ------------------------------------------------------------*/ 0047 /* Exported constants --------------------------------------------------------*/ 0048 /** @defgroup CRC_LL_Exported_Constants CRC Exported Constants 0049 * @ingroup RTEMSBSPsARMSTM32H7 0050 * @{ 0051 */ 0052 0053 /** @defgroup CRC_LL_EC_POLYLENGTH Polynomial length 0054 * @ingroup RTEMSBSPsARMSTM32H7 0055 * @{ 0056 */ 0057 #define LL_CRC_POLYLENGTH_32B 0x00000000U /*!< 32 bits Polynomial size */ 0058 #define LL_CRC_POLYLENGTH_16B CRC_CR_POLYSIZE_0 /*!< 16 bits Polynomial size */ 0059 #define LL_CRC_POLYLENGTH_8B CRC_CR_POLYSIZE_1 /*!< 8 bits Polynomial size */ 0060 #define LL_CRC_POLYLENGTH_7B (CRC_CR_POLYSIZE_1 | CRC_CR_POLYSIZE_0) /*!< 7 bits Polynomial size */ 0061 /** 0062 * @} 0063 */ 0064 0065 /** @defgroup CRC_LL_EC_INDATA_REVERSE Input Data Reverse 0066 * @ingroup RTEMSBSPsARMSTM32H7 0067 * @{ 0068 */ 0069 #define LL_CRC_INDATA_REVERSE_NONE 0x00000000U /*!< Input Data bit order not affected */ 0070 #define LL_CRC_INDATA_REVERSE_BYTE CRC_CR_REV_IN_0 /*!< Input Data bit reversal done by byte */ 0071 #define LL_CRC_INDATA_REVERSE_HALFWORD CRC_CR_REV_IN_1 /*!< Input Data bit reversal done by half-word */ 0072 #define LL_CRC_INDATA_REVERSE_WORD (CRC_CR_REV_IN_1 | CRC_CR_REV_IN_0) /*!< Input Data bit reversal done by word */ 0073 /** 0074 * @} 0075 */ 0076 0077 /** @defgroup CRC_LL_EC_OUTDATA_REVERSE Output Data Reverse 0078 * @ingroup RTEMSBSPsARMSTM32H7 0079 * @{ 0080 */ 0081 #define LL_CRC_OUTDATA_REVERSE_NONE 0x00000000U /*!< Output Data bit order not affected */ 0082 #define LL_CRC_OUTDATA_REVERSE_BIT CRC_CR_REV_OUT /*!< Output Data bit reversal done by bit */ 0083 /** 0084 * @} 0085 */ 0086 0087 /** @defgroup CRC_LL_EC_Default_Polynomial_Value Default CRC generating polynomial value 0088 * @ingroup RTEMSBSPsARMSTM32H7 0089 * @brief Normal representation of this polynomial value is 0090 * 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 . 0091 * @{ 0092 */ 0093 #define LL_CRC_DEFAULT_CRC32_POLY 0x04C11DB7U /*!< Default CRC generating polynomial value */ 0094 /** 0095 * @} 0096 */ 0097 0098 /** @defgroup CRC_LL_EC_Default_InitValue Default CRC computation initialization value 0099 * @ingroup RTEMSBSPsARMSTM32H7 0100 * @{ 0101 */ 0102 #define LL_CRC_DEFAULT_CRC_INITVALUE 0xFFFFFFFFU /*!< Default CRC computation initialization value */ 0103 /** 0104 * @} 0105 */ 0106 0107 /** 0108 * @} 0109 */ 0110 0111 /* Exported macro ------------------------------------------------------------*/ 0112 /** @defgroup CRC_LL_Exported_Macros CRC Exported Macros 0113 * @ingroup RTEMSBSPsARMSTM32H7 0114 * @{ 0115 */ 0116 0117 /** @defgroup CRC_LL_EM_WRITE_READ Common Write and read registers Macros 0118 * @ingroup RTEMSBSPsARMSTM32H7 0119 * @{ 0120 */ 0121 0122 /** 0123 * @brief Write a value in CRC register 0124 * @param __INSTANCE__ CRC Instance 0125 * @param __REG__ Register to be written 0126 * @param __VALUE__ Value to be written in the register 0127 * @retval None 0128 */ 0129 #define LL_CRC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, __VALUE__) 0130 0131 /** 0132 * @brief Read a value in CRC register 0133 * @param __INSTANCE__ CRC Instance 0134 * @param __REG__ Register to be read 0135 * @retval Register value 0136 */ 0137 #define LL_CRC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) 0138 /** 0139 * @} 0140 */ 0141 0142 /** 0143 * @} 0144 */ 0145 0146 0147 /* Exported functions --------------------------------------------------------*/ 0148 /** @defgroup CRC_LL_Exported_Functions CRC Exported Functions 0149 * @ingroup RTEMSBSPsARMSTM32H7 0150 * @{ 0151 */ 0152 0153 /** @defgroup CRC_LL_EF_Configuration CRC Configuration functions 0154 * @ingroup RTEMSBSPsARMSTM32H7 0155 * @{ 0156 */ 0157 0158 /** 0159 * @brief Reset the CRC calculation unit. 0160 * @note If Programmable Initial CRC value feature 0161 * is available, also set the Data Register to the value stored in the 0162 * CRC_INIT register, otherwise, reset Data Register to its default value. 0163 * @rmtoll CR RESET LL_CRC_ResetCRCCalculationUnit 0164 * @param CRCx CRC Instance 0165 * @retval None 0166 */ 0167 __STATIC_INLINE void LL_CRC_ResetCRCCalculationUnit(CRC_TypeDef *CRCx) 0168 { 0169 SET_BIT(CRCx->CR, CRC_CR_RESET); 0170 } 0171 0172 /** 0173 * @brief Configure size of the polynomial. 0174 * @rmtoll CR POLYSIZE LL_CRC_SetPolynomialSize 0175 * @param CRCx CRC Instance 0176 * @param PolySize This parameter can be one of the following values: 0177 * @arg @ref LL_CRC_POLYLENGTH_32B 0178 * @arg @ref LL_CRC_POLYLENGTH_16B 0179 * @arg @ref LL_CRC_POLYLENGTH_8B 0180 * @arg @ref LL_CRC_POLYLENGTH_7B 0181 * @retval None 0182 */ 0183 __STATIC_INLINE void LL_CRC_SetPolynomialSize(CRC_TypeDef *CRCx, uint32_t PolySize) 0184 { 0185 MODIFY_REG(CRCx->CR, CRC_CR_POLYSIZE, PolySize); 0186 } 0187 0188 /** 0189 * @brief Return size of the polynomial. 0190 * @rmtoll CR POLYSIZE LL_CRC_GetPolynomialSize 0191 * @param CRCx CRC Instance 0192 * @retval Returned value can be one of the following values: 0193 * @arg @ref LL_CRC_POLYLENGTH_32B 0194 * @arg @ref LL_CRC_POLYLENGTH_16B 0195 * @arg @ref LL_CRC_POLYLENGTH_8B 0196 * @arg @ref LL_CRC_POLYLENGTH_7B 0197 */ 0198 __STATIC_INLINE uint32_t LL_CRC_GetPolynomialSize(const CRC_TypeDef *CRCx) 0199 { 0200 return (uint32_t)(READ_BIT(CRCx->CR, CRC_CR_POLYSIZE)); 0201 } 0202 0203 /** 0204 * @brief Configure the reversal of the bit order of the input data 0205 * @rmtoll CR REV_IN LL_CRC_SetInputDataReverseMode 0206 * @param CRCx CRC Instance 0207 * @param ReverseMode This parameter can be one of the following values: 0208 * @arg @ref LL_CRC_INDATA_REVERSE_NONE 0209 * @arg @ref LL_CRC_INDATA_REVERSE_BYTE 0210 * @arg @ref LL_CRC_INDATA_REVERSE_HALFWORD 0211 * @arg @ref LL_CRC_INDATA_REVERSE_WORD 0212 * @retval None 0213 */ 0214 __STATIC_INLINE void LL_CRC_SetInputDataReverseMode(CRC_TypeDef *CRCx, uint32_t ReverseMode) 0215 { 0216 MODIFY_REG(CRCx->CR, CRC_CR_REV_IN, ReverseMode); 0217 } 0218 0219 /** 0220 * @brief Return type of reversal for input data bit order 0221 * @rmtoll CR REV_IN LL_CRC_GetInputDataReverseMode 0222 * @param CRCx CRC Instance 0223 * @retval Returned value can be one of the following values: 0224 * @arg @ref LL_CRC_INDATA_REVERSE_NONE 0225 * @arg @ref LL_CRC_INDATA_REVERSE_BYTE 0226 * @arg @ref LL_CRC_INDATA_REVERSE_HALFWORD 0227 * @arg @ref LL_CRC_INDATA_REVERSE_WORD 0228 */ 0229 __STATIC_INLINE uint32_t LL_CRC_GetInputDataReverseMode(const CRC_TypeDef *CRCx) 0230 { 0231 return (uint32_t)(READ_BIT(CRCx->CR, CRC_CR_REV_IN)); 0232 } 0233 0234 /** 0235 * @brief Configure the reversal of the bit order of the Output data 0236 * @rmtoll CR REV_OUT LL_CRC_SetOutputDataReverseMode 0237 * @param CRCx CRC Instance 0238 * @param ReverseMode This parameter can be one of the following values: 0239 * @arg @ref LL_CRC_OUTDATA_REVERSE_NONE 0240 * @arg @ref LL_CRC_OUTDATA_REVERSE_BIT 0241 * @retval None 0242 */ 0243 __STATIC_INLINE void LL_CRC_SetOutputDataReverseMode(CRC_TypeDef *CRCx, uint32_t ReverseMode) 0244 { 0245 MODIFY_REG(CRCx->CR, CRC_CR_REV_OUT, ReverseMode); 0246 } 0247 0248 /** 0249 * @brief Return type of reversal of the bit order of the Output data 0250 * @rmtoll CR REV_OUT LL_CRC_GetOutputDataReverseMode 0251 * @param CRCx CRC Instance 0252 * @retval Returned value can be one of the following values: 0253 * @arg @ref LL_CRC_OUTDATA_REVERSE_NONE 0254 * @arg @ref LL_CRC_OUTDATA_REVERSE_BIT 0255 */ 0256 __STATIC_INLINE uint32_t LL_CRC_GetOutputDataReverseMode(const CRC_TypeDef *CRCx) 0257 { 0258 return (uint32_t)(READ_BIT(CRCx->CR, CRC_CR_REV_OUT)); 0259 } 0260 0261 /** 0262 * @brief Initialize the Programmable initial CRC value. 0263 * @note If the CRC size is less than 32 bits, the least significant bits 0264 * are used to write the correct value 0265 * @note LL_CRC_DEFAULT_CRC_INITVALUE could be used as value for InitCrc parameter. 0266 * @rmtoll INIT INIT LL_CRC_SetInitialData 0267 * @param CRCx CRC Instance 0268 * @param InitCrc Value to be programmed in Programmable initial CRC value register 0269 * @retval None 0270 */ 0271 __STATIC_INLINE void LL_CRC_SetInitialData(CRC_TypeDef *CRCx, uint32_t InitCrc) 0272 { 0273 WRITE_REG(CRCx->INIT, InitCrc); 0274 } 0275 0276 /** 0277 * @brief Return current Initial CRC value. 0278 * @note If the CRC size is less than 32 bits, the least significant bits 0279 * are used to read the correct value 0280 * @rmtoll INIT INIT LL_CRC_GetInitialData 0281 * @param CRCx CRC Instance 0282 * @retval Value programmed in Programmable initial CRC value register 0283 */ 0284 __STATIC_INLINE uint32_t LL_CRC_GetInitialData(const CRC_TypeDef *CRCx) 0285 { 0286 return (uint32_t)(READ_REG(CRCx->INIT)); 0287 } 0288 0289 /** 0290 * @brief Initialize the Programmable polynomial value 0291 * (coefficients of the polynomial to be used for CRC calculation). 0292 * @note LL_CRC_DEFAULT_CRC32_POLY could be used as value for PolynomCoef parameter. 0293 * @note Please check Reference Manual and existing Errata Sheets, 0294 * regarding possible limitations for Polynomial values usage. 0295 * For example, for a polynomial of degree 7, X^7 + X^6 + X^5 + X^2 + 1 is written 0x65 0296 * @rmtoll POL POL LL_CRC_SetPolynomialCoef 0297 * @param CRCx CRC Instance 0298 * @param PolynomCoef Value to be programmed in Programmable Polynomial value register 0299 * @retval None 0300 */ 0301 __STATIC_INLINE void LL_CRC_SetPolynomialCoef(CRC_TypeDef *CRCx, uint32_t PolynomCoef) 0302 { 0303 WRITE_REG(CRCx->POL, PolynomCoef); 0304 } 0305 0306 /** 0307 * @brief Return current Programmable polynomial value 0308 * @note Please check Reference Manual and existing Errata Sheets, 0309 * regarding possible limitations for Polynomial values usage. 0310 * For example, for a polynomial of degree 7, X^7 + X^6 + X^5 + X^2 + 1 is written 0x65 0311 * @rmtoll POL POL LL_CRC_GetPolynomialCoef 0312 * @param CRCx CRC Instance 0313 * @retval Value programmed in Programmable Polynomial value register 0314 */ 0315 __STATIC_INLINE uint32_t LL_CRC_GetPolynomialCoef(const CRC_TypeDef *CRCx) 0316 { 0317 return (uint32_t)(READ_REG(CRCx->POL)); 0318 } 0319 0320 /** 0321 * @} 0322 */ 0323 0324 /** @defgroup CRC_LL_EF_Data_Management Data_Management 0325 * @ingroup RTEMSBSPsARMSTM32H7 0326 * @{ 0327 */ 0328 0329 /** 0330 * @brief Write given 32-bit data to the CRC calculator 0331 * @rmtoll DR DR LL_CRC_FeedData32 0332 * @param CRCx CRC Instance 0333 * @param InData value to be provided to CRC calculator between between Min_Data=0 and Max_Data=0xFFFFFFFF 0334 * @retval None 0335 */ 0336 __STATIC_INLINE void LL_CRC_FeedData32(CRC_TypeDef *CRCx, uint32_t InData) 0337 { 0338 WRITE_REG(CRCx->DR, InData); 0339 } 0340 0341 /** 0342 * @brief Write given 16-bit data to the CRC calculator 0343 * @rmtoll DR DR LL_CRC_FeedData16 0344 * @param CRCx CRC Instance 0345 * @param InData 16 bit value to be provided to CRC calculator between between Min_Data=0 and Max_Data=0xFFFF 0346 * @retval None 0347 */ 0348 __STATIC_INLINE void LL_CRC_FeedData16(CRC_TypeDef *CRCx, uint16_t InData) 0349 { 0350 __IO uint16_t *pReg; 0351 0352 pReg = (__IO uint16_t *)(__IO void *)(&CRCx->DR); /* Derogation MisraC2012 R.11.5 */ 0353 *pReg = InData; 0354 } 0355 0356 /** 0357 * @brief Write given 8-bit data to the CRC calculator 0358 * @rmtoll DR DR LL_CRC_FeedData8 0359 * @param CRCx CRC Instance 0360 * @param InData 8 bit value to be provided to CRC calculator between between Min_Data=0 and Max_Data=0xFF 0361 * @retval None 0362 */ 0363 __STATIC_INLINE void LL_CRC_FeedData8(CRC_TypeDef *CRCx, uint8_t InData) 0364 { 0365 *(uint8_t __IO *)(&CRCx->DR) = (uint8_t) InData; 0366 } 0367 0368 /** 0369 * @brief Return current CRC calculation result. 32 bits value is returned. 0370 * @rmtoll DR DR LL_CRC_ReadData32 0371 * @param CRCx CRC Instance 0372 * @retval Current CRC calculation result as stored in CRC_DR register (32 bits). 0373 */ 0374 __STATIC_INLINE uint32_t LL_CRC_ReadData32(const CRC_TypeDef *CRCx) 0375 { 0376 return (uint32_t)(READ_REG(CRCx->DR)); 0377 } 0378 0379 /** 0380 * @brief Return current CRC calculation result. 16 bits value is returned. 0381 * @note This function is expected to be used in a 16 bits CRC polynomial size context. 0382 * @rmtoll DR DR LL_CRC_ReadData16 0383 * @param CRCx CRC Instance 0384 * @retval Current CRC calculation result as stored in CRC_DR register (16 bits). 0385 */ 0386 __STATIC_INLINE uint16_t LL_CRC_ReadData16(const CRC_TypeDef *CRCx) 0387 { 0388 return (uint16_t)READ_REG(CRCx->DR); 0389 } 0390 0391 /** 0392 * @brief Return current CRC calculation result. 8 bits value is returned. 0393 * @note This function is expected to be used in a 8 bits CRC polynomial size context. 0394 * @rmtoll DR DR LL_CRC_ReadData8 0395 * @param CRCx CRC Instance 0396 * @retval Current CRC calculation result as stored in CRC_DR register (8 bits). 0397 */ 0398 __STATIC_INLINE uint8_t LL_CRC_ReadData8(const CRC_TypeDef *CRCx) 0399 { 0400 return (uint8_t)READ_REG(CRCx->DR); 0401 } 0402 0403 /** 0404 * @brief Return current CRC calculation result. 7 bits value is returned. 0405 * @note This function is expected to be used in a 7 bits CRC polynomial size context. 0406 * @rmtoll DR DR LL_CRC_ReadData7 0407 * @param CRCx CRC Instance 0408 * @retval Current CRC calculation result as stored in CRC_DR register (7 bits). 0409 */ 0410 __STATIC_INLINE uint8_t LL_CRC_ReadData7(const CRC_TypeDef *CRCx) 0411 { 0412 return (uint8_t)(READ_REG(CRCx->DR) & 0x7FU); 0413 } 0414 0415 /** 0416 * @brief Return data stored in the Independent Data(IDR) register. 0417 * @note This register can be used as a temporary storage location for one 32-bit long data. 0418 * @rmtoll IDR IDR LL_CRC_Read_IDR 0419 * @param CRCx CRC Instance 0420 * @retval Value stored in CRC_IDR register (General-purpose 32-bit data register). 0421 */ 0422 __STATIC_INLINE uint32_t LL_CRC_Read_IDR(const CRC_TypeDef *CRCx) 0423 { 0424 return (uint32_t)(READ_REG(CRCx->IDR)); 0425 } 0426 0427 /** 0428 * @brief Store data in the Independent Data(IDR) register. 0429 * @note This register can be used as a temporary storage location for one 32-bit long data. 0430 * @rmtoll IDR IDR LL_CRC_Write_IDR 0431 * @param CRCx CRC Instance 0432 * @param InData value to be stored in CRC_IDR register (32-bit) between Min_Data=0 and Max_Data=0xFFFFFFFF 0433 * @retval None 0434 */ 0435 __STATIC_INLINE void LL_CRC_Write_IDR(CRC_TypeDef *CRCx, uint32_t InData) 0436 { 0437 *((uint32_t __IO *)(&CRCx->IDR)) = (uint32_t) InData; 0438 } 0439 /** 0440 * @} 0441 */ 0442 0443 #if defined(USE_FULL_LL_DRIVER) || defined(__rtems__) 0444 /** @defgroup CRC_LL_EF_Init Initialization and de-initialization functions 0445 * @ingroup RTEMSBSPsARMSTM32H7 0446 * @{ 0447 */ 0448 0449 ErrorStatus LL_CRC_DeInit(const CRC_TypeDef *CRCx); 0450 0451 /** 0452 * @} 0453 */ 0454 #endif /* USE_FULL_LL_DRIVER */ 0455 0456 /** 0457 * @} 0458 */ 0459 0460 /** 0461 * @} 0462 */ 0463 0464 #endif /* defined(CRC) */ 0465 0466 /** 0467 * @} 0468 */ 0469 0470 #ifdef __cplusplus 0471 } 0472 #endif 0473 0474 #endif /* STM32H7xx_LL_CRC_H */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |