[an error occurred while processing this directive]
Просветите, плиз, чайника на тему использования таймера в AVR +CVAVR(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено EagleB3 07 сентября 2006 г. 13:59

Работаю с AT90S8535. Хочется сделать в CVAVR функцию, в которой:
- Запускается таймер (конкретно - Timer2), таймер должен досчитать до некоторого значения (функция получает его в качестве параметра) и останавливается до следующего запуска;
- Работает цикл, в котором
-- Периодически проверяется значение некоторой переменной и состояние таймера;
-- Если переменная получила определенное значение - функция возвращает значение;
-- Если таймер (досчитал и остановился), а определенного значения у переменной нет - функция возвращает таймаут.

(Знаю, как это можно сделать через преывание по таймеру, но через прерывание по таймеру работать не хочу.)

Поизучав мануалы, у меня сложилось впечатление, что для того, чтобы оно так работало достаточно проинициализировать:
ASSR=0x00;
TCNT2=0x00;
TCCR2=0x0F; // Clock value: 9,000 kHz, Mode: CTC top=OCR2
OCR2=0x80; // Считаем TCNT2 от 0 до 0x80

Если я в подпрограмме загляну в TCNT2 и найду там 0x00 - значит, таймер истек.
А для перезапуска в подпрограмме достаточно:
TCNT2=0x00;
TCCR2=0x0F; // Clock value: 9,000 kHz, Mode: CTC top=OCR2

Но происходит что-то, причин чего я не понимаю: таймер не останавливается. Продолжает считать. Почему? Что я делаю не правильно? Или я чего-то не понимаю?



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание