summaryrefslogtreecommitdiff
path: root/tick.c
diff options
context:
space:
mode:
Diffstat (limited to 'tick.c')
-rw-r--r--tick.c37
1 files changed, 37 insertions, 0 deletions
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);
+}
+