int i2c_master_recv_data(unsigned int addr, unsigned char *data, unsigned int len) { unsigned int i = 0; int ret = 0; ret = i2c_set_master(); // get iic bus, as bus master; if (ret) { putstring("\nget i2c bus error\n"); return ret; // error while getting bus } i2c_enable_irq(); i2c_message_start(addr, 1); while (1) { i++; if (i == len) { // last byte i2c_disable_ack(); break; } *data++ = IICDS; IICCON &= ~(1 << 4); // resume trasmit // TODO dealy ?? for (ret = 0; ret < 30; ret++) ; // setup time } /* last byte */ *data++ = IICDS; IICCON &= ~(1 << 4); // resume trasmit // TODO dealy ?? for (ret = 0; ret < 30; ret++) ; // setup time return len; }
inline void i2c_start(I2C_MemMapPtr p) { i2c_set_master(p); i2c_set_tx(p); }
void i2c_start(I2C_Type *p) { i2c_set_master(p); i2c_set_tx(p); }