From 82e31518b134cfd90eda8c096b971903a97708c0 Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Thu, 20 Sep 2012 05:18:03 +0200 Subject: lightctrl: 1 second system tick --- tick.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tick.c (limited to 'tick.c') diff --git a/tick.c b/tick.c new file mode 100644 index 0000000..87dcbc6 --- /dev/null +++ b/tick.c @@ -0,0 +1,37 @@ +#define HAVE_TICK + +static union { + uint32_t u32; + uint8_t u8[4]; +} systick = { .u32 = 0 }; + +ISR(TIMER1_COMPA_vect) +{ + systick.u32++; +} + +static void uart_puttick(void) +{ + uint16_t frac = TCNT1; + _uart_putch('@'); + uart_puthex(systick.u8[3]); + uart_puthex(systick.u8[2]); + uart_puthex(systick.u8[1]); + uart_puthex(systick.u8[0]); + _uart_putch('.'); + uart_puthex16(frac); + _uart_putch(' '); +} + +static void tick_init(void) +{ + TCCR1A = 0; + TCCR1B = (1 << WGM12) | (1 << CS12) | (0 << CS11) | (0 << CS10); // 8 MHz / 256 = 31250 Hz + asm volatile ("" ::: "memory"); + TCNT1 = 0; + OCR1A = 31249; // 1 Hz + asm volatile ("" ::: "memory"); + TIFR1 = (1 << OCF1A); + TIMSK1 = (1 << OCIE1A); +} + -- cgit v1.2.1