|
|
|
@ -32,33 +32,32 @@ volatile uint32_t timer_count;
|
|
|
|
|
*/
|
|
|
|
|
void timer_init(void) {
|
|
|
|
|
#if TIMER_PRESCALER == 1
|
|
|
|
|
uint8_t prescaler = 0x01;
|
|
|
|
|
uint8_t prescaler = _BV(CS00);
|
|
|
|
|
#elif TIMER_PRESCALER == 8
|
|
|
|
|
uint8_t prescaler = 0x02;
|
|
|
|
|
uint8_t prescaler = _BV(CS01);
|
|
|
|
|
#elif TIMER_PRESCALER == 64
|
|
|
|
|
uint8_t prescaler = 0x03;
|
|
|
|
|
uint8_t prescaler = _BV(CS00) | _BV(CS01);
|
|
|
|
|
#elif TIMER_PRESCALER == 256
|
|
|
|
|
uint8_t prescaler = 0x04;
|
|
|
|
|
uint8_t prescaler = _BV(CS02);
|
|
|
|
|
#elif TIMER_PRESCALER == 1024
|
|
|
|
|
uint8_t prescaler = 0x05;
|
|
|
|
|
uint8_t prescaler = _BV(CS00) | _BV(CS02);
|
|
|
|
|
#else
|
|
|
|
|
# error "Timer prescaler value is NOT vaild."
|
|
|
|
|
# error "Timer prescaler value is not valid"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __AVR_ATmega32A__
|
|
|
|
|
// Timer0 CTC mode
|
|
|
|
|
TCCR0A = 0x02;
|
|
|
|
|
|
|
|
|
|
TCCR0A = _BV(WGM01);
|
|
|
|
|
TCCR0B = prescaler;
|
|
|
|
|
|
|
|
|
|
OCR0A = TIMER_RAW_TOP;
|
|
|
|
|
TIMSK0 = (1 << OCIE0A);
|
|
|
|
|
TIMSK0 = _BV(OCIE0A);
|
|
|
|
|
#else
|
|
|
|
|
// Timer0 CTC mode
|
|
|
|
|
TCCR0 = (1 << WGM01) | prescaler;
|
|
|
|
|
TCCR0 = _BV(WGM01) | prescaler;
|
|
|
|
|
|
|
|
|
|
OCR0 = TIMER_RAW_TOP;
|
|
|
|
|
TIMSK = (1 << OCIE0);
|
|
|
|
|
TIMSK = _BV(OCIE0);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|