[an error occurred while processing this directive] [an error occurred while processing this directive]
Отнюдь
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено BLACKEAGLE 12 мая 2002 г. 21:52
В ответ на: Время входа в прерывание вносит ПОСТОЯННУЮ задержку, а не +/-. отправлено AlexD 12 мая 2002 г. 20:05

Во-первых, запрос на прерывание происходит асинхронно к тактовой частоте, что добавляет джиттер шириной от 0 до 1 такта. Во-вторых, исполнение инструкции, во время которой случился запрос, должно полностью завершиться, а это еще от 1 до 4 тактов. Сама аппаратная последовательность входа в обработчик занимает 4 или 6 тактов (4 такта на 2 push'a PCL/PCH и еще 2 такта на rjmp vect, если ISR (Interrupt Service Routine) не начинается прямо с места, отведенного под вектор). Так что джиттер входа будет в 1..5 тактов, а это (максимум) как раз около 0.5 мкс.

С выходом как раз все наоборот - нигде ничего не прерывается, и время работы ISR строго детерминировано. Если внутри ISR есть условные переходы, имеющие в AVR, как известно, разное время исполнения в зависимости от того, выполнено или нет условие, то и время работы ISR будет разным от события к событию, что еще добавит джиттера - об этом Вы справедливо упомянули. С этим можно успешно бороться, добавляя NOPы в более короткие ветви.

Ну и вдобавок - незавершенность других прерываний во время возникновения обсуждаемого запроса, это Вы отметили.

ТщательнЕе!

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

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru