diff options
| -rw-r--r-- | src/core/ao_data.h | 9 | ||||
| -rw-r--r-- | src/drivers/ao_hmc5883.c | 4 | ||||
| -rw-r--r-- | src/drivers/ao_hmc5883.h | 2 | ||||
| -rw-r--r-- | src/drivers/ao_mma655x.c | 4 | ||||
| -rw-r--r-- | src/drivers/ao_mma655x.h | 1 | ||||
| -rw-r--r-- | src/drivers/ao_mpu6000.c | 4 | ||||
| -rw-r--r-- | src/drivers/ao_mpu6000.h | 2 | ||||
| -rw-r--r-- | src/drivers/ao_ms5607.c | 4 | ||||
| -rw-r--r-- | src/drivers/ao_ms5607.h | 2 | ||||
| -rw-r--r-- | src/stm/ao_adc_stm.c | 17 | 
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;  }  | 
