Ejemplo n.º 1
0
int I2C_read(unsigned char slave_addr, unsigned char reg_addr, unsigned char length, unsigned char *data)
{
    I2C_START();

	I2C_SendByte(slave_addr << 1 | I2C_Direction_Transmitter);

	I2C_SendByte(reg_addr);

	I2C_START();

	I2C_SendByte(slave_addr << 1 | I2C_Direction_Receiver);

    while (length)
	{
		if (length==1)
            *data =I2C_ReceiveByte();
        else
            *data =I2C_ReceiveByte_WithACK();
        data++;
        length--;
    }

	I2C_STOP();
    return 0x00;
}
Ejemplo n.º 2
0
// I2C模拟读出三个字节
uint32_t I2C_Read_3Bytes(uint8_t DeviceAddr, uint8_t address)
{
	uint8_t data_temp1, data_temp2, data_temp3;
	uint32_t data_32;

	I2C_START();
	I2C_SendByte(DeviceAddr);
	I2C_SendByte(address);
	I2C_START();
	I2C_SendByte(DeviceAddr + 1);
	data_temp1 = I2C_ReceiveByte_WithACK();
	data_temp2 = I2C_ReceiveByte_WithACK();	
	data_temp3 = I2C_ReceiveByte();
	I2C_STOP();
	
	data_32 = (data_temp1<<16) | (data_temp2<<8) | data_temp3;
	return data_32;
}
Ejemplo n.º 3
0
// I2C模拟读出两个字节
uint16_t I2C_Read_2Bytes(uint8_t DeviceAddr, uint8_t address)
{
	uint8_t data_temp1,data_temp2;
	uint16_t data_16;

	I2C_START();
	I2C_SendByte(DeviceAddr);
	I2C_SendByte(address);
	I2C_START();
	I2C_SendByte(DeviceAddr + 1);
	data_temp1 = I2C_ReceiveByte_WithACK();	
	data_temp2 = I2C_ReceiveByte();
	I2C_STOP();
	
	data_16 = (data_temp1<<8) | data_temp2;
	return data_16;
}
Ejemplo n.º 4
0
// I2C模拟读出多个字节
u8 i2cread(u8 dev_addr, u8 reg_addr, u8 i2c_len, u8 *i2c_data_buf)
{
		I2C_START();
		I2C_SendByte(dev_addr << 1 | I2C_Direction_Transmitter);
		I2C_SendByte(reg_addr);
		I2C_START();
		I2C_SendByte(dev_addr << 1 | I2C_Direction_Receiver);

    while (i2c_len) 
		{
			if (i2c_len == 1) 
				*i2c_data_buf = I2C_ReceiveByte();  
      else 
				*i2c_data_buf = I2C_ReceiveByte_WithACK();
      i2c_data_buf++;
      i2c_len--;
    }
		I2C_STOP();
    return 0x00;
}