реклама на сайте
подробности

 
 
> Менеджер прерываний, Как проще сделать?
ivainc1789
сообщение Sep 7 2007, 10:41
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



В задаче на ATmega16 есть необходимость посчитать кол-во импульсов на пине T1 за калиброванный интервал времени. Для этого организуется таймер1 как 24р. счетчик импульсов и необходимо сделать калиброванный интервал времени. Есть два подхода:
1. Сделать интервал без дополнительных ресурсов, запретив все прерывания и разрешив только от таймера 1 для инкремента 8р. старшего байта 24р. таймера по его переполнению.
2. Использовать другой таймер для "изготовления" калиброванного интервала.
3. Ваш вариант.

Интерес пока представляет первый вариант. ИМХО, в AVR очень тяжело запретить на небольшое время все прерывания, разрешив некоторые. Нужно мудрить некий менеджер прерываний, для чего вручную: сохранять статус текущих, потом все запрещать, потом разрешать необходимые. Все это как-то коряво и долго... Есть ли более простой подход для решения задачи?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexander55
сообщение Sep 7 2007, 11:24
Сообщение #2


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(ivainc1789 @ Sep 7 2007, 14:41) *
В задаче на ATmega16 есть необходимость посчитать кол-во импульсов на пине T1 за калиброванный интервал времени. Для этого организуется таймер1 как 24р. счетчик импульсов и необходимо сделать калиброванный интервал времени. Есть два подхода:
1. Сделать интервал без дополнительных ресурсов, запретив все прерывания и разрешив только от таймера 1 для инкремента 8р. старшего байта 24р. таймера по его переполнению.
2. Использовать другой таймер для "изготовления" калиброванного интервала.
3. Ваш вариант.

Интерес пока представляет первый вариант. ИМХО, в AVR очень тяжело запретить на небольшое время все прерывания, разрешив некоторые. Нужно мудрить некий менеджер прерываний, для чего вручную: сохранять статус текущих, потом все запрещать, потом разрешать необходимые. Все это как-то коряво и долго... Есть ли более простой подход для решения задачи?

1.Используйте режим захвата
2.Таймер 1 подсчета считает по кругу импульсы, а по прерыванию от другого таймера считывается содержимое Таймера1. Затем высчитываеие разность спредыдущим съемом.
Выбирайте сами.
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Sep 7 2007, 12:05
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Цитата(alexander55 @ Sep 7 2007, 15:24) *
1.Используйте режим захвата

Жаль, но источник импульсов подключен к пину T1 и плата уже сделана и собрана, поэтому несколько неудобно использовать режим захвата. ИМХО, второй вариант в данном случае предпочтительней. Спасибо.
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 7 2007, 12:13
Сообщение #4


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(ivainc1789 @ Sep 7 2007, 16:05) *
Жаль, но источник импульсов подключен к пину T1 и плата уже сделана и собрана, поэтому несколько неудобно использовать режим захвата. ИМХО, второй вариант в данном случае предпочтительней. Спасибо.

Я стараюсь вначале подумать, а потом сделать (мы все разные).
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016