ЛЕНТА

Л

Приоритет прерываний AVR

Любой (ну во всяком случае любой более-менее современный) процессор может работать с прерываниями.

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

Однако возможны случаи (и это вовсе не редкость), когда разрешены несколько видов прерываний. Как в этом случае должен реагировать на них процессор, если несколько разных событий, связанных с прерываниями, произойдут одновременно?

Для разрешения таких вопросов имеется такая вещь, как приоритет прерываний. То есть важность событий.

В таком случае, если несколько событий происходит одновременно, то первым выполняется обработка прерывания для того события, приоритет которого выше (для наиболее важного). После обработки наиболее важного прерывания выполняется обработка события, имеющего следующую в очереди степень важности (приоритет), и так далее до тех пор, пока не будут обработаны все прерывания.

Пока обрабатывается одно прерывание, все остальные прерывания запрещены. Поэтому ни одно прерывание, даже с низшим приоритетом, не останется без обработки. Алгоритм обработки прерываний примерно следующий:

Этот алгоритм справедлив и для других микроконтроллеров, а не только для AVR. Могут быть особенности в зависимости от производителя, серии, модели и т.п. Но в общих чертах всё происходит примерно так.

При возникновении прерывания выполнение программы приостанавливается и управление передаётся обработчику прерывания. Обычно это подпрограмма, которая обязательно должна заканчиваться командой возврата из прерывания. Эта команда передаёт управление в ту точку программы, в которой она была прервана, и программа продолжает свою работу.

Что касается очерёдности обработки прерываний, то в AVR чем меньше адрес вектора прерывания, тем выше приоритет прерывания. В большинстве микроконтроллеров наивысший приоритет имеет сигнал сброса. Затем обычно идут внешние прерывания, прерывания от изменения состояния входа и т.д.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить…

Wiki