From 577488e08517172c1e926b6f3fb15a4ca9f6633f Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 13 Mar 2011 23:50:49 +0000 Subject: admux --- kernel/adc.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'kernel/adc.c') diff --git a/kernel/adc.c b/kernel/adc.c index 8f2164d..0037756 100644 --- a/kernel/adc.c +++ b/kernel/adc.c @@ -20,13 +20,15 @@ #include "kernel.h" #include "tasks.h" +#define MUXMASK 0x07 + uint16_t rdadc(uint8_t ch) { - ADMUX &= ~0x07; - ADMUX |= (ch & 0x07); + ADMUX &= ~MUXMASK; + ADMUX |= (ch & MUXMASK); ADCSRA |= _BV(ADSC); - loop_until_bit_is_set(ADCSRA, ADSC); + loop_until_bit_is_clear(ADCSRA, ADSC); return ADCW; } @@ -35,14 +37,17 @@ void adc(void *arg) { struct adcarg *a = (struct adcarg *)arg; - a->r = release(); - a->d = deadline(); + uint32_t r = release(); + uint32_t d = deadline(); + uint8_t i; - ADCSRA |= (_BV(ADEN) | _BV(ADFR) | ADC_FLAGS); + ADCSRA |= (_BV(ADEN) | ADC_FLAGS); + /* ADMUX |= _BV(REFS0); */ for (;;) { - *a->value = rdadc(a->channel); - a->r = a->d += MSEC(20); - update(a->r, a->d); + for (i = 0; i < ADCCHANNELS; i++) + a->value[i] = rdadc(i); + r = d += MSEC(1); + update(r, d); } } -- cgit v1.2.3