Пример #1
0
static msg_t lsm303_acc_update_thread(void *p) {
  I2CDriver *i2cp = (I2CDriver *)p;

  while (TRUE) {
    msg_t msg;

    /* Waiting for the IRQ to happen.*/

    chSysLock();
    acctp = chThdSelf();
    chSchGoSleepS(THD_STATE_SUSPENDED);
    msg = chThdSelf()->p_u.rdymsg;
    chSysUnlock();

    /* If data ready, update all axis.*/
    if (msg == LSM303_ACC_DATA_READY) {
      lsm303_acc_update(i2cp);
      while (status_a != 0x00) {
        lsm303_acc_update(i2cp);
      }
//      chprintf((BaseChannel *)&SERIAL_DRIVER, "ACC T: %d X: %d Y: %d Z: %d\r\n",
//                 acc_update_time, acc_data.x, acc_data.y, acc_data.z);
    }
  }

  return RDY_OK;
}
Пример #2
0
Thread *accRun(I2CDriver *i2cp, tprio_t prio) {
  Thread *tp;

  lsm303_acc_init(i2cp);
  chThdSleepMilliseconds(200);
  lsm303_acc_update(i2cp);
  tp = chThdCreateFromHeap(NULL, ACC_WA_SIZE, prio, lsm303_acc_update_thread,
                           (void*)i2cp);
  extChannelEnable(&EXTD1, AM_INT1);

  return tp;
}
Пример #3
0
Thread *accRun(SPIDriver *spip, tprio_t prio) {
	Thread *tp;

	if (lsm303_init(spip) != 0) chSysHalt();

	chThdSleepMilliseconds(200);
	lsm303_acc_update(spip);
	tp = chThdCreateFromHeap(NULL, ACC_WA_SIZE, prio, lsm303_acc_update_thread, (void*) spip);
	extChannelEnable(&EXTD1, GPIOA_AM_INT1);

	return tp;
}
Пример #4
0
static msg_t lsm303_acc_update_thread(void *p) {
	SPIDriver *spip = (SPIDriver *) p;

	while (TRUE) {
		msg_t msg;

		/* Waiting for the IRQ to happen.*/

		chSysLock();
		acctp = chThdSelf();
		chSchGoSleepS(THD_STATE_SUSPENDED);
		msg = chThdSelf()->p_u.rdymsg;
		chSysUnlock();

		/* If data ready, update all axis.*/
		if (msg == LSM303D_ACC_DATA_READY) {
			lsm303_acc_update(spip);
		}
	}

	return RDY_OK;
}