source: trunk/firmware/Drivers/STM32G0xx_HAL_Driver/Inc/stm32g0xx_hal_i2c.h

Last change on this file was 6, checked in by f.jahn, 3 months ago
File size: 36.9 KB
Line 
1/**
2  ******************************************************************************
3  * @file    stm32g0xx_hal_i2c.h
4  * @author  MCD Application Team
5  * @brief   Header file of I2C HAL module.
6  ******************************************************************************
7  * @attention
8  *
9  * <h2><center>&copy; Copyright (c) 2018 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 STM32G0xx_HAL_I2C_H
22#define STM32G0xx_HAL_I2C_H
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28/* Includes ------------------------------------------------------------------*/
29#include "stm32g0xx_hal_def.h"
30
31/** @addtogroup STM32G0xx_HAL_Driver
32  * @{
33  */
34
35/** @addtogroup I2C
36  * @{
37  */
38
39/* Exported types ------------------------------------------------------------*/
40/** @defgroup I2C_Exported_Types I2C Exported Types
41  * @{
42  */
43
44/** @defgroup I2C_Configuration_Structure_definition I2C Configuration Structure definition
45  * @brief  I2C Configuration Structure definition
46  * @{
47  */
48typedef struct
49{
50  uint32_t Timing;              /*!< Specifies the I2C_TIMINGR_register value.
51                                  This parameter calculated by referring to I2C initialization
52                                         section in Reference manual */
53
54  uint32_t OwnAddress1;         /*!< Specifies the first device own address.
55                                  This parameter can be a 7-bit or 10-bit address. */
56
57  uint32_t AddressingMode;      /*!< Specifies if 7-bit or 10-bit addressing mode is selected.
58                                  This parameter can be a value of @ref I2C_ADDRESSING_MODE */
59
60  uint32_t DualAddressMode;     /*!< Specifies if dual addressing mode is selected.
61                                  This parameter can be a value of @ref I2C_DUAL_ADDRESSING_MODE */
62
63  uint32_t OwnAddress2;         /*!< Specifies the second device own address if dual addressing mode is selected
64                                  This parameter can be a 7-bit address. */
65
66  uint32_t OwnAddress2Masks;    /*!< Specifies the acknowledge mask address second device own address if dual addressing mode is selected
67                                  This parameter can be a value of @ref I2C_OWN_ADDRESS2_MASKS */
68
69  uint32_t GeneralCallMode;     /*!< Specifies if general call mode is selected.
70                                  This parameter can be a value of @ref I2C_GENERAL_CALL_ADDRESSING_MODE */
71
72  uint32_t NoStretchMode;       /*!< Specifies if nostretch mode is selected.
73                                  This parameter can be a value of @ref I2C_NOSTRETCH_MODE */
74
75} I2C_InitTypeDef;
76
77/**
78  * @}
79  */
80
81/** @defgroup HAL_state_structure_definition HAL state structure definition
82  * @brief  HAL State structure definition
83  * @note  HAL I2C State value coding follow below described bitmap :\n
84  *          b7-b6  Error information\n
85  *             00 : No Error\n
86  *             01 : Abort (Abort user request on going)\n
87  *             10 : Timeout\n
88  *             11 : Error\n
89  *          b5     Peripheral initialization status\n
90  *             0  : Reset (peripheral not initialized)\n
91  *             1  : Init done (peripheral initialized and ready to use. HAL I2C Init function called)\n
92  *          b4     (not used)\n
93  *             x  : Should be set to 0\n
94  *          b3\n
95  *             0  : Ready or Busy (No Listen mode ongoing)\n
96  *             1  : Listen (peripheral in Address Listen Mode)\n
97  *          b2     Intrinsic process state\n
98  *             0  : Ready\n
99  *             1  : Busy (peripheral busy with some configuration or internal operations)\n
100  *          b1     Rx state\n
101  *             0  : Ready (no Rx operation ongoing)\n
102  *             1  : Busy (Rx operation ongoing)\n
103  *          b0     Tx state\n
104  *             0  : Ready (no Tx operation ongoing)\n
105  *             1  : Busy (Tx operation ongoing)
106  * @{
107  */
108typedef enum
109{
110  HAL_I2C_STATE_RESET             = 0x00U,   /*!< Peripheral is not yet Initialized         */
111  HAL_I2C_STATE_READY             = 0x20U,   /*!< Peripheral Initialized and ready for use  */
112  HAL_I2C_STATE_BUSY              = 0x24U,   /*!< An internal process is ongoing            */
113  HAL_I2C_STATE_BUSY_TX           = 0x21U,   /*!< Data Transmission process is ongoing      */
114  HAL_I2C_STATE_BUSY_RX           = 0x22U,   /*!< Data Reception process is ongoing         */
115  HAL_I2C_STATE_LISTEN            = 0x28U,   /*!< Address Listen Mode is ongoing            */
116  HAL_I2C_STATE_BUSY_TX_LISTEN    = 0x29U,   /*!< Address Listen Mode and Data Transmission
117                                                 process is ongoing                         */
118  HAL_I2C_STATE_BUSY_RX_LISTEN    = 0x2AU,   /*!< Address Listen Mode and Data Reception
119                                                 process is ongoing                         */
120  HAL_I2C_STATE_ABORT             = 0x60U,   /*!< Abort user request ongoing                */
121  HAL_I2C_STATE_TIMEOUT           = 0xA0U,   /*!< Timeout state                             */
122  HAL_I2C_STATE_ERROR             = 0xE0U    /*!< Error                                     */
123
124} HAL_I2C_StateTypeDef;
125
126/**
127  * @}
128  */
129
130/** @defgroup HAL_mode_structure_definition HAL mode structure definition
131  * @brief  HAL Mode structure definition
132  * @note  HAL I2C Mode value coding follow below described bitmap :\n
133  *          b7     (not used)\n
134  *             x  : Should be set to 0\n
135  *          b6\n
136  *             0  : None\n
137  *             1  : Memory (HAL I2C communication is in Memory Mode)\n
138  *          b5\n
139  *             0  : None\n
140  *             1  : Slave (HAL I2C communication is in Slave Mode)\n
141  *          b4\n
142  *             0  : None\n
143  *             1  : Master (HAL I2C communication is in Master Mode)\n
144  *          b3-b2-b1-b0  (not used)\n
145  *             xxxx : Should be set to 0000
146  * @{
147  */
148typedef enum
149{
150  HAL_I2C_MODE_NONE               = 0x00U,   /*!< No I2C communication on going             */
151  HAL_I2C_MODE_MASTER             = 0x10U,   /*!< I2C communication is in Master Mode       */
152  HAL_I2C_MODE_SLAVE              = 0x20U,   /*!< I2C communication is in Slave Mode        */
153  HAL_I2C_MODE_MEM                = 0x40U    /*!< I2C communication is in Memory Mode       */
154
155} HAL_I2C_ModeTypeDef;
156
157/**
158  * @}
159  */
160
161/** @defgroup I2C_Error_Code_definition I2C Error Code definition
162  * @brief  I2C Error Code definition
163  * @{
164  */
165#define HAL_I2C_ERROR_NONE      (0x00000000U)    /*!< No error              */
166#define HAL_I2C_ERROR_BERR      (0x00000001U)    /*!< BERR error            */
167#define HAL_I2C_ERROR_ARLO      (0x00000002U)    /*!< ARLO error            */
168#define HAL_I2C_ERROR_AF        (0x00000004U)    /*!< ACKF error            */
169#define HAL_I2C_ERROR_OVR       (0x00000008U)    /*!< OVR error             */
170#define HAL_I2C_ERROR_DMA       (0x00000010U)    /*!< DMA transfer error    */
171#define HAL_I2C_ERROR_TIMEOUT   (0x00000020U)    /*!< Timeout error         */
172#define HAL_I2C_ERROR_SIZE      (0x00000040U)    /*!< Size Management error */
173#define HAL_I2C_ERROR_DMA_PARAM (0x00000080U)    /*!< DMA Parameter Error   */
174#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
175#define HAL_I2C_ERROR_INVALID_CALLBACK  (0x00000100U)    /*!< Invalid Callback error */
176#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
177#define HAL_I2C_ERROR_INVALID_PARAM     (0x00000200U)    /*!< Invalid Parameters error  */
178/**
179  * @}
180  */
181
182/** @defgroup I2C_handle_Structure_definition I2C handle Structure definition
183  * @brief  I2C handle Structure definition
184  * @{
185  */
186typedef struct __I2C_HandleTypeDef
187{
188  I2C_TypeDef                *Instance;      /*!< I2C registers base address                */
189
190  I2C_InitTypeDef            Init;           /*!< I2C communication parameters              */
191
192  uint8_t                    *pBuffPtr;      /*!< Pointer to I2C transfer buffer            */
193
194  uint16_t                   XferSize;       /*!< I2C transfer size                         */
195
196  __IO uint16_t              XferCount;      /*!< I2C transfer counter                      */
197
198  __IO uint32_t              XferOptions;    /*!< I2C sequantial transfer options, this parameter can
199                                                  be a value of @ref I2C_XFEROPTIONS */
200
201  __IO uint32_t              PreviousState;  /*!< I2C communication Previous state          */
202
203  HAL_StatusTypeDef(*XferISR)(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources);  /*!< I2C transfer IRQ handler function pointer */
204
205  DMA_HandleTypeDef          *hdmatx;        /*!< I2C Tx DMA handle parameters              */
206
207  DMA_HandleTypeDef          *hdmarx;        /*!< I2C Rx DMA handle parameters              */
208
209  HAL_LockTypeDef            Lock;           /*!< I2C locking object                        */
210
211  __IO HAL_I2C_StateTypeDef  State;          /*!< I2C communication state                   */
212
213  __IO HAL_I2C_ModeTypeDef   Mode;           /*!< I2C communication mode                    */
214
215  __IO uint32_t              ErrorCode;      /*!< I2C Error code                            */
216
217  __IO uint32_t              AddrEventCount; /*!< I2C Address Event counter                 */
218
219#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
220  void (* MasterTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);           /*!< I2C Master Tx Transfer completed callback */
221  void (* MasterRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);           /*!< I2C Master Rx Transfer completed callback */
222  void (* SlaveTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);            /*!< I2C Slave Tx Transfer completed callback  */
223  void (* SlaveRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);            /*!< I2C Slave Rx Transfer completed callback  */
224  void (* ListenCpltCallback)(struct __I2C_HandleTypeDef *hi2c);             /*!< I2C Listen Complete callback              */
225  void (* MemTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);              /*!< I2C Memory Tx Transfer completed callback */
226  void (* MemRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);              /*!< I2C Memory Rx Transfer completed callback */
227  void (* ErrorCallback)(struct __I2C_HandleTypeDef *hi2c);                  /*!< I2C Error callback                        */
228  void (* AbortCpltCallback)(struct __I2C_HandleTypeDef *hi2c);              /*!< I2C Abort callback                        */
229
230  void (* AddrCallback)(struct __I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode);  /*!< I2C Slave Address Match callback */
231
232  void (* MspInitCallback)(struct __I2C_HandleTypeDef *hi2c);                /*!< I2C Msp Init callback                     */
233  void (* MspDeInitCallback)(struct __I2C_HandleTypeDef *hi2c);              /*!< I2C Msp DeInit callback                   */
234
235#endif  /* USE_HAL_I2C_REGISTER_CALLBACKS */
236} I2C_HandleTypeDef;
237
238#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
239/**
240  * @brief  HAL I2C Callback ID enumeration definition
241  */
242typedef enum
243{
244  HAL_I2C_MASTER_TX_COMPLETE_CB_ID      = 0x00U,    /*!< I2C Master Tx Transfer completed callback ID  */
245  HAL_I2C_MASTER_RX_COMPLETE_CB_ID      = 0x01U,    /*!< I2C Master Rx Transfer completed callback ID  */
246  HAL_I2C_SLAVE_TX_COMPLETE_CB_ID       = 0x02U,    /*!< I2C Slave Tx Transfer completed callback ID   */
247  HAL_I2C_SLAVE_RX_COMPLETE_CB_ID       = 0x03U,    /*!< I2C Slave Rx Transfer completed callback ID   */
248  HAL_I2C_LISTEN_COMPLETE_CB_ID         = 0x04U,    /*!< I2C Listen Complete callback ID               */
249  HAL_I2C_MEM_TX_COMPLETE_CB_ID         = 0x05U,    /*!< I2C Memory Tx Transfer callback ID            */
250  HAL_I2C_MEM_RX_COMPLETE_CB_ID         = 0x06U,    /*!< I2C Memory Rx Transfer completed callback ID  */
251  HAL_I2C_ERROR_CB_ID                   = 0x07U,    /*!< I2C Error callback ID                         */
252  HAL_I2C_ABORT_CB_ID                   = 0x08U,    /*!< I2C Abort callback ID                         */
253
254  HAL_I2C_MSPINIT_CB_ID                 = 0x09U,    /*!< I2C Msp Init callback ID                      */
255  HAL_I2C_MSPDEINIT_CB_ID               = 0x0AU     /*!< I2C Msp DeInit callback ID                    */
256
257} HAL_I2C_CallbackIDTypeDef;
258
259/**
260  * @brief  HAL I2C Callback pointer definition
261  */
262typedef  void (*pI2C_CallbackTypeDef)(I2C_HandleTypeDef *hi2c); /*!< pointer to an I2C callback function */
263typedef  void (*pI2C_AddrCallbackTypeDef)(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); /*!< pointer to an I2C Address Match callback function */
264
265#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
266/**
267  * @}
268  */
269
270/**
271  * @}
272  */
273/* Exported constants --------------------------------------------------------*/
274
275/** @defgroup I2C_Exported_Constants I2C Exported Constants
276  * @{
277  */
278
279/** @defgroup I2C_XFEROPTIONS  I2C Sequential Transfer Options
280  * @{
281  */
282#define I2C_FIRST_FRAME                 ((uint32_t)I2C_SOFTEND_MODE)
283#define I2C_FIRST_AND_NEXT_FRAME        ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE))
284#define I2C_NEXT_FRAME                  ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE))
285#define I2C_FIRST_AND_LAST_FRAME        ((uint32_t)I2C_AUTOEND_MODE)
286#define I2C_LAST_FRAME                  ((uint32_t)I2C_AUTOEND_MODE)
287#define I2C_LAST_FRAME_NO_STOP          ((uint32_t)I2C_SOFTEND_MODE)
288
289/* List of XferOptions in usage of :
290 * 1- Restart condition in all use cases (direction change or not)
291 */
292#define  I2C_OTHER_FRAME                (0x000000AAU)
293#define  I2C_OTHER_AND_LAST_FRAME       (0x0000AA00U)
294/**
295  * @}
296  */
297
298/** @defgroup I2C_ADDRESSING_MODE I2C Addressing Mode
299  * @{
300  */
301#define I2C_ADDRESSINGMODE_7BIT         (0x00000001U)
302#define I2C_ADDRESSINGMODE_10BIT        (0x00000002U)
303/**
304  * @}
305  */
306
307/** @defgroup I2C_DUAL_ADDRESSING_MODE I2C Dual Addressing Mode
308  * @{
309  */
310#define I2C_DUALADDRESS_DISABLE         (0x00000000U)
311#define I2C_DUALADDRESS_ENABLE          I2C_OAR2_OA2EN
312/**
313  * @}
314  */
315
316/** @defgroup I2C_OWN_ADDRESS2_MASKS I2C Own Address2 Masks
317  * @{
318  */
319#define I2C_OA2_NOMASK                  ((uint8_t)0x00U)
320#define I2C_OA2_MASK01                  ((uint8_t)0x01U)
321#define I2C_OA2_MASK02                  ((uint8_t)0x02U)
322#define I2C_OA2_MASK03                  ((uint8_t)0x03U)
323#define I2C_OA2_MASK04                  ((uint8_t)0x04U)
324#define I2C_OA2_MASK05                  ((uint8_t)0x05U)
325#define I2C_OA2_MASK06                  ((uint8_t)0x06U)
326#define I2C_OA2_MASK07                  ((uint8_t)0x07U)
327/**
328  * @}
329  */
330
331/** @defgroup I2C_GENERAL_CALL_ADDRESSING_MODE I2C General Call Addressing Mode
332  * @{
333  */
334#define I2C_GENERALCALL_DISABLE         (0x00000000U)
335#define I2C_GENERALCALL_ENABLE          I2C_CR1_GCEN
336/**
337  * @}
338  */
339
340/** @defgroup I2C_NOSTRETCH_MODE I2C No-Stretch Mode
341  * @{
342  */
343#define I2C_NOSTRETCH_DISABLE           (0x00000000U)
344#define I2C_NOSTRETCH_ENABLE            I2C_CR1_NOSTRETCH
345/**
346  * @}
347  */
348
349/** @defgroup I2C_MEMORY_ADDRESS_SIZE I2C Memory Address Size
350  * @{
351  */
352#define I2C_MEMADD_SIZE_8BIT            (0x00000001U)
353#define I2C_MEMADD_SIZE_16BIT           (0x00000002U)
354/**
355  * @}
356  */
357
358/** @defgroup I2C_XFERDIRECTION I2C Transfer Direction Master Point of View
359  * @{
360  */
361#define I2C_DIRECTION_TRANSMIT          (0x00000000U)
362#define I2C_DIRECTION_RECEIVE           (0x00000001U)
363/**
364  * @}
365  */
366
367/** @defgroup I2C_RELOAD_END_MODE I2C Reload End Mode
368  * @{
369  */
370#define  I2C_RELOAD_MODE                I2C_CR2_RELOAD
371#define  I2C_AUTOEND_MODE               I2C_CR2_AUTOEND
372#define  I2C_SOFTEND_MODE               (0x00000000U)
373/**
374  * @}
375  */
376
377/** @defgroup I2C_START_STOP_MODE I2C Start or Stop Mode
378  * @{
379  */
380#define  I2C_NO_STARTSTOP               (0x00000000U)
381#define  I2C_GENERATE_STOP              (uint32_t)(0x80000000U | I2C_CR2_STOP)
382#define  I2C_GENERATE_START_READ        (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN)
383#define  I2C_GENERATE_START_WRITE       (uint32_t)(0x80000000U | I2C_CR2_START)
384/**
385  * @}
386  */
387
388/** @defgroup I2C_Interrupt_configuration_definition I2C Interrupt configuration definition
389  * @brief I2C Interrupt definition
390  *        Elements values convention: 0xXXXXXXXX
391  *           - XXXXXXXX  : Interrupt control mask
392  * @{
393  */
394#define I2C_IT_ERRI                     I2C_CR1_ERRIE
395#define I2C_IT_TCI                      I2C_CR1_TCIE
396#define I2C_IT_STOPI                    I2C_CR1_STOPIE
397#define I2C_IT_NACKI                    I2C_CR1_NACKIE
398#define I2C_IT_ADDRI                    I2C_CR1_ADDRIE
399#define I2C_IT_RXI                      I2C_CR1_RXIE
400#define I2C_IT_TXI                      I2C_CR1_TXIE
401/**
402  * @}
403  */
404
405/** @defgroup I2C_Flag_definition I2C Flag definition
406  * @{
407  */
408#define I2C_FLAG_TXE                    I2C_ISR_TXE
409#define I2C_FLAG_TXIS                   I2C_ISR_TXIS
410#define I2C_FLAG_RXNE                   I2C_ISR_RXNE
411#define I2C_FLAG_ADDR                   I2C_ISR_ADDR
412#define I2C_FLAG_AF                     I2C_ISR_NACKF
413#define I2C_FLAG_STOPF                  I2C_ISR_STOPF
414#define I2C_FLAG_TC                     I2C_ISR_TC
415#define I2C_FLAG_TCR                    I2C_ISR_TCR
416#define I2C_FLAG_BERR                   I2C_ISR_BERR
417#define I2C_FLAG_ARLO                   I2C_ISR_ARLO
418#define I2C_FLAG_OVR                    I2C_ISR_OVR
419#define I2C_FLAG_PECERR                 I2C_ISR_PECERR
420#define I2C_FLAG_TIMEOUT                I2C_ISR_TIMEOUT
421#define I2C_FLAG_ALERT                  I2C_ISR_ALERT
422#define I2C_FLAG_BUSY                   I2C_ISR_BUSY
423#define I2C_FLAG_DIR                    I2C_ISR_DIR
424/**
425  * @}
426  */
427
428/**
429  * @}
430  */
431
432/* Exported macros -----------------------------------------------------------*/
433
434/** @defgroup I2C_Exported_Macros I2C Exported Macros
435  * @{
436  */
437
438/** @brief Reset I2C handle state.
439  * @param  __HANDLE__ specifies the I2C Handle.
440  * @retval None
441  */
442#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
443#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__)                do{                                                   \
444                                                                    (__HANDLE__)->State = HAL_I2C_STATE_RESET;       \
445                                                                    (__HANDLE__)->MspInitCallback = NULL;            \
446                                                                    (__HANDLE__)->MspDeInitCallback = NULL;          \
447                                                                  } while(0)
448#else
449#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__)                ((__HANDLE__)->State = HAL_I2C_STATE_RESET)
450#endif
451
452/** @brief  Enable the specified I2C interrupt.
453  * @param  __HANDLE__ specifies the I2C Handle.
454  * @param  __INTERRUPT__ specifies the interrupt source to enable.
455  *        This parameter can be one of the following values:
456  *            @arg @ref I2C_IT_ERRI  Errors interrupt enable
457  *            @arg @ref I2C_IT_TCI   Transfer complete interrupt enable
458  *            @arg @ref I2C_IT_STOPI STOP detection interrupt enable
459  *            @arg @ref I2C_IT_NACKI NACK received interrupt enable
460  *            @arg @ref I2C_IT_ADDRI Address match interrupt enable
461  *            @arg @ref I2C_IT_RXI   RX interrupt enable
462  *            @arg @ref I2C_IT_TXI   TX interrupt enable
463  *
464  * @retval None
465  */
466#define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__)          ((__HANDLE__)->Instance->CR1 |= (__INTERRUPT__))
467
468/** @brief  Disable the specified I2C interrupt.
469  * @param  __HANDLE__ specifies the I2C Handle.
470  * @param  __INTERRUPT__ specifies the interrupt source to disable.
471  *        This parameter can be one of the following values:
472  *            @arg @ref I2C_IT_ERRI  Errors interrupt enable
473  *            @arg @ref I2C_IT_TCI   Transfer complete interrupt enable
474  *            @arg @ref I2C_IT_STOPI STOP detection interrupt enable
475  *            @arg @ref I2C_IT_NACKI NACK received interrupt enable
476  *            @arg @ref I2C_IT_ADDRI Address match interrupt enable
477  *            @arg @ref I2C_IT_RXI   RX interrupt enable
478  *            @arg @ref I2C_IT_TXI   TX interrupt enable
479  *
480  * @retval None
481  */
482#define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__)         ((__HANDLE__)->Instance->CR1 &= (~(__INTERRUPT__)))
483
484/** @brief  Check whether the specified I2C interrupt source is enabled or not.
485  * @param  __HANDLE__ specifies the I2C Handle.
486  * @param  __INTERRUPT__ specifies the I2C interrupt source to check.
487  *          This parameter can be one of the following values:
488  *            @arg @ref I2C_IT_ERRI  Errors interrupt enable
489  *            @arg @ref I2C_IT_TCI   Transfer complete interrupt enable
490  *            @arg @ref I2C_IT_STOPI STOP detection interrupt enable
491  *            @arg @ref I2C_IT_NACKI NACK received interrupt enable
492  *            @arg @ref I2C_IT_ADDRI Address match interrupt enable
493  *            @arg @ref I2C_IT_RXI   RX interrupt enable
494  *            @arg @ref I2C_IT_TXI   TX interrupt enable
495  *
496  * @retval The new state of __INTERRUPT__ (SET or RESET).
497  */
498#define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)      ((((__HANDLE__)->Instance->CR1 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
499
500/** @brief  Check whether the specified I2C flag is set or not.
501  * @param  __HANDLE__ specifies the I2C Handle.
502  * @param  __FLAG__ specifies the flag to check.
503  *        This parameter can be one of the following values:
504  *            @arg @ref I2C_FLAG_TXE     Transmit data register empty
505  *            @arg @ref I2C_FLAG_TXIS    Transmit interrupt status
506  *            @arg @ref I2C_FLAG_RXNE    Receive data register not empty
507  *            @arg @ref I2C_FLAG_ADDR    Address matched (slave mode)
508  *            @arg @ref I2C_FLAG_AF      Acknowledge failure received flag
509  *            @arg @ref I2C_FLAG_STOPF   STOP detection flag
510  *            @arg @ref I2C_FLAG_TC      Transfer complete (master mode)
511  *            @arg @ref I2C_FLAG_TCR     Transfer complete reload
512  *            @arg @ref I2C_FLAG_BERR    Bus error
513  *            @arg @ref I2C_FLAG_ARLO    Arbitration lost
514  *            @arg @ref I2C_FLAG_OVR     Overrun/Underrun
515  *            @arg @ref I2C_FLAG_PECERR  PEC error in reception
516  *            @arg @ref I2C_FLAG_TIMEOUT Timeout or Tlow detection flag
517  *            @arg @ref I2C_FLAG_ALERT   SMBus alert
518  *            @arg @ref I2C_FLAG_BUSY    Bus busy
519  *            @arg @ref I2C_FLAG_DIR     Transfer direction (slave mode)
520  *
521  * @retval The new state of __FLAG__ (SET or RESET).
522  */
523#define I2C_FLAG_MASK  (0x0001FFFFU)
524#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) == (__FLAG__)) ? SET : RESET)
525
526/** @brief  Clear the I2C pending flags which are cleared by writing 1 in a specific bit.
527  * @param  __HANDLE__ specifies the I2C Handle.
528  * @param  __FLAG__ specifies the flag to clear.
529  *          This parameter can be any combination of the following values:
530  *            @arg @ref I2C_FLAG_TXE     Transmit data register empty
531  *            @arg @ref I2C_FLAG_ADDR    Address matched (slave mode)
532  *            @arg @ref I2C_FLAG_AF      Acknowledge failure received flag
533  *            @arg @ref I2C_FLAG_STOPF   STOP detection flag
534  *            @arg @ref I2C_FLAG_BERR    Bus error
535  *            @arg @ref I2C_FLAG_ARLO    Arbitration lost
536  *            @arg @ref I2C_FLAG_OVR     Overrun/Underrun
537  *            @arg @ref I2C_FLAG_PECERR  PEC error in reception
538  *            @arg @ref I2C_FLAG_TIMEOUT Timeout or Tlow detection flag
539  *            @arg @ref I2C_FLAG_ALERT   SMBus alert
540  *
541  * @retval None
542  */
543#define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__FLAG__) == I2C_FLAG_TXE) ? ((__HANDLE__)->Instance->ISR |= (__FLAG__)) \
544                                                                                 : ((__HANDLE__)->Instance->ICR = (__FLAG__)))
545
546/** @brief  Enable the specified I2C peripheral.
547  * @param  __HANDLE__ specifies the I2C Handle.
548  * @retval None
549  */
550#define __HAL_I2C_ENABLE(__HANDLE__)                            (SET_BIT((__HANDLE__)->Instance->CR1,  I2C_CR1_PE))
551
552/** @brief  Disable the specified I2C peripheral.
553  * @param  __HANDLE__ specifies the I2C Handle.
554  * @retval None
555  */
556#define __HAL_I2C_DISABLE(__HANDLE__)                           (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE))
557
558/** @brief  Generate a Non-Acknowledge I2C peripheral in Slave mode.
559  * @param  __HANDLE__ specifies the I2C Handle.
560  * @retval None
561  */
562#define __HAL_I2C_GENERATE_NACK(__HANDLE__)                     (SET_BIT((__HANDLE__)->Instance->CR2, I2C_CR2_NACK))
563/**
564  * @}
565  */
566
567/* Include I2C HAL Extended module */
568#include "stm32g0xx_hal_i2c_ex.h"
569
570/* Exported functions --------------------------------------------------------*/
571/** @addtogroup I2C_Exported_Functions
572  * @{
573  */
574
575/** @addtogroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions
576  * @{
577  */
578/* Initialization and de-initialization functions******************************/
579HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);
580HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c);
581void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c);
582void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c);
583
584/* Callbacks Register/UnRegister functions  ***********************************/
585#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
586HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, pI2C_CallbackTypeDef pCallback);
587HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID);
588
589HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback);
590HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c);
591#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
592/**
593  * @}
594  */
595
596/** @addtogroup I2C_Exported_Functions_Group2 Input and Output operation functions
597  * @{
598  */
599/* IO operation functions  ****************************************************/
600/******* Blocking mode: Polling */
601HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
602HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
603HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
604HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
605HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
606HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
607HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout);
608
609/******* Non-Blocking mode: Interrupt */
610HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
611HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
612HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
613HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
614HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
615HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
616
617HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
618HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
619HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
620HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
621HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c);
622HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c);
623HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress);
624
625/******* Non-Blocking mode: DMA */
626HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
627HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
628HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
629HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
630HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
631HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
632
633HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
634HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
635HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
636HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
637/**
638  * @}
639  */
640
641/** @addtogroup I2C_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks
642 * @{
643 */
644/******* I2C IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */
645void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c);
646void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c);
647void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
648void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
649void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c);
650void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c);
651void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode);
652void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c);
653void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
654void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
655void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c);
656void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c);
657/**
658  * @}
659  */
660
661/** @addtogroup I2C_Exported_Functions_Group3 Peripheral State, Mode and Error functions
662  * @{
663  */
664/* Peripheral State, Mode and Error functions  *********************************/
665HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c);
666HAL_I2C_ModeTypeDef  HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c);
667uint32_t             HAL_I2C_GetError(I2C_HandleTypeDef *hi2c);
668
669/**
670  * @}
671  */
672
673/**
674  * @}
675  */
676
677/* Private constants ---------------------------------------------------------*/
678/** @defgroup I2C_Private_Constants I2C Private Constants
679  * @{
680  */
681
682/**
683  * @}
684  */
685
686/* Private macros ------------------------------------------------------------*/
687/** @defgroup I2C_Private_Macro I2C Private Macros
688  * @{
689  */
690
691#define IS_I2C_ADDRESSING_MODE(MODE)    (((MODE) == I2C_ADDRESSINGMODE_7BIT) || \
692                                         ((MODE) == I2C_ADDRESSINGMODE_10BIT))
693
694#define IS_I2C_DUAL_ADDRESS(ADDRESS)    (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || \
695                                         ((ADDRESS) == I2C_DUALADDRESS_ENABLE))
696
697#define IS_I2C_OWN_ADDRESS2_MASK(MASK)  (((MASK) == I2C_OA2_NOMASK)  || \
698                                         ((MASK) == I2C_OA2_MASK01) || \
699                                         ((MASK) == I2C_OA2_MASK02) || \
700                                         ((MASK) == I2C_OA2_MASK03) || \
701                                         ((MASK) == I2C_OA2_MASK04) || \
702                                         ((MASK) == I2C_OA2_MASK05) || \
703                                         ((MASK) == I2C_OA2_MASK06) || \
704                                         ((MASK) == I2C_OA2_MASK07))
705
706#define IS_I2C_GENERAL_CALL(CALL)       (((CALL) == I2C_GENERALCALL_DISABLE) || \
707                                         ((CALL) == I2C_GENERALCALL_ENABLE))
708
709#define IS_I2C_NO_STRETCH(STRETCH)      (((STRETCH) == I2C_NOSTRETCH_DISABLE) || \
710                                         ((STRETCH) == I2C_NOSTRETCH_ENABLE))
711
712#define IS_I2C_MEMADD_SIZE(SIZE)        (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \
713                                         ((SIZE) == I2C_MEMADD_SIZE_16BIT))
714
715#define IS_TRANSFER_MODE(MODE)          (((MODE) == I2C_RELOAD_MODE)   || \
716                                         ((MODE) == I2C_AUTOEND_MODE) || \
717                                         ((MODE) == I2C_SOFTEND_MODE))
718
719#define IS_TRANSFER_REQUEST(REQUEST)    (((REQUEST) == I2C_GENERATE_STOP)        || \
720                                         ((REQUEST) == I2C_GENERATE_START_READ)  || \
721                                         ((REQUEST) == I2C_GENERATE_START_WRITE) || \
722                                         ((REQUEST) == I2C_NO_STARTSTOP))
723
724#define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST)  (((REQUEST) == I2C_FIRST_FRAME)          || \
725                                                   ((REQUEST) == I2C_FIRST_AND_NEXT_FRAME) || \
726                                                   ((REQUEST) == I2C_NEXT_FRAME)           || \
727                                                   ((REQUEST) == I2C_FIRST_AND_LAST_FRAME) || \
728                                                   ((REQUEST) == I2C_LAST_FRAME)           || \
729                                                   ((REQUEST) == I2C_LAST_FRAME_NO_STOP)   || \
730                                                   IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST))
731
732#define IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_OTHER_FRAME)     || \
733                                                        ((REQUEST) == I2C_OTHER_AND_LAST_FRAME))
734
735#define I2C_RESET_CR2(__HANDLE__)                 ((__HANDLE__)->Instance->CR2 &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_HEAD10R | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_RD_WRN)))
736
737#define I2C_GET_ADDR_MATCH(__HANDLE__)            ((uint16_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_ADDCODE) >> 16U))
738#define I2C_GET_DIR(__HANDLE__)                   ((uint8_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_DIR) >> 16U))
739#define I2C_GET_STOP_MODE(__HANDLE__)             ((__HANDLE__)->Instance->CR2 & I2C_CR2_AUTOEND)
740#define I2C_GET_OWN_ADDRESS1(__HANDLE__)          ((uint16_t)((__HANDLE__)->Instance->OAR1 & I2C_OAR1_OA1))
741#define I2C_GET_OWN_ADDRESS2(__HANDLE__)          ((uint16_t)((__HANDLE__)->Instance->OAR2 & I2C_OAR2_OA2))
742
743#define IS_I2C_OWN_ADDRESS1(ADDRESS1)             ((ADDRESS1) <= 0x000003FFU)
744#define IS_I2C_OWN_ADDRESS2(ADDRESS2)             ((ADDRESS2) <= (uint16_t)0x00FFU)
745
746#define I2C_MEM_ADD_MSB(__ADDRESS__)              ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0xFF00U))) >> 8U)))
747#define I2C_MEM_ADD_LSB(__ADDRESS__)              ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FFU))))
748
749#define I2C_GENERATE_START(__ADDMODE__,__ADDRESS__) (((__ADDMODE__) == I2C_ADDRESSINGMODE_7BIT) ? (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | (I2C_CR2_START) | (I2C_CR2_AUTOEND)) & (~I2C_CR2_RD_WRN)) : \
750                                                          (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | (I2C_CR2_ADD10) | (I2C_CR2_START)) & (~I2C_CR2_RD_WRN)))
751
752#define I2C_CHECK_FLAG(__ISR__, __FLAG__)         ((((__ISR__) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET)
753#define I2C_CHECK_IT_SOURCE(__CR1__, __IT__)      ((((__CR1__) & (__IT__)) == (__IT__)) ? SET : RESET)
754/**
755  * @}
756  */
757
758/* Private Functions ---------------------------------------------------------*/
759/** @defgroup I2C_Private_Functions I2C Private Functions
760  * @{
761  */
762/* Private functions are defined in stm32g0xx_hal_i2c.c file */
763/**
764  * @}
765  */
766
767/**
768  * @}
769  */
770
771/**
772  * @}
773  */
774
775#ifdef __cplusplus
776}
777#endif
778
779
780#endif /* STM32G0xx_HAL_I2C_H */
781
782/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Note: See TracBrowser for help on using the repository browser.