From c0d62add7e20301c80e829924dd523f6390c1f32 Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Sun, 7 Dec 2014 16:45:48 +0100 Subject: tick: support 1Hz/100Hz --- tick.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/tick.c b/tick.c index a99b303..c83cc42 100644 --- a/tick.c +++ b/tick.c @@ -5,10 +5,23 @@ static union { uint8_t u8[4]; } systick = { .u32 = 0 }; +#ifndef SYSTICK_USER_1HZ +#define systick_user_1hz() +#endif + +static uint8_t tick_sub; + ISR(TIMER1_COMPA_vect) { +#ifdef SYSTICK_USER_100HZ + systick_user_100hz(); + if (++tick_sub < 100) + return; + + tick_sub = 0; +#endif systick.u32++; -// dbg_dump_ret(); + systick_user_1hz(); } static void uart_puttick(void) @@ -21,7 +34,11 @@ static void uart_puttick(void) uart_puthex(systick.u8[1]); uart_puthex(systick.u8[0]); _uart_putch('.'); +#ifdef SYSTICK_USER_100HZ + uart_puthex(tick_sub); +#else uart_puthex16(frac); +#endif #if DEBUG_SP _uart_putch('~'); uint8_t spl, sph; @@ -38,10 +55,17 @@ static void uart_puttick(void) static void tick_init(void) { TCCR1A = 0; +#ifdef SYSTICK_USER_100HZ + TCCR1B = (1 << WGM12) | (0 << CS12) | (1 << CS11) | (0 << CS10); // 8 MHz / 8 = 1 MHz + asm volatile ("" ::: "memory"); + TCNT1 = 0; + OCR1A = 9999; // 100 Hz +#else TCCR1B = (1 << WGM12) | (1 << CS12) | (0 << CS11) | (0 << CS10); // 8 MHz / 256 = 31250 Hz asm volatile ("" ::: "memory"); TCNT1 = 0; OCR1A = 31249; // 1 Hz +#endif asm volatile ("" ::: "memory"); TIFR1 = (1 << OCF1A); TIMSK1 = (1 << OCIE1A); -- cgit v1.2.1