Exemple #1
0
void accel_init()
{
	int whoami = accel_get_reg(ACCEL_WHOAMI);
	if(whoami != ACCEL_WHOAMI_VALUE)
	{
		bufferPrintf("accel: incorrect whoami value\n");
		return;
	}

	accel_write_reg(ACCEL_CTRL_REG2, ACCEL_CTRL_REG2_BOOT, FALSE);
	accel_write_reg(ACCEL_CTRL_REG1, ACCEL_CTRL_REG1_PM0 | ACCEL_CTRL_REG1_XEN | ACCEL_CTRL_REG1_YEN | ACCEL_CTRL_REG1_ZEN, FALSE);
}
Exemple #2
0
void imu_init(void)
{
  printf("imu init\r\n");
  RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
  pin_set_output(GPIOE, PORTE_CS, 1);
  pin_set_alternate_function(GPIOA, PORTA_SCLK, 5);
  pin_set_alternate_function(GPIOA, PORTA_MISO, 5);
  pin_set_alternate_function(GPIOB, PORTB_MOSI, 5);
  pin_set_output_speed(GPIOA, PORTA_SCLK, 3);
  pin_set_output_speed(GPIOB, PORTB_MOSI, 3);
  pin_set_output_speed(GPIOE, PORTE_CS  , 3);
  SPI1->CR1 = SPI_CR1_SSM  | // software slave select management
              SPI_CR1_SSI  | // assert software select state
              SPI_CR1_CPHA | // clock phase: cpha = 1, cpol = 1
              SPI_CR1_CPOL | // ditto
              SPI_CR1_MSTR | // master mode
              SPI_CR1_BR_0 | // baud rate sel. need to calculate.
              SPI_CR1_BR_1 | // ditto
              SPI_CR1_SPE  ; // enable SPI
  delay_us(100);
  accel_write_reg(0x20, 0x87); // set max beef (1600 Hz)
  delay_us(100); // wake up plz
#ifdef PRINT_REGISTER_TABLE
  uint8_t info1 = accel_read_reg(0x0d);
  printf("info1 = 0x%02x\r\n", (unsigned)info1);
#endif
  float test_accel[3] = {0};
  for (int i = 0; i < 10; i++)
  {
    delay_ms(10);
    imu_poll_accels(test_accel);
  }
}