Skip to content

Commit d94eb1e

Browse files
committed
rp2/machine_i2c_target: Update bindings.
Signed-off-by: Damien George <[email protected]>
1 parent 9333052 commit d94eb1e

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

ports/rp2/machine_i2c_target.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ typedef struct _machine_i2c_target_obj_t {
8080
bool irq_active;
8181
} machine_i2c_target_obj_t;
8282

83-
static machine_i2c_target_data_t i2c_target_data[4];
84-
8583
static machine_i2c_target_obj_t machine_i2c_target_obj[] = {
8684
{{&machine_i2c_target_type}, i2c0, MICROPY_HW_I2C0_SCL, MICROPY_HW_I2C0_SDA},
8785
{{&machine_i2c_target_type}, i2c1, MICROPY_HW_I2C1_SCL, MICROPY_HW_I2C1_SDA},
@@ -96,7 +94,7 @@ static void check_stop_pending(machine_i2c_target_obj_t *self) {
9694
}
9795
if (self->stop_pending && !(self->i2c_inst->hw->status & I2C_IC_STATUS_RFNE_BITS)) {
9896
unsigned int i2c_id = self - &machine_i2c_target_obj[0];
99-
machine_i2c_target_data_t *data = &i2c_target_data[i2c_id];
97+
machine_i2c_target_data_t *data = &machine_i2c_target_data[i2c_id];
10098
self->stop_pending = false;
10199
self->state = STATE_IDLE;
102100
machine_i2c_target_data_restart_or_stop(data);
@@ -106,7 +104,7 @@ static void check_stop_pending(machine_i2c_target_obj_t *self) {
106104
static void i2c_target_handler(i2c_inst_t *i2c) {
107105
unsigned int i2c_id = i2c == i2c0 ? 0 : 1;
108106
machine_i2c_target_obj_t *self = &machine_i2c_target_obj[i2c_id];
109-
machine_i2c_target_data_t *data = &i2c_target_data[i2c_id];
107+
machine_i2c_target_data_t *data = &machine_i2c_target_data[i2c_id];
110108

111109
self->irq_active = true;
112110

@@ -224,6 +222,10 @@ static void i2c_slave_deinit(i2c_inst_t *i2c) {
224222
/******************************************************************************/
225223
// I2CTarget port implementation
226224

225+
static inline size_t mp_machine_i2c_target_get_index(machine_i2c_target_obj_t *self) {
226+
return self - &machine_i2c_target_obj[0];
227+
}
228+
227229
static void mp_machine_i2c_target_deinit_all_port(void) {
228230
}
229231

@@ -267,7 +269,6 @@ static void mp_machine_i2c_target_irq_config(machine_i2c_target_obj_t *self, uns
267269
}
268270

269271
static mp_obj_t mp_machine_i2c_target_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
270-
// TODO: reconsider order of arguments
271272
enum { ARG_id, ARG_addr, ARG_addrsize, ARG_mem, ARG_mem_addrsize, ARG_scl, ARG_sda };
272273
static const mp_arg_t allowed_args[] = {
273274
#ifdef PICO_DEFAULT_I2C
@@ -301,8 +302,8 @@ static mp_obj_t mp_machine_i2c_target_make_new(const mp_obj_type_t *type, size_t
301302
self->state = STATE_IDLE;
302303
self->stop_pending = false;
303304
self->irq_active = false;
304-
MP_STATE_PORT(i2c_target_mem_obj)[i2c_id] = args[ARG_mem].u_obj;
305-
machine_i2c_target_data_t *data = &i2c_target_data[i2c_id];
305+
MP_STATE_PORT(machine_i2c_target_mem_obj)[i2c_id] = args[ARG_mem].u_obj;
306+
machine_i2c_target_data_t *data = &machine_i2c_target_data[i2c_id];
306307
machine_i2c_target_data_init(data, args[ARG_mem].u_obj, args[ARG_mem_addrsize].u_int);
307308

308309
// Set SCL/SDA pins if configured.

ports/rp2/mpconfigport.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@
173173
#define MICROPY_PY_MACHINE_I2C (1)
174174
#define MICROPY_PY_MACHINE_I2C_TARGET (1)
175175
#define MICROPY_PY_MACHINE_I2C_TARGET_INCLUDEFILE "ports/rp2/machine_i2c_target.c"
176+
#define MICROPY_PY_MACHINE_I2C_TARGET_MAX (2)
177+
#define MICROPY_PY_MACHINE_I2C_TARGET_HARD_IRQ (1)
176178
#define MICROPY_PY_MACHINE_SOFTI2C (1)
177179
#define MICROPY_PY_MACHINE_I2S (1)
178180
#define MICROPY_PY_MACHINE_I2S_INCLUDEFILE "ports/rp2/machine_i2s.c"

0 commit comments

Comments
 (0)