Архитектура микроконтроллеров семейства Atmega. Учебное пособие
.pdf
после системного сброса МК. После нулевого адреса следуют вектора других источников прерывания.
Рис. 8. Адресное пространство памяти программ
Вектор прерывания – это адрес в области памяти программ, с которого начинается выполнение процедуры обработки прерывания. Количество векторов прерываний и их назначение необходимо уточнять по специальной литературе. Для большого числа представителей ATmega таблица адресов прерываний начинается с адреса 0x002. Чем меньше адрес вектора, тем выше приоритет прерывания. Наиболее приоритетным является вектор системного сброса
При разработке программного обеспечения подсистема прерываний не всегда используется. В этом случае ячейки таблицы векторов могут выполнять функции обычных ячеек для хранения программных модулей. Подсистема внутренних и внешних прерываний более подробно будет рассмотрена в других разделах пособия.
21
5. ПОДСИСТЕМА ВВОДА/ВЫВОДА МК
Микроконтроллер «общается» с внешней средой при помощи специальных устройств, которые называют портами ввода/вывода. Через порты ввода/вывода МК получает внешние управляющие воздействия и передает информацию подключенным к нему внешним периферийным устройствам.
МК серии Atmega могут иметь в своем составе от 1 до 7 параллельных портов ввода/вывода. В составе МК могут быть как полные (имеющие 8 разрядов), так и неполные (число разрядов меньше 8) порты. Порты имеют имена (в зависимости от количества портов от A до G).
Управление портами ввода/вывода реализуется через 3 специальных РВB:
PORTx: регистр данных;
PINx: регистр ввода информации;
DDRх: регистр направления передачи информации, где х – имя порта, например, для порта B имеем PORTB, PINB и DDRB.
К портам можно обращаться как побайтно, так и поразрядно. Разряды представленных регистров также имеют свои названия. В различных литературных источниках разряды обозначают по-разному, например, для разряда 7 порта В имеем следующие варианты обращений к РВВ:
PORTB7, PINB7 и DDRB7;
PORTB.7, PINB.7 и DDRB.7;
PB7, PINB7 и DDRB7.
Любой разряд порта может использоваться как для операции ввода, так и для операции вывода. Для перенастройки порта на ввод или на вывод используется регистр направления передачи информации DDRх. Каждый разряд этого регистра управляет своим разрядом порта с именем х. Конфигурирование порта ввода/вывода представлено в табл. 1.
22
Таблица 1
Конфигурирование порта ввода/вывода
Из табл. 1 видно, что, если в каком-то разряде регистра DDRx установлен 0, то это означает, что соответствующий вывод порта x будет функционировать как вход. Если, с точностью наоборот, в каком-то разряде регистра DDRx установлена логическая единица, то соответствующий вывод порта x будет функционировать как выход.
Вывести информацию на внешний вывод можно разными способами. Например, можно в соответствующем разряде DDRx установить 1, а затем записать байт данных в PORTx, где разряды будут соответствовать выводимой информации. Или, например, можно в соответствующий разряд DDRx установить 1, а затем установить или сбросить, как это необходимо, соответствующий бит регистра PORTx.
Ввод информации с определенного пина МК осуществляется аналогично операции вывода, но в соответствующий разряд DDRx записывается 0. В режиме ввода информации (при условии DDRx=0, PORTx=1) имеется возможность подключать к каждому выводу порта x внутренний нагрузочный резистор, что позволяет упростить подключение к МК внешних контактов и кнопок, которые обычно требуют внешний резистор. При работе с МК необходимо иметь в виду, что любой вывод, кроме основных функций, может выполнять ряд дополнительных. Функции порта можно уточнить по оригинальной документации производителя.
23
6.ПОДСИСТЕМА ПРЕРЫВАНИЙ
Влюбом современном МК присутствует подсистема прерываний. Передача данных посредством прерываний – это способ обменаданными,прикотороминициаторомобменавыступаетпериферийноеустройство,подключенноечерезинтерфейскпроцессору.
Прерывания бывают внешними и внутренними. Для реализации внешнего прерывания устройство обязательно подключается к специальному выводу INT, называемому входом запроса прерывания. Когда на данный вывод посту-
пает сигнал активного уровня, процессор приостанавливает выполнение текущей программы и приступает к обработке запроса на прерывание. Количество источников запроса на прерывание у МК может быть различным. Их конкретное число можно уточнить по оригинальной документации производителя и по другим справочным материалам. На практике источниками внешних прерываний могут быть кнопки, тумблеры и другие источники импульсы.
Источниками внутренних прерываний могут быть система управления EEPROM, встроенные АЦП, таймеры/счетчики, компараторы, последовательные интерфейсы и пр. Вложенные друг в друга прерывания в рассматриваемых МК запрещены. Если запросов на прерывание поступило несколько от разных источников, то их обслуживание происходит в соответствие с таблицей приоритетов. Управление подсистемой прерываний осуществляется путем использования специализированных регистров ввода/вывода. Различают два основных вида управляющих регистров:регистрмаскиирегистрфлаговпрерываний.
Регистр маски – это регистрввода/вывода, каждый бит которого используется для запрещения или разрешения прерывания от определенного источника. Управление осуществляется путем установки битов регистра в 0 или 1. Если бит сброшен в 0 – соответствующеепрерываниезапрещено, записана1–разрешено.
Регистр флагов прерываний – это регистр, который ис-
пользуется для управления всеми видами прерываний, за кото-
24
рые он отвечает. Каждый бит этого регистра является флагом одного из видов прерываний. Когда поступает запрос на прерывание, то устанавливается флаг в соответствующем бите этого регистра. При этом единица свидетельствует о поступлении соответствующего запроса прерывание, нуль – об отсутствии запроса. В определенных режимах после установки флага автоматически запускается процедура обработки запроса прерывания –
обработчик запроса прерывания. После ее вызова соответст-
вующий флаг сбрасывается. Рассмотрим основные регистры, используемые для управления обработкой прерываний.
SREG – регистр статуса, каждый бит которого определяет состояние системы. Основным является флаг I, который располагается в седьмом бите регистра и отвечает за глобальное разрешение/запрещение прерываний. Если записать в этот флаг 0, то все прерывания МК будут запрещены, если записать 1, то, наоборот, разрешены.
GIMSK (в ряде моделей МК GICR) – регистр маски, посредством использования которого осуществляется управления всеми видами прерываний, кроме прерываний от таймеров/счетчиков.
TIMSK – регистр маски, позволяющий управлять обработкой прерываний от таймеров/счетчиков.
GIFR – регистр флагов прерываний, который используется для управления всеми видами прерываний, кроме прерываний от таймеров/счетчиков. Управляет всеми теми же прерываниями, что и регистр TIMSK.
TIFR–регистр флаговпрерываний, которыйпредназначен для управленияобработкойпрерыванийоттаймеров/счетчиков.
В общем виде алгоритм работы подсистемы прерываний следующий. После системного сброса МК регистр флагов прерываний обнуляется, т.е. все прерывания оказываются запрещенными. Для разрешения функционирования подсистемы прерываний необходимо установить в 1 флаг I, находящийся в регистре SREG, а также, используя регистр маски, разрешить необходимыев данныймоментпрерыванияизапретитьвсеостальные.
25
В случае поступления запроса на прерывание от устройства в регистре флагов прерывания устанавливается в 1 соответствующий флаг. Для исключения ситуации потери поступившего запроса установка флага происходит даже, если прерывание запрещено. При разрешенном прерывании приостанавливается выполнение текущей программы и запускается на выполнение обработчик прерываний. При этом автоматически происходит сброс флага I, что запрещает работу с другими прерываниями. У МК Atmega – одноуровневая система прерываний. Если обрабатывается одно прерывание, то все остальные запрещены. Также происходит сброс флага, соответствующего вызванному прерыванию. Последнее действие является индикатором того, что МК приступил к обработке запроса на прерывание. Таким образом, у разработчика программно-аппаратного обеспечения имеется возможность отслеживать прерывания и управлять ими.
Обработчик прерывания, если он разработан на языке ассемблера, должен оканчиваться командой RETI, назначение которой состоит в передаче управления в точку останова основной программы. При этом флаг I регистра SREG автоматически устанавливается в 1, тем самым разрешая поступление на обработку новых прерываний.
МК отслеживает и обрабатывает все поступившие прерывания. При поступлении очередного запроса устанавливается в 1 соответствующий флаг. После окончания обработки прерывания МК проверяет все остальные флаги, и если обнаруживает необработанное прерывание, то тут же приступает к его обслуживанию. Если имеются сразу несколько необработанных прерываний, то обслуживанию будет подлежать наиболее приоритетное согласно таблице приоритетов. Адрес вектора прерывания определяет приоритет прерывания. Устройству, имеющему меньший адрес вектора прерываний, будет соответствовать более высокий приоритет. Для организации многоуровневой системы обработки прерываний необходимо разрабатывать специальные достаточно сложные алгоритмы.
26
7.ТАЙМЕРЫ/СЧЕТЧИКИ
7.1.Основные понятия
Таймеры/счетчики имеются в любом МК. Их количество в составе МК, разрядность и функциональность необходимо уточнять по справочной документации.
Таймером/счетчиком в составе МК называется внутреннее периферийное устройство, служащее, в основном, для реализации временных интервалов и задержек, а также для определения количества входящих извне импульсов. Таймер/счетчик может работать с разной скоростью, подсчитывая время, функционировать в режиме прерываний, формировать ШИМ сигналы. Основой этого устройства является суммирующий счетчик, который считает количество импульсов, например, от генератора тактовой частоты. Таймер/счетчик может быть не просто «тупым счетчиком», но и, с позиций выполнения альтернативных функций, достаточно сложным внутренним периферийным устройством в составе МК. Вместе с подсистемой прерываний он является основой для реализации системы реального времени.
Таймеры/счетчики в технической литературе обычно обозначают либо как Tn, либо как T/Cn, где n – это номер таймера/счетчика. Например, для нулевого таймера/счетчика имеем имена T0, либо T/C0. Данные периферийные устройства бывают либо 8-разрядными, либо 16-разрядными. Таймеры/счетчики имеют соответствующие им регистры ввода/вывода, отображаемые в память МК, в каждом из которых хранится текущее значение таймера/счетчика, если он работает. Данные регистры называются счетными регистрами. 8- разрядному таймеру/счетчику соответствует 8-разрядный счетный регистр, 16-разрядному – 16-разрядный счетный регистр. Для счетных регистров используется название TCNTn, где n – это номер таймера/счетчика. Каждый 16-разрядный счетный регистр представляет собой совокупность двух 8-
27
разразрядных регистров с именами TCNTnH и TCNTnL, где n
– это номер таймера/счетчика.
Счетный регистр – это программно доступный регистр, в него можно записать число, а также осуществить операцию чтения содержимого. После включения таймер/счетчик начинает подсчитывать приходящие на его вход сигналы – внутренние тактовые импульсы МК или внешние, поступающие на специальный вход МК от подключенного периферийного устройства (зависит от установок управляющих регистров). Счетный регистр инкрементируется при поступлении очередного импульса, а при переполнении – сбрасывается в ноль. Данное событие может вызывать прерывание, если предварительно настроить таймер/счетчик через специальные регистры управления. Далее счет начинается заново. Прерывание могут вызывать и другие, заранее предусмотренные события.
7.2.Режимы работы таймеров/счетчиков
Различные модели МК имеют для таймеров/счетчиков разные наборы режимов, наличие и особенности которых необходимо уточнять по справочной документации. Режимы таймеров/счетчиков выбираются и настраиваются с помощью регистров ввода/вывода, которые называются TCCRn, где n – номер таймера/счетчика. Для достаточно простых таймеров/счетчиков существует один регистр, для сложных – два регистра (например, TCCR1A и TCCR1B для Т/С1).
Основные режимы:
1)нормальный (Normal);
2)асинхронный (Asynchronous);
3)режим «Захват» (Capture);
4)сброс при совпадении (СТС);
5)быстродействующий ШИМ (Fast PWM);
6)ШИМ с точной фазой (Phase Correct PWM).
28
Первые два режима внешне несколько похожи. И в одном, и другом режимах таймер/счетчик осуществляет подсчет приходящих импульсов, в зависимости от предварительной настройки: либо от тактового генератора, либо от внешнего ПУ. В первом из режимов (Normal) при переполнении счетного регистра TCNTn возникает прерывание. Во втором (Asynchronous) – таймер/счетчик работает как часы, и прерываний от TCNTn не возникает.
Втретьем режиме (Capture) также идет подсчет импульсов, и запоминается содержимое TCNTn либо по сигналу, приходящему извне на специальный вход МК, либо от сигнала с выхода встроенного компаратора. При этом текущее значение TCNTn сохраняется в регистре захвата – ICRn, где n – это номер таймера/счетчика, а также вырабатывается запрос на прерывание. Режим эффективен в задачах измерения длительности внешних процессов, например, при измерении времени зарядки конденсатора.
Врежиме под номером 4 (СТС) также идет подсчет импульсов, но содержимое счетного регистра постоянно сравнивается с содержимым специального регистра, назы-
ваемого регистром совпадения (сравнения). Для каждого таймера/счетчика, если режим СТС предусмотрен, существует свой регистр совпадения. Данный регистр имеет имя – OCRn, где n – это номер таймера/счетчика. При этом каждому 16-разрядному таймеру/счетчику соответствует 16-разрядный регистр совпадения, каждому 8-разрядному таймеру/счетчику
–8-разрядный регистр совпадения. 16-разрядный регистр совпадения представляет собой совокупность двух 8- разразрядных регистров с именами OCRnH и OCRnL, , где n – это номер таймера/счетчика. В некоторых МК для таймера/счетчика существует два регистра совпадения, например, OCR1A и OCR1B, которые также могут иметь разрядность 16 или 8, в зависимости от разрядности таймера/счетчика.
29
Вэтом режиме текущее состояние счетного регистра постоянно сравнивается с содержимым регистра совпадения.
Вслучае наличия двух регистров совпадения отдельно производится сравнение для каждого из регистров. При совпадении содержимого счетного регистра и регистра совпадения – вызывается соответствующее прерывание и может произойти, в зависимости от предварительной настройки, либо сброс таймера/счетчика, либо изменение состояния одного из выводов МК.
Впоследних двух режимах таймер/счетчик формирует на специальном выходе сигнал широтно-импульсной модуляции (ШИМ), который очень часто используют для управления работой различных устройств, например, электродвигателей, диммеров и др. Для организации работы используются те же самые регистры OCRn, что и в предыдущем режиме. У микроконтроллера имеется специальный пин, на котором формируется сигнал ШИМ, и этот процесс может осуществляться по-разному.
Как и в предыдущих режимах на вход таймера/счетчика подается импульсная последовательность от системного генератора. Счет импульсов происходит непрерывно. Когда происходит переполнение счетного регистра, то его содержимое сбрасывается, и счет продолжается дальше. При этом прерывания при переполнении предусмотрены. На выходе таймера/счетчика формируется пилообразная кривая, вид которой представлен на рис. 9.
Если содержимое TCNTn в этих режимах меньше содержимого OCRn, то напряжение на выходе таймера/счетчика равно логической 1. Когда наступает момент, и содержимое TCNTn становится меньше содержимого OCRn, то напряжение на выходе устанавливается в логический 0. В результате формируются прямоугольные импульсы, скважность которых определяет
30
