aboutsummaryrefslogtreecommitdiff
path: root/kernel/adc.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/adc.c')
-rw-r--r--kernel/adc.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/kernel/adc.c b/kernel/adc.c
index 5c7a35b..76c9c0d 100644
--- a/kernel/adc.c
+++ b/kernel/adc.c
@@ -16,13 +16,14 @@
*/
#include <stdint.h>
+#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
+#include <avr/cpufunc.h>
#include "kernel.h"
#include "tasks.h"
#define MUXMASK 0x07
-#define DL MSEC(20)
void
adc(void *arg)
@@ -33,14 +34,17 @@ adc(void *arg)
ADCSRA |= (_BV(ADEN) | ADC_FLAGS);
for (;;) {
- if (bit_is_clear(ADCSRA, ADSC)) {
+ for (i = 0; i < ADCCHANNELS; i++) {
+ ADMUX = i & MUXMASK;
+ ADCSRA |= _BV(ADSC);
+ loop_until_bit_is_clear(ADCSRA, ADSC);
//cli();
a->value[i] = ADCW;
//sei();
- i = (i + 1) % ADCCHANNELS;
- ADMUX = i;
- ADCSRA |= _BV(ADSC);
}
- sleep(MSEC(500 / ADCCHANNELS));
+ wait(0);
+ fprintf(stderr, "\n%8lx%8x", now(), a->value[0]);
+ signal(0);
+ sleep(MSEC(100));
}
}