diff options
Diffstat (limited to 'tick.c')
-rw-r--r-- | tick.c | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -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); +} + |