X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/d684c21619905153eff68c43927207248925f6c2..78c900276102731b2832eb623b6d7216a32bd500:/avr/timer.c diff --git a/avr/timer.c b/avr/timer.c index 84a9737..1b15985 100644 --- a/avr/timer.c +++ b/avr/timer.c @@ -1,87 +1,61 @@ /* + * (C) Copyright 2014 Leo C. + * + * SPDX-License-Identifier: GPL-2.0 */ - -#include "common.h" - -//#include -//#include +#include "timer.h" #include #include - -//#include - - -#include "timer.h" +#include "time.h" /* timer interrupt/overflow counter */ -static volatile uint32_t timestamp; - +/* counts up every ms. */ +static volatile +uint32_t timestamp; -/*---------------------------------------------------------*/ -/* 1000Hz timer interrupt generated by OC1A */ -/*---------------------------------------------------------*/ - -ISR(TIMER1_COMPA_vect) +/* + * 1000Hz timer interrupt generated by OC4A + */ +ISR(TIMER4_COMPA_vect) { static int_fast8_t tick_10ms; - int_fast8_t i; + static int_fast8_t tick_1s; + int_fast8_t i, j; + + extern void disk_timerproc(void); + OCR4A += F_CPU / 1000; /* 1000Hz interval */ timestamp++; i = tick_10ms + 1; if (i == 10) { - i = 0; Stat |= S_10MS_TO; - + /* Drive timer procedure of low level disk I/O module */ - //disk_timerproc(); + disk_timerproc(); + + j = tick_1s - 1; + if (j == 0) { + system_tick(); + j = 100; + } + tick_1s = j; + i = 0; } tick_10ms = i; - -} - - - -/*--------------------------------------------------------------------------*/ - -#if 0 - -void do_10ms(void) -{ - if (to_counter) - to_counter--; } -#endif /*--------------------------------------------------------------------------*/ - -void timer_setup(void) -{ - - /* Clock */ - CLKPR = _BV(CLKPCE); - CLKPR = 0; - - /* Timer */ - - OCR1A = F_CPU / 1000 - 1; // Timer1: 1000Hz interval (OC1A) - TCCR1B = 0b00001001; - TIMSK1 = _BV(OCIE1A); // Enable TC1.oca interrupt -} - - uint32_t get_timer(uint32_t base) { uint32_t ret; - ATOMIC_BLOCK(ATOMIC_FORCEON) { ret = timestamp; } return ret - base; } -