МК

МК и их типовые элементы (Тема)

 

Вся схемотехника разделяется на две большие области: аналоговую и цифровую Аналоговая схемотехника характеризуется максимальным быстродействием, малым потреблением энергии и малой стабильностью параметров. Цифровая схемотехника обладает прекрасной повторяемостью параметров. Это привело к её развитию в последние годы.

 

По мере развития цифровых микросхем их быстродействие достигло впечатляющих результатов. Наиболее быстрые из цифровых микросхем обладают скоростью переключения менее 3..5 нс., а внутри кристалла микросхемы, где нет больших ёмкостей нагрузки, время переключения измеряется пикосекундами. Таким быстродействием обладают программируемые логические схемы и заказные БИС. В этих микросхемах алгоритм решаемой задачи заключён в их принципиальной схеме.

Часто для решаемой задачи не требуется такого быстродействия, каким обладают современные цифровые микросхемы. Однако за быстродействие приходится платить:

1)      Быстродействующие микросхемы потребляют значительный ток.

2)      Для решения задачи приходится использовать много микросхем, это выливается в стоимость и габариты устройства.

Первую задачу решает применение технологии КМОП цифровых микросхем. Потребляемый ими ток зависит от скорости переключения логических вентилей. Именно поэтому в настоящее время подавляющее большинство микросхем выпускается именно по этой технологии.

Вторую задачу решают несколькими способами. Для жёсткой логики это разработка специализированных БИС. Использование специализированных БИС позволяет уменьшить габариты устройства, но стоимость его снижается только при крупносерийном производстве. Для среднего и малого объёмов производства такое решение неприемлемо.

Ещё одним решением уменьшения габаритов и стоимости устройства является применение программируемых логических схем (ПЛИС). Это направление активно развивается в настоящее время, но оно не входит в рамки рассмотрения данного курса.

Третий способ решения поставленной задачи заключается в том, что можно заставить одно очень быстродействующее устройство последовательно решать различные задачи, изменяя свою структуру во времени. Это микропроцессоры. В микропроцессорах возможен обмен предельного быстродействия на сложность реализуемого устройства. Именно по этой причине стараются максимально увеличить быстродействие микропроцессоров - это позволяет реализовывать все более сложные устройства в одном и том же объеме. Более того, в одном процессоре можно реализовать несколько устройств одновременно.

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

В настоящее время определилось три направления развития микропроцессоров:

1)      универсальные микропроцессоры

2)      микроконтроллеры

3)      сигнальные микропроцессоры

Универсальные микропроцессоры используются для построения вычислительных машин. В них используются самые передовые решения по повышению быстродействия, не обращая особого внимания на габариты, стоимость и потребляемую энергию. В технике связи компьютеры используются для управления системами связи или устройствами связи, обладающими большими габаритами и стоимостью. Такие компьютеры называются контроллерами.

Для управления малогабаритными и дешёвыми устройствами связи используются однокристальные микроЭВМ, которые в настоящее время называются микроконтроллерами. В микроконтроллерах наоборот, максимальное внимание уделяется именно габаритам, стоимости и потребляемой энергии.

Еще один класс микропроцессоров решает задачи, которые традиционно решала аналоговая схемотехника. Это сигнальные процессоры. К сигнальным процессорам предъявляются специфические требования. От них требуются максимальное быстродействие, малые габариты, легкая стыковка с аналого-цифровыми и цифро-аналоговыми преобразователями, большая разрядность обрабатываемых данных и небольшой набор математических операций, обязательно включающий операцию умножения-накопления и аппаратную организацию циклов.

 

 

Основные типовые компоненты микроконтроллеров

 

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

К наиболее распространенным встроенным устройствам относятся устройства памяти и порты ввода/вывода (I/O), интерфейсы связи, таймеры, системные часы. Устройства памяти включают оперативную память (RAM), постоянные запоминающие устройства (ROM), перепрограммируемую ROM (EPROM), электрически перепрограммируемую ROM (EEPROM). Таймеры включают и часы реального времени, и таймеры прерываний. Средства I/O включают последовательные порты связи, параллельные порты (I/O линии), аналого-цифровые преобразователи (A/D), цифроаналоговые преобразователи (D/A), драйверы жидкокристаллического дисплея (LCD) или драйверы вакуумного флуоресцентного дисплея (VFD). Встроенные устройства обладают повышенной надежностью, поскольку они не требуют никаких внешних электрических цепей.

В отличие от микроконтроллера контроллером обычно называют плату, построенную на основе микроконтроллера.

Микроконтроллеры можно встретить в огромном количестве современных промышленных и бытовых приборов: станках, автомобилях, телефонах, телевизорах, холодильниках, стиральных машинах... и даже кофеварках. Среди производителей микроконтроллеров можно назвать Intel, Motorola, Hitachi, Microchip, Atmel, Philips, Texas Instruments, Infineon Technologies (бывшая Siemens Semiconductor Group) и многих других.

Основным классификационным признаком микроконтроллеров является разрядность данных, обрабатываемых арифметико-логическим устройством (АЛУ). По этому признаку они делятся на 4-, 8-, 16-, 32- и 64-разрядные. Сегодня наибольшая доля мирового рынка микроконтроллеров принадлежит восьмиразрядным устройствам (около 50 % в стоимостном выражении). За ними следуют 16-разрядные и DSP-микроконтроллеры (DSP - Digital Signal Processor - цифровой сигнальный процессор), ориентированные на использование в системах обработки сигналов (каждая из групп занимает примерно по 20 % рынка). Внутри каждой группы микроконтроллеры делятся на CISC- и RISC-устройства.

Тактовая частота, или, более точно, скорость шины, определяет, сколько вычислений может быть выполнено за единицу времени. В основном производительность микроконтроллера и потребляемая им мощность увеличиваются с повышением тактовой частоты.

 

Память программ и данных

В МК используется три основных вида памяти. Память программ представляет собой постоянную память (ПЗУ), предназначенную для хранения программного кода (команд) и констант. Ее содержимое в ходе выполнения программы не изменяется. Память данных предназначена для хранения переменных в процессе выполнения программы и представляет собой ОЗУ. Регистры МК – этот вид памяти включает в себя внутренние регистры процессора и регистры, которые служат для управления периферийными устройствами (регистры специальных функций).

 

Память программ

Основным свойством памяти программ является ее энергонезависимость, то есть возможность хранения программы при отсутствии питания. С точки зрения пользователей МК следует различать следующие типы энергонезависимой памяти программ:

·                     ПЗУ масочного типа – mask-ROM. Содержимое ячеек ПЗУ этого типа заносится при ее изготовлении с помощью масок и не может быть впоследствии заменено или допрограммировано. Поэтому МК с таким типом памяти программ следует использовать только после достаточно длительной опытной эксплуатации. Основным недостатком данной памяти является необходимость значительных затрат на создание нового комплекта фотошаблонов и их внедрение в производство. Обычно такой процесс занимает 2-3 месяца и является экономически выгодным только при выпуске десятков тысяч приборов. ПЗУ масочного типа обеспечивают высокую надежность хранения информации по причине программирования в заводских условиях с последующим контролем результата.

·                     ПЗУ, программируемые пользователем, с ультрафиолетовым стиранием – EPROM (Erasable Programmable ROM). ПЗУ данного типа программируются электрическими сигналами и стираются с помощью ультрафиолетового облучения. Ячейка памяти EPROM представляет собой МОП-транзистор с "плавающим" затвором, заряд на который переносится с управляющего затвора при подаче соответствующих электрических сигналов. Для стирания содержимого ячейки она облучается ультрафиолетовым светом, который сообщает заряду на плавающем затворе энергию, достаточную для преодоления потенциального барьера и стекания на подложку. Этот процесс может занимать от нескольких секунд до нескольких минут. МК с EPROM допускают многократное программирование и выпускаются в керамическом корпусе с кварцевым окошком для доступа ультрафиолетового света. Такой корпус стоит довольно дорого, что значительно увеличивает стоимость МК. Для уменьшения стоимости МК с EPROM его заключают в корпус без окошка (версия EPROM с однократным программированием).

·                     ПЗУ, однократно программируемые пользователем, – OTPROM (One-Time Programmable ROM). Представляют собой версию EPROM, выполненную в корпусе без окошка для уменьшения стоимости МК на его основе. Сокращение стоимости при использовании таких корпусов настолько значительно, что в последнее время эти версии EPROM часто используют вместо масочных ПЗУ.

·                     ПЗУ, программируемые пользователем, с электрическим стиранием – EEPROM (Electrically Erasable Programmable ROM). ПЗУ данного типа можно считать новым поколением EPROM, в которых стирание ячеек памяти производится также электрическими сигналами за счет использования туннельных механизмов. Применение EEPROM позволяет стирать и программировать МК, не снимая его с платы. Таким способом можно производить отладку и модернизацию программного обеспечения. Это дает огромный выигрыш на начальных стадиях разработки микроконтроллерных систем или в процессе их изучения, когда много времени уходит на поиск причин неработоспособности системы и выполнение циклов стирания-программирования памяти программ. По цене EEPROM занимают среднее положение между OTPROM и EPROM. Технология программирования памяти EEPROM допускает побайтовое стирание и программирование ячеек. Несмотря на очевидные преимущества EEPROM, только в редких моделях МК такая память используется для хранения программ. Связано это с тем, что, во-первых, EEPROM имеют ограниченный объем памяти. Во-вторых, почти одновременно с EEPROM появились Flash-ПЗУ, которые при сходных потребительских характеристиках имеют более низкую стоимость;

·                     ПЗУ с электрическим стиранием типа Flash – Flash-ROM. Функционально Flash-память мало отличается от EEPROM. Основное различие состоит в способе стирания записанной информации. В памяти EEPROM стирание производится отдельно для каждой ячейки, а во Flash-памяти стирать можно только целыми блоками. Если необходимо изменить содержимое одной ячейки Flash-памяти, потребуется перепрограммировать весь блок. Упрощение декодирующих схем по сравнению с EEPROM привело к тому, что МК с Flash-памятью cтали конкурентоспособными по отношению не только к МК с однократно программируемыми ПЗУ, но и с масочными ПЗУ также.

 

Память данных

Память данных МК выполняется, как правило, на основе статического ОЗУ. Термин "статическое" означает, что содержимое ячеек ОЗУ сохраняется при снижении тактовой частоты МК до сколь угодно малых значений (с целью снижения энергопотребления). Большинство МК имеют такой параметр, как "напряжение хранения информации" – USTANDBY. При снижении напряжения питания ниже минимально допустимого уровня UDDMIN, но выше уровня USTANDBY работа программы МК выполняться не будет, но информация в ОЗУ сохраняется. При восстановлении напряжения питания можно будет сбросить МК и продолжить выполнение программы без потери данных. Уровень напряжения хранения составляет обычно около 1 В, что позволяет в случае необходимости перевести МК на питание от автономного источника (батареи) и сохранить в этом режиме данные ОЗУ.

Объем памяти данных МК, как правило, невелик и составляет обычно десятки и сотни байт. Это обстоятельство необходимо учитывать при разработке программ для МК. Так, при программировании МК константы, если возможно, не хранятся как переменные, а заносятся в ПЗУ программ. Максимально используются аппаратные возможности МК, в частности, таймеры. Прикладные программы должны ориентироваться на работу без использования больших массивов данных.

 

Регистры МК

Как и все МПС, МК имеют набор регистров, которые используются для управления его ресурсами. В число этих регистров входят обычно регистры процессора (аккумулятор, регистры состояния, индексные регистры), регистры управления (регистры управления прерываниями, таймером), регистры, обеспечивающие ввод/вывод данных (регистры данных портов, регистры управления параллельным, последовательным или аналоговым вводом/выводом). Обращение к этим регистрам может производиться по-разному.

В МК с RISC-процессором все регистры (часто и аккумулятор) располагаются по явно задаваемым адресам. Это обеспечивает более высокую гибкость при работе процессора.

Одним из важных вопросов является размещение регистров в адресном пространстве МК. В некоторых МК все регистры и память данных располагаются в одном адресном пространстве. Это означает, что память данных совмещена с регистрами. Такой подход называется "отображением ресурсов МК на память".

В других МК адресное пространство устройств ввода/вывода отделено от общего пространства памяти. Отдельное пространство ввода/вывода дает некоторое преимущество процессорам с гарвардской архитектурой, обеспечивая возможность считывать команду во время обращения к регистру ввода/вывода.

 

Стек МК

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

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

В гарвардской архитектуре стековые операции производятся в специально выделенной для этой цели памяти. Это означает, что при выполнении программы вызова подпрограмм процессор с гарвардской архитектурой производит несколько действий одновременно.

Необходимо помнить, что МК обеих архитектур имеют ограниченную емкость памяти для хранения данных. Если в процессоре имеется отдельный стек и объем записанных в него данных превышает его емкость, то происходит циклическое изменение содержимого указателя стека, и он начинает ссылаться на ранее заполненную ячейку стека. Это означает, что после слишком большого количества вызовов подпрограмм в стеке окажется неправильный адрес возврата. Если МК использует общую область памяти для размещения данных и стека, то существует опасность, что при переполнении стека произойдет запись в область данных либо будет сделана попытка записи загружаемых в стек данных в область ПЗУ.

 

Внешняя память

Несмотря на существующую тенденцию по переходу к закрытой архитектуре МК, в некоторых случаях возникает необходимость подключения дополнительной внешней памяти (как памяти программ, так и данных).

МК может содержать специальные аппаратные средства для подключения внешней памяти.

Второй, более универсальный, способ заключается в том, чтобы использовать порты ввода/вывода для подключения внешней памяти и реализовать обращение к памяти программными средствами. Такой способ позволяет задействовать простые устройства ввода/вывода без реализации сложных шинных интерфейсов, однако приводит к снижению быстродействия системы при обращении к внешней памяти

 

Порты ввода/вывода

Каждый МК имеет некоторое количество линий ввода/вывода, которые объединены в многоразрядные (чаще 8-разрядные) параллельные порты ввода/вывода. В памяти МК каждому порту ввода/вывода соответствует свой адрес регистра данных. Обращение к регистру данных порта ввода/вывода производится теми же командами, что и обращение к памяти данных. Кроме того, во многих МК отдельные разряды портов могут быть опрошены или установлены командами битового процессора.

В зависимости от реализуемых функций различают следующие типы параллельных портов:

1)      однонаправленные порты, предназначенные только для ввода или только для вывода информации;

2)      двунаправленные порты, направление передачи которых (ввод или вывод) определяется в процессе инициализации МК;

3)      порты с альтернативной функцией (мультиплексированные порты). Отдельные линии этих портов используются совместно со встроенными периферийными устройствами МК, такими как таймеры, АЦП, контроллеры последовательных интерфейсов;

4)      порты с программно управляемой схемотехникой входного/выходного буфера.

Порты выполняют роль устройств временного согласования функционирования МК и объекта управления, которые в общем случае работают асинхронно. Различают три типа алгоритмов обмена информацией между МК и внешним устройством через параллельные порты ввода/вывода:

1)      режим простого программного ввода/вывода;

2)      режим ввода/вывода со стробированием;

3)      режим ввода/вывода с полным набором сигналов подтверждения обмена.

Типичная схема двунаправленного порта ввода/вывода МК приведена ниже.

 

Рис. Типовая схема двунаправленного порта ввода/вывода МК

 

Триггер управления разрешает вывод данных на внешний вывод. В современных МК, как правило, обеспечивается индивидуальный доступ к триггерам данных и управления, что позволяет использовать каждую линию независимо в режиме ввода или вывода.

Необходимо обратить особое внимание на то, что при вводе данных считывается значение сигнала, поступающее на внешний вывод, а не содержимое триггера данных. Если к внешнему выводу МК подключены выходы других устройств, то они могут установить свой уровень выходного сигнала, который и будет считан вместо ожидаемого значения триггера данных.

Другим распространенным вариантом схемотехнической организации порта ввода/вывода является "квазидвунаправленный" вывод. Такая организация вывода позволяет создавать шины с объединением устройств по схеме "монтажное И".

 

Таймеры и процессоры событий

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

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

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

Модуль таймера 8-разрядного МК представляет собой 8-ми или 16-разрядный счетчик со схемой управления. Схемотехникой МК обычно предусматривается возможность использования таймера в режиме счетчика внешних событий, поэтому его часто называют таймером/счетчиком. Структура типичного 16-разрядного таймера/счетчика в составе МК приведена на рис.

 

Рис. Структура модуля таймера/счетчика

 

В памяти МК 16-разрядный счетчик отображается двумя регистрами: TH – старший байт счетчика, TL – младший байт. Регистры доступны для чтения и для записи. Направление счета – только прямое, то есть при поступлении входных импульсов содержимое счетчика инкрементируется. В зависимости от настройки счетчик может использовать один из источников входных сигналов:

·         импульсную последовательность с выхода управляемого делителя частоты fBUS;

·         сигналы внешних событий, поступающие на вход TOCKI контроллера.

В первом случае говорят, что счетчик работает в режиме таймера, во втором – в режиме счетчика событий. При переполнении счетчика устанавливается в "единицу" триггер переполнения TF, который генерирует запрос на прерывание, если прерывания от таймера разрешены. Пуск и останов таймера могут осуществляться только под управлением программы. Программным способом можно также установить старший и младший биты счетчика в произвольное состояние или прочитать текущий код счетчика.

Рассмотренный "классический" модуль таймера/счетчика широко применяется в различных моделях относительно простых МК. Он может использоваться для измерения временных интервалов и формирования последовательности импульсов. Основными недостатками "классического" таймера/счетчика являются:

·                     потери времени на выполнение команд пуска и останова таймера, приводящие к появлению ошибки при измерении временных интервалов и ограничивающие минимальную длительность измеряемых интервалов времени единицами мс;

·                     сложности при формировании временных интервалов (меток времени), отличных от периода полного коэффициента счета, равного (Kдел/fBUS) · 216;

·                     невозможность одновременного обслуживания (измерения или формирования импульсного сигнала) сразу нескольких каналов.

Первые из двух перечисленных недостатков были устранены в усовершенствованном модуле таймера/счетчика, используемом в МК семейства MCS-51 (Intel). Дополнительная логика счетного входа позволяет тактовым импульсам поступать на вход счетчика, если уровень сигнала на одной из линий ввода равен "1". Такое решение повышает точность измерения временных интервалов, так как пуск и останов таймера производится аппаратно. Также в усовершенствованном таймере реализован режим перезагрузки счетчика произвольным кодом в момент переполнения. Это позволяет формировать временные последовательности с периодом, отличным от периода полного коэффициента счета.

Однако эти усовершенствования не устраняют главного недостатка модуля "классического" таймера – одноканального режима работы. Совершенствование подсистемы реального времени МК ведется по следующим направлениям:

·                     увеличение числа модулей таймеров/счетчиков. Этот путь характерен для фирм, выпускающих МК со структурой MCS-51, а также для МК компаний Mitsubishi и Hitachi;

·                     модификация структуры модуля таймера/счетчика, при которой увеличение числа каналов достигается не за счет увеличения числа счетчиков, а за счет введения дополнительных аппаратных средств входного захвата (input capture – IC) и выходного сравнения (output compare – OC). Такой подход используется, в частности, в МК компании Motorola.

Принцип действия канала входного захвата таймера/счетчика иллюстрирует рис.

 

Рис. Структурная схема канала входного захвата таймера

 

Схема детектора события "наблюдает" за уровнем напряжения на одном из входов МК. Чаще всего это одна из линий порта ввода/вывода. При изменении уровня логического сигнала с "0" на "1" и наоборот вырабатывается строб записи, и текущее состояние счетчика таймера записывается в 16-разрядный регистр входного захвата. Описанное действие в микропроцессорной технике называют событием захвата. Предусмотрена возможность выбора типа сигнала на входе, и это воспринимается как событие:

·                    положительный (передний) фронт сигнала;

·                    отрицательный (задний) фронт сигнала;

·                    любое изменение логического уровня сигнала.

Выбор типа события захвата устанавливается в процессе инициализации таймера и может неоднократно изменяться в ходе выполнения программы. Каждое событие захвата приводит к установке в "1" триггера входного захвата и появлению на его выходе флага (признака) входного захвата ICF. Состояние триггера входного захвата может быть считано программно, а если прерывания по событию захвата разрешены – формируется запрос на прерывание INT IC.

Использование режима входного захвата позволяет исключить ошибки измерения входного интервала времени, связанные со временем перехода к подпрограмме обработки прерывания, так как копирование текущего состояния счетчика осуществляется аппаратными, а не программными средствами. Однако время перехода на подпрограмму обработки прерывания накладывает ограничение на длительность измеряемого интервала времени, так как предполагается, что второе событие захвата произойдет позже, чем код первого события будет считан МК.

Структура аппаратных средств канала выходного сравнения представлена на рис.

Цифровой компаратор непрерывно сравнивает текущий код счетчика таймера с кодом, который записан в 16-разрядном регистре выходного сравнения. В момент равенства кодов на одном из выходов МК (Pxj) устанавливается заданный уровень логического сигнала. Обычно предусмотрено три типа изменения сигнала на выходе Pxj в момент события выходного сравнения:

·                    установка высокого логического уровня;

·                    установка низкого логического уровня;

·                    инвертирование сигнала на выходе.

При наступлении события сравнения устанавливаются в "1" триггер выходного сравнения и соответствующий ему признак выходного сравнения OCF. Аналогично режиму входного захвата состояние триггера выходного сравнения может быть считано программно, а если прерывания по событию сравнения разрешены – формируется запрос на прерывание INT OC.

Режим выходного сравнения предназначен, прежде всего, для формирования временных интервалов заданной длительности. Длительность сформированного временного интервала определяется только разностью кодов, последовательно загружаемых в регистр выходного сравнения, и не зависит от программного обеспечения МК. Время, необходимое для записи нового значения кода в регистр канала сравнения, ограничивает минимальную длительность формируемого временного интервала.

Рис. Структурная схема канала выходного сравнения таймера

 

Модули усовершенствованного таймера используются в составе МК в различных модификациях. При этом число каналов входного захвата и выходного сравнения в модуле может быть различным. В ряде модулей каналы могут быть произвольно настроены на функцию входного захвата или выходного сравнения посредством инициализации. Счетчик модуля усовершенствованного таймера может не иметь функции программного останова. В этом случае состояние счетчика нельзя синхронизировать с каким-либо моментом работы МК, и такой счетчик характеризуется как свободно считающий (free counter).

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

·                     недостаточное число каналов захвата и сравнения, принадлежащих одному счетчику временной базы. Это не позволяет сформировать синхронизированные между собой многоканальные импульсные последовательности;

·                     однозначно определенная конфигурация канала (или захват или сравнение) часто не удовлетворяет потребностям решаемой задачи;

·                     формирование сигналов по методу широтно-импульсной модуляции (ШИМ) требует программной поддержки, что снижает максимально достижимую частоту выходного сигнала.

Поэтому следующим этапом развития модулей подсистемы реального времени МК стали модули процессоров событий. Впервые модули процессоров событий были использованы компанией Intel в МК семейства 8xC51Fx. Этот модуль получил название программируемого счетного массива (Programmable Counter Array – PCA).

РСА обеспечивает более широкие возможности работы в реальном масштабе времени и в меньшей степени расходует ресурсы центрального процессора, чем стандартный и усовершенствованный таймеры/счетчики. К преимуществам РСА также можно отнести более простое программирование и более высокую точность. К примеру, РСА может обеспечить лучшее временное разрешение, чем таймеры 0, 1 и 2 МК семейства MCS-51, так как счетчик РСА способен работать с тактовой частотой, втрое большей, чем у этих таймеров. РСА также может решать многие задачи, выполнение которых с использованием таймеров требует дополнительных аппаратных затрат (например, определение фазового сдвига между импульсами или генерация ШИМ-сигнала). РСА состоит из 16-битного таймера-счетчика и пяти 16-битных модулей сравнения-защелки, как показано на рис.

Таймер-счетчик РСА используется в качестве базового таймера для функционирования всех пяти модулей сравнения-защелки. Вход таймера-счетчика РСА может быть запрограммирован на счет сигналов от следующих источников:

·                    выход делителя на 12 тактового генератора МК;

·                    выход делителя на 4 тактового генератора МК;

·                    сигнал переполнения таймера 0;

·                    внешний входной сигнал на выводе ЕСI (P1.2).

Рис. Структура процессора событий МК семейства Intel 8xC51Fx

 

Любой из модулей сравнения-защелки может быть запрограммирован для работы в следующих режимах:

1)      защелкивания по фронту и/или спаду импульса на входе CEXi;

2)      программируемого таймера;

3)      высокоскоростного выхода;

4)      широтно-импульсного модулятора.

Модуль 4 может быть также запрограммирован как сторожевой таймер (Watchdog Timer – WDT).

Режим защелкивания по импульсу на входе МК эквивалентен режиму входного захвата (IC) усовершенствованного таймера. Режимы программируемого таймера и высокоскоростного выхода близки по своим функциональным возможностям к режиму выходного сравнения (OC).

В режиме ШИМ на соответствующем выводе МК формируется последовательность импульсов с периодом, равным периоду базового таймера/счетчика PCA. Значение 8-разрядного кода, записанное в младший байт регистра-защелки соответствующего модуля задает скважность формируемого сигнала. При изменении кода от 0 до 255 скважность меняется от 100 % до 0,4 %.

Режим ШИМ очень прост с точки зрения программного обслуживания. Если изменения скважности не предполагается, то достаточно один раз занести соответствующий код в регистр данных модуля, проинициализировать режим ШИМ, и импульсная последовательность будет воспроизводиться с заданными параметрами без вмешательства программы.

Назначение и особенности работы сторожевого таймера будут рассмотрены далее отдельно.

При работе модуля сравнения-защелки в режиме защелки, программируемого таймера или высокоскоростного выхода модуль может сформировать сигнал прерывания. Сигналы от всех пяти модулей сравнения-защелки и сигнал переполнения таймера РСА разделяют один вектор прерывания. Иными словами, если прерывания разрешены, то и сигнал переполнения таймера PCA и сигнал от любого из модулей вызывают одну и ту же подпрограмму прерываний, которая должна сама идентифицировать источник, вызвавший ее.

Для работы с внешними устройствами таймер-счетчик РСА и модули сравнения-защелки используют выводы P1 порта МК. Если какой-либо вывод порта не используется при работе РСА, или РСА не задействован, порт может применяться стандартным образом.

Реализованный в 8xC51FX PCA оказался настолько удачным, что архитектура данных МК стала промышленным стандартом де-факто, а сам PCA многократно воспроизводился в различных модификациях микроконтроллеров разных фирм.

Тенденция развития подсистемы реального времени современных МК находит свое отражение в увеличении числа каналов процессоров событий и расширении их функциональных возможностей.

 

Модуль прерываний МК

 

Обработка прерываний в МК происходит в соответствии с общими принципами обработки прерываний в МПС. Модуль прерываний принимает запросы прерывания и организует переход к выполнению определенной прерывающей программы. Запросы прерывания могут поступать как от внешних источников, так и от источников, расположенных в различных внутренних модулях МК. В качестве входов для приема запросов от внешних источников чаще всего используются выводы параллельных портов ввода/вывода, для которых эта функция является альтернативной. Источниками запросов внешних прерываний также могут быть любые изменения внешних сигналов на некоторых специально выделенных линиях портов ввода/вывода.

Источниками внутренних запросов прерываний могут служить следующие события:

1)      переполнение таймеров/счетчиков;

2)      сигналы от каналов входного захвата и выходного сравнения таймеров/счетчиков или от процессора событий;

3)      готовность памяти EEPROM;

4)      сигналы прерывания от дополнительных модулей МК, включая завершение передачи или приема информации по одному из последовательных портов и другие.

Любой запрос прерывания поступает на обработку, если прерывания в МК разрешены и разрешено прерывание по данному запросу. Адрес, который загружается в программный счетчик при переходе к обработке прерывания, называется "вектор прерывания". В зависимости от организации модуля прерываний конкретного МК различные источники прерываний могут иметь разные векторы или использовать некоторые из них совместно. Использование различными прерываниями одного вектора обычно не вызывает проблем при разработке программного обеспечения, так как аппаратная часть МК фиксирована, а контроллер чаще всего выполняет одну-единственную программу.

Вопрос о приоритетах при одновременном поступлении нескольких запросов на прерывание решается в различных МК по-разному. Есть МК с одноуровневой системой приоритетов (все запросы равноценны), многоуровневой системой с фиксированными приоритетами и многоуровневой программируемой системой приоритетов.

Отдельно необходимо описать аппаратные прерывания, связанные с включением питания, подачей сигнала "сброс" и переполнением сторожевого таймера. Они имеют немаскируемый характер и чаще всего разделяют один общий вектор прерывания. Это вполне логично, поскольку результатом каждого из событий является начальный сброс МК.

 

Минимизация энергопотребления в системах на основе МК

Малый уровень энергопотребления является зачастую определяющим фактором при выборе способа реализации цифровой управляющей системы. Современные МК предоставляют пользователю большие возможности в плане экономии энергопотребления и имеют, как правило, следующие основные режимы работы:

·    активный режим (Run mode) – основной режим работы МК. В этом режиме МК исполняет рабочую программу, и все его ресурсы доступны. Потребляемая мощность имеет максимальное значение PRUN. Большинство современных МК выполнено по КМОП-технологии, поэтому мощность потребления в активном режиме сильно зависит от тактовой частоты;

·    режим ожидания (Wait mode, Idle mode или Halt mode). В этом режиме прекращает работу центральный процессор, но продолжают функционировать периферийные модули, которые контролируют состояние объекта управления. При необходимости сигналы от периферийных модулей переводят МК в активный режим, и рабочая программа формирует необходимые управляющие воздействия. Перевод МК из режима ожидания в рабочий режим осуществляется по прерываниям от внешних источников или периферийных модулей, либо при сбросе. В режиме ожидания мощность потребления МК PWAIT снижается по сравнению с активным режимом в 5…10 раз;

·    режим останова (Stop mode, Sleep mode или Power Down mode). В этом режиме прекращает работу как центральный процессор, так и большинство периферийных модулей. Переход МК из состояния останова в рабочий режим возможен, как правило, только по прерываниям от внешних источников или после подачи сигнала сброса. В режиме останова мощность потребления МК PSTOP снижается по сравнению с активным режимом примерно на три порядка и составляет единицы микроватт.

Два последних режима называют режимами пониженного энергопотребления. Минимизация энергопотребления системы на МК достигается за счет оптимизации мощности потребления МК в активном режиме, а также использования режимов пониженного энергопотребления. При этом необходимо иметь в виду, что режимы ожидания и останова существенно отличаются временем перехода из режима пониженного энергопотребления в активный режим. Выход из режима ожидания обычно происходит в течение 3…5 периодов синхронизации МК, в то время как задержка выхода из режима останова составляет несколько тысяч периодов синхронизации. Кроме снижения динамики работы системы значительное время перехода в активный режим является причиной дополнительного расхода энергии.

Мощность потребления МК в активном режиме является одной из важнейших характеристик контроллера. Она в значительной степени зависит от напряжения питания МК и частоты тактирования.

В зависимости от диапазона питающих напряжений все МК можно разделить на три основные группы:

·                     МК с напряжением питания 5,0 В±10 %. Эти МК предназначены, как правило, для работы в составе устройств с питанием от промышленной или бытовой сети, имеют развитые функциональные возможности и высокий уровень энергопотребления.

·                     МК с расширенным диапазоном напряжений питания: от 2,0…3,0 В до 5,0-7,0 В. МК данной группы могут работать в составе устройств как с сетевым, так и с автономным питанием.

·                     МК с пониженным напряжением питания: от 1,8 до 3 В. Эти МК предназначены для работы в устройствах с автономным питанием и обеспечивают экономный расход энергии элементов питания.

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

Большинство современных МК выполнено по технологии КМОП, поэтому мощность потребления в активном режиме PRUN практически прямо пропорциональна тактовой частоте. Поэтому, выбирая частоту тактового генератора, не следует стремиться к предельно высокому быстродействию МК в задачах, которые этого не требуют. Часто определяющим фактором оказывается разрешающая способность измерителей или формирователей временных интервалов на основе таймера или скорость передачи данных по последовательному каналу.

В большинстве современных МК используется статическая КМОП-технология, поэтому они способны работать при сколь угодно низких тактовых частотах вплоть до нулевых. В справочных данных при этом указывается, что минимальная частота тактирования равна dc (direct current). Это означает, что возможно использование МК в пошаговом режиме, например, для отладки. Мощность потребления МК при низких частотах тактирования обычно отражает значение тока потребления при fOSC = 32768 Гц (часовой кварцевый резонатор).

 

Тактовые генераторы МК

Современные МК содержат встроенные тактовые генераторы, которые требуют минимального числа внешних времязадающих элементов. На практике используются три основных способа определения тактовой частоты генератора: с помощью кварцевого резонатора, керамического резонатора и внешней RC-цепи.

Типовая схема подключения кварцевого или керамического резонатора приведена на рис.

Рис. Тактирование с использованием кварцевого или керамического резонаторов (а) и с использованием RC-цепи (б)

 

Кварцевый или керамический резонатор Q подключается к выводам XTAL1 и XTAL2, которые обычно представляют собой вход и выход инвертирующего усилителя. Номиналы конденсаторов C1 и C2 определяются производителем МК для конкретной частоты резонатора. Иногда требуется включить резистор порядка нескольких мегаом между выводами XTAL1 и XTAL2 для стабильной работы генератора.

Использование кварцевого резонатора позволяет обеспечить высокую точность и стабильность тактовой частоты (разброс частот кварцевого резонатора обычно составляет менее 0,01 %). Такой уровень точности требуется для обеспечения точного хода часов реального времени или организации интерфейса с другими устройствами. Основными недостатками кварцевого резонатора являются его низкая механическая прочность (высокая хрупкость) и относительно высокая стоимость.

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

Самым дешевым способом задания тактовой частоты МК является использование внешней RС-цепи, как показано на рис. 4.9б. Внешняя RC-цепь не обеспечивает высокой точности задания тактовой частоты (разброс частот может доходить до десятков процентов). Это неприемлемо для многих приложений, где требуется точный подсчет времени. Однако имеется масса практических задач, где точность задания тактовой частоты не имеет большого значения.

Зависимость тактовой частоты МК от номиналов RC-цепи зависит от конкретной реализации внутреннего генератора и приводится в руководстве по применению контроллера.

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

Некоторые современные МК содержат встроенные RC или кольцевые генераторы, которые позволяют контроллеру работать без внешних цепей синхронизации. Работа внутреннего генератора обычно разрешается путем программирования соответствующего бита регистра конфигурации МК.

В большинстве моделей МК частота времязадающего элемента (резонатора или RC-цепи) и частота тактирования fBUS жестко связаны коэффициентом деления встроенного делителя частоты. Поэтому изменение частоты программным путем не представляется возможным. Однако ряд последних семейств МК (например, HC08 фирмы Motorola) имеют в своем составе схему тактирования, основанную на принципе синтезатора частоты с контуром фазовой автоподстройки (PLL – phase loop lock). Такая схема работает как умножитель частоты и позволяет задавать тактовую частоту с помощью низкочастотного кварцевого резонатора, что снижает уровень электромагнитного излучения МК. Коэффициенты деления контура PLL могут быть изменены программным путем, что позволяет снизить тактовую частоту (и, соответственно, потребляемую мощность) в промежутки времени, когда высокое быстродействие не требуется.

В некоторых МК семейства AVR фирмы Atmel тактовая частота контроллера, задаваемая внутренней RC-цепью, также может изменяться программными средствами.

 

Аппаратные средства обеспечения надежной работы МК

Прикладная программа, записанная в память программ МК, должна обеспечивать его надежную работу при любых комбинациях входных сигналов. Однако в результате электромагнитных помех, колебаний напряжения питания и других внешних факторов предусмотренный разработчиком ход выполнения программы может быть нарушен. С целью обеспечения надежного запуска, контроля работы МК и восстановления работоспособности системы в отсутствие оператора все современные МК снабжаются аппаратными средствами обеспечения надежной работы. К ним относятся:

1)      схема формирования сигнала сброса МК;

2)      модуль мониторинга напряжения питания;

3)      сторожевой таймер.

 

Схема формирования сигнала сброса МК

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

С целью обеспечения надежного запуска от любых источников питания с различной динамикой нарастания напряжения большинство современных МК содержат встроенный детектор напряжения питания (схема Power-On-Reset – POR), который формирует сигнал сброса при нарастании напряжения питания. В частности, входящий в состав МК семейства PIC16 таймер установления питания (PWRT) начинает отсчет времени после того, как напряжение питания пересекло уровень около 1,2…1,8 В. По истечении выдержки около 72 мс считается, что напряжение достигло номинала.

Сразу после выхода из состояния сброса МК выполняет следующие действия:

1)      запускает генератор синхронизации МК. Для стабилизации частоты тактирования внутренними средствами формируется задержка времени;

2)      считывает энергонезависимые регистры конфигурации в соответствующие регистры ОЗУ (если необходимо);

3)      загружает в счетчик команд адрес начала рабочей программы;

4)      производит выборку первой программы из памяти программ и приступает к выполнению программы.

Адрес ячейки памяти, в которой хранится код первой исполняемой команды, называют вектором начального запуска или вектором сброса. В некоторых МК этот адрес однозначно определен и приведен в техническом описании. Про такие МК говорят, что они имеют фиксированный вектор сброса. В других МК вектор сброса может быть произвольно определен пользователем. На этапе программирования МК необходимый вектор начального запуска записывается в ячейки с фиксированными адресами, и при выходе МК из сброса автоматически загружается в счетчик команд. О таких МК говорят, что они имеют загружаемый вектор сброса. Загружаемый вектор сброса имеют все 8-разрядные МК фирмы Motorola, выполненные по структуре с единым адресным пространством команд и данных.

Для перевода МК в состояние сброса при установившемся напряжении питания достаточно подать сигнал высокого или низкого уровня (в соответствии со спецификацией МК) на вход сброса (RESET). Обычно для формирования сигнала сброса при включении напряжения питания и нажатии кнопки сброса используют RC-цепь. Типовые схемы формирования сигнала сброса представлены на рис.

Кнопка Кн предназначена для "ручного" сброса МК при отладке. Диод VD препятствует попаданию на вход RESET отрицательного напряжения при выключении питания. Номиналы R и C определяют задержку времени, необходимую для завершения всех переходных процессов при сбросе (указываются в техническом описании на МК). Триггер Шмитта на входе допускает подачу сигнала сброса с ненормированной длительностью фронта. При отсутствии триггера Шмитта на входе приходится использовать специальную внешнюю схему формирователя.

В современных МК линия RESET обычно является двунаправленной и имеет низкий активный уровень. При нажатии кнопки "сброс" или включении питания буфер линии устанавливается в режим ввода и реализует так называемый внешний сброс. МК может перейти в состояние сброса также по сигналам устройств контроля состояния, которые имеются в составе контроллера. В этом случае говорят, что МК находится в состоянии внутреннего сброса. При этом буфер линии RESET устанавливается в состояние вывода с низким логическим уровнем на выходе. Данный сигнал может быть использован для установки в начальное состояние периферийных ИС.

Рис. Типовые схемы формирования сигнала внешнего сброса для МК с высоким активным уровнем сигнала сброса (а) и низким активным уровнем сигнала сброса (б)

 

Порядок выхода МК из состояний внешнего и внутреннего сброса в целом одинаков.

 

Блок детектирования пониженного напряжения питания

В реальных условиях эксплуатации может сложиться такая ситуация, при которой напряжение питания МК опустится ниже минимально допустимого, но не достигнет порога отпускания схемы POR. В этих условиях МК может "зависнуть". При восстановлении напряжения питания до номинального значения МК останется неработоспособным.

Для восстановления работоспособности системы после "просадки" напряжения питания МК необходимо снова сбросить. Для этой цели в современных МК реализован дополнительный блок детектирования пониженного напряжения питания. Такой модуль используется в МК семейства HC08 фирмы Motorola, аналогичный модуль имеется в составе семейства PIC17 фирмы Microchip. Рассматриваемый модуль генерирует сигнал внутреннего сброса при снижении напряжения питания до уровня чуть ниже минимально допустимого. Уровень срабатывания блока детектирования пониженного напряжения питания значительно превышает напряжение сохранения данных в ОЗУ МК. Событие сброса по сигналу блока пониженного напряжения питания отмечается специальным битом в одном из регистров МК. Следовательно, программно анализируя этот бит после сброса МК, можно установить, что данные целы, и продолжить выполнение программы.

 

Сторожевой таймер

Если, несмотря на все принятые меры, МК все же "завис", то на случай выхода из этого состояния все современные контроллеры имеют встроенный модуль сторожевого таймера. Принцип действия сторожевого таймера показан на рис. 4.11.

Принцип действия сторожевого таймера.

Рис. Принцип действия сторожевого таймера

 

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

Для исключения сброса по переполнению сторожевого таймера рабочая программа МК должна периодически сбрасывать счетчик. Сброс счетчика сторожевого таймера осуществляется путем исполнения специальной команды (например, CLRWDT) или посредством записи некоторого указанного кода в один из регистров специальных функций. Тогда при нормальном, предусмотренном разработчиком, порядке исполнения рабочей программы переполнения счетчика сторожевого таймера не происходит, и он не оказывает влияния на работу МК. Однако, если исполнение рабочей программы было нарушено, например, вследствие "зависания", то велика вероятность того, что счетчик не будет сброшен вовремя. Тогда произойдет сброс по переполнению сторожевого таймера, и нормальный ход выполнения рабочей программы будет восстановлен.

Модули сторожевых таймеров конкретных МК могут иметь различные особенности:

1)      в ряде МК векторы внешнего сброса и сброса по переполнению сторожевого таймера совпадают. Это не позволяет выявить причину сброса программным путем и затрудняет написание рабочей программы. Более высокоуровневые МК имеют либо различные векторы сброса, либо отмечают событие сброса по переполнению сторожевого таймера установкой специального бита в одном из регистров специальных функций;

2)      в некоторых МК при переходе в один из режимов пониженного энергопотребления, когда рабочая программа не выполняется, автоматически приостанавливается работа сторожевого таймера. В других МК сторожевой таймер имеет независимый тактовый генератор, который продолжает функционировать и в режиме ожидания. В этом случае необходимо периодически выводить МК из состояния ожидания для сброса сторожевого таймера. В PIC-контроллерах фирмы Microchip выработка таких сбросов может быть запрещена путем записи нуля в специальный бит конфигурации WDTE.

Использование сторожевого таймера существенно повышает способность к самовосстановлению системы.

 

Дополнительные модули МК

Описанные выше модули составляют так называемый базовый комплект МК и входят в состав любого современного контроллера. Очевидна необходимость включения в состав МК дополнительных модулей, состав и возможности которых определяются конкретной решаемой задачей. Среди таких дополнительных модулей следует, прежде всего, отметить:

·         модули последовательного ввода/вывода данных;

·         модули аналогового ввода/вывода.

 

Модули последовательного ввода/вывода

Наличие в составе 8-разрядного МК модуля контроллера последовательного ввода/вывода стало в последнее время обычным явлением. Задачи, которые решаются средствами модуля контроллера последовательного ввода/вывода, можно разделить на три основные группы:

·                     связь встроенной микроконтроллерной системы с системой управления верхнего уровня, например, с персональным компьютером. Чаще всего для этой цели используются интерфейсы RS-232C и RS-485;

·                     связь с внешними по отношению к МК периферийными ИС, а также с датчиками физических величин с последовательным выходом. Для этих целей используются интерфейсы I2C, SPI, а также нестандартные протоколы обмена;

·                     интерфейс связи с локальной сетью в мультимикроконтроллерных системах. В системах с числом МК до пяти обычно используются сети на основе интерфейсов I2C, RS-232C и RS-485 с собственными сетевыми протоколами высокого уровня. В более сложных системах все более популярным становится протокол CAN.

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

Число линий, по которым происходит передача в последовательном коде, обычно равно двум (I2C, RS-232C, RS-485) или трем (SPI, некоторые нестандартные протоколы). Данное обстоятельство позволяет спроектировать модули контроллеров последовательного обмена таким образом, чтобы с их помощью на аппаратном уровне можно было реализовать несколько типов последовательных интерфейсов. При этом режим передачи (синхронный или асинхронный) и формат кадра поддерживаются на уровне логических сигналов, а реальные физические уровни сигналов для каждого интерфейса получают с помощью специальных ИС, которые называют приемопередатчиками, конверторами, трансиверами.

Среди различных типов встроенных контроллеров последовательного обмена, которые входят в состав тех или иных 8-разрядных МК, сложился стандарт "де-факто" – модуль UART (Universal Asynchronous Receiver and Transmitter). UART – это универсальный асинхронный приемопередатчик. Однако большинство модулей UART, кроме асинхронного режима обмена, способны также реализовать режим синхронной передачи данных.

Не все производители МК используют термин UART для обозначения типа модуля контроллера последовательного обмена. Так, в МК фирмы Motorola модуль асинхронной приемопередачи, который поддерживает те же режимы асинхронного обмена, что и UART, принято называть SCI (Serial Communication Interface). Следует отметить, что модуль типа SCI обычно реализует только режим асинхронного обмена, то есть его функциональные возможности уже по сравнению с модулями типа UART. Однако бывают и исключения: под тем же именем SCI в МК МС68НС705В16 скрывается модуль синхронно-асинхронной передачи данных.

Модули типа UART в асинхронном режиме работы позволяют реализовать протокол обмена для интерфейсов RS-232C, RS-422А, RS-485, в синхронном режиме – нестандартные синхронные протоколы обмена, и в некоторых моделях – SPI. В МК фирмы Motorola традиционно предусмотрены два модуля последовательного обмена: модуль SCI с возможностью реализации только протоколов асинхронной приемопередачи для интерфейсов RS-232C, RS-422A, RS-485 и модуль контроллера синхронного интерфейса в стандарте SPI.

Протоколы интерфейсов локальных сетей на основе МК (I2C и CAN) отличает более сложная логика работы. Поэтому контроллеры CAN интерфейса всегда выполняются в виде самостоятельного модуля. Интерфейс I2C с возможностью работы как в ведущем, так и ведомом режиме, также обычно поддерживается специальным модулем (модуль последовательного порта в МК 89С52 фирмы Philips). Но если реализуется только ведомый режим I2C, то в МК PIC16 фирмы Microchip он успешно сочетается с SPI: настройка одного и того же модуля на один из протоколов осуществляется путем инициализации.

В последнее время появилось большое количество МК со встроенными модулями контроллеров CAN и модулями универсального последовательного интерфейса периферийных устройств USB (Universal Serial Bus). Каждый из этих интерфейсов имеет достаточно сложные протоколы обмена, для ознакомления с которыми следует обращаться к специальной литературе.

 

 

 

Порты передачи данных

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

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

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

 

Рис. Временная диаграмма стробируемого порта

 

Передача стробирующего сигнала требует прокладки дополнительных проводов, но с реализационной точки зрения гораздо проще совмещения синхросигнала и данных и поэтому широко применяется в самых разнообразных ситуациях. Большинство стробируемых портов асимметричны: одно из устройств, ведущий (master – хозяин), генерирует стробовый сигнал, а второе ведомый (slave – раб), пользуется этим сигналом для приема или передачи. Нередко вместо одиночного строба используется несколько различных сиг налов – например, один сигнал выставляется передатчиком и сообщает чт следующая порция данных готова, а второй сигнал – приемником и сооб шает, что приемник принял эти данные и готов принять следующие Дополнительные сигналы могут также решать вопрос о том, какое из устройств в данном цикле будет приемником, а какое – передатчиком.

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

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

Кроме того, при передаче большого объема данных в виде плотно следующих друг за другом кадров велика опасность, что приемник потеряет заголовок очередного кадра и не сможет восстановить структуру потока, поэтому многие асинхронные протоколы требуют паузы между последовательными кадрами.

Асинхронная передача данных удобна в ситуациях, когда объем передаваемых данных невелик, а потребность в их передаче возникает в труднопредсказуемые моменты. Обычно асинхронные порты работают на небольших скоростях, не более нескольких килобит в секунду.

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

Как синхронные, так и асинхронные порты бывают следующих типов:

1)      симплексные (simplex – передавать данные может только одно устройство);

2)      полудуплексные (half-duplex – оба устройства могут принимать и передавать данные, но не способны делать это одновременно, например, потому, что прием и передача идут по одному проводу);

3)      полнодуплексные (full-duplex) или просто дуплексные (оба устройства способны одновременно передавать и принимать данные, чаще всего -по различным проводам).

Рис. Симплексные, полудуплексные и полнодуплексные порты

 

Еще одна практически важная классификация портов передачи данных - это деление их на последовательные и параллельные порты.

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

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

Рис. Последовательные и параллельные порты

 

Последовательные порты предназначены для обмена информацией микропроцессоров между собой, а также для связи с устройствами в которых критично количество соединительных проводов. 

В настоящее время широко используются два вида последовательных портов:

1)      синхронные последовательные порты;

2)      асинхронные последовательные порты.

Синхронные последовательные порты

При рассмотрении работы параллельного порта в режиме обмена данными с другим компьютером или принтером уже рассматривался режим последовательной передачи байтов. В последовательном порту режим последовательной передачи применяется не только к байтам, но и к отдельным битам внутри байта. В этом случае для передачи данных достаточно только одного провода. Передаваемая и принимаемая информация обычно представляется в виде однобайтовых или многобайтовых слов. Вес каждого бита в слове различен, поэтому кроме битовой синхронизации, аналогичной байтовой синхронизации для параллельного порта, требуется кадровая синхронизация. Кадровая синхронизация позволяет однозначно определять номер каждого бита в передаваемом слове. Временная диаграмма передачи кадра по синхронному последовательному порту приведена на рисунке.

DiagSerP.gif (4407 bytes)

Рис. Временная диаграмма передачи одного кадра двоичной информации по последовательному порту

 

Временная диаграмма, приведённая на рисунке 1, применяется в синхронных последовательных портах, которые используются чаще всего в сигнальных процессорах для обмена информацией с кодеками речи, аналого-цифровыми и цифро-аналоговыми преобразователями. На приведённой временной диаграмме показаны два сигнала синхронизации: сигнал тактовой синхронизации CLK и сигнал кадровой синхронизации FS. Сигнал кадровой синхронизации формируется аппаратно из сигнала WR# при записи очередного байта в параллельный порт вывода. Полярность сигналов синхронизации зависит от конкретного типа применяемых микросхем, поэтому в большинстве сигнальных процессоров возможна настройка полярности сигналов синхронизации.

Упрощённая схема синхронного последовательного порта приведена на рисунке. На этой схеме видно, что в состав последовательного порта входит параллельный порт, который позволяет подключаться к системной шине микропроцессора. Для преобразования параллельного кода, который поступает из системной шины в последовательный, используется сдвиговый регистр. При обращении центрального процессора к последовательному порту вырабатывается сигнал записи в последовательный порт, который подаётся на вход параллельной записи V универсального регистра. Этот же сигнал используется в качестве сигнала кадровой синхронизации FS. Сигнал тактовой синхронизации CLK, вырабатываемый отдельным генератором, подаётся на вход последовательного сдвига C универсального регистра порта.

Рис. Упрощённая схема синхронного последовательного порта

 

Количество передаваемых в одном кадре бит может меняться от восьми до тридцатидвух. В качестве примера использования синхронного последовательного порта на рисунке приведена схема подключения аналого-цифрового преобразователя фирмы Analog Devices к синхронному последовательному порту сигнального процессора той же фирмы.

Рис. Схема подключения кодека к синхронному последовательному порту

 

В рассмотренной схеме синхронного последовательного порта на приёмном конце необходимо подсчитывать количество тактовых импульсов, прошедшее после импульса кадровой синхронизации. Кроме того, в таком синхронном последовательном порту информация передаётся непрерывно, что, конечно, удобно для устройств с непрерывным потоком информации, как, например, в кодеках речи. Но существуют устройства, к которым необходимо обращаться только периодически, как, например, синтезаторы частоты, микросхемы приёмников, блоков цветности телевизоров, микросхем памяти данных и многие другие устройства. В этих случаях используются другие виды синхронных последовательных портов такие как SPI порт и I2C шина. Временная диаграмма SPI интерфейса приведена на рисунке.

DiagSPI.gif (4889 bytes)

Рис. Временная диаграмма SPI интерфейса

 

Основное отличие этого интерфейса от приведённого выше, заключается в том, что сигнал тактовой синхронизации передаётся только в момент действия импульса кадровой синхронизации. Активный уровень сигнала кадровой синхронизации длится до окончания передачи последнего бита в передаваемом кадре. По одним и тем же линиям передачи данных MISO (вход для главного, выход для ведомого) и MOSI (выход для главного, вход для ведомого) может передаваться информация к совершенно различным микросхемам. Выбор, для какой из микросхем предназначена информация, производится сигналом SS (выбор ведомого). В SPI интерфейсе в приёмнике не требуется счётчик тактовых импульсов. Запись принятой информации производится по окончанию кадрового импульса.

Если в устройстве используется несколько микросхем, то количество линий выбора ведомого становится значительным, поэтому в таких случаях используется ещё один вид синхронного последовательного интерфейса: I2C шина (шина TWI для МК фирмы ATMEL). Временная диаграмма этого интерфейса приведена на рисунке. В I2C шине приём и передача данных, а также передача адреса микросхемы и адреса регистра внутри микросхемы, к которому осуществляется обращение, производится по одному и тому же проводу. Для подключения к этому проводу используются микросхемы с открытым коллектором. Нагрузкой для всех микросхем, подключенных к линии SDA служит внешний резистор. Естественно, что скорость передачи данных по такому порту будет ниже, по сравнению с SPI портом. Тактовая синхронизация в I2C шине передаётся по линии SCL. Начало работы с микросхемой обозначается особой комбинацией сигналов SDA и SCL, которая называется условием старта. Эта же комбинация одновременно осуществляет кадровую синхронизацию. Завершение работы с микросхемой обозначается ещё одной комбинацией сигналов SDA и SCL. В качестве примера микросхем, использующих интерфейс I2C можно назвать микросхемы EEPROM серии 24сXX.

DiagI2C.gif (4902 bytes)

Рис. Временная диаграмма I2C интерфейса

 

Асинхронные последовательные порты

Рассмотренные синхронные последовательные порты позволяют достигнуть больших скоростей передачи данных, но провод, по которому ведётся передача синхросигнала, практически не несёт информации. Такой сигнал можно было бы сформировать и на приёмном конце линии передачи, если заранее договориться о скорости передачи. Единственная проблема - это то, что невозможно построить два абсолютно одинаковых генератора. Генераторы необходимо синхронизировать. Для синхронизации внутренних генераторов используется особое условие начала асинхронной передачи: старт. Всё время, пока не ведётся передача информации, на линии присутствует стоп-сигнал единичного уровня. Перед началом передачи каждого байта передаётся старт-бит, сигнализирующий приемнику о начале посылки данных, за которым следуют информационные биты. Стартовый бит всегда передаётся нулевым уровнем с длительностью, равной длительности информационных бит. В некоторых случаях после передачи информационных бит может передаваться, бит паритета (четности). Завершается передача данных стоп-сигналом. Минимальная длительность стопового сигнала должна быть 1,5 длительности информационных бит, но обычно используют паузу между соседними пакетами данных две длительности информационного бита. Временная диаграмма передаваемых сигналов при асинхронной передаче приведена на рисунке.

 

Рис. Временная диаграмма передаваемых сигналов при асинхронной передаче

 

 Продолжительность стопового бита не ограничена. Это позволяет регулировать скорость передачи в зависимости от скорости поступления информации.

 

Порт RS232

Протокол последовательного асинхронного обмена RS5232/ССIТТ V24 широко применяется для подключения к компьютеру алфавитно-цифровых терминалов, низкоскоростных печатающих устройств, позиционных устройств ввода (мышей, планшетов), низкоскоростного телекоммуникационного оборудования и т.д., а иногда и для соединения компьютеров между собой, например, если более скоростное сетевое оборудование отсутствует или не может быть использовано.

Такие порты используются для передачи данных за пределы корпуса компьютера, поэтому кроме линии передачи данных предусмотрен также провод, передающий опорное нулевое напряжение, Вместо TTL-совместимых напряжений, RS232 использует в качестве 1 напряжения в диапазоне от -25 до -3 В, а в качестве 0 – соответственно, в диапазоне от +3 до +25 В (рис.).

RS232 предполагает двусторонний обмен данными. Для этой цели предусмотрено две линии данных – для приема и для передачи, обозначаемые ТХ и RX-В соответствии со стандартом, устройства делятся на два типа: "компьютеры и "терминалы". Различие между ними состоит в том, что "компьютер" передает данные по линии ТХ, а получает по линии RX, а "терминал" – наоборот. Для соединения двух "компьютеров" необходим специальный, так называемый нуль-модемный кабель, в котором провода ТХ и RX перекрещены. Любопытно, что стандартные порты IBM PC являются "терминалами", а не "компьютерами".



Рис. Диаграмма напряжений RS232

 

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

Минимальная скорость передачи составляет 300 бит/с, последующие допустимые скорости получаются удвоением предыдущей– 600 бит/с, 1200, 2400 и т.д. Современные реализации RS232 поддерживают скорости 115 200 бит/с и более. Скорость и вариации формата кадра определяются настройками приемника и передатчика. Необходимо, чтобы у соединенных портом устройств эти настройки совпадали, однако протокол сам по себе не предоставляет средств для их согласования.

Кроме линий приема, передачи, нуля и питания спецификация RS232 предусматривает ряд дополнительных сигналов, в просторечии называемых модемными линиями– признак несущей, разрешение передачи данных (очисткой этого сигнала приемник может сигнализировать передатчику, что он не успевает обрабатывать поступающие данные) и др. Эти сигналы не должны обязательно поддерживаться всеми устройствами и используются, главным образом, акустическими модемами, откуда и происходит название. Полная спецификация при использовании 25-контактного разъема предусматривает также возможность синхронной передачи данных с отдельными стробирующими сигналами, но основная масса реализаций RS232 этого не поддерживает.

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

 

USART микроконтроллера PIC

В качестве примера аппаратной реализации последовательного порта, которую, помимо других вариантов использования, можно применить и для реализации RS232, давайте рассмотрим устройство USART (Universal Synchronous Asynchronous Receiver Transmitter).

USART может использоваться либо как полнодуплексный асинхронный порт с форматом кадра, совместимым с RS232, либо как полудуплексный синхронный стробируемый порт. Устройство состоит из приемника (receiver), передатчика (transmitter) и генератора тактовой частоты (baud rate generator) (рис. 9.10).

Рис. Структура USART

 

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

Счетчик генератора тактовой частоты программно недоступен, а начальное значение этого счетчика (оно же коэффициент деления) задается 8-разрядным регистром SPBRG. USART использует одну и ту же тактовую частоту и для приемника, и для передатчика. При синхронной работе в режиме ведомого встроенный генератор тактовой частоты не используется вообще.

Приемник и передатчик во многом аналогичны по структуре и имеют по два программно-доступных 8-разрядных регистра. Первый регистр называется регистром управления и статуса (status and control register), а второй – регистром данных. И приемник, и передатчик имеют также программно-недоступный сдвиговый регистр, называемый TSR (Transmit Shift Register) у передатчика и RSR (Receive Shift Register) у приемника.

При передаче значение регистра данных передатчика помещается в сдвиговый регистр и возможно расширяется девятым битом из управляющего регистра. Значение младшего бита выставляется на выходе TX микроконтроллера. Затем на каждом такте генератора регистр сдвигается на один бит – в результате получается последовательная передача бит кадра с заданной скоростью. Когда биты кончаются, передатчик устанавливает бит управляющего регистра и, если это требуется, генерирует прерывание по завершении передачи.

Приемник имеет несколько более сложное устройство. Значение входа RX анализируется не один раз за каждый такт генератора, а 16 раз и усредняется – благодаря этому значительно увеличивается помехоустойчивость. Кроме того, приемник USART имеет скрытый буферный регистр, в который помещается значение принятого байта, если регистр данных приемника еще не был прочитан с момента последнего приема.

 

Рис. Принципиальная схема передатчика USART

 

Рис. Временная диаграмма работы приемника USART

 

 

Рис. Принципиальная схема приемника USART

 

Приемники большинства современных аппаратных реализаций RS232 имеют буферные регистры. Так, последовательные порты подавляющего большинства современных IBM PC-совместимых компьютеров основаны на микросхеме National Semiconductor PC16552 [NS PC16552D] и имеют буферы объемом 16 байт (у оригинальной IBM PC были небуферизованные порты).

Помимо освобождения центрального процессора от исполнения работы сдвиговых регистров, аппаратная реализация RS232 позволяет заменить ожидание данных в режиме опроса на работу по прерываниям, что во многих случаях тоже весьма полезно. Многопортовые адаптеры, используемые, например, для организации модемных пулов интернет-провайдеров, часто могут передавать данные в режиме ПДП.

 

Модули аналогового ввода/вывода

Необходимость приема и формирования аналоговых сигналов требует наличия в МК модулей аналогового ввода/вывода.

Простейшим устройством аналогового ввода в МК является встроенный компаратор напряжения. Компаратор сравнивает входное аналоговое напряжение с опорным потенциалом VREF и устанавливает на выходе логическую "1", если входное напряжение больше опорного. Компараторы удобнее всего использовать для контроля определенного значения входного напряжения, например, в термостатах. В комбинации с внешним генератором линейно изменяющегося напряжения встроенный компаратор позволяет реализовать на МК интегрирующий аналого-цифровой преобразователь (АЦП).

Однако более широкие возможности для работы с аналоговыми сигналами дает АЦП, встроенный в МК. Чаще всего он реализуется в виде модуля многоканального АЦП, предназначенного для ввода в МК аналоговых сигналов с датчиков физических величин и преобразования этих сигналов в двоичный код. Структурная схема типового модуля АЦП представлена на рис.

Структура модуля АЦП.

Рис. Структура модуля АЦП

 

Многоканальный аналоговый коммутатор К служит для подключения одного из источников аналоговых сигналов (PTx0...PTx7) ко входу АЦП. Выбор источника сигнала для преобразования осуществляется посредством записи номера канала коммутатора в соответствующие разряды регистра управления АЦП.

Два вывода модуля АЦП используются для задания опорного напряжения Uоп: VREFH – верхний предел Uоп, VREFL – нижний предел. Разность потенциалов на входах VREFH и VREFL и составляет Uоп. Разрешающая способность АЦП составляет Uоп/2n, где n – число двоичных разрядов в слове результата. Максимальное значение опорного напряжения, как правило, равно напряжению питания МК. Если измеряемое напряжение Uизм > VREFH, то результат преобразования будет равен FF, код 00 соответствует напряжениям Uизм < VREFL. Для достижения максимальной точности измерения следует выбрать максимально допустимое значение Uоп. В этом случае напряжение смещения нуля входного буфера и нелинейность передаточной характеристики АЦП будут вносить относительно малые погрешности.

Собственно аналого-цифровой преобразователь выполнен по методу последовательного приближения. Практически во всех моделях 8-разрядных МК разрядность АЦП также составляет 8 разрядов. Соответственно, формат представления результатов измерения АЦП – однобайтовый. Исключение составляют лишь модули АЦП микроконтроллеров для управления преобразователями частоты для электроприводов, разрешающая способность которых равна 10 разрядам. Два младших разряда результата получают с помощью дополнительного емкостного делителя, не связанного с регистром последовательного приближения.

Длительность такта преобразования задает генератор синхронизации: один цикл равен двум периодам частоты генератора tADC. Время преобразования для типовых модулей АЦП микроконтроллеров составляет от единиц до десятков микросекунд.

Источником синхронизации модуля АЦП может служить встроенный RC-генератор (Г) или импульсная последовательность тактирования межмодульных магистралей МК. В первом случае частота синхронизации АЦП обязательно окажется оптимальной, то есть той, которая рекомендуется в техническом описании. Во втором случае выбранная по другим соображениям fBUS может оказаться неподходящей для модуля АЦП. На этот случай в составе некоторых модулей предусмотрен программируемый делитель частоты fBUS.

Момент завершения каждого цикла преобразования отмечается установкой триггера готовности данных. Если прерывания от модуля АЦП разрешены, то генерируется запрос на прерывания. Как правило, чтение регистра результата сбрасывает триггер готовности.

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

Цифро-аналоговые преобразователи в составе МК являются большой редкостью. Функция цифро-аналогового преобразователя реализуется средствами модуля программируемого таймера в режиме ШИМ. На одном из выводов МК формируется высокочастотная импульсная последовательность с регулируемой длительностью импульса. Полученный сигнал сглаживается фильтром нижних частот на операционном усилителе. Разрешающая способность такого ЦАП определяется дискретностью регулирования коэффициента заполнения в режиме ШИМ.