20#ifndef STM32H7xx_LL_I2C_H
21#define STM32H7xx_LL_I2C_H
34#if defined (I2C1) || defined (I2C2) || defined (I2C3) || defined (I2C4) || defined (I2C5)
52#if defined(USE_FULL_LL_DRIVER)
62#if defined(USE_FULL_LL_DRIVER)
68 uint32_t PeripheralMode;
81 uint32_t AnalogFilter;
87 uint32_t DigitalFilter;
99 uint32_t TypeAcknowledge;
106 uint32_t OwnAddrSize;
126#define LL_I2C_ICR_ADDRCF I2C_ICR_ADDRCF
127#define LL_I2C_ICR_NACKCF I2C_ICR_NACKCF
128#define LL_I2C_ICR_STOPCF I2C_ICR_STOPCF
129#define LL_I2C_ICR_BERRCF I2C_ICR_BERRCF
130#define LL_I2C_ICR_ARLOCF I2C_ICR_ARLOCF
131#define LL_I2C_ICR_OVRCF I2C_ICR_OVRCF
132#define LL_I2C_ICR_PECCF I2C_ICR_PECCF
133#define LL_I2C_ICR_TIMOUTCF I2C_ICR_TIMOUTCF
134#define LL_I2C_ICR_ALERTCF I2C_ICR_ALERTCF
143#define LL_I2C_ISR_TXE I2C_ISR_TXE
144#define LL_I2C_ISR_TXIS I2C_ISR_TXIS
145#define LL_I2C_ISR_RXNE I2C_ISR_RXNE
146#define LL_I2C_ISR_ADDR I2C_ISR_ADDR
147#define LL_I2C_ISR_NACKF I2C_ISR_NACKF
148#define LL_I2C_ISR_STOPF I2C_ISR_STOPF
149#define LL_I2C_ISR_TC I2C_ISR_TC
150#define LL_I2C_ISR_TCR I2C_ISR_TCR
151#define LL_I2C_ISR_BERR I2C_ISR_BERR
152#define LL_I2C_ISR_ARLO I2C_ISR_ARLO
153#define LL_I2C_ISR_OVR I2C_ISR_OVR
154#define LL_I2C_ISR_PECERR I2C_ISR_PECERR
155#define LL_I2C_ISR_TIMEOUT I2C_ISR_TIMEOUT
156#define LL_I2C_ISR_ALERT I2C_ISR_ALERT
157#define LL_I2C_ISR_BUSY I2C_ISR_BUSY
166#define LL_I2C_CR1_TXIE I2C_CR1_TXIE
167#define LL_I2C_CR1_RXIE I2C_CR1_RXIE
168#define LL_I2C_CR1_ADDRIE I2C_CR1_ADDRIE
169#define LL_I2C_CR1_NACKIE I2C_CR1_NACKIE
170#define LL_I2C_CR1_STOPIE I2C_CR1_STOPIE
171#define LL_I2C_CR1_TCIE I2C_CR1_TCIE
172#define LL_I2C_CR1_ERRIE I2C_CR1_ERRIE
180#define LL_I2C_MODE_I2C 0x00000000U
181#define LL_I2C_MODE_SMBUS_HOST I2C_CR1_SMBHEN
182#define LL_I2C_MODE_SMBUS_DEVICE 0x00000000U
184#define LL_I2C_MODE_SMBUS_DEVICE_ARP I2C_CR1_SMBDEN
192#define LL_I2C_ANALOGFILTER_ENABLE 0x00000000U
193#define LL_I2C_ANALOGFILTER_DISABLE I2C_CR1_ANFOFF
201#define LL_I2C_ADDRESSING_MODE_7BIT 0x00000000U
202#define LL_I2C_ADDRESSING_MODE_10BIT I2C_CR2_ADD10
210#define LL_I2C_OWNADDRESS1_7BIT 0x00000000U
211#define LL_I2C_OWNADDRESS1_10BIT I2C_OAR1_OA1MODE
219#define LL_I2C_OWNADDRESS2_NOMASK I2C_OAR2_OA2NOMASK
220#define LL_I2C_OWNADDRESS2_MASK01 I2C_OAR2_OA2MASK01
221#define LL_I2C_OWNADDRESS2_MASK02 I2C_OAR2_OA2MASK02
222#define LL_I2C_OWNADDRESS2_MASK03 I2C_OAR2_OA2MASK03
223#define LL_I2C_OWNADDRESS2_MASK04 I2C_OAR2_OA2MASK04
224#define LL_I2C_OWNADDRESS2_MASK05 I2C_OAR2_OA2MASK05
225#define LL_I2C_OWNADDRESS2_MASK06 I2C_OAR2_OA2MASK06
226#define LL_I2C_OWNADDRESS2_MASK07 I2C_OAR2_OA2MASK07
235#define LL_I2C_ACK 0x00000000U
236#define LL_I2C_NACK I2C_CR2_NACK
244#define LL_I2C_ADDRSLAVE_7BIT 0x00000000U
245#define LL_I2C_ADDRSLAVE_10BIT I2C_CR2_ADD10
253#define LL_I2C_REQUEST_WRITE 0x00000000U
254#define LL_I2C_REQUEST_READ I2C_CR2_RD_WRN
262#define LL_I2C_MODE_RELOAD I2C_CR2_RELOAD
263#define LL_I2C_MODE_AUTOEND I2C_CR2_AUTOEND
265#define LL_I2C_MODE_SOFTEND 0x00000000U
267#define LL_I2C_MODE_SMBUS_RELOAD LL_I2C_MODE_RELOAD
269#define LL_I2C_MODE_SMBUS_AUTOEND_NO_PEC LL_I2C_MODE_AUTOEND
271#define LL_I2C_MODE_SMBUS_SOFTEND_NO_PEC LL_I2C_MODE_SOFTEND
273#define LL_I2C_MODE_SMBUS_AUTOEND_WITH_PEC (uint32_t)(LL_I2C_MODE_AUTOEND | I2C_CR2_PECBYTE)
275#define LL_I2C_MODE_SMBUS_SOFTEND_WITH_PEC (uint32_t)(LL_I2C_MODE_SOFTEND | I2C_CR2_PECBYTE)
284#define LL_I2C_GENERATE_NOSTARTSTOP 0x00000000U
286#define LL_I2C_GENERATE_STOP (uint32_t)(0x80000000U | I2C_CR2_STOP)
288#define LL_I2C_GENERATE_START_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN)
290#define LL_I2C_GENERATE_START_WRITE (uint32_t)(0x80000000U | I2C_CR2_START)
292#define LL_I2C_GENERATE_RESTART_7BIT_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN)
294#define LL_I2C_GENERATE_RESTART_7BIT_WRITE (uint32_t)(0x80000000U | I2C_CR2_START)
296#define LL_I2C_GENERATE_RESTART_10BIT_READ (uint32_t)(0x80000000U | I2C_CR2_START | \
297 I2C_CR2_RD_WRN | I2C_CR2_HEAD10R)
299#define LL_I2C_GENERATE_RESTART_10BIT_WRITE (uint32_t)(0x80000000U | I2C_CR2_START)
308#define LL_I2C_DIRECTION_WRITE 0x00000000U
310#define LL_I2C_DIRECTION_READ I2C_ISR_DIR
319#define LL_I2C_DMA_REG_DATA_TRANSMIT 0x00000000U
321#define LL_I2C_DMA_REG_DATA_RECEIVE 0x00000001U
330#define LL_I2C_SMBUS_TIMEOUTA_MODE_SCL_LOW 0x00000000U
332#define LL_I2C_SMBUS_TIMEOUTA_MODE_SDA_SCL_HIGH I2C_TIMEOUTR_TIDLE
341#define LL_I2C_SMBUS_TIMEOUTA I2C_TIMEOUTR_TIMOUTEN
342#define LL_I2C_SMBUS_TIMEOUTB I2C_TIMEOUTR_TEXTEN
344#define LL_I2C_SMBUS_ALL_TIMEOUT (uint32_t)(I2C_TIMEOUTR_TIMOUTEN | \
371#define LL_I2C_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
379#define LL_I2C_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
400#define __LL_I2C_CONVERT_TIMINGS(__PRESCALER__, __SETUP_TIME__, __HOLD_TIME__, __SCLH_PERIOD__, __SCLL_PERIOD__) \
401 ((((uint32_t)(__PRESCALER__) << I2C_TIMINGR_PRESC_Pos) & I2C_TIMINGR_PRESC) | \
402 (((uint32_t)(__SETUP_TIME__) << I2C_TIMINGR_SCLDEL_Pos) & I2C_TIMINGR_SCLDEL) | \
403 (((uint32_t)(__HOLD_TIME__) << I2C_TIMINGR_SDADEL_Pos) & I2C_TIMINGR_SDADEL) | \
404 (((uint32_t)(__SCLH_PERIOD__) << I2C_TIMINGR_SCLH_Pos) & I2C_TIMINGR_SCLH) | \
405 (((uint32_t)(__SCLL_PERIOD__) << I2C_TIMINGR_SCLL_Pos) & I2C_TIMINGR_SCLL))
621 uint32_t data_reg_addr;
623 if (Direction == LL_I2C_DMA_REG_DATA_TRANSMIT)
626 data_reg_addr = (uint32_t) &(I2Cx->
TXDR);
631 data_reg_addr = (uint32_t) &(I2Cx->
RXDR);
634 return data_reg_addr;
1270 (ClockTimeout)) ? 1UL : 0UL);
2134 uint32_t TransferSize, uint32_t EndMode, uint32_t Request)
2137 uint32_t tmp = ((uint32_t)(((uint32_t)SlaveAddr &
I2C_CR2_SADD) | \
2140 (uint32_t)EndMode | (uint32_t)Request) & (~0x80000000U));
2246#if defined(USE_FULL_LL_DRIVER)
2253void LL_I2C_StructInit(LL_I2C_InitTypeDef *I2C_InitStruct);
#define CLEAR_BIT(REG, BIT)
#define SET_BIT(REG, BIT)
#define WRITE_REG(REG, VAL)
#define MODIFY_REG(REG, CLEARMASK, SETMASK)
#define READ_BIT(REG, BIT)
#define I2C_ISR_RXNE
Receive data register not empty.
#define I2C_ISR_ADDR
Address matched (slave mode).
#define I2C_ISR_BERR
Bus error.
#define I2C_ISR_BUSY
Bus busy.
#define I2C_TIMINGR_PRESC_Pos
#define I2C_TIMINGR_SCLDEL_Pos
#define I2C_CR2_RD_WRN_Pos
#define I2C_CR1_NOSTRETCH
Clock stretching disable.
#define I2C_CR2_SADD
Slave address (master mode).
#define I2C_ICR_ARLOCF
Arbitration lost clear flag.
#define I2C_CR1_TXDMAEN
DMA transmission requests enable.
#define I2C_ISR_TXE
Transmit data register empty.
#define I2C_TIMINGR_SCLH
SCL high period (master mode).
#define I2C_CR1_STOPIE
STOP detection interrupt enable.
#define I2C_CR1_ALERTEN
SMBus alert enable.
#define I2C_CR2_RELOAD
NBYTES reload mode.
#define I2C_CR2_NBYTES
Number of bytes.
#define I2C_ISR_STOPF
STOP detection flag.
#define I2C_CR2_RD_WRN
Transfer direction (master mode).
#define I2C_CR1_ADDRIE
Address match interrupt enable.
#define I2C_ISR_ADDCODE_Pos
#define I2C_TIMEOUTR_TIMEOUTB_Pos
#define I2C_OAR2_OA2MSK
Own address 2 masks.
#define I2C_CR2_HEAD10R
10-bit address header only read direction (master mode)
#define I2C_TIMINGR_SCLL_Pos
#define I2C_CR2_STOP
STOP generation (master mode).
#define I2C_CR1_PECEN
PEC enable.
#define I2C_TIMINGR_SDADEL
Data hold time.
#define I2C_OAR2_OA2
Interface own address 2.
#define I2C_TIMEOUTR_TIMOUTEN
Clock timeout enable.
#define I2C_CR1_ANFOFF
Analog noise filter OFF.
#define I2C_ISR_ALERT
SMBus alert.
#define I2C_CR2_NBYTES_Pos
#define I2C_CR2_ADD10
10-bit addressing mode (master mode)
#define I2C_RXDR_RXDATA
8-bit receive data
#define I2C_ISR_ARLO
Arbitration lost.
#define I2C_CR2_START
START generation.
#define I2C_ICR_OVRCF
Overrun/Underrun clear flag.
#define I2C_TIMEOUTR_TIMEOUTB
Bus timeout B.
#define I2C_OAR1_OA1MODE
Own address 1 10-bit mode.
#define I2C_ISR_TIMEOUT
Timeout or Tlow detection flag.
#define I2C_CR1_SMBDEN
SMBus device default address enable.
#define I2C_CR2_PECBYTE
Packet error checking byte.
#define I2C_CR1_TCIE
Transfer complete interrupt enable.
#define I2C_TIMINGR_SDADEL_Pos
#define I2C_CR1_WUPEN
Wakeup from STOP enable.
#define I2C_CR1_ERRIE
Errors interrupt enable.
#define I2C_ISR_TCR
Transfer complete reload.
#define I2C_TIMINGR_SCLH_Pos
#define I2C_ICR_PECCF
PAC error clear flag.
#define I2C_CR1_RXDMAEN
DMA reception requests enable.
#define I2C_ISR_PECERR
PEC error in reception.
#define I2C_CR2_NACK
NACK generation (slave mode).
#define I2C_CR1_TXIE
TX interrupt enable.
#define I2C_ISR_ADDCODE
Address match code (slave mode).
#define I2C_TIMINGR_SCLDEL
Data setup time.
#define I2C_CR1_PE
Peripheral enable.
#define I2C_TIMEOUTR_TEXTEN
Extended clock timeout enable.
#define I2C_CR1_SBC
Slave byte control.
#define I2C_ICR_BERRCF
Bus error clear flag.
#define I2C_ICR_TIMOUTCF
Timeout clear flag.
#define I2C_ISR_DIR
Transfer direction (slave mode).
#define I2C_OAR2_OA2EN
Own address 2 enable.
#define I2C_ISR_TXIS
Transmit interrupt status.
#define I2C_TIMEOUTR_TIDLE
Idle clock timeout detection.
#define I2C_OAR1_OA1EN
Own address 1 enable.
#define I2C_ICR_NACKCF
NACK clear flag.
#define I2C_OAR1_OA1
Interface own address 1.
#define I2C_CR2_AUTOEND
Automatic end mode (master mode).
#define I2C_ICR_STOPCF
STOP detection clear flag.
#define I2C_CR1_GCEN
General call enable.
#define I2C_PECR_PEC
PEC register.
#define I2C_ICR_ADDRCF
Address matched clear flag.
#define I2C_ISR_TC
Transfer complete (master mode).
#define I2C_TIMEOUTR_TIMEOUTA
Bus timeout A.
#define I2C_CR1_SMBHEN
SMBus host address enable.
#define I2C_TIMINGR_SCLL
SCL low period (master mode).
#define I2C_ISR_NACKF
NACK received flag.
#define I2C_CR1_DNF
Digital noise filter.
#define I2C_CR1_NACKIE
NACK received interrupt enable.
#define I2C_TIMINGR_PRESC
Timings prescaler.
#define I2C_ICR_ALERTCF
Alert clear flag.
#define I2C_CR1_RXIE
RX interrupt enable.
#define I2C_ISR_OVR
Overrun/Underrun.
CMSIS STM32H7xx Device Peripheral Access Layer Header File.
Inter-integrated Circuit Interface.
__IO uint32_t ISR
I2C Interrupt and status register, Address offset: 0x18.
__IO uint32_t CR2
I2C Control register 2, Address offset: 0x04.
__IO uint32_t RXDR
I2C Receive data register, Address offset: 0x24.
__IO uint32_t PECR
I2C PEC register, Address offset: 0x20.
__IO uint32_t OAR2
I2C Own address 2 register, Address offset: 0x0C.
__IO uint32_t ICR
I2C Interrupt clear register, Address offset: 0x1C.
__IO uint32_t CR1
I2C Control register 1, Address offset: 0x00.
__IO uint32_t TIMINGR
I2C Timing register, Address offset: 0x10.
__IO uint32_t TIMEOUTR
I2C Timeout register, Address offset: 0x14.
__IO uint32_t TXDR
I2C Transmit data register, Address offset: 0x28.
__IO uint32_t OAR1
I2C Own address 1 register, Address offset: 0x08.