XCORE SDK
XCORE Software Development Kit
i2c.h
1 // Copyright 2021 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 #ifndef _i2c_c_h_
4 #define _i2c_c_h_
5 
6 #include <sys/types.h>
7 #include <xcore/port.h>
8 #include <xcore/clock.h>
9 #include <xcore/hwtimer.h>
10 
21 typedef enum {
27 
31 typedef struct i2c_master_struct i2c_master_t;
32 
39  port_t p_scl;
40  uint32_t scl_mask;
41  port_t p_sda;
42  uint32_t sda_mask;
43 
44  uint32_t scl_high;
45  uint32_t sda_high;
46  uint32_t scl_low;
47  uint32_t sda_low;
48 
49  uint16_t bit_time;
50  uint16_t p_setup_ticks;
51  uint16_t sr_setup_ticks;
52  uint16_t s_hold_ticks;
53  uint16_t low_period_ticks;
54  uint16_t high_period_ticks;
55 
56  int interrupt_state;
57  int stopped;
58 };
59 
82  i2c_master_t *ctx,
83  uint8_t device_addr,
84  uint8_t buf[],
85  size_t n,
86  size_t *num_bytes_sent,
87  int send_stop_bit);
88 
106  i2c_master_t *ctx,
107  uint8_t device_addr,
108  uint8_t buf[],
109  size_t n,
110  int send_stop_bit);
111 
123  i2c_master_t *ctx);
124 
125 
145  i2c_master_t *ctx,
146  const port_t p_scl,
147  const uint32_t scl_bit_position,
148  const uint32_t scl_other_bits_mask,
149  const port_t p_sda,
150  const uint32_t sda_bit_position,
151  const uint32_t sda_other_bits_mask,
152  const unsigned kbits_per_second);
153 
154 
167  // END: addtogroup hil_i2c_master
169 
183 typedef enum i2c_slave_ack {
187 
205 typedef i2c_slave_ack_t (*ack_read_request_t)(void *app_data);
206 
224 typedef i2c_slave_ack_t (*ack_write_request_t)(void *app_data);
225 
238 typedef uint8_t (*master_requires_data_t)(void *app_data);
239 
254 typedef i2c_slave_ack_t (*master_sent_data_t)(void *app_data, uint8_t data);
255 
266 typedef void (*stop_bit_t)(void *app_data);
267 
281 typedef int (*shutdown_t)(void *app_data);
282 
287 #define I2C_CALLBACK_ATTR __attribute__((fptrgroup("i2c_callback")))
288 
294 typedef struct {
297 
300 
303 
306 
309 
312 
314  void *app_data;
316 
333 void i2c_slave(const i2c_callback_group_t *const i2c_cbg,
334  port_t p_scl,
335  port_t p_sda,
336  uint8_t device_addr);
337  // END: addtogroup hil_i2c_slave
339 
340 #include "i2c_reg.h"
341 
342 #endif
void i2c_master_init(i2c_master_t *ctx, const port_t p_scl, const uint32_t scl_bit_position, const uint32_t scl_other_bits_mask, const port_t p_sda, const uint32_t sda_bit_position, const uint32_t sda_other_bits_mask, const unsigned kbits_per_second)
i2c_res_t
Definition: i2c.h:21
void i2c_master_shutdown(i2c_master_t *ctx)
i2c_res_t i2c_master_write(i2c_master_t *ctx, uint8_t device_addr, uint8_t buf[], size_t n, size_t *num_bytes_sent, int send_stop_bit)
void i2c_master_stop_bit_send(i2c_master_t *ctx)
i2c_res_t i2c_master_read(i2c_master_t *ctx, uint8_t device_addr, uint8_t buf[], size_t n, int send_stop_bit)
@ I2C_STARTED
Definition: i2c.h:24
@ I2C_NOT_STARTED
Definition: i2c.h:25
@ I2C_NACK
Definition: i2c.h:22
@ I2C_ACK
Definition: i2c.h:23
i2c_slave_ack_t(* ack_write_request_t)(void *app_data)
Definition: i2c.h:224
int(* shutdown_t)(void *app_data)
Definition: i2c.h:281
i2c_slave_ack
Definition: i2c.h:183
enum i2c_slave_ack i2c_slave_ack_t
i2c_slave_ack_t(* ack_read_request_t)(void *app_data)
Definition: i2c.h:205
i2c_slave_ack_t(* master_sent_data_t)(void *app_data, uint8_t data)
Definition: i2c.h:254
uint8_t(* master_requires_data_t)(void *app_data)
Definition: i2c.h:238
#define I2C_CALLBACK_ATTR
Definition: i2c.h:287
void i2c_slave(const i2c_callback_group_t *const i2c_cbg, port_t p_scl, port_t p_sda, uint8_t device_addr)
void(* stop_bit_t)(void *app_data)
Definition: i2c.h:266
@ I2C_SLAVE_ACK
Definition: i2c.h:184
@ I2C_SLAVE_NACK
Definition: i2c.h:185
Definition: i2c.h:294
I2C_CALLBACK_ATTR master_requires_data_t master_requires_data
Definition: i2c.h:302
I2C_CALLBACK_ATTR ack_read_request_t ack_read_request
Definition: i2c.h:296
I2C_CALLBACK_ATTR stop_bit_t stop_bit
Definition: i2c.h:308
void * app_data
Definition: i2c.h:314
I2C_CALLBACK_ATTR ack_write_request_t ack_write_request
Definition: i2c.h:299
I2C_CALLBACK_ATTR shutdown_t shutdown
Definition: i2c.h:311
I2C_CALLBACK_ATTR master_sent_data_t master_sent_data
Definition: i2c.h:305
Definition: i2c.h:38