Пример #1
0
/*---------------------------------------------------------------------------*/
static int16_t
adxl346_read_accel(uint8_t addr1, uint8_t addr2)
{
  uint8_t acceleration[2];
  int16_t result;

  i2c_single_send(ADXL346_ADDRESS, addr1);
  i2c_single_receive(ADXL346_ADDRESS, &acceleration[0]);
  i2c_single_send(ADXL346_ADDRESS, addr2);
  i2c_single_receive(ADXL346_ADDRESS, &acceleration[1]);

  result = (acceleration[1] << 8) | acceleration[0];

  return result;
}
Пример #2
0
/*---------------------------------------------------------------------------*/
uint16_t
adxl346_read_z(void)
{
  uint8_t acceleration[2];
  uint16_t z;

  i2c_single_send(ADXL346_ADDRESS, ADXL346_DATAZ0_ADDR);
  i2c_single_receive(ADXL346_ADDRESS, &acceleration[0]);
  i2c_single_send(ADXL346_ADDRESS, ADXL346_DATAZ1_ADDR);
  i2c_single_receive(ADXL346_ADDRESS, &acceleration[1]);

  z = (acceleration[0] << 8) | acceleration[1];

  return z;
}
Пример #3
0
/*---------------------------------------------------------------------------*/
uint16_t
adxl346_read_y(void)
{
  uint8_t acceleration[2];
  uint16_t y;

  i2c_single_send(ADXL346_ADDRESS, ADXL346_DATAY0_ADDR);
  i2c_single_receive(ADXL346_ADDRESS, &acceleration[0]);
  i2c_single_send(ADXL346_ADDRESS, ADXL346_DATAY1_ADDR);
  i2c_single_receive(ADXL346_ADDRESS, &acceleration[1]);

  y = (acceleration[0] << 8) | acceleration[1];

  return y;
}
Пример #4
0
/*---------------------------------------------------------------------------*/
uint16_t
adxl346_read_x(void)
{
  uint8_t acceleration[2];
  uint16_t x;

  i2c_single_send(ADXL346_ADDRESS, ADXL346_DATAX0_ADDR);
  i2c_single_receive(ADXL346_ADDRESS, &acceleration[0]);
  i2c_single_send(ADXL346_ADDRESS, ADXL346_DATAX1_ADDR);
  i2c_single_receive(ADXL346_ADDRESS, &acceleration[1]);

  x = (acceleration[0] << 8) | acceleration[1];

  return x;
}
Пример #5
0
/*---------------------------------------------------------------------------*/
uint8_t
i2c_burst_send(uint8_t slave_addr, uint8_t *data, uint8_t len)
{
  uint8_t sent;
  if((len == 0) || (data == NULL)) {
    return I2CM_STAT_INVALID;
  }
  if(len == 1) {
    return i2c_single_send(slave_addr, data[0]);
  }
  i2c_master_set_slave_address(slave_addr, I2C_SEND);
  i2c_master_data_put(data[0]);
  i2c_master_command(I2C_MASTER_CMD_BURST_SEND_START);
  while(i2c_master_busy());
  if(i2c_master_error() == I2C_MASTER_ERR_NONE) {
    for(sent = 1; sent <= (len - 2); sent++) {
      i2c_master_data_put(data[sent]);
      i2c_master_command(I2C_MASTER_CMD_BURST_SEND_CONT);
      while(i2c_master_busy());
    }
    /* This should be the last byte, stop sending */
    i2c_master_data_put(data[len - 1]);
    i2c_master_command(I2C_MASTER_CMD_BURST_SEND_FINISH);
    while(i2c_master_busy());
  }

  /* Return the STAT register of I2C module if error occurred, I2C_MASTER_ERR_NONE otherwise */
  return i2c_master_error();
}
Пример #6
0
/*---------------------------------------------------------------------------*/
void
bme280_arch_i2c_read_mem(uint8_t addr, uint8_t reg, uint8_t *buf, uint8_t bytes)
{
  i2c_master_enable();
  if(i2c_single_send(addr, reg) == I2C_MASTER_ERR_NONE) {
    while(i2c_master_busy());
    i2c_burst_receive(addr, buf, bytes);
  }
}
Пример #7
0
/*---------------------------------------------------------------------------*/
static uint16_t
sht25_read_reg(uint8_t reg, uint8_t *buf, uint8_t regNum)
{
  if(i2c_single_send(SHT25_ADDR, reg) == I2C_MASTER_ERR_NONE) {
    if(i2c_burst_receive(SHT25_ADDR, buf, regNum) == I2C_MASTER_ERR_NONE) {
      return SHT25_SUCCESS;
    }
  }
  return SHT25_ERROR;
}
Пример #8
0
/*---------------------------------------------------------------------------*/
static uint8_t
adxl346_is_present(void)
{
  uint8_t is_present;

  i2c_single_send(ADXL346_ADDRESS, ADXL346_DEVID_ADDR);
  i2c_single_receive(ADXL346_ADDRESS, &is_present);

  return is_present == ADXL346_DEVID_VALUE;
}
Пример #9
0
/*---------------------------------------------------------------------------*/
static int value(int type) {
	uint8_t temp[2] = { 0, 0 };

	/* set pointer to temperature register */
	i2c_single_send(SE95_ADDR, 0);
	/* receive the data */
	i2c_burst_receive(SE95_ADDR, temp, 2);

	return ((( temp[0] << 8 ) + temp[1]) >> 3);
}
Пример #10
0
/*---------------------------------------------------------------------------*/
static uint16_t
sht25_read_reg(uint8_t reg, uint8_t *buf, uint8_t num)
{
  if((buf == NULL) || (num <= 0)) {
    return SHT25_ERROR;
  }

  i2c_master_enable();
  if(i2c_single_send(SHT25_ADDR, reg) == I2C_MASTER_ERR_NONE) {
    if(i2c_burst_receive(SHT25_ADDR, buf, num) == I2C_MASTER_ERR_NONE) {
      return SHT25_SUCCESS;
    }
  }
  return SHT25_ERROR;
}