// Public Methods ////////////////////////////////////////////////////////////// // SPI should be initialized externally bool AP_Baro_MS5611::init( AP_PeriodicProcess *scheduler ) { pinMode(MS5611_CS, OUTPUT); // Chip select Pin digitalWrite(MS5611_CS, HIGH); delay(1); _spi_write(CMD_MS5611_RESET); delay(4); // We read the factory calibration C1 = _spi_read_16bits(CMD_MS5611_PROM_C1); C2 = _spi_read_16bits(CMD_MS5611_PROM_C2); C3 = _spi_read_16bits(CMD_MS5611_PROM_C3); C4 = _spi_read_16bits(CMD_MS5611_PROM_C4); C5 = _spi_read_16bits(CMD_MS5611_PROM_C5); C6 = _spi_read_16bits(CMD_MS5611_PROM_C6); //Send a command to read Temp first _spi_write(CMD_CONVERT_D2_OSR4096); _timer = micros(); _state = 1; Temp=0; Press=0; scheduler->register_process( AP_Baro_MS5611::_update ); healthy = true; return true; }
// Public Methods ////////////////////////////////////////////////////////////// // SPI should be initialized externally bool AP_Baro_MS5611::init() { _spi = hal.spi->device(AP_HAL::SPIDevice_MS5611); if (_spi == NULL) { hal.scheduler->panic(PSTR("PANIC: AP_Baro_MS5611 could not get " "valid SPI device driver!")); return false; } _spi_sem = _spi->get_semaphore(); hal.scheduler->suspend_timer_procs(); _spi_write(CMD_MS5611_RESET); hal.scheduler->delay(4); // We read the factory calibration // The on-chip CRC is not used C1 = _spi_read_16bits(CMD_MS5611_PROM_C1); C2 = _spi_read_16bits(CMD_MS5611_PROM_C2); C3 = _spi_read_16bits(CMD_MS5611_PROM_C3); C4 = _spi_read_16bits(CMD_MS5611_PROM_C4); C5 = _spi_read_16bits(CMD_MS5611_PROM_C5); C6 = _spi_read_16bits(CMD_MS5611_PROM_C6); //Send a command to read Temp first _spi_write(CMD_CONVERT_D2_OSR4096); _timer = hal.scheduler->micros(); _state = 0; Temp=0; Press=0; _s_D1 = 0; _s_D2 = 0; _d1_count = 0; _d2_count = 0; hal.scheduler->register_timer_process( AP_Baro_MS5611::_update ); hal.scheduler->resume_timer_procs(); // wait for at least one value to be read uint32_t tstart = hal.scheduler->millis(); while (!_updated) { hal.scheduler->delay(10); if (hal.scheduler->millis() - tstart > 1000) { hal.scheduler->panic(PSTR("PANIC: AP_Baro_MS5611 took more than " "1000ms to initialize")); healthy = false; return false; } } healthy = true; return true; }
// Public Methods ////////////////////////////////////////////////////////////// // SPI should be initialized externally bool AP_Baro_MS5611::init() { //scheduler->suspend_timer(); pinMode(MS5611_CS, OUTPUT); // Chip select Pin digitalWrite(MS5611_CS, HIGH); delay(1); _spi_write(CMD_MS5611_RESET); delay(4); // We read the factory calibration // The on-chip CRC is not used C1 = _spi_read_16bits(CMD_MS5611_PROM_C1); C2 = _spi_read_16bits(CMD_MS5611_PROM_C2); C3 = _spi_read_16bits(CMD_MS5611_PROM_C3); C4 = _spi_read_16bits(CMD_MS5611_PROM_C4); C5 = _spi_read_16bits(CMD_MS5611_PROM_C5); C6 = _spi_read_16bits(CMD_MS5611_PROM_C6); //Send a command to read Temp first _spi_write(CMD_CONVERT_D2_OSR4096); _timer = micros(); _state = 0; Temp=0; Press=0; _s_D1 = 0; _s_D2 = 0; _d1_count = 0; _d2_count = 0; //scheduler->resume_timer(); //scheduler->register_process( AP_Baro_MS5611::_update ); // wait for at least one value to be read while (!_updated) ; //healthy = true; return true; }