12#include "hardware/structs/i2c.h"
13#include "hardware/regs/dreq.h"
16#ifndef PARAM_ASSERTIONS_ENABLED_HARDWARE_I2C
17#ifdef PARAM_ASSERTIONS_ENABLED_I2C
18#define PARAM_ASSERTIONS_ENABLED_HARDWARE_I2C PARAM_ASSERTIONS_ENABLED_I2C
20#define PARAM_ASSERTIONS_ENABLED_HARDWARE_I2C 0
71#define i2c0 (&i2c0_inst)
72#define i2c1 (&i2c1_inst)
74#if !defined(PICO_DEFAULT_I2C_INSTANCE) && defined(PICO_DEFAULT_I2C)
75#define PICO_DEFAULT_I2C_INSTANCE() (__CONCAT(i2c,PICO_DEFAULT_I2C))
91#ifdef PICO_DEFAULT_I2C_INSTANCE
92#define i2c_default PICO_DEFAULT_I2C_INSTANCE()
153 bool restart_on_next;
165static_assert(NUM_I2CS == 2,
"");
166#define I2C_NUM(i2c) ((i2c) == i2c1)
178static_assert(NUM_I2CS == 2,
"");
179#define I2C_INSTANCE(num) ((num) ? i2c1 : i2c0)
195#define I2C_DREQ_NUM(i2c,is_tx) (DREQ_I2C0_TX + I2C_NUM(i2c) * 2 + !(is_tx))
205 invalid_params_if(HARDWARE_I2C, i2c !=
i2c0 && i2c !=
i2c1);
210#define i2c_hw_index(i2c) i2c_get_index(i2c)
230 invalid_params_if(HARDWARE_I2C, num >= NUM_I2CS);
285int i2c_write_timeout_per_char_us(
i2c_inst_t *i2c, uint8_t addr,
const uint8_t *src,
size_t len,
bool nostop, uint timeout_per_char_us);
304int i2c_read_timeout_per_char_us(
i2c_inst_t *i2c, uint8_t addr, uint8_t *dst,
size_t len,
bool nostop, uint timeout_per_char_us);
370 const size_t IC_TX_BUFFER_DEPTH = 16;
371 return IC_TX_BUFFER_DEPTH -
i2c_get_hw(i2c)->txflr;
396 for (
size_t i = 0; i < len; ++i) {
415 for (
size_t i = 0; i < len; ++i) {
433 assert(hw->status & I2C_IC_STATUS_RFNE_BITS);
434 return (uint8_t)hw->data_cmd;
448 assert(hw->status & I2C_IC_STATUS_TFNF_BITS);
449 hw->data_cmd = value;
@ DREQ_I2C1_RX
Select I2C1's RX FIFO as DREQ.
Definition dreq.h:102
@ DREQ_I2C0_RX
Select I2C0's RX FIFO as DREQ.
Definition dreq.h:100
@ DREQ_I2C1_TX
Select I2C1's TX FIFO as DREQ.
Definition dreq.h:101
@ DREQ_I2C0_TX
Select I2C0's TX FIFO as DREQ.
Definition dreq.h:99
static int i2c_write_timeout_us(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, uint timeout_us)
Attempt to write specified number of bytes to address, with timeout.
Definition i2c.h:280
#define I2C_NUM(i2c)
Returns the I2C number for a I2C instance.
Definition i2c.h:166
int i2c_read_blocking_until(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, absolute_time_t until)
Attempt to read specified number of bytes from address, blocking until the specified absolute time is...
Definition i2c.c:342
static i2c_inst_t * i2c_get_instance(uint num)
Convert I2C hardware instance number to I2C instance.
Definition i2c.h:229
void i2c_deinit(i2c_inst_t *i2c)
Disable the I2C HW block.
Definition i2c.c:58
void i2c_set_slave_mode(i2c_inst_t *i2c, bool slave, uint8_t addr)
Set I2C port to slave mode.
Definition i2c.c:112
int i2c_write_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop)
Attempt to write specified number of bytes to address, blocking.
Definition i2c.c:245
int i2c_write_burst_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len)
Attempt to write specified number of bytes to address, blocking in burst mode.
Definition i2c.c:262
i2c_inst_t i2c0_inst
Definition i2c.c:15
static size_t i2c_get_read_available(i2c_inst_t *i2c)
Determine number of bytes received.
Definition i2c.h:381
uint i2c_set_baudrate(i2c_inst_t *i2c, uint baudrate)
Set I2C baudrate.
Definition i2c.c:62
#define I2C_DREQ_NUM(i2c, is_tx)
Returns the dreq_num_t used for pacing DMA transfers to or from this I2C instance....
Definition i2c.h:195
static size_t i2c_get_write_available(i2c_inst_t *i2c)
Determine non-blocking write space available.
Definition i2c.h:369
static int i2c_read_timeout_us(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, uint timeout_us)
Attempt to read specified number of bytes from address, with timeout.
Definition i2c.h:299
static void i2c_write_byte_raw(i2c_inst_t *i2c, uint8_t value)
Push a byte into I2C Tx FIFO.
Definition i2c.h:446
#define I2C_INSTANCE(num)
Returns the I2C instance with the given I2C number.
Definition i2c.h:179
static uint i2c_get_index(i2c_inst_t *i2c)
Convert I2C instance to hardware instance number.
Definition i2c.h:204
static uint8_t i2c_read_byte_raw(i2c_inst_t *i2c)
Pop a byte from I2C Rx FIFO.
Definition i2c.h:431
int i2c_read_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop)
Attempt to read specified number of bytes from address, blocking.
Definition i2c.c:338
static void i2c_read_raw_blocking(i2c_inst_t *i2c, uint8_t *dst, size_t len)
Read direct from RX FIFO.
Definition i2c.h:414
static uint i2c_get_dreq(i2c_inst_t *i2c, bool is_tx)
Return the DREQ to use for pacing transfers to/from a particular I2C instance.
Definition i2c.h:458
uint i2c_init(i2c_inst_t *i2c, uint baudrate)
Initialise the I2C HW block.
Definition i2c.c:32
static void i2c_write_raw_blocking(i2c_inst_t *i2c, const uint8_t *src, size_t len)
Write direct to TX FIFO.
Definition i2c.h:395
int i2c_read_burst_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len)
Attempt to read specified number of bytes from address, blocking in burst mode.
Definition i2c.c:354
static i2c_hw_t * i2c_get_hw(i2c_inst_t *i2c)
Return pointer to structure containing i2c hardware registers.
Definition i2c.h:218
int i2c_write_blocking_until(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, absolute_time_t until)
Attempt to write specified number of bytes to address, blocking until the specified absolute time is ...
Definition i2c.c:249
static absolute_time_t make_timeout_time_us(uint64_t us)
Convenience method to get the timestamp a number of microseconds from the current time.
Definition time.h:136
uint64_t absolute_time_t
An opaque 64 bit timestamp in microseconds.
Definition types.h:43
#define i2c0
Identifier for I2C HW Block 0.
Definition i2c.h:71
#define i2c1
Identifier for I2C HW Block 1.
Definition i2c.h:72