cc1111: Rework ADC configuration a bit, fix Tm V2 ADC usage
authorKeith Packard <keithp@keithp.com>
Mon, 26 Aug 2013 23:41:33 +0000 (16:41 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 26 Aug 2013 23:41:33 +0000 (16:41 -0700)
The Tm v2 ADC code was not actually fetching and storing the ADC
conversion values.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/cc1111/ao_adc.c
src/telemini-v2.0/ao_pins.h

index 6cc0839914994f52a4579898d667cedee78e5729..1523f94a278056dcf3e59ab54248c560752529a6 100644 (file)
 volatile __xdata struct ao_data        ao_data_ring[AO_DATA_RING];
 volatile __data uint8_t                ao_data_head;
 
 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
 #ifndef AO_ADC_FIRST_PIN
-#define AO_ADC_FIRST_PIN       0
+# define AO_ADC_FIRST_PIN      0
 #endif
 
 void
 ao_adc_poll(void)
 {
 #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;
        ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | AO_ADC_FIRST_PIN;
-# endif
-#endif
 }
 
 void
 }
 
 void
@@ -141,6 +141,7 @@ ao_adc_isr(void) __interrupt 1
        if (sequence) {
                /* Start next conversion */
                ADCCON3 = sequence;
        if (sequence) {
                /* Start next conversion */
                ADCCON3 = sequence;
+               return;
        }
 #endif /* telemini || telenano */
 
        }
 #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;
        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);
                ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | (sequence + 1);
+               return;
+       }
 #define GOT_ADC
 #endif /* TELEFIRE_V_0_1 */
 
 #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;
        a = (uint8_t __xdata *) (&ao_data_ring[ao_data_head].adc.batt);
        a[0] = ADCL;
        a[1] = ADCH;
-       if (0)
-               ;
 #define GOT_ADC
 #endif 
 
 #define GOT_ADC
 #endif 
 
@@ -171,12 +172,10 @@ ao_adc_isr(void) __interrupt 1
 #error No known ADC configuration set
 #endif
 
 #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
 }
 
 static void
index 9ecd076e4e12f6e9c86d07fb6d95867e2a3f5636..fac6c535e60176aab569885a7970f7024be858bc 100644 (file)
@@ -31,7 +31,6 @@
 #define USE_INTERNAL_FLASH     0
 #define HAS_DBG                        0
 #define PACKET_HAS_SLAVE       1
 #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
 
 #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)
 
        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) {                                             \
 #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;                                                  \
        }                                                               \
                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_ */
 
 #endif /* _AO_PINS_H_ */