diff options
| -rw-r--r-- | src/cc1111/ao_adc.c | 35 | ||||
| -rw-r--r-- | src/telemini-v2.0/ao_pins.h | 11 | 
2 files changed, 25 insertions, 21 deletions
diff --git a/src/cc1111/ao_adc.c b/src/cc1111/ao_adc.c index 6cc08399..1523f94a 100644 --- a/src/cc1111/ao_adc.c +++ b/src/cc1111/ao_adc.c @@ -20,22 +20,22 @@  volatile __xdata struct ao_data	ao_data_ring[AO_DATA_RING];  volatile __data uint8_t		ao_data_head; +#ifdef TELENANO_V_0_1 +# define AO_ADC_FIRST_PIN	1 +#endif + +#if HAS_ACCEL_REF +# define AO_ADC_FIRST_PIN	2 +#endif +  #ifndef AO_ADC_FIRST_PIN -#define AO_ADC_FIRST_PIN	0 +# define AO_ADC_FIRST_PIN	0  #endif  void  ao_adc_poll(void)  { -#if HAS_ACCEL_REF -	ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | 2; -#else -# ifdef TELENANO_V_0_1 -	ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | 1; -# else  	ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | AO_ADC_FIRST_PIN; -# endif -#endif  }  void @@ -141,6 +141,7 @@ ao_adc_isr(void) __interrupt 1  	if (sequence) {  		/* Start next conversion */  		ADCCON3 = sequence; +		return;  	}  #endif /* telemini || telenano */ @@ -148,8 +149,10 @@ ao_adc_isr(void) __interrupt 1  	a = (uint8_t __xdata *) (&ao_data_ring[ao_data_head].adc.sense[0] + sequence - AO_ADC_FIRST_PIN);  	a[0] = ADCL;  	a[1] = ADCH; -	if (sequence < 5) +	if (sequence < 5) {  		ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | (sequence + 1); +		return; +	}  #define GOT_ADC  #endif /* TELEFIRE_V_0_1 */ @@ -157,8 +160,6 @@ ao_adc_isr(void) __interrupt 1  	a = (uint8_t __xdata *) (&ao_data_ring[ao_data_head].adc.batt);  	a[0] = ADCL;  	a[1] = ADCH; -	if (0) -		;  #define GOT_ADC  #endif	 @@ -171,12 +172,10 @@ ao_adc_isr(void) __interrupt 1  #error No known ADC configuration set  #endif -	else { -		/* record this conversion series */ -		ao_data_ring[ao_data_head].tick = ao_time(); -		ao_data_head = ao_data_ring_next(ao_data_head); -		ao_wakeup(DATA_TO_XDATA(&ao_data_head)); -	} +	/* record this conversion series */ +	ao_data_ring[ao_data_head].tick = ao_time(); +	ao_data_head = ao_data_ring_next(ao_data_head); +	ao_wakeup(DATA_TO_XDATA(&ao_data_head));  }  static void diff --git a/src/telemini-v2.0/ao_pins.h b/src/telemini-v2.0/ao_pins.h index 9ecd076e..fac6c535 100644 --- a/src/telemini-v2.0/ao_pins.h +++ b/src/telemini-v2.0/ao_pins.h @@ -31,7 +31,6 @@  #define USE_INTERNAL_FLASH	0  #define HAS_DBG			0  #define PACKET_HAS_SLAVE	1 -#define USE_FAST_ASCENT_LOG	1  #define AO_LED_GREEN		1  #define AO_LED_RED		2 @@ -127,6 +126,8 @@ struct ao_adc {  	printf("tick: %5u apogee: %5d main: %5d batt: %5d\n", \  	       (p)->tick, (p)->adc.sense_a, (p)->adc.sense_m, (p)->adc.v_batt) +#define AO_ADC_PINS	((1 << 0) | (1 << 1) | (1 << 4)) +  #define FETCH_ADC() 							\  	a = (uint8_t __xdata *) (&ao_data_ring[ao_data_head].adc); 	\  	switch (sequence) {						\ @@ -142,7 +143,11 @@ struct ao_adc {  		sequence = 1;						\  		break;							\  	}								\ -	if (sequence)							\ -		; +	a[0] = ADCL;							\ +	a[1] = ADCH;							\ +	if (sequence) {							\ +		ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | sequence; \ +		return;							\ +	}  #endif /* _AO_PINS_H_ */  | 
