aboutsummaryrefslogtreecommitdiff
path: root/kernel/rgb.c
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2011-07-12 00:54:33 +0000
committerDimitri Sokolyuk <demon@dim13.org>2011-07-12 00:54:33 +0000
commitb4a9b392c57ca8b3f740dd3035b1f43b4ad583b4 (patch)
treeeeda7f987ad9abf16a5954ce250dc51cf0b1ac41 /kernel/rgb.c
parent42a1324ba256967ca11fa1a81ef3d2ac3d10c491 (diff)
add clock, redesign timer, tweak stack values
Diffstat (limited to 'kernel/rgb.c')
-rw-r--r--kernel/rgb.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/kernel/rgb.c b/kernel/rgb.c
index 794d266..c149eb1 100644
--- a/kernel/rgb.c
+++ b/kernel/rgb.c
@@ -152,8 +152,10 @@ rgb(void *arg)
uint16_t i = 0;
uint8_t v;
+ update(0, MSEC(370));
+
for (;;) {
-#if 0
+#if 1
i = (i + 1) % 360;
#if 0
v = i % 120;
@@ -163,8 +165,8 @@ rgb(void *arg)
#endif
hsv(a->r, a->g, a->b, i, 255, v);
- period(MSEC(83));
-#endif
+ sleep(SOFT, MSEC(83));
+#else
i = (i + 1) % 162;
if (i > 80)
v = 161 - i;
@@ -173,7 +175,9 @@ rgb(void *arg)
*a->r = pgm_read_byte(&bb[v].r);
*a->g = pgm_read_byte(&bb[v].g);
*a->b = pgm_read_byte(&bb[v].b);
- period(MSEC(370));
+
+ sleep(SOFT, MSEC(370));
+#endif
}
}
@@ -182,27 +186,26 @@ pwm(void *arg)
{
struct pwmarg *a = (struct pwmarg *)arg;
uint16_t on, off, maxval;;
- uint32_t d = deadline();
- uint32_t r = release();
+ uint32_t n = now();
DDRB |= _BV(a->pin);
PORTB &= ~_BV(a->pin);
maxval = pgm_read_word(&factor[255]);
+ update(n, n + USEC(maxval));
+
for (;;) {
on = pgm_read_word(&factor[*a->value]);
off = maxval - on;
if (*a->value > 0) {
PORTB |= _BV(a->pin);
- r = d += USEC(on);
- update(r, d);
+ sleep(HARD, USEC(on));
}
if (*a->value < 255) {
PORTB &= ~_BV(a->pin);
- r = d += USEC(off);
- update(r, d);
+ sleep(HARD, USEC(off));
}
}
}