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); }
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(); }
/* * @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); }