i2c.h

[Stub] support.

Library Documentation

Inter-Integrated Circuit (I2C) peripheral support.

Defines
I2C_MSG_READ

I2C_MSG_10BIT_ADDR

I2C1_BASE

I2C1 register map base pointer.

I2C2_BASE

I2C2 register map base pointer.

I2C_CR1_SWRST

I2C_CR1_ALERT

I2C_CR1_PEC

I2C_CR1_POS

I2C_CR1_ACK

I2C_CR1_START

I2C_CR1_STOP

I2C_CR1_PE

I2C_CR2_LAST

I2C_CR2_DMAEN

I2C_CR2_ITBUFEN

I2C_CR2_ITEVTEN

I2C_CR2_ITERREN

I2C_CR2_FREQ

I2C_CCR_FS

I2C_CCR_DUTY

I2C_CCR_CCR

I2C_SR1_SB

I2C_SR1_ADDR

I2C_SR1_BTF

I2C_SR1_ADD10

I2C_SR1_STOPF

I2C_SR1_RXNE

I2C_SR1_TXE

I2C_SR1_BERR

I2C_SR1_ARLO

I2C_SR1_AF

I2C_SR1_OVR

I2C_SR1_PECERR

I2C_SR1_TIMEOUT

I2C_SR1_SMBALERT

I2C_SR2_MSL

I2C_SR2_BUSY

I2C_SR2_TRA

I2C_SR2_GENCALL

I2C_SR2_SMBDEFAULT

I2C_SR2_SMBHOST

I2C_SR2_DUALF

I2C_SR2_PEC

I2C_FAST_MODE

I2C_DUTY_16_9

I2C_REMAP

I2C_BUS_RESET

I2C_ERROR_PROTOCOL

I2C_ERROR_TIMEOUT

I2C_IRQ_ERROR

Enable one or more I2C interrupts.

Parameters:
  • dev -

    I2C device

  • irqs -

    Bitwise or of: I2C_IRQ_ERROR (error interrupt), I2C_IRQ_EVENT (event interrupt), and I2C_IRQ_BUFFER (buffer interrupt).

I2C_IRQ_EVENT

I2C_IRQ_BUFFER

Enums
i2c_state enum

I2C device states.

Values:

  • I2C_STATE_DISABLED = 0 -

    Disabled.

  • I2C_STATE_IDLE = 1 -

    Idle.

  • I2C_STATE_XFER_DONE = 2 -

    Done with transfer.

  • I2C_STATE_BUSY = 3 -

    Busy.

  • I2C_STATE_ERROR = -1 -

    Error occurred.

Functions
void i2c_init(i2c_dev * dev)

Initialize an I2C device and reset its registers to their default values.

Parameters:
  • dev -

    Device to initialize.

void i2c_master_enable(i2c_dev * dev, uint32 flags)

Initialize an I2C device as bus master.

Parameters:
  • dev -

    Device to enable

  • flags -

    Bitwise or of the following I2C options: I2C_FAST_MODE: 400 khz operation, I2C_DUTY_16_9: 16/9 Tlow/Thigh duty cycle (only applicable for fast mode), I2C_BUS_RESET: Reset the bus and clock out any hung slaves on initialization, I2C_10BIT_ADDRESSING: Enable 10-bit addressing, I2C_REMAP: Remap I2C1 to SCL/PB8 SDA/PB9.

int32 i2c_master_xfer(i2c_dev * dev, i2c_msg * msgs, uint16 num, uint32 timeout)

Process an i2c transaction.

Transactions are composed of one or more i2c_msg’s, and may be read or write tranfers. Multiple i2c_msg’s will generate a repeated start in between messages.

Parameters:
  • dev -

    I2C device

  • msgs -

    Messages to send/receive

  • num -

    Number of messages to send/receive

  • timeout -

    Bus idle timeout in milliseconds before aborting the transfer. 0 denotes no timeout.

Return:

0 on success, I2C_ERROR_PROTOCOL if there was a protocol error, I2C_ERROR_TIMEOUT if the transfer timed out.

void i2c_bus_reset(const i2c_dev * dev)

Reset an I2C bus.

Reset is accomplished by clocking out pulses until any hung slaves release SDA and SCL, then generating a START condition, then a STOP condition.

Parameters:
  • dev -

    I2C device

void i2c_disable(i2c_dev * dev)

Disable an I2C device.

This function disables the corresponding peripheral and marks dev’s state as I2C_STATE_DISABLED.

Parameters:
  • dev -

    Device to disable.

void i2c_peripheral_enable(i2c_dev * dev)

Turn on an I2C peripheral.

Parameters:
  • dev -

    Device to enable

void i2c_peripheral_disable(i2c_dev * dev)

Turn off an I2C peripheral.

Parameters:
  • dev -

    Device to turn off

void i2c_write(i2c_dev * dev, uint8 byte)

Fill transmit register.

Parameters:
  • dev -

    I2C device

  • byte -

    Byte to write

void i2c_set_input_clk(i2c_dev * dev, uint32 freq)

Set input clock frequency, in MHz.

Parameters:
  • dev -

    I2C device

  • freq -

    Frequency in megahertz (2-36)

void i2c_set_clk_control(i2c_dev * dev, uint32 val)

Set I2C clock control register.

See RM008

Parameters:
  • dev -

    I2C device

  • val -

    Value to use for clock control register (in Fast/Standard mode)

void i2c_set_trise(i2c_dev * dev, uint32 trise)

Set SCL rise time.

Parameters:
  • dev -

    I2C device

  • trise -

    Maximum rise time in fast/standard mode (see RM0008 for relevant formula).

void i2c_start_condition(i2c_dev * dev)

Generate a start condition on the bus.

Parameters:
  • dev -

    I2C device

void i2c_stop_condition(i2c_dev * dev)

Generate a stop condition on the bus.

Parameters:
  • dev -

    I2C device

void i2c_enable_irq(i2c_dev * dev, uint32 irqs)

void i2c_disable_irq(i2c_dev * dev, uint32 irqs)

Disable one or more I2C interrupts.

Parameters:
  • dev -

    I2C device

  • irqs -

    Bitwise or of: I2C_IRQ_ERROR (error interrupt), I2C_IRQ_EVENT (event interrupt), and I2C_IRQ_BUFFER (buffer interrupt).

void i2c_enable_ack(i2c_dev * dev)

Enable I2C acknowledgment.

Parameters:
  • dev -

    I2C device

void i2c_disable_ack(i2c_dev * dev)

Disable I2C acknowledgment.

Parameters:
  • dev -

    I2C device

Variables
i2c_dev *const I2C1

I2C1 device.

i2c_dev *const I2C2

I2C2 device.

class i2c_reg_map

I2C register map type.

Public Members
__io uint32 CR1

Control register 1.

__io uint32 CR2

Control register 2.

__io uint32 OAR1

Own address register 1.

__io uint32 OAR2

Own address register 2.

__io uint32 DR

Data register.

__io uint32 SR1

Status register 1.

__io uint32 SR2

Status register 2.

__io uint32 CCR

Clock control register.

__io uint32 TRISE

TRISE register.

class i2c_msg

I2C message type.

Public Members
uint16 addr

Address.

uint16 flags

Bitwise OR of I2C_MSG_READ and I2C_MSG_10BIT_ADDR.

uint16 length

Message length.

uint16 xferred

Messages transferred.

uint8 * data

Data.

class i2c_dev

I2C device type.

Public Members
i2c_reg_map * regs

Register map.

gpio_dev * gpio_port

SDA, SCL pins’ GPIO port.

uint8 sda_pin

SDA bit on gpio_port.

uint8 scl_pin

SCL bit on gpio_port.

rcc_clk_id clk_id

RCC clock information.

nvic_irq_num ev_nvic_line

Event IRQ number.

nvic_irq_num er_nvic_line

Error IRQ number.

i2c_state state

Device state.

uint16 msgs_left

Messages left.

i2c_msg * msg

Messages.

uint32 timestamp

For internal use.

uint32 error_flags

Error flags, set on I2C error condition.