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

 
 
> Прерывания AVR
Пришелец
сообщение Nov 3 2009, 09:15
Сообщение #1


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Интересно какая максимальная задержка может быть между появлением запроса на прерывание и его выполнением
т.е. переходом на вектор прерывания.


например прерывания по таймеру маскируются записью в TIMSK
и далее выполняется работа которая должна происходить при запрещённых прерываниях таймера

по идее после TIMSK=0
нужно поставить несколько NOP т.к. во время этой команды уже может быть начата подготовка к переходу на прерывание

так вот вопрос сколько нопов здесь нужно?


по-моему трёх должно хватить - но может я ошибаюсь...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Пришелец
сообщение Nov 3 2009, 09:56
Сообщение #2


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



после возврата из прерывания следующее прерывание начинает обрабатываться не сразу
это говорит о том что подготовка к переходу на прерывание существует (видимо одна команда)

если в момент обнуления TIMSK (в момент исполнения этой команды или за одну команду до неё)
начнёт обрабатываться запрос на прерывание по таймеру то он будет обработан



проще конечно не гадать а на время обнуления TIMSK запретить все прерывания cli
а потом разрешить

_CLI();
TIMSK=0;
_SEI();

наверное ... ???

Цитата(Duhas @ Nov 3 2009, 12:29) *
время выполнения команды... по идее.. т.е. если выполняется двухтактовая команда.. на первом такте пришло прерывание.. команда довыполнится и начнется обработчик..




т.е. одного nop достаточно видимо.

Сообщение отредактировал Пришелец - Nov 3 2009, 09:55
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 3 2009, 09:59
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Пришелец @ Nov 3 2009, 12:56) *
проще конечно не гадать а на время обнуления TIMSK запретить все прерывания cli
а потом разрешить
_CLI();
TIMSK=0;
_SEI();

Тогда, следуя вашей логике, надо и после CLI ставить нопы smile.gif, поскольку CLI точно так же стирает маску, как и TIMSK=0 (только в другом регистре масок - в SREG). И по своей аппаратной реализации ничем не отличается.
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Nov 3 2009, 10:05
Сообщение #4


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Цитата(Xenia @ Nov 3 2009, 12:59) *
Тогда, следуя вашей логике, надо и после CLI ставить нопы smile.gif, поскольку CLI точно так же стирает маску, как и TIMSK=0 (только в другом регистре масок - в SREG). И по своей аппаратной реализации ничем не отличается.




После CLI не надо rolleyes.gif

я думаю эти два механизма по разному работают.
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 3 2009, 23:02
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Пришелец @ Nov 3 2009, 12:05) *
я думаю эти два механизма по разному работают.

Проц __заканчивает выполнение текущей комады__, после чего если есть хотя бы одно активное прерывание, осуществляет неявную команду JMP на соответвующий активному прерыванию вектор.
Спите спокойно, после команды TIMSK = 0 активных прерываний от таймера не будет, но следует отметить, что
сишное выражение
TIMSK = 0;
скорее всего разобъется на две команды, например

ldi Rd, 0
out TIMSK, Rd

После ldi - прерывание от таймера еще может случиться, а после out - однозначно нет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Пришелец   Прерывания AVR   Nov 3 2009, 09:15
- - Duhas   время выполнения команды... по идее.. т.е. если вы...   Nov 3 2009, 09:29
- - chief_olimp   вы хоть сами то поняли что написали? TIMSK=0 запре...   Nov 3 2009, 09:36
- - Xenia   Цитата(Пришелец @ Nov 3 2009, 12:15) по и...   Nov 3 2009, 09:42
||- - Xenia   Цитата(Пришелец @ Nov 3 2009, 13:05) я ду...   Nov 3 2009, 10:20
||- - 501-q   Цитата(defunct @ Nov 4 2009, 04:02) ldi ...   Nov 4 2009, 04:15
|- - Палыч   Цитата(Пришелец @ Nov 3 2009, 12:56) посл...   Nov 3 2009, 10:19
|- - 777777   Цитата(Пришелец @ Nov 3 2009, 12:56) если...   Nov 4 2009, 05:55
- - chief_olimp   по моему это обсуждение не имеет смысла. Я на прим...   Nov 3 2009, 10:23
- - Пришелец   про cli явно написано что после него не выполнится...   Nov 3 2009, 10:26
- - Vetal-Soft   ))) Даже если допустить, что произойдет так, что с...   Nov 3 2009, 10:30
- - Пришелец   сдаюсь согласен убедили Спасибо.   Nov 3 2009, 10:32
- - bekas   Товарищи специалисты, у меня тоже есть вопрос отно...   Nov 25 2009, 14:02
|- - SysRq   Цитата(bekas @ Nov 25 2009, 17:02) ...мож...   Nov 25 2009, 14:23
- - Duhas   мб разрешить прерывания глобально? SEI...   Nov 25 2009, 14:24
- - bekas   не помогает, следующеедействие после команды SEI ...   Nov 25 2009, 21:06
|- - ILYAUL   Цитата(bekas @ Nov 26 2009, 00:06) не пом...   Nov 25 2009, 21:18
|- - smac   Цитата(bekas @ Nov 26 2009, 00:06) не пом...   Nov 25 2009, 21:24
|- - ILYAUL   Цитата(smac @ Nov 26 2009, 00:24) Вот пок...   Nov 25 2009, 21:36
- - bekas   Да, были разрешены внешние прерывания, по умолчани...   Nov 25 2009, 22:02
- - bekas   Появился ещё один вопрос: после обработки прерыван...   Dec 11 2009, 14:52
- - defunct   Цитата(bekas @ Dec 11 2009, 16:52) Для на...   Dec 11 2009, 15:04


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:46
Рейтинг@Mail.ru


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