- D2 = ao_ms5607_convert(AO_MS5607_CONVERT_D2_4096);
- printf ("Conversion D2: %d\n", D2);
- D1 = ao_ms5607_convert(AO_MS5607_CONVERT_D1_4096);
- printf ("Conversion D1: %d\n", D1);
-
- dT = D2 - ((int32_t) ms5607_prom.tref << 8);
-
- TEMP = 2000 + (((int64_t) dT * ms5607_prom.tempsens) >> 23);
-
- OFF = ((int64_t) ms5607_prom.off << 17) + (((int64_t) ms5607_prom.tco * dT) >> 6);
-
- SENS = ((int64_t) ms5607_prom.sens << 16) + (((int64_t) ms5607_prom.tcs * dT) >> 7);
-
- if (TEMP < 2000) {
- int32_t T2 = ((int64_t) dT * (int64_t) dT) >> 31;
- int32_t TEMPM = TEMP - 2000;
- int64_t OFF2 = (61 * (int64_t) TEMPM * (int64_t) TEMPM) >> 4;
- int64_t SENS2 = 2 * (int64_t) TEMPM * (int64_t) TEMPM;
- if (TEMP < 1500) {
- int32_t TEMPP = TEMP + 1500;
- int64_t TEMPP2 = TEMPP * TEMPP;
- OFF2 = OFF2 + 15 * TEMPP2;
- SENS2 = SENS2 + 8 * TEMPP2;
- }
- TEMP -= T2;
- OFF -= OFF2;
- SENS -= SENS2;
+#ifndef HAS_MS5607_TASK
+#define HAS_MS5607_TASK HAS_TASK
+#endif
+
+__xdata struct ao_ms5607_sample ao_ms5607_current;
+
+#if HAS_MS5607_TASK
+static void
+ao_ms5607(void)
+{
+ struct ao_ms5607_sample sample;
+ ao_ms5607_setup();
+ for (;;)
+ {
+ ao_ms5607_sample(&sample);
+ ao_arch_block_interrupts();
+ ao_ms5607_current = sample;
+ AO_DATA_PRESENT(AO_DATA_MS5607);
+ AO_DATA_WAIT();
+ ao_arch_release_interrupts();