Example #1
0
static rtems_status_code lm3s69xx_ssi_send_addr(rtems_libi2c_bus_t *bus,
        uint32_t addr, int rw)
{
  lm3s69xx_ssi_bus_entry *e = (lm3s69xx_ssi_bus_entry *)bus;
  e->cs_pin = addr;
  lm3s69xx_gpio_set_pin(e->cs_pin, false);

  return RTEMS_SUCCESSFUL;
}
Example #2
0
static rtems_status_code lm3s69xx_ssi_send_stop(rtems_libi2c_bus_t *bus)
{
  lm3s69xx_ssi_bus_entry *e = (lm3s69xx_ssi_bus_entry *)bus;
  volatile lm3s69xx_ssi* regs = e->regs;

  while ((regs->sr & SSISR_BSY) != 0)
    /* wait */;

  lm3s69xx_gpio_set_pin(e->cs_pin, true);

  return RTEMS_SUCCESSFUL;
}
Example #3
0
void gyroscope_init(int spi_bus_num)
{
  printf("Initializing gyroscope...\n");

  lm3s69xx_gpio_set_pin(SSI_SS_PIN, true);
  lm3s69xx_gpio_digital_enable(SSI_SS_PIN, true);

  rtems_device_minor_number minor = RTEMS_LIBI2C_MAKE_MINOR(spi_bus_num, SSI_SS_PIN);

  check_whoami(minor);
  init_l3g4200d(minor);

  measure_offset(minor, &gyro_data.offset);
  printf("Gyroscope offset: %"PRId16", %"PRId16", %"PRId16"\n",
      gyro_data.offset.x, gyro_data.offset.y, gyro_data.offset.z);

  rtems_id task_id;

  rtems_task_create(rtems_build_name('G', 'Y', 'R', 'O'), 1,
      RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES,
      RTEMS_DEFAULT_ATTRIBUTES, &task_id);

  rtems_task_start(task_id, gyroscope_task, 0);
}