
Введение
Использование микроконтроллеров в системах управления и контроля обеспечивает исключительно высокие показатели эффективности при столь низкой стоимости, что микроконтроллерам практически нет альтернативы для построения цифровых автоматических систем. Микроконтроллеры, благодаря реализованной в них функциональной гибкости, надежности и возможности программного управления, позволяют не только значительно улучшить такие традиционно важные характеристики автоматических систем, как статическая и динамическая точность и стабильность функционирования, но и придать им принципиально новые свойства адаптации к внешним и параметрическим возмущениям, гибкости и перестраиваемости структуры, способности к самотестированию.
Проектирование микропроцессорных систем управления требует от разработчиков знания вычислительной техники и программирования на качественно новом уровне, поскольку разработка таких систем является сложным процессом, сочетающим в себе решение схемотехнических вопросов и задач, связанных с разработкой прикладного программного обеспечения. Анализ показывает, что разработка аппаратурной части микропроцессорных контроллеров сводится во многих случаях к выполнению стандартных операций в соответствии с рекомендациями, изложенными в технической документации на используемый микроконтроллер, в то время как доля общей трудоемкости разработки и отладки программного обеспечения значительно превосходит трудоемкость разработки аппаратурных средств. Из этого следует, что проектирование, производство и эксплуатация микропроцессорных автоматических систем требуют соответствующей углубленной подготовки студентов в области программирования управляющих микроконтроллеров.
В первой части учебного пособия рассмотрена архитектура и организация современных микроконтроллеров, а также вопросы программирования микропроцессорных управляющих устройств на базе микроконтроллеров. Вторая часть посвящена рассмотрению одного из самых распространенных на нынешний день семейств микроконтроллеров – семейства 8051.
1. Архитектура микроконтроллеров
1.1. Общие сведения
Сфера применения микроконтроллеров – управление и контроль широчайшим спектром объектов от бытовой до космической техники – сделала их самыми массовыми представителями микропроцессорных устройств. Универсальным элементом автоматики и техники управления микроконтроллер стал благодаря программируемости и интеграции в одном корпусе достаточно производительного вычислительного ядра и набора периферийных устройств.
Здесь и далее под микроконтроллером (МК) будет пониматься реализованное в виде одной интегральной схемы программируемое вычислительное устройство, включающее в свой состав процессорное ядро для производства вычислений и набор периферийных модулей для реализации различных функций контроля и управления внешними объектами.
По структуре, разрядности, системе команд и другим признакам МК одного производителя являются оригинальными и объединяются в семейства, все представители которых от младшей до старшей модели программно совместимы и отличаются только производительностью и составом дополнительных модулей.
Однако все семейства имеют общие принципы построения и включают в себя системные и периферийные модули, имеющие одинаковое функциональное назначение и похожую структуру. Именно поэтому в следующих разделах и будут рассмотрены эти общие принципы, алгоритмы функционирования и структуры.
Магистрально-модульная организация. В течение многих лет в основе построения средств вычислительной техники лежит принцип магистрально-модульной организации, и поэтому вполне естественно, что этот принцип был использован и получил дальнейшее развитие в современных МК.
Успехи технологии и стремление к расширению возможностей при более низкой цене привели к интеграции в современные МК большого числа модулей с различным функциональным назначением. Эти модули под управлением процессорного ядра выполняют различные функции, значительно расширяющие возможности МК как управляющего устройства. Помимо расширения возможностей встроенные модули значительно повышают надежность МК, поскольку все электрические соединения между ними выполняются на кристалле МК, а работа и взаимодействие модулей тщательно отрабатываются и тестируются на этапе производства.
Необходимость создания для каждого МК уникальной конфигурации разнообразных периферийных модулей ставит на первое место вопрос о принципах их подключения и обеспечения возможности согласованного функционирования. Путь, по которому пошла эволюция МК, – магистральная организация, при которой различные модули связываются между собой через общую системную магистраль, состоящую из отдельных шин адреса, данных и управления.
В общем случае структура типового МК, построенного с использованием магистрально-модульной организации, может быть представлена в виде, показанном на рис. 1.1. Рассмотрим все компоненты этой структуры более подробно.
|
Рис. 1.1. Структура микроконтроллера |
Модульная организация позволяет производителям на базе одного процессорного ядра разрабатывать целые семейства МК, все представители которых различается лишь объемом памяти и составом системных и функциональных модулей. В результате этого образуются архитектурно единые семейства МК, из которых потребитель может выбрать для решения своих задач наиболее подходящий по конфигурации и цене.
Наличие хорошо отработанного процессорного ядра и набора функциональных модулей позволяет производителю МК оперативно реагировать на быстро изменяющуюся ситуацию на рынке, опережать конкурента при появлении новых областей применения МК, своевременно предлагать потребителю МК, полностью удовлетворяющий его требованиям.
Процессорное ядро всегда имеет свою оригинальную архитектуру, а построенное на его основе семейство – оригинальное название. Например, наиболее известными семействами 8-разрядных МК являются семейства MCS-51 (фирмы Intel, Atmel, Philips и др.), НС05/11/08 (фирма Freescale), AVR (фирма Atmel), PIC12/16/17/18 (фирма Microchip), Z8 (фирма Zilog), TMS370 (фирма Texas Instruments).
Системная магистраль. Как уже отмечалось, системная магистраль, связывающая процессорное ядро с остальными модулями МК, состоит из шин адреса, данных и управления.
Шина адреса служит для передачи адреса ячейки памяти или рабочего регистра модуля, с которым процессорное ядро в данный момент обменивается информацией. Каждому модулю (точнее, его управляющим и рабочим регистрам), каждой ячейке памяти присваивается собственный адрес. В МК шина адреса однонаправленная: процессорное ядро генерирует код адреса, а остальные модули, подключенные к шине адреса, могут только воспринимать код адреса, выполняя операцию его опознания. Количество сигнальных линий n в шине адреса определяет размер доступного адресного пространства, который равен 2n.
По шине данных передаются данные, которыми обмениваются процессорное ядро и все модули МК. Для обеспечения двустороннего обмена шина данных реализуется двунаправленной. Количество линий связи шины данных определяется разрядностью МК. При необходимости обработки данных повышенной разрядности производится пересылка данных за несколько циклов.
В отличие от шин адреса и данных шина управления состоит из отдельных управляющих сигналов. Каждый из этих сигналов имеет свое назначение – одни служат для стробирования передаваемых или принимаемых данных, другие используются для сброса всех модулей в исходное состояние, третьи применяются для тактирования и синхронизации работы всех модулей, и т. д. Каждый тип МК имеет свою систему сигналов управления, определяющую число линий шины управления.
Традиционная структура системной магистрали с раздельными шинами адреса, данных и управления не исчерпывает всех возможностей ее построения. Сокращения числа сигнальных линий системной магистрали можно добиться за счет объединения шин адреса и данных. Получаемая при этом магистраль называется мультиплексированной, поскольку в ней адреса и данные передаются раздельно во времени: сначала передается адрес, а затем – данные.
Системные модули. К системным модулям, без которых работа МК практически невозможна, относятся, в первую очередь, модуль памяти и модуль системы прерываний.
Модуль памяти состоит из постоянного запоминающего устройства (ПЗУ), оперативного запоминающего устройства (ОЗУ) и расположенных в их адресных пространствах наборов конфигурационных регистров (КР) и регистров специальных функций (РСФ).
ПЗУ является энергонезависимой памятью и предназначено для хранения программы работы МК, а также констант, калибровочных коэффициентов и другой неизменяемой в процессе выполнения программы информации. В отличие от ПЗУ, содержимое ОЗУ сохраняется только при поданном напряжении питания и, как следует из его названия, предназначено для хранения оперативной информации. Как ПЗУ, так и ОЗУ состоит из множества ячеек памяти, каждая из которых имеет свой уникальный адрес, задаваемый порядковым номером этой ячейки в адресном пространстве. По этому адресу процессорное ядро находит конкретную ячейку памяти в процессе обмена информацией. По функциональному назначению память МК обычно разделена на две части – память программ и память данных.
Современные МК обладают возможностью внутрисистемного программирования встроенной памяти программ. Модуль внутрисистемного программирования позволяет программировать внутреннюю память МК прямо на плате проектируемого или уже готового устройства с использованием последовательного порта.
Кроме памяти программ и данных практически все современные МК имеют специальное пространство памяти небольшого объема, называемое областью программно-доступных регистров. Эта область может быть полностью изолирована от пространства памяти данных, может частично пересекаться с ней или являться ее составной частью. Состав и внутренняя организация области регистров очень разнообразны и играют важную роль в архитектуре МК.
Регистры МК функционально неоднородны: одни служат для хранения данных или адресной информации, другие используются для управления работой процессорного ядра и функциональных блоков. В соответствии с этим все регистры можно разделить на регистры данных, адресные указатели и регистры специального назначения. Регистры данных участвуют в арифметических и логических операциях в качестве источников операндов и приемников результата, адресные регистры или указатели используются для задания адресов данных и команд, расположенных в основной памяти. Часто одни и те же регистры применяются для хранения, как данных, так и адресной информации. Такие регистры называются регистрами общего назначения (РОН). Регистры специальных функций служат для индикации текущего состояния МК, задания режимов и управления работой всех его составных частей.
Программа работы МК хранится в памяти программ в виде заданного набора команд (инструкций). В процессе работы процессорное ядро последовательно извлекает коды команд из памяти, расшифровывает, определяя назначение операции и местоположение операндов, и затем выполняет заданную операцию. К типовым операциям, выполняемым процессорным ядром любого МК, относятся различные арифметические и логические операции, а также операции пересылки данных. При выполнении инструкции процессорное ядро получает данные из ячеек памяти и регистров и пересылает в них результаты вычислений.
Множество инструкций, которые способно выполнить процессорное ядро, образует систему команд МК. Она включает полный список кодов операций, для каждой из которых указывается число операндов и допустимые способы их адресации. Способы адресации определяют механизм вычисления адресов операндов.
При выполнении текущей программы могут возникать как внешние, так и внутренние по отношению к МК события, которые требуют с его стороны немедленной реакции. При поступлении такого запроса МК прерывает выполнение основной программы, запоминает адрес команды, следующей за той, на которой он прервал работу, и переходит к выполнению подпрограммы обслуживания прерывания. После выполнения подпрограммы обслуживания прерывания МК возвращается к выполнению прерванной программы по сохраненному адресу. Источники прерываний могут быть как внешними (т. е. поступать на один из входов микросхемы от внешних датчиков), так и внутренними (т. е. генерироваться при определенных условиях внутренними модулями МК), при этом каждый источник прерывания имеет свою собственную подпрограмму обслуживания. Этот процесс называется прерыванием программ, а реализующий его системный модуль – модулем прерывания.
Функциональные периферийные модули. Для реализации управляющих функций в каждом семействе МК имеется набор функциональных модулей, которые в том или ином составе входят в состав любого МК. Эти модули могут выполнять самые различные функции: ввод и вывод информации, формирование временных последовательностей, подсчет интервалов времени и числа внешних событий, аналого-цифровое и цифроаналоговое преобразование сигналов, сравнение различных величин и др. Процессорное ядро взаимодействует с любым функциональным модулем через один или несколько регистров, которые однозначно связаны с модулем и используются для индикации его состояния, управления и задания режимов работы.
Наиболее распространенными функциональными модулями, входящими практически в любой МК, являются модули таймеров/счетчиков, процессоров событий, параллельных и последовательных портов ввода-вывода. Имеются модули, включающие не только цифровую, но и аналоговую обработку сигналов, такие как аналого-цифровые преобразователи (АЦП), цифроаналоговые преобразователи (ЦАП), аналоговые компараторы. Частым явлением стало использование не одного, а нескольких последовательных портов с аппаратно реализованными интерфейсами, такими как SPI или I2C. Другими, реже используемыми, встроенными ресурсами являются модули широтно-импульсных преобразователей, драйверы жидкокристаллического дисплея, сторожевые таймеры.
Архитектура микроконтроллеров. При выборе МК для решения конкретных задач пользователь – разработчик микропроцессорных систем должен абстрагироваться от сложности его внутренней организации, ограничиваясь представлением МК как устройства, предназначенного для реализации заданных функций управления. Особенность МК как программно-управляемого устройства заключается в подчиненности его структуры основному свойству, делающему МК универсальным элементом автоматики, программируемости. Это, в свою очередь, означает, что функции, реализуемые МК, определяются не столько его внутренней организацией, сколько последовательностью команд управляющей программы. Поэтому, в конечном итоге, разработчик нуждается в уяснении и понимании лишь тех компонентов МК и построенной на его основе микропроцессорной системы, которые явно отражаются в управляющих программах и должны быть учтены при их разработке. Совокупность таких сведений представляет модель МК с точки зрения пользователя, определяемую обобщенным понятием архитектуры. В отличие от структуры, связанной только с внутренней организацией и функциями аппаратуры, архитектура характеризует систему в целом – такую, какой она представляется пользователю.
В общем случае понятие архитектуры МК отражает следующие наиболее важные компоненты:
систему команд и форматы их представления;
организацию памяти и структуру адресного пространства;
способы представления данных;
структуру МК как совокупность модулей и связей между ними;
способы обращения ко всем элементам структуры (адресация к регистрам, ячейкам постоянной и оперативной памяти, функциональным модулям и внешним устройствам);
систему обработки прерываний.
Архитектура любого семейства МК оригинальна, однако по некоторым наиболее важным признакам можно выделить несколько общих классов архитектур, к одному из которых в той или иной мере принадлежит любое семейство.
По способу организации пространства памяти МК различают два основных типа архитектур.
Организация, при которой для хранения программ и данных используется одно пространство памяти, называется архитектурой фон Неймана, или принстонской архитектурой (названной по имени предложившего ее математика Джона фон Неймана и университета, где он работал). Программы и данные хранятся в едином пространстве, и нет никаких признаков, указывающих на то, что хранится в ячейке памяти – команда или данные. Обращение к памяти происходит по одной шине адреса и данных. Преимуществами такой архитектуры являются более простая внутренняя структура МК и возможность оперативного перераспределения объемов памяти между областями программ и данных.
Организация, при которой память программ и память данных разделены и имеют свои собственные адресные пространства и способы доступа к ним, называется гарвардской архитектурой (по названию Гарвардского университета, где она была разработана). Такая архитектура является более сложной, поскольку в ней обращение к каждому типу памяти происходит по отдельным шинам адреса и данных. Однако она позволяет сократить длину команд и повысить производительность процессорного ядра.
При построении системы команд и способов адресации операндов в современных МК реализуется один из двух подходов построения эффективной системы команд.
Первый подход базируется на использовании архитектуры с расширенным набором команд – CISC-архитектуре (Complicated Instruction Set Computer). В АЛУ таких микроконтроллеров встраиваются дополнительные аппаратные средства, позволяющие реализовать большое число достаточно сложных команд с развитыми возможностями адресации. Система команд имеет инструкции разного формата: однобайтовые, двухбайтовые, трехбайтовые, при этом выборка команды на исполнение осуществляется побайтно в течение нескольких циклов работы МК. Такая развитая и сложная система команд дают возможность обеспечить компактную запись алгоритмов и соответственно повысить эффективность программы.
Второй подход был заложен в разработку МК с сокращенным набором команд, на основе которых разрабатываются МК с RISC-архитектурой (Reduced Instruction Set Computer). В таких МК набор исполняемых команд сокращен до минимума, при этом все команды имеют формат фиксированной длины и выборка команды из памяти и ее исполнение осуществляется за один машинный цикл. С одной стороны RISC-микроконтроллеры, имеющие за счет меньшего числа команд простую внутреннюю организацию, более дешевы в изготовлении и отличаются высокой производительностью. Но, с другой стороны, перенесение бремени сложных процедур обработки информации на программное обеспечение приводит в таких МК к снижению быстродействия за счет значительного увеличения длины программ.
Перейдем теперь к более подробному описанию принципов работы отдельных модулей, из которых состоит современный МК. При этом обсуждении мы будем намеренно опускать многие частные детали, что объясняется стремлением пояснить общие принципы функционирования МК, прежде чем рассматривать реальные МК какого либо конкретного семейства.