
- •1. По виду архитектуры
- •Принципы построения современных контроллеров.
- •Прерывания в микропроцессорных системах
- •Прерывания
- •Таймеры-счетчики микроконтроллеров
- •Параллельные порты ввода/вывода микроконтроллеров avr
- •Аналого-цифровое преобразование в мк avr
- •Простейший цап
- •Простейшие исполнительные устройства в мпт
- •Подключение матричной клавиатуры
- •Подключение матричной клавиатуры с использованием дешифратора
- •Динамический режим индикации
- •Особенности последовательного обмена данными
Прерывания в микропроцессорных системах
Многие пользователи считают, что прерывания — это та часть аппаратного обеспечения, которую лучше оставить в покое, так как их использование требует превосходного знания процессора для разработки программы обработки прерывания. В противном случае при возникновении прерывания система «засыпает» или «идет вразнос». Такое чувство обычно появляется у разработчика после опыта работы с прерываниями для персонального компьютера, который имеет ряд особенностей, усложняющих создание обработчика прерываний. Многие из этих проблем не имеют места в оборудовании, реализованном на базе микроконтроллеров. Использование в данном оборудовании прерываний может существенно упростить его разработку и применение.
Если Вы никогда не имели дело с прерываниями, то у Вас возникнет вопрос — что это такое? В компьютерной системе прерывание — это запуск специальной подпрограммы (называемой «обработчиком прерывания» или «программой обслуживания прерывания»), который вызывается сигналом аппаратуры. На время выполнения этой подпрограммы реализация текущей программы останавливается. Термин «запрос на прерывание» (interrupt request) используется потому, что иногда программа отказывается подтвердить прерывание и выполнить обработчик прерывания немедленно.
Прерывания в компьютерной системе аналогичны прерываниям в повседневной жизни. Классический пример такого прерывания — телефонный звонок во время просмотра телевизионной передачи. Когда звонит телефон, у Вас есть три возможности. Первый — проигнорировать звонок. Второй — ответить на звонок, но сказать, что Вы перезвоните позже. Третий — ответить на звонок, отложив все текущие дела. В компьютерной системе также имеются три подобных ответа, которые могут быть использованы в качестве реакции на внешний аппаратный запрос.
Первый возможный ответ — «не реагировать на прерывание, пока не завершится выполнение текущей задачи» — реализуется путем запрещения (маскирования) обслуживания запроса прерывания. После завершения задачи возможен один из двух вариантов сброс маски и разрешение обслуживания, что приведет к вызову обработчика прерывания, или анализ значения битов («поллинг»), указывающих на поступление запросов прерывания и непосредственное выполнение программы обслуживания без вызова обработчика прерывания Такой метод обработки прерываний используется, когда требуется обеспечить заданное время выполнения основной программы, так как любое прерывание может нарушить реализацию необходимого интерфейса.
Не рекомендуется длительное маскирование прерываний, так как в течение этого времени может произойти наложение нескольких событий, вызывающих прерывания, а распознаваться будет только одно Допустимая продолжительность маскирования зависит от конкретного применения микроконтроллера, типа и частоты следования таких событий. Не рекомендуется запрещать прерывания на время большее, чем половина минимального ожидаемого периода следования событий, запрашивающих прерывания.
Обработчик прерывания всегда обеспечивает следующую последовательность действий
1. Сохранить содержимое регистров контекста
2. Сбросить контроллер прерываний и оборудование, вызвавшее запрос
3. Обработать данные
4. Восстановить содержимое регистров контекста
5. Вернуться к прерванной программе
Регистры контекста — это регистры, определяющие текущее состояние выполнения основной программы Обычно к их числу относятся программный счетчик, регистры состояния и аккумуляторы Другие регистры процессора, такие как индексные регистры, могут быть использованы в процессе обработки прерывания поэтому их содержимое также необходимо сохранить Все остальные регистры являются специфическими для конкретного микроконтроллера и его применения
После сброса в исходное состояние контроллер прерываний готов воспринимать следующий запрос, а оборудование, вызывающее прерывание, готово посыпать запрос, когда возникают соответствующие причины. Если поступит новый запрос прерывания, то регистр маскирования прерывании процессора предотвратит обработку прерывания, но регистр состояния прерываний зафиксирует этот запрос, который будет ожидать своего обслуживания После завершения обработки текущего прерывания маска прерываний будет сброшена, и вновь поступивший запрос поступает на обработку
Вложенные прерывания сложны для реализации некоторыми типами микроконтроллеров, которые не имеют стека. Эти прерывания могут также вызвать проблемы, связанные с переполнением стека Проблема переполнения актуальна для микроконтроллеров из-за ограниченного объема их памяти данных и стека последовательность вложенных прерываний может привести к тому, что в стек будет помещено больше данных, чем это допустимо
Наконец, прерывание обработано. Второй пример с телевизором показывает, что можно быстро отреагировать на запрос прерывания, приняв необходимые данные, которые будут затем использованы после решения текущей задачи. В микроконтроллерах это реализуется путем сохранения поступивших данных в массиве памяти и последующей их обработки, когда выполнение исходной программы будет завершено. Такой способ обслуживания является хорошим компромиссом между немедленной полной обработкой прерывания, которая может потребовать много времени, и игнорированием прерывания, что может привести к потере информации о событии, вызвавшем прерывание
Восстановление регистров контекста и выполнение команды возврата из прерывания переводит процессор в состояние, в котором он находился до возникновения прерывания
Рассмотрим, что происходит с содержимым различных регистров при обработке прерывания. Содержимое регистра состояния обычно автоматически сохраняется вместе с содержимым программного счетчика перед обработкой прерывания. Это избавляет от необходимости сохранять его в памяти программными средствами с помощью команд пересылки, а затем восстанавливать при возврате к исходной программе. Однако такое автоматическое сохранение реализуется не во всех типах микроконтроллеров, поэтому организации обработки прерываний следует уделить особое внимание.
Если содержимое регистра состояния сохраняется перед началом выполнения обработчика прерывания, то по команде возврата производится его автоматическое восстановление.
Если содержимое других регистров процессора изменяется при выполнении обслуживания прерывания, то оно также должно быть сохранено в памяти до изменения и восстановлено перед возвратом в основную программу. Обычно принято сохранять все регистры процессора, чтобы избежать непредсказуемых ошибок, которые очень трудно локализовать.
Адрес, которым загружается в программный счетчик при переходе к обработчику прерывания, называется «вектор прерывания». Существует несколько типов векторов Адрес, который загружается в программный счетчик при запуске микроконтроллера (leset) называется «вектор сброса». Для различных прерывании могут быть заданы разные вектора, что избавляет программу обслуживания от необходимости определять причину прерывания. Использование различными прерываниями одного вектора обычно не вызывает проблем при работе микроконтроллеров, так как чаще всею микроконтроллер исполняет одну единственную программу. Этим микроконтроллер отличается от персонального компьютера, в процессе эксплуатации которого могут добавляться различные источники прерывании (Если Вы когда-либо подключали два устройства к портам СОМ1 и COM3, то Вы представляете, о чем идет речь) В микроконтроллере, где аппаратная часть хорошо известна, не должно возникнуть каких либо проблем при совместном использовании векторов прерывании
Последнее, что осталось рассмотреть, — это программные прерывания. Существуют процессорные команды, которые могут быть использованы для имитации аппаратных прерывании. Наиболее очевидное использование этих команд — это вызов системных подпрограмм, которые располагаются в произвольном месте памяти, him требуют для обращения к ним межсегментных переходов. Эта возможность реализована в микропроцессорах семейства Intel 186 и используется в базовой системе ввода-вывода BIOS (Basic Input/Output System) и операционной системе DOS персональных компьютеров для вызова системных подпрограмм без необходимости фиксирования точки входа Вместо этого используются различные вектора прерывании, выбирающие команду, которая должна выполняться, когда происходит такое программное прерывание
Возможно после прочтения этой главы механизм прерывании станет для Вас более понятным или, наоборот. Вы только еще больше запутаетесь При описании каждого микроконтроллера будет показано, как использование прерываний может упростить его применение