aboutsummaryrefslogtreecommitdiff
path: root/kernel/adc.c
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-01-02 10:03:37 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-01-02 10:03:37 +0000
commit775ca7a6b283339019783af24c4c424cdb0cebd1 (patch)
tree8ccbd8d995db3c3774eab3e0d19250c71db7cca9 /kernel/adc.c
parent4d04ef80160fe748e746549b022854d88e55e188 (diff)
time sharing
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));
}
}