Программирование Микроконтроллеров PDF

Summary

Этот документ содержит информацию о программировании микроконтроллеров, описывая концепции и методы, включая прерывания и обмен данными между аппаратными и программными средствами. Работа рассматривается с точки зрения взаимодействия программного и аппаратного обеспечения.

Full Transcript

Микроконтроллеры принято рассматривать как программно- аппаратный комплекс, сочетающий в себе гибкость и универсальность программной реализации алгоритмов управления и высокое быстродействие обработки данных с помощью аппаратных средств. Для эффективного взаимодействия микропроцессор...

Микроконтроллеры принято рассматривать как программно- аппаратный комплекс, сочетающий в себе гибкость и универсальность программной реализации алгоритмов управления и высокое быстродействие обработки данных с помощью аппаратных средств. Для эффективного взаимодействия микропроцессора с аппаратными средствами требуются особые процедуры обмена данными. Ввод данных в микропроцессор и вывод данных в аппаратные средства всегда можно реализовать программно, используя запись и считывание соответствующих регистров ввода-вывода. В этом случае основная программа должна периодически выполнять команды ввода-вывода данных для используемых аппаратных средств. Однако при несвоевременном обмене данными работа программы может нарушиться из-за потери данных или некорректного выполнения требуемых функций. Кроме того, в момент обращения аппаратное средство может еще не успеть сформировать данные для обмена, тогда в основной программе придется предусмотреть ожидание готовности аппаратного устройства либо выполнение других функций. Все эти варианты приводят к усложнению программы, однако не всегда обеспечивают своевременный обмен данными с аппаратными средствами. Уйти от программной реализации обмена данными позволяет использование ввода-вывода по прерываниям. Прерывания (interrupt) – это запросы на обработку данных, которые формируются аппаратными средствами и передаются в микропроцессор. Предполагается, что микропроцессор принимает запрос на прерывание и останавливает выполнение текущих операций основной программы. Далее он выполняет вызов подпрограммы обслуживания прерывания, где находится необходимый набор операций по взаимодействию с аппаратным средством, отправившим запрос. Затем, наконец, микропроцессор продолжает выполнение основной программы. Достоинством такого подхода является отказ от программного контроля за состоянием аппаратных средств и взаимодействием с ними. При этом обмен данными с аппаратными средствами происходит только тогда, когда это необходимо. Таким образом, взаимодействие между функциями, реализуемыми программно и аппаратно, производится формированием запросов прерываний. Обработка всех приходящих запросов прерываний может быть разрешена или запрещена с помощью флага I глобально разрешения прерываний в регистре ввода-вывода SREG. При I = 1 обработка всех запросов прерываний глобально разрешена, а при I = 0 – запрещена. Кроме того, запрет и разрешение каждого запроса прерывания может быть установлен индивидуально в настроечных регистрах ввода-вывода, относящихся к определенным аппаратным средствам. Организация обработки запросов прерываний в микроконтроллерных системах имеет некоторые особенности. Во-первых, обработка каждого запроса требует вызова индивидуальной подпрограммы обработки прерывания. Во-вторых, запросы от разных аппаратных средств могут приходить одновременно, и тогда для выбора наиболее приоритетного прерывания требуется арбитраж. Эти функции обычно выполняют специальные устройства, называемые контроллерами прерываний. Индивидуальные адреса подпрограмм прерываний задаются в форме специальных таблиц векторов прерываний. Рассмотрим указанную таблицу на примере микроконтроллера ATmega16. Система прерываний микроконтроллера ATmega16 позволяет обрабатывать 17 запросов на прерывание от его аппаратных средств. Все прерывания, которые поддерживаются данным микроконтроллером, принято представлять в виде таблицы векторов прерываний, она приведена на слайде. Здесь прерывания расположены в порядке убывания приоритетности. Каждому прерыванию соответствует жестко закрепленный за ним адрес в FLASH-памяти программ, эти адреса нельзя изменить при программировании. В ячейках памяти по указанным адресам располагаются так называемые векторы прерываний, которые и выполняют вызов нужной подпрограммы- обработчика. Чтобы нужная подпрограмма обработки прерывания была выполнена, в программный счетчик должен быть загружен адрес вектора этого прерывания. Самым первым в таблице указан вектор прерывания RESET, выполняющий перезапуск программы микроконтроллера. Фактически при обработке этого прерывания в программный счетчик загружается нулевой адрес памяти, а вызывается оно в следующих случаях: при включении питания микроконтроллера или временном снижении напряжения питания в процессе работы ниже критической величины, при поступлении на вход микроконтроллера RESET сигнала низкого уровня длительностью более 50 нс, при формировании сигнала RESET сторожевым таймером. Это единственный вектор, обработка которого не требует никаких условий и может быть выполнена в любой момент времени независимо от состояния и режима работы контроллера Процедура вызова всех остальных векторов прерываний отличается от RESET. Во-первых, должен быть установлен в единицу флаг глобального разрешения прерываний I в регистре SREG и бит индивидуального разрешения в соответствующем регистре ввода-вывода. Во-вторых, аппаратно устанавливается определенный флаг прерывания, это приводит к вызову соответствующего вектора прерывания. В-третьих, при загрузке адреса прерывания в программный счетчик автоматически сбрасывается в 0 флаг I, запрещая другие прерывания, и флаг данного прерывания, а текущее состояние программного счетчика загружается в стек. На четвертом шаге выполняется подпрограмма-обработчик прерывания. По ее завершении автоматически восстанавливается состояние флага I (в единицу) и содержимое программного счетчика. Нужно отметить, что флаг I доступен для чтения и записи в любом месте программы, что позволяет записать I = 1 даже в подпрограмме обработчике прерывания, если это требуется. Кроме того, возможен программный сброс флага прерывания (без вызова вектора прерывания) записью единицы в соответствующий бит. Вектора прерываний кроме RESET можно разделить на внешние и внутренние прерывания. В микроконтроллере ATmega16 возможно формировать сигналы внешних прерываний INT0, INT1 и INT2. Данные сигналы обрабатываются с помощью регистров, представленных на слайде. В регистре GICR биты INT1 (бит 7) и INT0 (бит 6) и INT2 (бит 5) определяют разрешение внешних прерываний, а в регистре GIFR флаги INTF1, INTF0 и INTF2 обеспечивают вызов векторов внешних прерываний по процедурам, аналогичным обработке других векторов прерываний. Параметры сигналов, формирующие флаги внешних прерываний, определяются битами ISC01, ISC00 и ISC11, ISC10 регистра MCUCR. Внутренние прерывания формируются аппаратными средствами микроконтроллера (таймерами, интерфейсами, АЦП и т.п.). У различных аппаратных средств микроконтроллера разное количество возможных векторов прерываний. Чтобы вызвать нужный вектор прерывания, соответствующее аппаратное средство должно быть настроено в программе, при этом в его регистрах настройки должен быть установлен индивидуальный бит разрешения вызова этого вектора прерывания. Таким образом, сам процессор и все аппаратные средства микроконтроллера могут работать и работают параллельно и независимо друг от друга. В то же время каждое из устройств обеспечивает выполнение каких- либо ограниченных функций, которые являются только элементами общей прикладной задачи. Эта общая задача на определенных этапах требует обмена данными между устройствами, запуска или останова отдельных процедур, изменения параметров или режимов работы и т.п. Система векторов прерываний позволяет выделить моменты времени, когда завершаются очередные операции и требуется определенная реакция других элементов микроконтроллера для продолжения работы.

Use Quizgecko on...
Browser
Browser