uint8_t i2cFlashRead(uint16_t addr, int numBytes, char *dataPtr){ int ret; int index; index = 0; numBytes--; i2c_start(intI2c); ret = i2c_write(intI2c, i2cFlashAddr | I2C_WRITE); //if (ret) return 1; ret = i2c_write(intI2c, ((addr) >> 8));// upper byte first //if (ret) return 1; ret = i2c_write(intI2c, ((addr) & 0xFF)); //if (ret) return 1; i2c_repeated_start(intI2c); i2c_write(intI2c, i2cFlashAddr | I2C_READ); // Send the read. i2c_set_rx(intI2c); dataPtr[0] = i2c_read(intI2c); // Dummy read i2c_wait(intI2c); while (numBytes--){ dataPtr[index++] = i2c_read(intI2c); i2c_give_ack(intI2c); i2c_wait(intI2c); } dataPtr[index++] = i2c_read(intI2c); i2c_give_nack(intI2c); i2c_stop(intI2c); return index; }
uint8_t mma8451_read(uint8_t addr) { delay(1); i2c_start(I2C0_B); i2c_write(I2C0_B, MMA8451_I2C_ADDRESS | I2C_WRITE); i2c_write(I2C0_B, addr); i2c_repeated_start(I2C0_B); i2c_write(I2C0_B, MMA8451_I2C_ADDRESS | I2C_READ); i2c_set_rx(I2C0_B); i2c_give_nack(I2C0_B); i2c_read(I2C0_B); i2c_wait(I2C0_B); i2c_stop(I2C0_B); return i2c_read(I2C0_B); }
uint8_t mag3110_read(uint8_t addr) { i2c_delay(); i2c_start(I2C0); i2c_write(I2C0, MAG3110_I2C_ADDR | I2C_WRITE); i2c_write(I2C0, addr); i2c_repeated_start(I2C0); i2c_write(I2C0, MAG3110_I2C_ADDR | I2C_READ); i2c_set_rx(I2C0); i2c_give_nack(I2C0); i2c_read(I2C0); i2c_wait(I2C0); i2c_stop(I2C0); return i2c_read(I2C0); }
uint8_t mma8451_read(uint8_t addr) { short n; for(n=0; n<100; n++) asm("nop"); i2c_start(I2C0_B); i2c_write(I2C0_B, MMA8451_I2C_ADDRESS | I2C_WRITE); i2c_write(I2C0_B, addr); i2c_repeated_start(I2C0_B); i2c_write(I2C0_B, MMA8451_I2C_ADDRESS | I2C_READ); i2c_set_rx(I2C0_B); i2c_give_nack(I2C0_B); i2c_read(I2C0_B); i2c_wait(I2C0_B); i2c_stop(I2C0_B); return i2c_read(I2C0_B); }
inline void i2c_stop(I2C_MemMapPtr p) { i2c_set_slave(p); i2c_set_rx(p); }
void i2c_stop(I2C_Type *p) { i2c_set_slave(p); i2c_set_rx(p); }