.. highlight:: c
.. _libmaple-i2c:

``i2c.h``
=========

Inter-Integrated Circuit (|i2c|) peripheral support.

.. contents:: Contents
   :local:

Important Note
--------------

There are some important known problems with the built-in I2C
peripherals.  For more information, see STM32F10xx8 and STM32F10xxB
Errata sheet (ST Doc ID 14574 Rev 8), Section 2.11.1, 2.11.2.  An
important consequence of these problems is that the |i2c| interrupt
must not be preempted.  Consequently, (by default) Wirish uses an
|i2c| interrupt priority which is the highest in the system (priority
level 0).  Other interrupt priorities are set lower.

Types
-----

.. doxygenstruct:: i2c_reg_map
.. doxygenenum:: i2c_state
.. doxygenstruct:: i2c_msg
.. doxygenstruct:: i2c_dev

Devices
-------

.. doxygenvariable:: I2C1
.. doxygenvariable:: I2C2

Functions
---------

.. doxygenfunction:: i2c_init
.. doxygenfunction:: i2c_master_enable
.. doxygenfunction:: i2c_master_xfer
.. doxygenfunction:: i2c_bus_reset
.. doxygenfunction:: i2c_disable
.. doxygenfunction:: i2c_peripheral_enable
.. doxygenfunction:: i2c_peripheral_disable
.. doxygenfunction:: i2c_write
.. doxygenfunction:: i2c_set_input_clk
.. doxygenfunction:: i2c_set_clk_control
.. doxygenfunction:: i2c_set_trise
.. doxygenfunction:: i2c_start_condition
.. doxygenfunction:: i2c_stop_condition
.. doxygenfunction:: i2c_enable_irq
.. doxygenfunction:: i2c_disable_irq
.. doxygenfunction:: i2c_enable_ack
.. doxygenfunction:: i2c_disable_ack

Register Map Base Pointers
--------------------------

.. doxygendefine:: I2C1_BASE
.. doxygendefine:: I2C2_BASE

Register Bit Definitions
------------------------

Control register 1
~~~~~~~~~~~~~~~~~~

.. doxygendefine:: I2C_CR1_SWRST
.. doxygendefine:: I2C_CR1_ALERT
.. doxygendefine:: I2C_CR1_PEC
.. doxygendefine:: I2C_CR1_POS
.. doxygendefine:: I2C_CR1_ACK
.. doxygendefine:: I2C_CR1_START
.. doxygendefine:: I2C_CR1_STOP
.. doxygendefine:: I2C_CR1_PE

Control register 2
~~~~~~~~~~~~~~~~~~

.. doxygendefine:: I2C_CR2_LAST
.. doxygendefine:: I2C_CR2_DMAEN
.. doxygendefine:: I2C_CR2_ITBUFEN
.. doxygendefine:: I2C_CR2_ITEVTEN
.. doxygendefine:: I2C_CR2_ITERREN
.. doxygendefine:: I2C_CR2_FREQ

Clock control register
~~~~~~~~~~~~~~~~~~~~~~

.. doxygendefine:: I2C_CCR_FS
.. doxygendefine:: I2C_CCR_DUTY
.. doxygendefine:: I2C_CCR_CCR

Status register 1
~~~~~~~~~~~~~~~~~

.. doxygendefine:: I2C_SR1_SB
.. doxygendefine:: I2C_SR1_ADDR
.. doxygendefine:: I2C_SR1_BTF
.. doxygendefine:: I2C_SR1_ADD10
.. doxygendefine:: I2C_SR1_STOPF
.. doxygendefine:: I2C_SR1_RXNE
.. doxygendefine:: I2C_SR1_TXE
.. doxygendefine:: I2C_SR1_BERR
.. doxygendefine:: I2C_SR1_ARLO
.. doxygendefine:: I2C_SR1_AF
.. doxygendefine:: I2C_SR1_OVR
.. doxygendefine:: I2C_SR1_PECERR
.. doxygendefine:: I2C_SR1_TIMEOUT
.. doxygendefine:: I2C_SR1_SMBALERT

Status register 2
~~~~~~~~~~~~~~~~~

.. doxygendefine:: I2C_SR2_MSL
.. doxygendefine:: I2C_SR2_BUSY
.. doxygendefine:: I2C_SR2_TRA
.. doxygendefine:: I2C_SR2_GENCALL
.. doxygendefine:: I2C_SR2_SMBDEFAULT
.. doxygendefine:: I2C_SR2_SMBHOST
.. doxygendefine:: I2C_SR2_DUALF
.. doxygendefine:: I2C_SR2_PEC