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

 
 
 
Reply to this topicStart new topic
> Выход после Sleep в режиме Idle
dinam
сообщение Sep 28 2005, 08:10
Сообщение #1


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

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Изучаю ATMEGA 128. И возник вопрос. Можно ли сделать чтобы переход был не по вектору прерывания, а на следующую команду после SLEEP?
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 28 2005, 08:22
Сообщение #2


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(dinam @ Sep 28 2005, 12:10)
Изучаю ATMEGA 128. И возник вопрос. Можно ли сделать чтобы переход был не по вектору прерывания, а на следующую команду после SLEEP?
*

А как Вы себе это представляете без прерывания? Выход из режима SLEEP может осуществляться либо по прерыванию, либо по WD, либо по внешнему RESET. Вот и выбирайте... Но в Вашем случае необходимо организовать какое нибудь внутреннее прерывание от таймера или внешнее по событию, а в теле прерырания - только возврат от туда. Вот Вам и будет старт со следующей команды.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
dinam
сообщение Sep 28 2005, 08:33
Сообщение #3


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

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Почему без прерывания? Я имел ввиду, как сделать прерывания, реализованные например как в PICах. Хочу минимальное время реакции на прерывание -> задаю чтобы перехода на вектор прервания не было, а программа продолжала выполняться дальше, начиная со следующей команы после Sleep. А с переходом по вектору прерывания у меня сейчас нормально работает. Но так теряется куча тактов драгоценного времени.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Sep 28 2005, 08:48
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(dinam @ Sep 28 2005, 11:33)
Почему без прерывания? Я имел ввиду, как сделать прерывания,  реализованные например как в PICах. Хочу минимальное время реакции на прерывание -> задаю чтобы перехода на вектор прервания не было, а программа продолжала выполняться дальше, начиная со следующей команы после Sleep. А с переходом по вектору прерывания у меня сейчас нормально работает. Но так теряется куча тактов драгоценного времени.
*

Что-то совсем запутанно. У пиков вектор события прерывания один. Если на него не ходить то все обработчики прерывания автоматом игнорируются. У AVR для каждого прерывания свой адрес по которому стоит переход на обработчик прерывания. Если вы не хотите обрабатывать прерывание - запретите его.
Может я что не понял, подробнее плиз... wacko.gif

А если Вас смущает то что возврат занимает "драгоценного время", то поставьте вместо JMP "Обработчик прерывания" reti. А что касается быстродействия то 4 такта пика - 1 такт AVR.
Go to the top of the page
 
+Quote Post
Karl
сообщение Sep 28 2005, 09:02
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(dinam @ Sep 28 2005, 13:33)
Почему без прерывания? Я имел ввиду, как сделать прерывания,  реализованные например как в PICах. Хочу минимальное время реакции на прерывание -> задаю чтобы перехода на вектор прервания не было, а программа продолжала выполняться дальше, начиная со следующей команы после Sleep. А с переходом по вектору прерывания у меня сейчас нормально работает. Но так теряется куча тактов драгоценного времени.
*


Можешь вместо перехода на подпограмму обработки прерывания сразу написать reti. Быстрее никак.
Go to the top of the page
 
+Quote Post
dinam
сообщение Sep 28 2005, 09:09
Сообщение #6


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

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Я вас спрашиваю как в ATMEGe, а вы как в PICax smile.gif . Вы всё правильно сказали. Но дело в том, что если не разрешать глобальные прерывание в PICax, то он всё равно просыпается и начинает выполнять программу дальше, начиная со следующей команды после Sleep. Удобно реализовывать всякие паузы. А самое главное отработка прерывания происходит очень быстро. Если мне не изменяет память, то при работе от внутреннего генератора 4МГц (время команды 1мкс), время между внешним сигналом прерывания и изменением сигнала на ноге, которой надо управлять порядка одного такта (250нс)! Смотрел осциллографом.
Go to the top of the page
 
+Quote Post
dinam
сообщение Sep 28 2005, 09:11
Сообщение #7


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

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Цитата(Karl @ Sep 28 2005, 16:02)
Можешь вместо перехода на подпограмму обработки прерывания сразу написать reti. Быстрее никак.
*

Понятно, спасибо.
Go to the top of the page
 
+Quote Post
mse
сообщение Sep 28 2005, 13:15
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(dinam @ Sep 28 2005, 12:11)
Цитата(Karl @ Sep 28 2005, 16:02)
Можешь вместо перехода на подпограмму обработки прерывания сразу написать reti. Быстрее никак.
*

Понятно, спасибо.
*


Ну, можно ещё анализировать флаг вручную
Код
while:
   sbis  interrupt_flags,interest_flag
   rjmp  while
 ;interrupt service
 ...
 ;interrupt flag clear

Съэкономишь 4 такта в самом худшем случае
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 00:34
Рейтинг@Mail.ru


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