altos/telelco-v2.0: Fix button names and pin mappings. Add drag LED.
[fw/altos] / src / avr / ao_adc_avr.c
index 3a262977512b606552211cee8b6122fcdea3a8e7..2732c4dbe9635bd38b55fd12154ecd27d21b9a46 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -16,6 +17,7 @@
  */
 
 #include "ao.h"
+#include "ao_pwmin.h"
 
 volatile __xdata struct ao_data        ao_data_ring[AO_DATA_RING];
 volatile __data uint8_t                ao_data_head;
@@ -93,9 +95,13 @@ ISR(ADC_vect)
        value = ADCL;
        value |= (ADCH << 8);
        ao_data_ring[ao_data_head].adc.adc[ao_adc_channel] = value;
-       if (++ao_adc_channel < NUM_ADC)
+       if (++ao_adc_channel < NUM_ADC - HAS_ICP3_COUNT)
                ao_adc_start();
        else {
+#if HAS_ICP3_COUNT
+               /* steal last adc channel for pwm input */
+               ao_data_ring[ao_data_head].adc.adc[ao_adc_channel] = ao_icp3_count;
+#endif
                ADCSRA = ADCSRA_INIT;
                ao_data_ring[ao_data_head].tick = ao_time();
                ao_data_head = ao_data_ring_next(ao_data_head);