1 /**
2   ******************************************************************************
3   * @file    stm32l1xx_ll_crc.h
4   * @author  MCD Application Team
5   * @brief   Header file of CRC LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32L1xx_LL_CRC_H
22 #define STM32L1xx_LL_CRC_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32l1xx.h"
30 
31 /** @addtogroup STM32L1xx_LL_Driver
32   * @{
33   */
34 
35 #if defined(CRC)
36 
37 /** @defgroup CRC_LL CRC
38   * @{
39   */
40 
41 /* Private types -------------------------------------------------------------*/
42 /* Private variables ---------------------------------------------------------*/
43 /* Private constants ---------------------------------------------------------*/
44 /* Private macros ------------------------------------------------------------*/
45 
46 /* Exported types ------------------------------------------------------------*/
47 /* Exported constants --------------------------------------------------------*/
48 /** @defgroup CRC_LL_Exported_Constants CRC Exported Constants
49   * @{
50   */
51 
52 /**
53   * @}
54   */
55 
56 /* Exported macro ------------------------------------------------------------*/
57 /** @defgroup CRC_LL_Exported_Macros CRC Exported Macros
58   * @{
59   */
60 
61 /** @defgroup CRC_LL_EM_WRITE_READ Common Write and read registers Macros
62   * @{
63   */
64 
65 /**
66   * @brief  Write a value in CRC register
67   * @param  __INSTANCE__ CRC Instance
68   * @param  __REG__ Register to be written
69   * @param  __VALUE__ Value to be written in the register
70   * @retval None
71   */
72 #define LL_CRC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, __VALUE__)
73 
74 /**
75   * @brief  Read a value in CRC register
76   * @param  __INSTANCE__ CRC Instance
77   * @param  __REG__ Register to be read
78   * @retval Register value
79   */
80 #define LL_CRC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
81 /**
82   * @}
83   */
84 
85 /**
86   * @}
87   */
88 
89 
90 /* Exported functions --------------------------------------------------------*/
91 /** @defgroup CRC_LL_Exported_Functions CRC Exported Functions
92   * @{
93   */
94 
95 /** @defgroup CRC_LL_EF_Configuration CRC Configuration functions
96   * @{
97   */
98 
99 /**
100   * @brief  Reset the CRC calculation unit.
101   * @note   If Programmable Initial CRC value feature
102   *         is available, also set the Data Register to the value stored in the
103   *         CRC_INIT register, otherwise, reset Data Register to its default value.
104   * @rmtoll CR           RESET         LL_CRC_ResetCRCCalculationUnit
105   * @param  CRCx CRC Instance
106   * @retval None
107   */
LL_CRC_ResetCRCCalculationUnit(CRC_TypeDef * CRCx)108 __STATIC_INLINE void LL_CRC_ResetCRCCalculationUnit(CRC_TypeDef *CRCx)
109 {
110   SET_BIT(CRCx->CR, CRC_CR_RESET);
111 }
112 
113 /**
114   * @}
115   */
116 
117 /** @defgroup CRC_LL_EF_Data_Management Data_Management
118   * @{
119   */
120 
121 /**
122   * @brief  Write given 32-bit data to the CRC calculator
123   * @rmtoll DR           DR            LL_CRC_FeedData32
124   * @param  CRCx CRC Instance
125   * @param  InData value to be provided to CRC calculator between between Min_Data=0 and Max_Data=0xFFFFFFFF
126   * @retval None
127   */
LL_CRC_FeedData32(CRC_TypeDef * CRCx,uint32_t InData)128 __STATIC_INLINE void LL_CRC_FeedData32(CRC_TypeDef *CRCx, uint32_t InData)
129 {
130   WRITE_REG(CRCx->DR, InData);
131 }
132 
133 /**
134   * @brief  Return current CRC calculation result. 32 bits value is returned.
135   * @rmtoll DR           DR            LL_CRC_ReadData32
136   * @param  CRCx CRC Instance
137   * @retval Current CRC calculation result as stored in CRC_DR register (32 bits).
138   */
LL_CRC_ReadData32(CRC_TypeDef * CRCx)139 __STATIC_INLINE uint32_t LL_CRC_ReadData32(CRC_TypeDef *CRCx)
140 {
141   return (uint32_t)(READ_REG(CRCx->DR));
142 }
143 
144 /**
145   * @brief  Return data stored in the Independent Data(IDR) register.
146   * @note   This register can be used as a temporary storage location for one byte.
147   * @rmtoll IDR          IDR           LL_CRC_Read_IDR
148   * @param  CRCx CRC Instance
149   * @retval Value stored in CRC_IDR register (General-purpose 8-bit data register).
150   */
LL_CRC_Read_IDR(CRC_TypeDef * CRCx)151 __STATIC_INLINE uint32_t LL_CRC_Read_IDR(CRC_TypeDef *CRCx)
152 {
153   return (uint32_t)(READ_REG(CRCx->IDR));
154 }
155 
156 /**
157   * @brief  Store data in the Independent Data(IDR) register.
158   * @note   This register can be used as a temporary storage location for one byte.
159   * @rmtoll IDR          IDR           LL_CRC_Write_IDR
160   * @param  CRCx CRC Instance
161   * @param  InData value to be stored in CRC_IDR register (8-bit) between Min_Data=0 and Max_Data=0xFF
162   * @retval None
163   */
LL_CRC_Write_IDR(CRC_TypeDef * CRCx,uint32_t InData)164 __STATIC_INLINE void LL_CRC_Write_IDR(CRC_TypeDef *CRCx, uint32_t InData)
165 {
166   *((uint8_t __IO *)(&CRCx->IDR)) = (uint8_t) InData;
167 }
168 /**
169   * @}
170   */
171 
172 #if defined(USE_FULL_LL_DRIVER)
173 /** @defgroup CRC_LL_EF_Init Initialization and de-initialization functions
174   * @{
175   */
176 
177 ErrorStatus LL_CRC_DeInit(CRC_TypeDef *CRCx);
178 
179 /**
180   * @}
181   */
182 #endif /* USE_FULL_LL_DRIVER */
183 
184 /**
185   * @}
186   */
187 
188 /**
189   * @}
190   */
191 
192 #endif /* defined(CRC) */
193 
194 /**
195   * @}
196   */
197 
198 #ifdef __cplusplus
199 }
200 #endif
201 
202 #endif /* STM32L1xx_LL_CRC_H */
203 
204 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
205