Exemplo n.º 1
0
void readICU(void)
{
	uint16_t last_period_float;
	uint16_t last_period_float_2;
	//last_period_float = last_period;
	//last_period_float /= 1000;
	//last_period_float = 1/last_period_float;
	last_period_float = RTT2US(last_period);
	last_period_float_2 = RTT2US(last_period_2);
	sprintf(Result, "%u", last_period_float);
	gwinSetText(ICU1value, Result, TRUE);
	chprintf((BaseSequentialStream *)&SD2, "\r\nICU1 %d", last_period);
	sprintf(Result, "%u", last_period_float_2);
	gwinSetText(ICU2value, Result, TRUE);
	chprintf((BaseSequentialStream *)&SD2, "\r\nICU2 %d", last_period_2);
}
Exemplo n.º 2
0
static void itg3200_cb(EXTDriver *extp, expchannel_t channel){
  (void)extp;
  (void)channel;
  chSysLockFromIsr();

#if !GYRO_UPDATE_PERIOD_HARDCODED
  if (itg3200_period_measured < 2){
    if (itg3200_period_measured == 0){
      tmStartMeasurement(&itg3200_tmup);
    }
    else if(itg3200_period_measured == 1){
      tmStopMeasurement(&itg3200_tmup);
      GyroUpdatePeriodUs = RTT2US(itg3200_tmup.last);
    }
    itg3200_period_measured++;
  }
#endif /* !GYRO_UPDATE_PERIOD_HARDCODED */

  itg3200_sem.signalI();
  lsm303_sem.signalI();
  chSysUnlockFromIsr();
}
Exemplo n.º 3
0
/*
 * @brief   ...
 * @details ...
 */
static void dht11_lld_ext_handler(EXTDriver *extp, expchannel_t channel) {
    //
    (void)extp;
    dht11_t *sensor = sensor_handlers[channel];
    if (sensor == NULL) {
        return;
    }
    //
    if (lldLockISR(&sensor->lock) == true) {
        switch (sensor->state) {
            case DHT11_WAIT_RESPONSE:
                sensor->bit_count++;
                if (sensor->bit_count == 3) {
                    sensor->bit_count = 0;
                    sensor->data = 0;
                    sensor->state = DHT11_READ_DATA;
                }
                break;
            case DHT11_READ_DATA:
                sensor->bit_count++;
                if (sensor->bit_count % 2 == 1) {
                    tmStartMeasurement(&sensor->time_measurment);
                    sensor->data <<= 1;
                } else {
                    tmStopMeasurement(&sensor->time_measurment);
                    if (RTT2US(sensor->time_measurment.last) > 50) {
                        sensor->data += 1;
                    }
                }
                if (sensor->bit_count == 64) {
                    sensor->bit_count = 0;
                    sensor->crc = 0;
                    sensor->state = DHT11_READ_CRC;
                }
                break;
            case DHT11_READ_CRC:
                sensor->bit_count++;
                //sensor->crc = sensor->crc << 1;
                if (sensor->bit_count % 2 == 1) {
                    tmStartMeasurement(&sensor->time_measurment);
                    sensor->crc <<= 1;
                } else {
                    tmStopMeasurement(&sensor->time_measurment);
                    if (RTT2US(sensor->time_measurment.last) > 40) {
                        sensor->crc += 1;
                    }
                }
                if (sensor->bit_count == 16) {
                    chSysLockFromIsr();
                    extChannelDisableI(sensor->ext_drv, sensor->ext_pin);
                    if (chVTIsArmedI(&sensor->timer) == true) {
                        chVTResetI(&sensor->timer);
                    }
                    chSysUnlockFromIsr();
                    sensor->temp = (sensor->data & 0xFF00) >> 8;
                    sensor->humidity = (sensor->data & 0xFF000000) >> 24;
                    sensor->state = DHT11_READ_OK;
                }
                break;
            case DHT11_UNINIT:
            case DHT11_IDLE:
            case DHT11_READ_REQUEST:
            case DHT11_READ_OK:
            case DHT11_BUSY:
            case DHT11_ERROR:
                break;
        }
        lldUnlockISR(&sensor->lock);
    }