summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-10-08 23:04:16 -0700
committerKeith Packard <keithp@keithp.com>2012-10-08 23:04:16 -0700
commit39c5738acdfdf0c87b64de6135fe107971cfa12b (patch)
tree067882f873e36200f38fde4805600b6f10e68a78 /src
parent16bbe9d25856259d2694751c364b668638e4a971 (diff)
altos: Go back to recording sensor data in globalsmm-ms5611
Instead of trying to get things into the ring from a variety of functions, go back to the simpler method of storing them in globals and having the ADC code just pluck out the most recent values. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/ao_data.h9
-rw-r--r--src/drivers/ao_hmc5883.c4
-rw-r--r--src/drivers/ao_hmc5883.h2
-rw-r--r--src/drivers/ao_mma655x.c4
-rw-r--r--src/drivers/ao_mma655x.h1
-rw-r--r--src/drivers/ao_mpu6000.c4
-rw-r--r--src/drivers/ao_mpu6000.h2
-rw-r--r--src/drivers/ao_ms5607.c4
-rw-r--r--src/drivers/ao_ms5607.h2
-rw-r--r--src/stm/ao_adc_stm.c17
10 files changed, 37 insertions, 12 deletions
diff --git a/src/core/ao_data.h b/src/core/ao_data.h
index 2b9ef5ac..30208dfb 100644
--- a/src/core/ao_data.h
+++ b/src/core/ao_data.h
@@ -85,14 +85,7 @@ extern volatile __data uint8_t ao_data_count;
/*
* Mark a section of data as ready, check for data complete
*/
-#define AO_DATA_PRESENT(bit) do { \
- if ((ao_data_present |= (bit)) == AO_DATA_ALL) { \
- ao_data_ring[ao_data_head].tick = ao_tick_count; \
- ao_data_head = ao_data_ring_next(ao_data_head); \
- ao_data_present = 0; \
- ao_wakeup((void *) &ao_data_head); \
- } \
- } while (0);
+#define AO_DATA_PRESENT(bit) (ao_data_present |= (bit))
/*
* Wait until it is time to write a sensor sample; this is
diff --git a/src/drivers/ao_hmc5883.c b/src/drivers/ao_hmc5883.c
index ade6c263..059fc2c8 100644
--- a/src/drivers/ao_hmc5883.c
+++ b/src/drivers/ao_hmc5883.c
@@ -123,12 +123,14 @@ ao_hmc5883_setup(void)
return 1;
}
+struct ao_hmc5883_sample ao_hmc5883_current;
+
static void
ao_hmc5883(void)
{
ao_hmc5883_setup();
for (;;) {
- ao_hmc5883_sample((struct ao_hmc5883_sample *) &ao_data_ring[ao_data_head].hmc5883);
+ ao_hmc5883_sample(&ao_hmc5883_current);
ao_arch_critical(
AO_DATA_PRESENT(AO_DATA_HMC5883);
AO_DATA_WAIT();
diff --git a/src/drivers/ao_hmc5883.h b/src/drivers/ao_hmc5883.h
index 55690978..ff2725eb 100644
--- a/src/drivers/ao_hmc5883.h
+++ b/src/drivers/ao_hmc5883.h
@@ -79,6 +79,8 @@ struct ao_hmc5883_sample {
int16_t x, y, z;
};
+extern struct ao_hmc5883_sample ao_hmc5883_current;
+
void
ao_hmc5883_init(void);
diff --git a/src/drivers/ao_mma655x.c b/src/drivers/ao_mma655x.c
index 005bc684..18c5317c 100644
--- a/src/drivers/ao_mma655x.c
+++ b/src/drivers/ao_mma655x.c
@@ -250,12 +250,14 @@ __code struct ao_cmds ao_mma655x_cmds[] = {
{ 0, NULL },
};
+uint16_t ao_mma655x_current;
+
static void
ao_mma655x(void)
{
ao_mma655x_setup();
for (;;) {
- ao_data_ring[ao_data_head].mma655x = ao_mma655x_value();
+ ao_mma655x_current = ao_mma655x_value();
ao_arch_critical(
AO_DATA_PRESENT(AO_DATA_MMA655X);
AO_DATA_WAIT();
diff --git a/src/drivers/ao_mma655x.h b/src/drivers/ao_mma655x.h
index 9c0c59dc..2d951e07 100644
--- a/src/drivers/ao_mma655x.h
+++ b/src/drivers/ao_mma655x.h
@@ -78,6 +78,7 @@
#define AO_MMA655X_COUNT 0x15
#define AO_MMA655X_OFFCORR 0x16
+extern uint16_t ao_mma655x_current;
void
ao_mma655x_init(void);
diff --git a/src/drivers/ao_mpu6000.c b/src/drivers/ao_mpu6000.c
index b3e284e0..49596705 100644
--- a/src/drivers/ao_mpu6000.c
+++ b/src/drivers/ao_mpu6000.c
@@ -240,13 +240,15 @@ ao_mpu6000_setup(void)
ao_mpu6000_configured = 1;
}
+struct ao_mpu6000_sample ao_mpu6000_current;
+
static void
ao_mpu6000(void)
{
ao_mpu6000_setup();
for (;;)
{
- ao_mpu6000_sample((struct ao_mpu6000_sample *) &ao_data_ring[ao_data_head].mpu6000);
+ ao_mpu6000_sample(&ao_mpu6000_current);
ao_arch_critical(
AO_DATA_PRESENT(AO_DATA_MPU6000);
AO_DATA_WAIT();
diff --git a/src/drivers/ao_mpu6000.h b/src/drivers/ao_mpu6000.h
index ca76b081..ab36d6f2 100644
--- a/src/drivers/ao_mpu6000.h
+++ b/src/drivers/ao_mpu6000.h
@@ -155,6 +155,8 @@ struct ao_mpu6000_sample {
int16_t gyro_z;
};
+extern struct ao_mpu6000_sample ao_mpu6000_current;
+
void
ao_mpu6000_init(void);
diff --git a/src/drivers/ao_ms5607.c b/src/drivers/ao_ms5607.c
index 3295baac..492199b8 100644
--- a/src/drivers/ao_ms5607.c
+++ b/src/drivers/ao_ms5607.c
@@ -207,13 +207,15 @@ ao_ms5607_convert(struct ao_ms5607_sample *sample, struct ao_ms5607_value *value
value->temp = TEMP;
}
+struct ao_ms5607_sample ao_ms5607_current;
+
static void
ao_ms5607(void)
{
ao_ms5607_setup();
for (;;)
{
- ao_ms5607_sample((struct ao_ms5607_sample *) &ao_data_ring[ao_data_head].ms5607_raw);
+ ao_ms5607_sample(&ao_ms5607_current);
ao_arch_critical(
AO_DATA_PRESENT(AO_DATA_MS5607);
AO_DATA_WAIT();
diff --git a/src/drivers/ao_ms5607.h b/src/drivers/ao_ms5607.h
index e9c364d9..4c29f6a7 100644
--- a/src/drivers/ao_ms5607.h
+++ b/src/drivers/ao_ms5607.h
@@ -56,6 +56,8 @@ struct ao_ms5607_value {
int32_t temp; /* in °C * 100 */
};
+extern struct ao_ms5607_sample ao_ms5607_current;
+
void
ao_ms5607_init(void);
diff --git a/src/stm/ao_adc_stm.c b/src/stm/ao_adc_stm.c
index 18ca6ea0..48fc4262 100644
--- a/src/stm/ao_adc_stm.c
+++ b/src/stm/ao_adc_stm.c
@@ -43,6 +43,23 @@ static void ao_adc_done(int index)
{
AO_DATA_PRESENT(AO_DATA_ADC);
ao_dma_done_transfer(STM_DMA_INDEX(STM_DMA_CHANNEL_ADC1));
+ if (ao_data_present == AO_DATA_ALL) {
+#if HAS_MS5607
+ ao_data_ring[ao_data_head].ms5607_raw = ao_ms5607_current;
+#endif
+#if HAS_MMA655X
+ ao_data_ring[ao_data_head].mma655x = ao_mma655x_current;
+#endif
+#if HAS_HMC5883
+ ao_data_ring[ao_data_head].hmc5883 = ao_hmc5883_current;
+#endif
+#if HAS_MPU6000
+ ao_data_ring[ao_data_head].mpu6000 = ao_mpu6000_current;
+#endif
+ ao_data_ring[ao_data_head].tick = ao_tick_count;
+ ao_data_head = ao_data_ring_next(ao_data_head);
+ ao_wakeup((void *) &ao_data_head);
+ }
ao_adc_ready = 1;
}