@@ -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-
8583static 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) {
106104static 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+
227229static 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
269271static 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.
0 commit comments