This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| ru:software:homelab:library:timer [2013/08/14 21:37] – eduardtlmk | ru:software:homelab:library:timer [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Таймеры ====== | ||
| - | Данная библиотека таймеров покрывает большую часть функциональности таймеров ATmega128. Так как таймеры AVR в разных чипах различаются, | ||
| - | |||
| - | ===== Типы данных ===== | ||
| - | |||
| - | * **// | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | |||
| - | * **// | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | |||
| - | * **// | ||
| - | * **// | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | ~~PB~~ | ||
| - | * **// | ||
| - | * **// | ||
| - | * // | ||
| - | * // | ||
| - | |||
| - | * **// | ||
| - | * **// | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | |||
| - | * **// | ||
| - | * **// | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | |||
| - | ===== Функции ===== | ||
| - | |||
| - | * **//void timer0_init_normal(timer0_prescale prescale)// | ||
| - | * // | ||
| - | |||
| - | * **//void timer2_init_normal(timer2_prescale prescale)// | ||
| - | * // | ||
| - | |||
| - | * **//void timer0_stop()// | ||
| - | * **//void timer2_stop()// | ||
| - | |||
| - | * **// | ||
| - | * **// | ||
| - | * Возвращает текущее значение 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// - Значение // | ||
| - | |||
| - | * **//bool timer0_overflow_flag_is_set(void)// | ||
| - | * **//bool timer2_overflow_flag_is_set(void)// | ||
| - | * Возвращает //true//, если переполнение произошло, | ||
| - | |||
| - | * **//void timer0_overflow_flag_clear(void)// | ||
| - | * **//void timer2_overflow_flag_clear(void)// | ||
| - | |||
| - | * **//void timer1_init_normal(timer1_prescale prescale)// | ||
| - | * **//void timer3_init_normal(timer3_prescale 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, а до выбранного значения регистра и при желании вызывает прерывание по его достижении. Параметры: | ||
| - | * // | ||
| - | * //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)// | ||
| - | * // | ||
| - | * //top// - Выбор максимального значения таймера. Выбрать можно между константами и двумя регистрами. Оба регистра можно настроить на совершение прерывания при достижении верхушки счётчика. | ||
| - | * // | ||
| - | * // | ||
| - | * // | ||
| - | |||
| - | * **//void timer1_stop()// | ||
| - | * **//void timer3_stop()// | ||
| - | |||
| - | * **// | ||
| - | * **// | ||
| - | * Возвращает текущее значение 16-битного счётчика. | ||
| - | |||
| - | * **//void timer1_set_value(unsigned char value)//** | ||
| - | * **//void timer3_set_value(unsigned char value)//** \\ Назначение нового значения счётчика таймера 1/3. Параметры: | ||
| - | * //value// - Новое значение 16-битного счётчика. | ||
| - | |||
| - | * **// | ||
| - | * **// | ||
| - | * **// | ||
| - | * **// | ||
| - | * **// | ||
| - | * **// | ||
| - | * Возвращает значение 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-битное значение сравнения. | ||
| - | |||
| - | * **// | ||
| - | * **// | ||
| - | * Возвращает значение регистра 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, | ||
| - | * //enable// - Значение // | ||
| - | |||
| - | * **//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 прерывание события сравнения единицы генерирования сигнала | ||
| - | * //enable// - Значение // | ||
| - | |||
| - | * **//void timer1_input_capture_interrupt_enable(bool enable)//** | ||
| - | * **//void timer3_input_capture_interrupt_enable(bool enable)//** \\ Разрешение или запрет прерывания счётчика событий таймера 1/3. Вектор прерывния TIMERn_CAPT_vect, | ||
| - | * //enable// - Значение // | ||
| - | |||
| - | * **//bool timer1_overflow_flag_is_set(void)// | ||
| - | * **//bool timer3_overflow_flag_is_set(void)// | ||
| - | * Возвращает значение //true//, если переполнение произошло, | ||
| - | |||
| - | * **//bool timer1_input_capture_flag_is_set(void)// | ||
| - | * **//bool timer3_input_capture_flag_is_set(void)// | ||
| - | * Возвращает значение //true//, если событие произошло, | ||
| - | |||
| - | * **//void timer1_overflow_flag_clear(void)// | ||
| - | * **//void timer3_overflow_flag_clear(void)// | ||
| - | |||
| - | * **//void timer1_input_capture_flag_clear(void)// | ||
| - | * **//void timer3_input_capture_flag_clear(void)// | ||
| - | |||
| - | ===== Пример ===== | ||
| - | |||
| - | В примере таймер 0 устанавливается в обычный режим счёта и разрешается прерывание переполнения. | ||
| - | |||
| - | <code c> | ||
| - | #include < | ||
| - | #include < | ||
| - | |||
| - | // Программный отрезок прерывания | ||
| - | ISR(TIMER0_OVF_vect) | ||
| - | { | ||
| - | } | ||
| - | |||
| - | int main(void) | ||
| - | { | ||
| - | // Таймер 0 в нормальный режим, делитель такта 32 | ||
| - | timer0_init_normal(TIMER0_PRESCALE_32); | ||
| - | |||
| - | // Разрешение прерывания переполнения таймера 0 | ||
| - | timer0_overflow_interrupt_enable(true); | ||
| - | |||
| - | // Глобальное разрешение прерывания | ||
| - | sei(); | ||
| - | } | ||
| - | </ | ||