[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Во-первых, запрос на прерывание происходит асинхронно к тактовой частоте, что добавляет джиттер шириной от 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