Пример #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_receive(uint8_t slave_addr, uint8_t *data, uint8_t len)
{
  uint8_t recv = 0;
  if((len == 0) || data == NULL) {
    return I2CM_STAT_INVALID;
  }
  if(len == 1) {
    return i2c_single_receive(slave_addr, &data[0]);
  }
  i2c_master_set_slave_address(slave_addr, I2C_RECEIVE);
  i2c_master_command(I2C_MASTER_CMD_BURST_RECEIVE_START);
  while(i2c_master_busy());
  if(i2c_master_error() == I2C_MASTER_ERR_NONE) {
    data[0] = i2c_master_data_get();
    /* If we got 2 or more bytes pending to be received, keep going*/
    for(recv = 1; recv <= (len - 2); recv++) {
      i2c_master_command(I2C_MASTER_CMD_BURST_RECEIVE_CONT);
      while(i2c_master_busy());
      data[recv] = i2c_master_data_get();
    }
    /* This should be the last byte, stop receiving */
    i2c_master_command(I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
    while(i2c_master_busy());
    data[len - 1] = i2c_master_data_get();
  }
  return i2c_master_error();
}
Пример #6
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;
}