libopencm3
A free/libre/open-source firmware library for various ARM Cortex-M3 microcontrollers.
i2c_common_v2.h File Reference
#include <stddef.h>
#include <stdint.h>
Include dependency graph for i2c_common_v2.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define I2C1   I2C1_BASE
 
#define I2C2   I2C2_BASE
 
#define I2C_CR1(i2c_base)   MMIO32((i2c_base) + 0x00)
 
#define I2C1_CR1   I2C_CR1(I2C1)
 
#define I2C2_CR1   I2C_CR1(I2C2)
 
#define I2C_CR2(i2c_base)   MMIO32((i2c_base) + 0x04)
 
#define I2C1_CR2   I2C_CR2(I2C1)
 
#define I2C2_CR2   I2C_CR2(I2C2)
 
#define I2C_OAR1(i2c_base)   MMIO32((i2c_base) + 0x08)
 
#define I2C1_OAR1   I2C_OAR1(I2C1)
 
#define I2C2_OAR1   I2C_OAR1(I2C2)
 
#define I2C_OAR2(i2c_base)   MMIO32((i2c_base) + 0x0c)
 
#define I2C1_OAR2   I2C_OAR2(I2C1)
 
#define I2C2_OAR2   I2C_OAR2(I2C2)
 
#define I2C_TIMINGR(i2c_base)   MMIO32((i2c_base) + 0x10)
 
#define I2C1_TIMINGR   I2C_TIMINGR(I2C1)
 
#define I2C2_TIMINGR   I2C_TIMINGR(I2C2)
 
#define I2C_TIMEOUTR(i2c_base)   MMIO32((i2c_base) + 0x14)
 
#define I2C1_TIMEOUTR   I2C_TIMEOUTR(I2C1)
 
#define I2C2_TIMEOUTR   I2C_TIMEOUTR(I2C2)
 
#define I2C_ISR(i2c_base)   MMIO32((i2c_base) + 0x18)
 
#define I2C1_ISR   I2C_ISR(I2C1)
 
#define I2C2_ISR   I2C_ISR(I2C2)
 
#define I2C_ICR(i2c_base)   MMIO32((i2c_base) + 0x1C)
 
#define I2C1_ICR   I2C_ICR(I2C1)
 
#define I2C2_ICR   I2C_ICR(I2C2)
 
#define I2C_PECR(i2c_base)   MMIO32((i2c_base) + 0x20)
 
#define I2C1_PECR   I2C_PECR(I2C1)
 
#define I2C2_PECR   I2C_PECR(I2C2)
 
#define I2C_RXDR(i2c_base)   MMIO32((i2c_base) + 0x24)
 
#define I2C1_RXDR   I2C_RXDR(I2C1)
 
#define I2C2_RXDR   I2C_RXDR(I2C2)
 
#define I2C_TXDR(i2c_base)   MMIO32((i2c_base) + 0x28)
 
#define I2C1_TXDR   I2C_TXDR(I2C1)
 
#define I2C2_TXDR   I2C_TXDR(I2C2)
 
#define I2C_CR1_PECEN   (1 << 23)
 
#define I2C_CR1_ALERTEN   (1 << 22)
 
#define I2C_CR1_SMBDEN   (1 << 21)
 
#define I2C_CR1_SMBHEN   (1 << 20)
 
#define I2C_CR1_GCEN   (1 << 19)
 
#define I2C_CR1_WUPEN   (1 << 18)
 
#define I2C_CR1_NOSTRETCH   (1 << 17)
 
#define I2C_CR1_SBC   (1 << 16)
 
#define I2C_CR1_RXDMAEN   (1 << 15)
 
#define I2C_CR1_TXDMAEN   (1 << 14)
 
#define I2C_CR1_ANFOFF   (1 << 12)
 
#define I2C_CR1_DNF_MASK   0xF
 DNF[3:0]: Digital noise filter. More...
 
#define I2C_CR1_DNF_SHIFT   8
 
#define I2C_CR1_ERRIE   (1 << 7)
 
#define I2C_CR1_TCIE   (1 << 6)
 
#define I2C_CR1_STOPIE   (1 << 5)
 
#define I2C_CR1_NACKIE   (1 << 4)
 
#define I2C_CR1_ADDRIE   (1 << 3)
 
#define I2C_CR1_RXIE   (1 << 2)
 
#define I2C_CR1_TXIE   (1 << 1)
 
#define I2C_CR1_PE   (1 << 0)
 
#define I2C_CR2_PECBYTE   (1 << 26)
 
#define I2C_CR2_AUTOEND   (1 << 25)
 
#define I2C_CR2_RELOAD   (1 << 24)
 
#define I2C_CR2_NBYTES_SHIFT   16
 
#define I2C_CR2_NBYTES_MASK   (0xFF << I2C_CR2_NBYTES_SHIFT)
 
#define I2C_CR2_NACK   (1 << 15)
 
#define I2C_CR2_STOP   (1 << 14)
 
#define I2C_CR2_START   (1 << 13)
 
#define I2C_CR2_HEAD10R   (1 << 12)
 
#define I2C_CR2_ADD10   (1 << 11)
 
#define I2C_CR2_RD_WRN   (1 << 10)
 
#define I2C_CR2_SADD_7BIT_SHIFT   1
 
#define I2C_CR2_SADD_10BIT_SHIFT   0
 
#define I2C_CR2_SADD_7BIT_MASK   (0x7F << I2C_CR2_SADD_7BIT_SHIFT)
 
#define I2C_CR2_SADD_10BIT_MASK   0x3FF
 
#define I2C_OAR1_OA1EN_DISABLE   (0x0 << 15)
 
#define I2C_OAR1_OA1EN_ENABLE   (0x1 << 15)
 
#define I2C_OAR1_OA1MODE   (1 << 10)
 
#define I2C_OAR1_OA1MODE_7BIT   0
 
#define I2C_OAR1_OA1MODE_10BIT   1
 
#define I2C_OAR1_OA1   (1 << 10)
 
#define I2C_OAR1_OA1_7BIT   0
 
#define I2C_OAR1_OA1_10BIT   1
 
#define I2C_OAR2_OA2EN   (1 << 15)
 
#define I2C_OAR2_OA2MSK_NO_MASK   (0x0 << 8)
 
#define I2C_OAR2_OA2MSK_OA2_7_OA2_2   (0x1 << 8)
 
#define I2C_OAR2_OA2MSK_OA2_7_OA2_3   (0x2 << 8)
 
#define I2C_OAR2_OA2MSK_OA2_7_OA2_4   (0x3 << 8)
 
#define I2C_OAR2_OA2MSK_OA2_7_OA2_5   (0x4 << 8)
 
#define I2C_OAR2_OA2MSK_OA2_7_OA2_6   (0x5 << 8)
 
#define I2C_OAR2_OA2MSK_OA2_7   (0x6 << 8)
 
#define I2C_OAR2_OA2MSK_NO_CMP   (0x7 << 8)
 
#define I2C_TIMINGR_PRESC_SHIFT   28
 
#define I2C_TIMINGR_PRESC_MASK   (0xF << 28)
 
#define I2C_TIMINGR_SCLDEL_SHIFT   20
 
#define I2C_TIMINGR_SCLDEL_MASK   (0xF << I2C_TIMINGR_SCLDEL_SHIFT)
 
#define I2C_TIMINGR_SDADEL_SHIFT   16
 
#define I2C_TIMINGR_SDADEL_MASK   (0xF << I2C_TIMINGR_SDADEL_SHIFT)
 
#define I2C_TIMINGR_SCLH_SHIFT   8
 
#define I2C_TIMINGR_SCLH_MASK   (0xFF << I2C_TIMINGR_SCLH_SHIFT)
 
#define I2C_TIMINGR_SCLL_SHIFT   0
 
#define I2C_TIMINGR_SCLL_MASK   (0xFF << I2C_TIMINGR_SCLL_SHIFT)
 
#define I2C_TIEMOUTR_TEXTEN   (1 << 31)
 
#define I2C_TIEMOUTR_TIMOUTEN   (1 << 15)
 
#define I2C_TIEMOUTR_TIDLE_SCL_LOW   (0x0 << 12)
 
#define I2C_TIEMOUTR_TIDLE_SCL_SDA_HIGH   (0x1 << 12)
 
#define I2C_ISR_DIR_READ   (0x1 << 16)
 
#define I2C_ISR_DIR_WRITE   (0x0 << 16)
 
#define I2C_ISR_BUSY   (1 << 15)
 
#define I2C_ISR_ALERT   (1 << 13)
 
#define I2C_ISR_TIMEOUT   (1 << 12)
 
#define I2C_ISR_PECERR   (1 << 11)
 
#define I2C_ISR_OVR   (1 << 10)
 
#define I2C_ISR_ARLO   (1 << 9)
 
#define I2C_ISR_BERR   (1 << 8)
 
#define I2C_ISR_TCR   (1 << 7)
 
#define I2C_ISR_TC   (1 << 6)
 
#define I2C_ISR_STOPF   (1 << 5)
 
#define I2C_ISR_NACKF   (1 << 4)
 
#define I2C_ISR_ADDR   (1 << 3)
 
#define I2C_ISR_RXNE   (1 << 2)
 
#define I2C_ISR_TXIS   (1 << 1)
 
#define I2C_ISR_TXE   (1 << 0)
 
#define I2C_ICR_ALERTCF   (1 << 13)
 
#define I2C_ICR_TIMOUTCF   (1 << 12)
 
#define I2C_ICR_PECCF   (1 << 11)
 
#define I2C_ICR_OVRCF   (1 << 10)
 
#define I2C_ICR_ARLOCF   (1 << 9)
 
#define I2C_ICR_BERRCF   (1 << 8)
 
#define I2C_ICR_STOPCF   (1 << 5)
 
#define I2C_ICR_NACKCF   (1 << 4)
 
#define I2C_ICR_ADDRCF   (1 << 3)
 

Enumerations

enum  i2c_speeds { i2c_speed_sm_100k , i2c_speed_fm_400k , i2c_speed_fmp_1m , i2c_speed_unknown }
 I2C speed modes. More...
 

Functions

void i2c_peripheral_enable (uint32_t i2c)
 I2C Peripheral Enable. More...
 
void i2c_peripheral_disable (uint32_t i2c)
 I2C Peripheral Disable. More...
 
void i2c_send_start (uint32_t i2c)
 I2C Send Start Condition. More...
 
void i2c_send_stop (uint32_t i2c)
 I2C Send Stop Condition. More...
 
void i2c_clear_stop (uint32_t i2c)
 I2C Clear Stop Flag. More...
 
void i2c_set_own_7bit_slave_address (uint32_t i2c, uint8_t slave)
 I2C Set the 7 bit Slave Address for the Peripheral. More...
 
void i2c_set_own_10bit_slave_address (uint32_t i2c, uint16_t slave)
 I2C Set the 10 bit Slave Address for the Peripheral. More...
 
void i2c_send_data (uint32_t i2c, uint8_t data)
 I2C Send Data. More...
 
uint8_t i2c_get_data (uint32_t i2c)
 I2C Get Data. More...
 
void i2c_enable_analog_filter (uint32_t i2c)
 
void i2c_disable_analog_filter (uint32_t i2c)
 
void i2c_set_digital_filter (uint32_t i2c, uint8_t dnf_setting)
 Set the I2C digital filter. More...
 
void i2c_set_prescaler (uint32_t i2c, uint8_t presc)
 
void i2c_set_data_setup_time (uint32_t i2c, uint8_t s_time)
 
void i2c_set_data_hold_time (uint32_t i2c, uint8_t h_time)
 
void i2c_set_scl_high_period (uint32_t i2c, uint8_t period)
 
void i2c_set_scl_low_period (uint32_t i2c, uint8_t period)
 
void i2c_enable_stretching (uint32_t i2c)
 
void i2c_disable_stretching (uint32_t i2c)
 
void i2c_set_7bit_addr_mode (uint32_t i2c)
 
void i2c_set_10bit_addr_mode (uint32_t i2c)
 
void i2c_set_7bit_address (uint32_t i2c, uint8_t addr)
 
void i2c_set_10bit_address (uint32_t i2c, uint16_t addr)
 
void i2c_set_write_transfer_dir (uint32_t i2c)
 
void i2c_set_read_transfer_dir (uint32_t i2c)
 
void i2c_set_bytes_to_transfer (uint32_t i2c, uint32_t n_bytes)
 
bool i2c_is_start (uint32_t i2c)
 
void i2c_enable_autoend (uint32_t i2c)
 
void i2c_disable_autoend (uint32_t i2c)
 
bool i2c_nack (uint32_t i2c)
 
bool i2c_busy (uint32_t i2c)
 
bool i2c_transmit_int_status (uint32_t i2c)
 
bool i2c_transfer_complete (uint32_t i2c)
 
bool i2c_received_data (uint32_t i2c)
 
void i2c_enable_interrupt (uint32_t i2c, uint32_t interrupt)
 I2C Enable Interrupt. More...
 
void i2c_disable_interrupt (uint32_t i2c, uint32_t interrupt)
 I2C Disable Interrupt. More...
 
void i2c_enable_rxdma (uint32_t i2c)
 I2C Enable reception DMA. More...
 
void i2c_disable_rxdma (uint32_t i2c)
 I2C Disable reception DMA. More...
 
void i2c_enable_txdma (uint32_t i2c)
 I2C Enable transmission DMA. More...
 
void i2c_disable_txdma (uint32_t i2c)
 I2C Disable transmission DMA. More...
 
void i2c_transfer7 (uint32_t i2c, uint8_t addr, const uint8_t *w, size_t wn, uint8_t *r, size_t rn)
 Run a write/read transaction to a given 7bit i2c address If both write & read are provided, the read will use repeated start. More...
 
void i2c_set_speed (uint32_t i2c, enum i2c_speeds speed, uint32_t clock_megahz)
 Set the i2c communication speed. More...