示例#1
0
uint8_t
MPU9250::read_reg(unsigned reg, uint32_t speed)
{
	uint8_t buf;

	if (_whoami == ICM_WHOAMI_20948) {
		select_register_bank(REG_BANK(reg));
		_interface->read(MPU9250_SET_SPEED(REG_ADDRESS(reg), speed), &buf, 1);

	} else {
		_interface->read(MPU9250_SET_SPEED(REG_ADDRESS(reg), speed), &buf, 1);
	}

	return buf;
}
示例#2
0
uint8_t
MPU9250::read_reg_range(unsigned start_reg, uint32_t speed, uint8_t *buf, uint16_t count)
{
	uint8_t ret;

	if (buf == NULL) { return PX4_ERROR; }

	if (_whoami == ICM_WHOAMI_20948) {
		select_register_bank(REG_BANK(start_reg));
		ret = _interface->read(MPU9250_SET_SPEED(REG_ADDRESS(start_reg), speed), buf, count);

	} else {
		ret = _interface->read(MPU9250_SET_SPEED(REG_ADDRESS(start_reg), speed), buf, count);
	}

	return ret;
}
示例#3
0
uint8_t
MPU9250::read_reg_range(unsigned start_reg, uint32_t speed, uint8_t *buf, uint16_t count)
{
	if (buf == NULL) {
		return PX4_ERROR;
	}

	return _interface->read(MPU9250_SET_SPEED(REG_ADDRESS(start_reg), speed), buf, count);
}
示例#4
0
uint8_t
MPU9250::read_reg(unsigned reg, uint32_t speed)
{
	uint8_t buf{};

	_interface->read(MPU9250_SET_SPEED(REG_ADDRESS(reg), speed), &buf, 1);

	return buf;
}
示例#5
0
void
MPU9250::write_reg(unsigned reg, uint8_t value)
{
	// general register transfer at low clock speed

	if (_whoami == ICM_WHOAMI_20948) {
		select_register_bank(REG_BANK(reg));
		_interface->write(MPU9250_LOW_SPEED_OP(REG_ADDRESS(reg)), &value, 1);

	} else {
		_interface->write(MPU9250_LOW_SPEED_OP(reg), &value, 1);
	}
}
示例#6
0
uint16_t
MPU9250::read_reg16(unsigned reg)
{
	uint8_t buf[2];

	// general register transfer at low clock speed

	if (_whoami == ICM_WHOAMI_20948) {
		select_register_bank(REG_BANK(reg));
		_interface->read(MPU9250_LOW_SPEED_OP(REG_ADDRESS(reg)), &buf, arraySize(buf));

	} else {
		_interface->read(MPU9250_LOW_SPEED_OP(reg), &buf, arraySize(buf));
	}

	return (uint16_t)(buf[0] << 8) | buf[1];
}