Таймеры
Данная библиотека таймеров покрывает большую часть функциональности таймеров ATmega128. Так как таймеры AVR в разных чипах различаются, нельзя для их использования написать универсальные функции. Описанные функции ATmega128 в большей степени просто примитивные функции для изменения или чтения регистров, но всё же они читаемы, чем сами регистры.
Типы данных
Функции
void timer0_overflow_interrupt_enable(bool enable)
void timer2_overflow_interrupt_enable(bool enable)
Разрешение или запрещение прерывания переполнения таймера 0/2. Вектор прерывания TIMERn_OVF_vect где „n“ - это 0 или 2. Параметры:
void timer1_init_normal(timer1_prescale prescale)
void timer3_init_normal(timer3_prescale prescale)
Установка таймера 1/3 в нормальный режим. В этом режиме таймер считает до 65535 включительно и единственным происходящим событием является переполнение. Параметры:
void timer1_init_ctc(timer1_prescale prescale, timer1_ctc_top top)
void timer3_init_ctc(timer3_prescale prescale, timer3_ctc_top top)
Установка режима CTC (англ. Clear Timer on Compare Match) таймера 1/3. В этом режиме таймер считает не до 65535, а до выбранного значения регистра и при желании вызывает прерывание по его достижении. Параметры:
prescale - Коэффициент делителя такта.
top - Выбор регистра максимального значения таймера. Можно выбрать между двумя регистрами, для изменения которых существуют отдельные функции. Оба регистра можно настроить на прерывание при достижении верхушки таймера.
void timer1_init_fast_pwm(timer1_prescale prescale, timer1_fast_pwm_top top, timer1_fast_pwm_output_mode output_a, timer1_fast_pwm_output_mode output_b, timer1_fast_pwm_output_mode output_c)
void timer3_init_fast_pwm(timer3_prescale prescale, timer3_fast_pwm_top top, timer3_fast_pwm_output_mode output_a, timer3_fast_pwm_output_mode output_b, timer3_fast_pwm_output_mode output_c)
Настройка режима таймера 1/3 на запуск быстрой ШИМ. В этом режиме значение, до которого считает таймер (т.е. период сигнала ШИМ), выборочное. У таймера 3 ШИМ единицы для генерирования сигнала (A, B и C). Все они имеют устанавливаемый выход. Параметры:
prescale - Коэффициент делителя такта.
top - Выбор максимального значения таймера. Выбрать можно между константами и двумя регистрами. Оба регистра можно настроить на совершение прерывания при достижении верхушки счётчика.
output_a - Настройка выходного вывода A.
output_b - Настройка выходного вывода B.
output_c - Настройка выходного вывода C.
unsigned short timer1_get_compare_match_unitA_value(void)
unsigned short timer1_get_compare_match_unitB_value(void)
unsigned short timer1_get_compare_match_unitC_value(void)
unsigned short timer3_get_compare_match_unitA_value(void)
unsigned short timer3_get_compare_match_unitB_value(void)
unsigned short timer3_get_compare_match_unitC_value(void)
Возвращает значение сравнения единице генерирования сигнала A/B/C таймера 1/3. Параметры:
void timer1_set_compare_match_unitA_value(unsigned short value)
void timer1_set_compare_match_unitB_value(unsigned short value)
void timer1_set_compare_match_unitC_value(unsigned short value)
void timer3_set_compare_match_unitA_value(unsigned short value)
void timer3_set_compare_match_unitB_value(unsigned short value)
void timer3_set_compare_match_unitC_value(unsigned short value)
Назначает значение сравнения единицы генерирования сигнала A/B/C таймера 1/3. Параметры:
void timer1_overflow_interrupt_enable(bool enable)
void timer3_overflow_interrupt_enable(bool enable)
Запрещение или разрешение прерывания переполнения таймера 1/3. Вектор прерывания TIMERn_OVF_vect, где „n“ – это 1 или 3. Параметры:
void timer1_compare_match_unitA_interrupt_enable(bool enable)
void timer1_compare_match_unitB_interrupt_enable(bool enable)
void timer1_compare_match_unitC_interrupt_enable(bool enable)
void timer3_compare_match_unitA_interrupt_enable(bool enable)
void timer3_compare_match_unitB_interrupt_enable(bool enable)
void timer3_compare_match_unitC_interrupt_enable(bool enable)
Разрешает или запрещает таймеру 1/3 прерывание события сравнения единицы генерирования сигнала A/B/C. Вектор прерывания – TIMERn_COMPx_vect, где „n“ – это 1 или 3 и „x“ - A, B или C. Параметры:
void timer1_input_capture_interrupt_enable(bool enable)
void timer3_input_capture_interrupt_enable(bool enable)
Разрешение или запрет прерывания счётчика событий таймера 1/3. Вектор прерывния TIMERn_CAPT_vect, где „n“ - это 1 или 3. Параметры:
Пример
В примере таймер 0 устанавливается в обычный режим счёта и разрешается прерывание переполнения.
#include <homelab/timer.h>
#include <avr/interrupt.h>
// Программный отрезок прерывания
ISR(TIMER0_OVF_vect)
{
}
int main(void)
{
// Таймер 0 в нормальный режим, делитель такта 32
timer0_init_normal(TIMER0_PRESCALE_32);
// Разрешение прерывания переполнения таймера 0
timer0_overflow_interrupt_enable(true);
// Глобальное разрешение прерывания
sei();
}