cmd = Temp_H;< p>
user_i2c_set_slave_address(Si705_I2C_ADDRESS);< p>
user_i2c_multi_byte_read(cmd, data,
degrees = convert_to_celsius(degrees);< p>
degrees = convert_to_celsius(degrees);< p>
return degrees;< p>
我使用的代码读取字节如下:
void user_i2c_multi_byte_read(uint32_t reg_address, uint8_t *rd_data, uint8_t *rd_data)
Uint32_t index = 0;< p>
for(Uint32_t I = 0;我& lt;
SEND_I2C_COMMAND(0x0100 &0 x3ff); // Set R/W bit to 1 (read access) MSB
if(!(++i % 24)){ //FIFO is 32 bits
WAIT_UNTIL_I2C_FIFO_IS_EMPTY(); // Wait until Tx FIFO is empty
WAIT_UNTIL_NO_MASTER_ACTIVITY(); // wait until no master activity
for (uint8_t j = 0; j < 24; j++){
//Store the FIFO contents in ram
rd_data[index++] = (0xFF & GetWord16(I2C_DATA_CMD_REG)); // Get received byte
}
reg_address += 24/(i2c_cfg_env.register_width + 1);//Calculate the next register to read out
user_i2c_send_address(reg_address); //Restart the read
}
}
WAIT_UNTIL_I2C_FIFO_IS_EMPTY(); // Wait until I2C Tx FIFO empty
WAIT_UNTIL_NO_MASTER_ACTIVITY();
while(index < num_bytes){
rd_data[index++] = (0xFF & GetWord16(I2C_DATA_CMD_REG)); // Get received byte
}
WAIT_UNTIL_I2C_FIFO_IS_EMPTY(); // Wait until Tx FIFO is empty
WAIT_UNTIL_NO_MASTER_ACTIVITY(); // wait until no master activity }