summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-08-26 16:41:33 -0700
committerKeith Packard <keithp@keithp.com>2013-08-26 16:41:33 -0700
commit2380a4b9bd69629c78eec0a87ff8681a0524d8d2 (patch)
treed89ec47ef3a674a9150d0ff2af6e1fe51c9de8bc /src
parentaeb1c8a2aa533cb2805f0dbe848e098c8cae2b39 (diff)
cc1111: Rework ADC configuration a bit, fix Tm V2 ADC usage
The Tm v2 ADC code was not actually fetching and storing the ADC conversion values. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r--src/cc1111/ao_adc.c35
-rw-r--r--src/telemini-v2.0/ao_pins.h11
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_ */