Lines Matching refs:i2c
18 static inline void i2c_reset(i2c_inst_t *i2c) { in i2c_reset() argument
19 invalid_params_if(HARDWARE_I2C, i2c != i2c0 && i2c != i2c1); in i2c_reset()
20 reset_block_num(i2c == i2c0 ? RESET_I2C0 : RESET_I2C1); in i2c_reset()
23 static inline void i2c_unreset(i2c_inst_t *i2c) { in i2c_unreset() argument
24 invalid_params_if(HARDWARE_I2C, i2c != i2c0 && i2c != i2c1); in i2c_unreset()
25 unreset_block_num_wait_blocking(i2c == i2c0 ? RESET_I2C0 : RESET_I2C1); in i2c_unreset()
32 uint i2c_init(i2c_inst_t *i2c, uint baudrate) { in i2c_init() argument
33 i2c_reset(i2c); in i2c_init()
34 i2c_unreset(i2c); in i2c_init()
35 i2c->restart_on_next = false; in i2c_init()
37 i2c->hw->enable = 0; in i2c_init()
40 i2c->hw->con = in i2c_init()
48 i2c->hw->tx_tl = 0; in i2c_init()
49 i2c->hw->rx_tl = 0; in i2c_init()
52 i2c->hw->dma_cr = I2C_IC_DMA_CR_TDMAE_BITS | I2C_IC_DMA_CR_RDMAE_BITS; in i2c_init()
55 return i2c_set_baudrate(i2c, baudrate); in i2c_init()
58 void i2c_deinit(i2c_inst_t *i2c) { in i2c_deinit() argument
59 i2c_reset(i2c); in i2c_deinit()
62 uint i2c_set_baudrate(i2c_inst_t *i2c, uint baudrate) { in i2c_set_baudrate() argument
95 i2c->hw->enable = 0; in i2c_set_baudrate()
97 hw_write_masked(&i2c->hw->con, in i2c_set_baudrate()
101 i2c->hw->fs_scl_hcnt = hcnt; in i2c_set_baudrate()
102 i2c->hw->fs_scl_lcnt = lcnt; in i2c_set_baudrate()
103 i2c->hw->fs_spklen = lcnt < 16 ? 1 : lcnt / 16; in i2c_set_baudrate()
104 hw_write_masked(&i2c->hw->sda_hold, in i2c_set_baudrate()
108 i2c->hw->enable = 1; in i2c_set_baudrate()
112 void i2c_set_slave_mode(i2c_inst_t *i2c, bool slave, uint8_t addr) { in i2c_set_slave_mode() argument
115 i2c->hw->enable = 0; in i2c_set_slave_mode()
119 hw_write_masked(&i2c->hw->con, in i2c_set_slave_mode()
123 i2c->hw->sar = addr; in i2c_set_slave_mode()
125 hw_write_masked(&i2c->hw->con, in i2c_set_slave_mode()
130 i2c->hw->enable = 1; in i2c_set_slave_mode()
133 static int i2c_write_blocking_internal(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t le… in i2c_write_blocking_internal() argument
142 i2c->hw->enable = 0; in i2c_write_blocking_internal()
143 i2c->hw->tar = addr; in i2c_write_blocking_internal()
144 i2c->hw->enable = 1; in i2c_write_blocking_internal()
161 i2c->hw->data_cmd = in i2c_write_blocking_internal()
162 bool_to_bit(first && i2c->restart_on_next) << I2C_IC_DATA_CMD_RESTART_LSB | in i2c_write_blocking_internal()
176 } while (!timeout && !(i2c->hw->raw_intr_stat & I2C_IC_RAW_INTR_STAT_TX_EMPTY_BITS)); in i2c_write_blocking_internal()
180 abort_reason = i2c->hw->tx_abrt_source; in i2c_write_blocking_internal()
185 i2c->hw->clr_tx_abrt; in i2c_write_blocking_internal()
202 … } while (!timeout && !(i2c->hw->raw_intr_stat & I2C_IC_RAW_INTR_STAT_STOP_DET_BITS)); in i2c_write_blocking_internal()
206 i2c->hw->clr_stop_det; in i2c_write_blocking_internal()
241 i2c->restart_on_next = nostop; in i2c_write_blocking_internal()
245 int i2c_write_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop) { in i2c_write_blocking() argument
246 return i2c_write_blocking_internal(i2c, addr, src, len, nostop, NULL, NULL); in i2c_write_blocking()
249 int i2c_write_blocking_until(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool no… in i2c_write_blocking_until() argument
252 …return i2c_write_blocking_internal(i2c, addr, src, len, nostop, init_single_timeout_until(&ts, unt… in i2c_write_blocking_until()
255 int i2c_write_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bo… in i2c_write_timeout_per_char_us() argument
258 return i2c_write_blocking_internal(i2c, addr, src, len, nostop, in i2c_write_timeout_per_char_us()
262 int i2c_write_burst_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len) { in i2c_write_burst_blocking() argument
263 int rc = i2c_write_blocking_internal(i2c, addr, src, len, true, NULL, NULL); in i2c_write_burst_blocking()
264 i2c->restart_on_next = false; in i2c_write_burst_blocking()
268 static int i2c_read_blocking_internal(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool… in i2c_read_blocking_internal() argument
275 i2c->hw->enable = 0; in i2c_read_blocking_internal()
276 i2c->hw->tar = addr; in i2c_read_blocking_internal()
277 i2c->hw->enable = 1; in i2c_read_blocking_internal()
291 while (!i2c_get_write_available(i2c)) in i2c_read_blocking_internal()
294 i2c->hw->data_cmd = in i2c_read_blocking_internal()
295 bool_to_bit(first && i2c->restart_on_next) << I2C_IC_DATA_CMD_RESTART_LSB | in i2c_read_blocking_internal()
300 abort_reason = i2c->hw->tx_abrt_source; in i2c_read_blocking_internal()
301 if (i2c->hw->raw_intr_stat & I2C_IC_RAW_INTR_STAT_TX_ABRT_BITS) { in i2c_read_blocking_internal()
303 i2c->hw->clr_tx_abrt; in i2c_read_blocking_internal()
309 } while (!abort && !i2c_get_read_available(i2c)); in i2c_read_blocking_internal()
314 *dst++ = (uint8_t) i2c->hw->data_cmd; in i2c_read_blocking_internal()
334 i2c->restart_on_next = nostop; in i2c_read_blocking_internal()
338 int i2c_read_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop) { in i2c_read_blocking() argument
339 return i2c_read_blocking_internal(i2c, addr, dst, len, nostop, NULL, NULL); in i2c_read_blocking()
342 int i2c_read_blocking_until(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, a… in i2c_read_blocking_until() argument
344 …return i2c_read_blocking_internal(i2c, addr, dst, len, nostop, init_single_timeout_until(&ts, unti… in i2c_read_blocking_until()
347 int i2c_read_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nost… in i2c_read_timeout_per_char_us() argument
350 return i2c_read_blocking_internal(i2c, addr, dst, len, nostop, in i2c_read_timeout_per_char_us()
354 int i2c_read_burst_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len) { in i2c_read_burst_blocking() argument
355 int rc = i2c_read_blocking_internal(i2c, addr, dst, len, true, NULL, NULL); in i2c_read_burst_blocking()
356 i2c->restart_on_next = false; in i2c_read_burst_blocking()