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