From 97bf1e88bfde9107f9aec66603ce48b0bdee4351 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 5 Jan 2012 10:02:06 +0000 Subject: lightwight blocking, change ADC from 10 to 8 bit resolution --- kernel/adc.c | 8 ++++---- kernel/rgb.c | 19 +++++-------------- kernel/tasks.h | 2 +- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/kernel/adc.c b/kernel/adc.c index ac28789..aa23ffb 100644 --- a/kernel/adc.c +++ b/kernel/adc.c @@ -35,12 +35,12 @@ adc(void *arg) for (;;) { for (i = 0; i < ADCCHANNELS; i++) { - ADMUX = i & MUXMASK; + ADMUX = (i & MUXMASK) | _BV(ADLAR); ADCSRA |= _BV(ADSC); loop_until_bit_is_clear(ADCSRA, ADSC); - wait(4); - a->value[i] = ADCW; - signal(4); + cli(); + a->value[i] = ADCH; /* ADLAR: 8-bit */ + sei(); } wait(0); fprintf(stderr, "\n%8lx%8x", now(), a->value[0]); diff --git a/kernel/rgb.c b/kernel/rgb.c index b3f4241..7532c10 100644 --- a/kernel/rgb.c +++ b/kernel/rgb.c @@ -32,24 +32,15 @@ rgb(void *arg) uint8_t r, g, b, v = 0; for (;;) { - wait(4); - v = *a->v >> 2; /* 10bit to 8bit */ - signal(4); - i = (i + 1) % 360; hsv(&r, &g, &b, i, 255, v); - wait(1); + cli(); a->r = r; - signal(1); - - wait(2); a->g = g; - signal(2); - - wait(3); a->b = b; - signal(3); + v = *a->v; /* 10bit to 8bit */ + sei(); sleep(MSEC(40)); } @@ -68,9 +59,9 @@ pwm(void *arg) #define DIV (UINT8_MAX >> 1) for (;;) { - wait(a->sema); + cli(); v = *a->value; - signal(a->sema); + sei(); if ((on = SEC2(v) / DIV)) { PORTB |= _BV(a->pin); diff --git a/kernel/tasks.h b/kernel/tasks.h index 98b637a..8343a3a 100644 --- a/kernel/tasks.h +++ b/kernel/tasks.h @@ -45,7 +45,7 @@ struct rgbarg { uint8_t r; uint8_t g; uint8_t b; - uint16_t *v; + uint8_t *v; }; struct pwmarg { -- cgit v1.2.3