diff options
Diffstat (limited to 'common/timer.h')
-rw-r--r-- | common/timer.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/common/timer.h b/common/timer.h new file mode 100644 index 0000000000..f9e8181e6f --- /dev/null +++ b/common/timer.h @@ -0,0 +1,53 @@ +/* +Copyright 2011 Jun Wako <wakojun@gmail.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef TIMER_H +#define TIMER_H 1 + +#include <stdint.h> + +#ifndef TIMER_PRESCALER +# if F_CPU > 16000000 +# define TIMER_PRESCALER 256 +# elif F_CPU >= 4000000 +# define TIMER_PRESCALER 64 +# else +# define TIMER_PRESCALER 8 +# endif +#endif +#define TIMER_RAW_FREQ (F_CPU/TIMER_PRESCALER) +#define TIMER_RAW TCNT0 +#define TIMER_RAW_TOP (TIMER_RAW_FREQ/1000) + +#if (TIMER_RAW_TOP > 255) +# error "Timer0 can't count 1ms at this clock freq. Use larger prescaler." +#endif + +#define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a)) +#define TIMER_DIFF_RAW(a, b) TIMER_DIFF(a, b, UINT8_MAX) +#define TIMER_DIFF_MS(a, b) TIMER_DIFF(a, b, UINT16_MAX) + + +extern volatile uint16_t timer_count; + + +void timer_init(void); +void timer_clear(void); +uint16_t timer_read(void); +uint16_t timer_elapsed(uint16_t last); + +#endif |