altos: Oops. Was only filling out part of the TeleMetrum ADC record
[fw/altos] / src / cc1111 / ao_adc.c
index 4a58023d50474270d017167ef09240e99184775a..1689ebef3b1b831b3b653bf5349c234e2cf1104d 100644 (file)
 
 volatile __xdata struct ao_data        ao_data_ring[AO_DATA_RING];
 volatile __data uint8_t                ao_data_head;
+#if (AO_DATA_ALL & ~(AO_DATA_ADC))
+volatile __data uint8_t                ao_data_present;
+#endif
+
+#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
@@ -82,6 +85,7 @@ ao_adc_isr(void) __interrupt 1
                else
 #endif
                        ADCCON3 = ADCCON3_EREF_VDD | ADCCON3_EDIV_512 | sequence;
+               return;
        }
 #endif
 
@@ -141,6 +145,7 @@ ao_adc_isr(void) __interrupt 1
        if (sequence) {
                /* Start next conversion */
                ADCCON3 = sequence;
+               return;
        }
 #endif /* telemini || telenano */
 
@@ -148,8 +153,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,21 +164,22 @@ 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 
 
+#ifdef FETCH_ADC
+       FETCH_ADC();
+#define GOT_ADC
+#endif
+
 #ifndef GOT_ADC
 #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