diff options
author | root <root@ka-ata-killa.panaceas.james.local> | 2021-11-21 18:48:00 +0000 |
---|---|---|
committer | root <root@ka-ata-killa.panaceas.james.local> | 2021-11-21 18:48:00 +0000 |
commit | 3028595801878f962bd362421ed3ec5af635ff45 (patch) | |
tree | 700d540ad6739884eecf3851939855ee211849b8 /stm32/app/leds.c | |
parent | 64f632692fe2a164830a363f8db158a8a2ae33de (diff) | |
download | metric_clock-3028595801878f962bd362421ed3ec5af635ff45.tar.gz metric_clock-3028595801878f962bd362421ed3ec5af635ff45.tar.bz2 metric_clock-3028595801878f962bd362421ed3ec5af635ff45.zip |
add blinken lights
Diffstat (limited to 'stm32/app/leds.c')
-rw-r--r-- | stm32/app/leds.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/stm32/app/leds.c b/stm32/app/leds.c new file mode 100644 index 0000000..bcac9b6 --- /dev/null +++ b/stm32/app/leds.c @@ -0,0 +1,98 @@ +#include "project.h" + + +#define FLASH 100 + +static unsigned led1 = FLASH, led2 = FLASH; + + +static void metric_pll (void) +{ + static uint32_t last; + static int which; + static unsigned ttg; + EPOCH e; + uint64_t v; + + if ((ticks - last) < ttg) return; + + e = rtc_get(); + + if (which) { + led2 = FLASH; + CLEAR (LED2); + } else { + led1 = FLASH; + CLEAR (LED1); + } + + last = ticks; + + which = !which; + + + v = e.s; + v %= 86400; + v *= 1000; + v += e.ns / 1000000; + + v %= 864; + + // printf("M: %5u %9u\r\n",(unsigned) v, (unsigned ) (e.ns/1000000)); + + ttg = 864 - (unsigned)v; +} + +static void customary_pll (void) +{ + static uint32_t last; + static unsigned ttg; + EPOCH e; + uint64_t v; + + if ((ticks - last) < ttg) return; + + e = rtc_get(); + + led2 = FLASH; + CLEAR (LED2); + + last = ticks; + + v = e.ns / 1000000; + v %= 864; + + ttg = 1000 - (unsigned)v; + + // printf("C: %9u\r\n",(unsigned ) (e.ns/1000000)); +} + + + +void led_tick (void) +{ + + if (led1) { + CLEAR (LED1); + led1--; + } else SET (LED1); + + + if (led2) { + CLEAR (LED2); + led2--; + } else SET (LED2); + + + if (!rtc_ready) return; + + metric_pll(); + // customary_pll(); +} + + +void leds_init (void) +{ + MAP_OUTPUT_OD (LED1); + MAP_OUTPUT_OD (LED2); +} |