Таймеры

Данная библиотека таймеров покрывает большую часть функциональности таймеров ATmega128. Так как таймеры AVR в разных чипах различаются, нельзя для их использования написать универсальные функции. Описанные функции ATmega128 в большей степени просто примитивные функции для изменения или чтения регистров, но всё же они читаемы, чем сами регистры.

Типы данных

  • timer0_prescale
    Тип выбора коэффициента делителя в такте таймера 0. Варианты значений и обозначения:
    • TIMER0_NO_PRESCALE - Делитель не используется.
    • TIMER0_PRESCALE_8 - Коэффициент деления 8.
    • TIMER0_PRESCALE_32 - Коэффициент деления 32.
    • TIMER0_PRESCALE_64 - Коэффициент деления 64.
    • TIMER0_PRESCALE_128 - Коэффициент деления 128.
    • TIMER0_PRESCALE_256 - Коэффициент деления 256.
    • TIMER0_PRESCALE_1024 - Коэффициент деления 1024.
  • timer2_prescale
    Тип выбора коэффициента делителя в такте таймера 2. Варианты значений и обозначения:
    • TIMER2_NO_PRESCALE - Делитель не используется.
    • TIMER2_PRESCALE_8 - Коэффициент деления 8.
    • TIMER2_PRESCALE_64 - Коэффициент деления 64.
    • TIMER2_PRESCALE_256 - Коэффициент деления 256.
    • TIMER2_PRESCALE_1024 - Коэффициент деления 1024.
    • TIMER2_PRESCALE_T2_FALLING - Тактовый сигнал идёт по падающему фронту вывода T2.
    • TIMER2_PRESCALE_T2_RISING - Тактовый сигнал идёт по нарастающему фронту вывода T2.
  • timer1_prescale
  • timer3_prescale
    Тип выбора коэффициента делителя в такте таймера 1/3. Варианты значений и обозначения („n“ обозначает 1 или 3):
    • TIMERn_NO_PRESCALE - Делитель не используется.
    • TIMERn_PRESCALE_8 - Коэффициент деления 8.
    • TIMERn_PRESCALE_64 - Коэффициент деления 64.
    • TIMERn_PRESCALE_256 - Коэффициент деления 256.
    • TIMERn_PRESCALE_1024 - Коэффициент деления 1024.
    • TIMERn_PRESCALE_Tn_FALLING - Тактовый сигнал идёт по спадающему фронту вывода Tn.
    • TIMERn_PRESCALE_Tn_RISING - Тактовый сигнал идёт по нарастающему фронту вывода Tn.

 

  • timer1_ctc_top
  • timer3_ctc_top
    Тип выбора максимального значения у счётчика режима CTC таймера 1/3. Варианты значений и обозначения („n“ обозначает 1 или 3):
    • TIMERn_CTC_TOP_OCRA - Максимальное значение назначается регистром сравнения А таймера 1/3.
    • TIMERn_CTC_TOP_ICR – Максимальное значение назначается регистром счётчика событий таймера 1/3.
  • timer1_fast_pwm_top
  • timer3_fast_pwm_top
    Тип выбора максимального значения у счётчика быстрого режима ШИМ таймера 1/3. Варианты значений и обозначения („n“ обозначает 1 или 3):
    • TIMERn_FAST_PWM_TOP_256 - Максимальное значение 255.
    • TIMERn_FAST_PWM_TOP_512 - Максимальное значение 511.
    • TIMERn_FAST_PWM_TOP_1024 - Максимальное значение 1023.
    • TIMERn_FAST_PWM_TOP_ICR - Максимальное значение назначается регистром счётчика событий таймера 1/3.
    • TIMERn_PAST_PWM_TOP_OCRA - Максимальное значение назначается регистром сравнения А таймера 1/3.
  • timer1_fast_pwm_output_mode
  • timer1_fast_pwm_output_mode
    Тип выбора выходов таймера 1/3 в быстром режиме ШИМ. Варианты значений и обозначения („n“ обозначает 1 или 3):
    • TIMERn_FAST_PWM_OUTPUT_DISABLE - Сигнал ШИМ не доходит до вывода.
    • TIMERn_FAST_PWM_OUTPUT_TOGGLE_ON_MATCH - Вывод становится обратным, когда счётчик приобретает значение регистра сравнения.
    • TIMERn_FAST_PWM_OUTPUT_CLEAR_ON_MATCH - Вывод становится низким, когда счётчик приобретает значение регистра сравнения и высоким, когда счётчик достигает нуля.
    • TIMERn_FAST_PWM_OUTPUT_SET_ON_MATCH - Вывод становится высоким, когда счётчик приобретает значение регистра сравнения, и низким, когда счётчик достигает нуля.

Функции

  • void timer0_init_normal(timer0_prescale prescale)
    Установка таймера 0 в нормальный режим. В этом режиме таймер считает до 255 включительно и единственное происходящее событие – это переполнение. Параметры:
    • prescale - Коэффициент делителя такта.
  • void timer2_init_normal(timer2_prescale prescale)
    Установка таймера 2 в нормальный режим. В этом режиме таймер считает до 255 включительно и единственным событием является переполнение. Два коэффициента делителя такта позволяют установить источником тактового сигнала таймера вывод Т2. Параметры:
    • prescale - Коэффициент делителя такта или источник тактового сигнала.
  • void timer0_stop()
  • void timer2_stop()
    Остановка таймера 0/2.
  • unsigned char timer0_get_value(void)
  • unsigned char timer2_get_value(void)
    Возвращение текущего значения счётчика таймера 0/2. Параметры:
    • Возвращает текущее значение 8-битного счётчика.
  • void timer0_set_value(unsigned char value)
  • void timer2_set_value(unsigned char value)
    Назначение нового значения счётчика таймера 0/2. Параметры:
    • value - Новое значение 8-битного счётчика.
  • void timer0_overflow_interrupt_enable(bool enable)
  • void timer2_overflow_interrupt_enable(bool enable)
    Разрешение или запрещение прерывания переполнения таймера 0/2. Вектор прерывания TIMERn_OVF_vect где „n“ - это 0 или 2. Параметры:
    • enable - Значение true/false для запрета или разрешения прерывания. true разрешает, false запрещает.
  • bool timer0_overflow_flag_is_set(void)
  • bool timer2_overflow_flag_is_set(void)
    Контроль флага переполнения таймера 0/2. Параметры:
    • Возвращает true, если переполнение произошло, и false, если нет.
  • void timer0_overflow_flag_clear(void)
  • void timer2_overflow_flag_clear(void)
    Обнуление флага событий при переполнении таймера 0/2.
  • void timer1_init_normal(timer1_prescale prescale)
  • void timer3_init_normal(timer3_prescale prescale)
    Установка таймера 1/3 в нормальный режим. В этом режиме таймер считает до 65535 включительно и единственным происходящим событием является переполнение. Параметры:
    • prescale - Коэффициент делителя такта.
  • 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.
  • void timer1_stop()
  • void timer3_stop()
    Остановка таймера 1/3.
  • unsigned char timer1_get_value(void)
  • unsigned char timer3_get_value(void)
    Возвращение текущего значения счётчика таймера 1/3.Параметры:
    • Возвращает текущее значение 16-битного счётчика.
  • void timer1_set_value(unsigned char value)
  • void timer3_set_value(unsigned char value)
    Назначение нового значения счётчика таймера 1/3. Параметры:
    • value - Новое значение 16-битного счётчика.
  • 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. Параметры:
    • Возвращает значение 16-битной единицы регистра сравнения.
  • 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. Параметры:
    • value - Новое 16-битное значение сравнения.
  • unsigned short timer1_get_input_capture_value(void)
  • unsigned short timer3_get_input_capture_value(void)
    Возвращение значения счётчика событий таймера 1/3. Параметры:
    • Возвращает значение регистра 16-битного счётчика событий.
  • void timer1_set_input_capture_value(unsigned short value)
  • void timer3_set_input_capture_value(unsigned short value)
    Назначает значение регистра счётчика событий таймера 1/3. Параметры:
    • value - Новое значение 16-битного счётчика событий.
  • void timer1_overflow_interrupt_enable(bool enable)
  • void timer3_overflow_interrupt_enable(bool enable)
    Запрещение или разрешение прерывания переполнения таймера 1/3. Вектор прерывания TIMERn_OVF_vect, где „n“ – это 1 или 3. Параметры:
    • enable - Значение true/false для разрешения или запрета прерывания. true разрешает, false запрещает.
  • 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. Параметры:
    • enable - Значение true/false для разрешения или запрета прерывания. true разрешает, false запрещает.
  • void timer1_input_capture_interrupt_enable(bool enable)
  • void timer3_input_capture_interrupt_enable(bool enable)
    Разрешение или запрет прерывания счётчика событий таймера 1/3. Вектор прерывния TIMERn_CAPT_vect, где „n“ - это 1 или 3. Параметры:
    • enable - Значение true/false для разрешения или запрета прерывания. true разрешает, false запрещает.
  • bool timer1_overflow_flag_is_set(void)
  • bool timer3_overflow_flag_is_set(void)
    Контроль совершения переполнения таймера 1/3. Параметры:
    • Возвращает значение true, если переполнение произошло, и false, если нет.
  • bool timer1_input_capture_flag_is_set(void)
  • bool timer3_input_capture_flag_is_set(void)
    Контроль флага счётчика событий таймерa 1/3. Параметры:
    • Возвращает значение true, если событие произошло, и false, если нет.
  • void timer1_overflow_flag_clear(void)
  • void timer3_overflow_flag_clear(void)
    Обнуление флага события переполнения таймера 1/3.
  • void timer1_input_capture_flag_clear(void)
  • void timer3_input_capture_flag_clear(void)
    Обнуление флага счётчика событий таймера 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();
}
ru/software/homelab/library/timer.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0