int main(void) { //! [init] system_clock_config(CLOCK_RESOURCE_XO_26_MHZ, CLOCK_FREQ_26_MHZ); configure_i2c_slave(); //! [packet] struct i2c_slave_packet packet = { .data_length = DATA_LENGTH, .data = write_buffer, }; //! [packet] //! [init] //! [while] while (true) { packet.data = read_buffer; i2c_slave_read_packet_wait(&i2c_slave_instance, &packet); packet.data = write_buffer; i2c_slave_write_packet_wait(&i2c_slave_instance, &packet); } //! [while] }
int main(void) { system_init(); //! [run_initialize_i2c] //! [config] configure_i2c_slave(); //! [config] //! [dir] enum i2c_slave_direction dir; //! [dir] //! [pack] struct i2c_slave_packet packet = { .data_length = DATA_LENGTH, .data = buffer, }; //! [pack] //! [run_initialize_i2c] //! [while] while (true) { /* Wait for direction from master */ //! [get_dir] dir = i2c_slave_get_direction_wait(&i2c_slave_instance); //! [get_dir] /* Transfer packet in direction requested by master */ //! [transfer] if (dir == I2C_SLAVE_DIRECTION_READ) { i2c_slave_read_packet_wait(&i2c_slave_instance, &packet); } else if (dir == I2C_SLAVE_DIRECTION_WRITE) { i2c_slave_write_packet_wait(&i2c_slave_instance, &packet); } //! [transfer] } //! [while] }