26 lines
761 B
C
26 lines
761 B
C
#include <avr/interrupt.h>
|
|
#include "timer.h"
|
|
/*
|
|
* timer.c
|
|
*
|
|
* Created: 13.04.2023 14:13:50
|
|
* Author: mrnek
|
|
*/
|
|
|
|
static unsigned long millis = 0;
|
|
|
|
void setup_timer() {
|
|
TCCR1B |= (1 << WGM12); // настраиваем режим CTC (Clear Timer on Compare Match)
|
|
OCR1A = 250; // задаем значение, при котором будет срабатывать прерывание (в данном случае 15999, так как Atmega328p работает на частоте 16 МГц и нужно получить прерывание раз в 1 мс)
|
|
TIMSK1 |= (1 << OCIE1A); // включаем прерывание по совпадению со значением регистра OCR1A
|
|
sei(); // разрешаем глобальные прерывания
|
|
TCCR1B |= (1 << CS11) | (1 << CS10); // запускаем таймер с предделителем 64 (16000000/64=250000)
|
|
}
|
|
|
|
unsigned long get_millis() {
|
|
return millis;
|
|
}
|
|
|
|
ISR(TIMER1_COMPA_vect) {
|
|
++millis;
|
|
} |