Рис.4.2. Варианты структур микропроцессора. Глава 1. Философия микропроцессорной техники 1. Философия микропроцессорной техники Глава 2. Организация обмена информацией 2. Шины микропроцессорной системы и циклы обмена 3.Функции устройств магистрали Глава 3. Функционирование процессора 4. Адресация операндов 5. Система команд процессора Глава 4. Организация микроконтроллеров 6.Процессорное ядро и память микроконтроллеров 7. Организация связи микроконтроллера с внешней средой и временем 8. Вспомогательные аппаратные средства микроконтроллера Глава 5. Однокристальные микроконтроллеры серии PIC 9. Аппаратные средства микроконтроллеров серии PIC 10. Специальные функции и система команд микроконтроллеров серии PIC Глава 6. Проектирование устройств на микроконтроллерах 11. Особенности разработки цифровых устройств на основе микроконтроллеров 12. Разработка программного обеспечения для PIC-микроконтроллеров Глава 7. Организация персонального компьютера 13. Архитектура и процессоры персональных компьютеров 14. Устройства, входящие в состав персонального компьютера Глава 8. Интерфейсы персонального компьютера 15. Системная магистраль ISA 16. Дополнительные интерфейсы персонального компьютера Словарь терминов и сокращений Глава 3. Функционирование процессора 4. Лекция: Адресация операндов Основная функция любого процессора, ради которой он и создается, — это выполнение команд. Система команд, выполняемых процессором, представляет собой нечто подобное таблице истинности логических элементов или таблице режимов работы более сложных логических микросхем. То есть она определяет логику работы процессора и его реакцию на те или иные комбинации внешних событий. Написание программ для микропроцессорной системы — важнейший и часто наиболее трудоемкий этап разработки такой системы. А для создания эффективных программ необходимо иметь хотя бы самое общее представление о системе команд используемого процессора. Самые компактные и быстрые программы и подпрограммы создаются на языке Ассемблер, использование которого без знания системы команд абсолютно невозможно, ведь язык Ассемблер представляет собой символьную запись цифровых кодов машинного языка, кодов команд процессора. Конечно, для разработки программного обеспечения существуют всевозможные программные средства. Пользоваться ими обычно можно и без знания системы команд процессора. Чаще всего применяются языки программирования высокого уровня, такие как Паскаль и Си. Однако знание системы команд и языка Ассемблер позволяет в несколько раз повысить эффективность некоторых наиболее важных частей программного обеспечения любой микропроцессорной системы — от микроконтроллера до персонального компьютера. Именно поэтому в данной главе мы рассмотрим основные типы команд, имеющиеся у большинства процессоров, и особенности их применения. Каждая команда, выбираемая (читаемая) из памяти процессором, определяет алгоритм поведения процессора на ближайшие несколько тактов. Код команды говорит о том, какую операцию предстоит выполнить процессору и с какими операндами (то есть кодами данных), где взять исходную информацию для выполнения команды и куда поместить результат (если необходимо). Код команды может занимать от одного до нескольких байт, причем процессор узнает о том, сколько байт команды ему надо читать, из первого прочитанного им байта или слова. В процессоре код команды расшифровывается и преобразуется в набор микроопераций, выполняемых отдельными узлами процессора. Но разработчику микропроцессорных систем это знание не слишком важно, ему важен только результат выполнения той или иной команды. 3.1. Адресация операндов Большая часть команд процессора работает с кодами данных (операндами). Одни команды требуют входных операндов (одного или двух), другие выдают выходные операнды (чаще один операнд). Входные операнды называются еще операндами-источниками, а выходные называются операндами-приемниками. Все эти коды операндов (входные и выходные) должны где-то располагаться. Они могут находиться во внутренних регистрах процессора (наиболее удобный и быстрый вариант). Они могут располагаться в системной памяти (самый распространенный вариант). Наконец, они могут находиться в устройствах ввода/вывода (наиболее редкий случай). Определение места положения операндов производится кодом команды. Причем существуют разные методы, с помощью которых код команды может определить, откуда брать входной операнд и куда помещать выходной операнд. Эти методы называются методами адресации. Эффективность выбранных методов адресации во многом определяет эффективность работы всего процессора в целом. 3.1.1. Методы адресации Количество методов адресации в различных процессорах может быть от 4 до 16. Рассмотрим несколько типичных методов адресации операндов, используемых сейчас в большинстве микропроцессоров. Непосредственная адресация (рис. 3.1) предполагает, что операнд (входной) находится в памяти непосредственно за кодом команды. Операнд обычно представляет собой константу, которую надо куда-то переслать, к чему-то прибавить и т.д. Например, команда может состоять в том, чтобы прибавить число 6 к содержимому какого-то внутреннего регистра процессора. Это число 6 будет располагаться в памяти, внутри программы в адресе, следующем за кодом данной команды сложения.
Рис. 3.1. Непосредственная адресация. Прямая (она же абсолютная) адресация (рис. 3.2) предполагает, что операнд (входной или выходной) находится в памяти по адресу, код которого находится внутри программы сразу же за кодом команды. Например, команда может состоять в том, чтобы очистить (сделать нулевым) содержимое ячейки памяти с адресом 1000000. Код этого адреса 1000000 будет располагаться в памяти, внутри программы в следующем адресе за кодом данной команды очистки.
Рис. 3.2. Прямая адресация. Регистровая адресация (рис. 3.3) предполагает, что операнд (входной или выходной) находится во внутреннем регистре процессора. Например, команда может состоять в том, чтобы переслать число из нулевого регистра в первый. Номера обоих регистров (0 и 1) будут определяться кодом команды пересылки. Косвенно-регистровая (она же косвенная) адресация предполагает, что во внутреннем регистре процессора находится не сам операнд, а его адрес в памяти (рис. 3.4). Например, команда может состоять в том, чтобы очистить ячейку памяти с адресом, находящимся в нулевом регистре. Номер этого регистра (0) будет определяться кодом команды очистки.
Рис. 3.3. Регистровая адресация.
с. 3.4. Косвенная адресация. Реже встречаются еще два метода адресации. Автоинкрементная адресация очень близка к косвенной адресации, но отличается от нее тем, что после выполнения команды содержимое используемого регистра увеличивается на единицу или на два. Этот метод адресации очень удобен, например, при последовательной обработке кодов из массива данных, находящегося в памяти. После обработки какого-то кода адрес в регистре будет указывать уже на следующий код из массива. При использовании косвенной адресации в данном случае пришлось бы увеличивать содержимое этого регистра отдельной командой. Автодекрементная адресация работает похоже на автоинкрементную, но только содержимое выбранного регистра уменьшается на единицу или на два перед выполнением команды. Эта адресация также удобна при обработке массивов данных. Совместное использование автоинкрементной и автодекрементной адресаций позволяет организовать память стекового типа (см. раздел 2.4.2). Из других распространенных методов адресации можно упомянуть об индексных методах, которые предполагают для вычисления адреса операнда прибавление к содержимому регистра заданной константы (индекса). Код этой константы располагается в памяти непосредственно за кодом команды. Отметим, что выбор того или иного метода адресации в значительной степени определяет время выполнения команды. Самая быстрая адресация — это регистровая, так как она не требует дополнительных циклов обмена по магистрали. Если же адресация требует обращения к памяти, то время выполнения команды будет увеличиваться за счет длительности необходимых циклов обращения к памяти. Понятно, что чем больше внутренних регистров у процессора, тем чаще и свободнее можно применять регистровую адресацию, и тем быстрее будет работать система в целом. 3.1.2. Сегментирование памяти Говоря об адресации, нельзя обойти вопрос о сегментировании памяти, применяемой в некоторых процессорах, например в процессорах IBM PC-совместимых персональных компьютеров. В процессоре Intel 8086 сегментирование памяти организовано следующим образом. Вся память системы представляется не в виде непрерывного пространства, а в виде нескольких кусков — сегментов заданного размера (по 64 Кбайта), положение которых в пространстве памяти можно изменять программным путем. Для хранения кодов адресов памяти используются не отдельные регистры, а пары регистров: сегментный регистр определяет адрес начала сегмента (то есть положение сегмента в памяти); регистр указателя (регистр смещения) определяет положение рабочего адреса внутри сегмента. При этом физический 20-разрядный адрес памяти, выставляемый на внешнюю шину адреса, образуется так, как показано на рис. 3.5, то есть путем сложения смещения и адреса сегмента со сдвигом на 4 бита. Положение этого адреса в памяти показано на рис. 3.6. Сегмент может начинаться только на 16-байтной границе памяти (так как адрес начала сегмента, по сути, имеет четыре младших нулевых разряда, как видно из рис. 3.5), то есть с адреса, кратного 16. Эти допустимые границы сегментов называются границами параграфов. Отметим, что введение сегментирования, прежде всего, связано с тем, что внутренние регистры процессора 16-разрядные, а физический адрес памяти 20-разрядный (16-разрядный адрес позволяет использовать память только в 64 Кбайт, что явно недостаточно). В появившемся в то же время процессоре MC68000 фирмы Motorola внутренние регистры 32-разрядные, поэтому там проблемы сегментирования памяти не возникает.
Рис. 3.5. Формирование физического адреса памяти из адреса сегмента и смещения.
Рис. 3.6. Физический адрес в сегменте (все коды — шестнадцатеричные). Применяются и более сложные методы сегментирования памяти. Например, в процессоре Intel 80286 в так называемом защищенном режиме адрес памяти вычисляется в соответствии с рис. 3.7. В сегментном регистре в данном случае хранится не базовый (начальный) адрес сегментов, а коды селекторов, определяющие адреса в памяти, по которым хранятся дескрипторы (то есть описатели) сегментов. Область памяти с дескрипторами называется таблицей дескрипторов. Каждый дескриптор сегмента содержит базовый адрес сегмента, размер сегмента (от 1 до 64 Кбайт) и его атрибуты. Базовый адрес сегмента имеет разрядность 24 бит, что обеспечивает адресацию 16 Мбайт физической памяти.
Рис. 3.7. Адресация памяти в защищенном режиме процессора Intel 80286. Таким образом, на сумматор, вычисляющий физический адрес памяти, подается не содержимое сегментного регистра, как в предыдущем случае, а базовый адрес сегмента из таблицы дескрипторов. Еще более сложный метод адресации памяти с сегментированием использован в процессоре Intel 80386 и в более поздних моделях процессоров фирмы Intel. Этот метод иллюстрируется рис. 3.8. Адрес памяти (физический адрес) вычисляется в три этапа. Сначала вычисляется так называемый эффективный адрес (32-разрядный) путем суммирования трех компонентов: базы, индекса и смещения (Base, Index, Displacement), причем возможно умножение индекса на масштаб (Scale). Эти компоненты имеют следующий смысл:
Рис. 3.8. Формирование физического адреса памяти процессора 80386 в защищенном режиме. смещение — это 8-, 16- или 32-разрядное число, включенное в команду. база — это содержимое базового регистра процессора. Обычно оно используется для указания на начало некоторого массива. индекс — это содержимое индексного регистра процессора. Обычно оно используется для выбора одного из элементов массива. масштаб — это множитель (он может быть равен 1, 2, 4 или 8), указанный в коде команды, на который перед суммированием с другими компонентами умножается индекс. Он используется для указания размера элемента массива. Затем специальный блок сегментации вычисляет 32-разрядный линейный адрес, который представляет собой сумму базового адреса сегмента из сегментного регистра с эффективным адресом. Наконец, физический 32-битный адрес памяти образуется путем преобразования линейного адреса блоком страничной переадресации, который осуществляет перевод линейного адреса в физический страницами по 4 Кбайта. В любом случае сегментирование позволяет выделить в памяти один или несколько сегментов для данных и один или несколько сегментов для программ. Переход от одного сегмента к другому сводится всего лишь к изменению содержимого сегментного регистра. Иногда это бывает очень удобно. Но для программиста работать с сегментированной памятью обычно сложнее, чем с непрерывной, несегментированной памятью, так как приходится следить за границами сегментов, за их описанием, переключением и т.д. 3.1.3. Адресация байтов и слов Многие процессоры, имеющие разрядность 16 или 32, способны адресовать не только целое слово в памяти (16-разрядное или 32-разрядное), но и отдельные байты. Каждому байту в каждом слове при этом отводится свой адрес. Так, в случае 16-разрядных процессоров все слова в памяти (16-разрядные) имеют четные адреса. А байты, входящие в эти слова, могут иметь как четные адреса, так и нечетные. Например, пусть 16-разрядная ячейка памяти имеет адрес 23420, и в ней хранится код 2А5Е (рис. 3.9).
Рис. 3.9. Адресация слов и байтов. При обращении к целому слову (с содержимым 2А5Е) процессор выставляет адрес 23420. При обращении к младшему байту этой ячейки (с содержимым 5Е) процессор выставляет тот же самый адрес 23420, но использует команду, адресующую байт, а не слово. При обращении к старшему байту этой же ячейки (с содержимым 2А) процессор выставляет адрес 23421 и использует команду, адресующую байт. Следующая по порядку 16-разрядная ячейка памяти с содержимым 487F будет иметь адрес 23422, то есть опять же четный. Ее байты будут иметь адреса 23422 и 23423. Для различия байтовых и словных циклов обмена на магистрали в шине управления предусматривается специальный сигнал байтового обмена. Для работы с байтами в систему команд процессора вводятся специальные команды или предусматриваются методы байтовой адресации. 3.2. Регистры процессора Как уже упоминалось, внутренние регистры процессора представляют собой сверхоперативную память небольшого размера, которая предназначена для временного хранения служебной информации или данных. Количество регистров в разных процессорах может быть от 6—8 до нескольких десятков. Регистры могут быть универсальными и специализированными. Специализированные регистры, которые присутствуют в большинстве процессоров, — это регистр-счетчик команд, регистр состояния (PSW), регистр указателя стека. Остальные регистры процессора могут быть как универсальными, так и специализированными. Например, в 16-разрядном процессоре Т-11 фирмы DEC было 8 регистров общего назначения (РОН) и один регистр состояния. Все регистры имели по 16 разрядов. Из регистров общего назначения один отводился под счетчик команд, другой — под указатель стека. Все остальные регистры общего назначения полностью взаимозаменяемы, то есть имеют универсальное назначение, могут хранить как данные, так и адреса (указатели), индексы и т.д. Максимально допустимый объем памяти для данного процессора составлял 64 Кбайт (адрес памяти 16-разрядный). В 16-разрядном процессоре MC68000 фирмы Motorola было 19 регистров: 16-разрядный регистр состояния, 32-разрядный регистр счетчика команд, 9 регистров адреса (32-разрядных) и 8 регистров данных (32-разрядных). Два регистра адреса отведены под указатели стека. Максимально допустимый объем адресуемой памяти — 16 Мбайт (внешняя шина адреса 24-разрядная). Все 8 регистров данных взаимозаменяемы. 7 регистров адреса – тоже взаимозаменяемы. В 16-разрядном процессоре Intel 8086, который стал базовым в линии процессоров, используемых в персональных компьютерах, реализован принципиально другой подход. Каждый регистр этого процессора имеет свое особое назначение, и заменять друг друга регистры могут только частично или же не могут вообще. Остановимся на особенностях этого процессора подробнее. Процессор 8086 имеет 14 регистров разрядностью по 16 бит. Из них четыре регистра (AX, BX, CX, DX) — это регистры данных, каждый из которых помимо хранения операндов и результатов операций имеет еще и свое специфическое назначение: регистр AX — умножение, деление, обмен с устройствами ввода/вывода (команды ввода и вывода); регистр BX — базовый регистр в вычислениях адреса; регистр CX — счетчик циклов; регистр DX — определение адреса ввода/вывода. Для регистров данных существует возможность раздельного использования обоих байтов (например, для регистра AX они имеют обозначения AL – младший байт и AH — старший байт). Следующие четыре внутренних регистра процессора — это сегментные регистры, каждый из которых определяет положение одного из рабочих сегментов (рис. 3.10): регистр CS (Code Segment) соответствует сегменту команд, исполняемых в данный момент; регистр DS (Data Segment) соответствует сегменту данных, с которыми работает процессор; регистр ES (Extra Segment) соответствует дополнительному сегменту данных; регистр SS (Stack Segment) соответствует сегменту стека.
Рис. 3.10. Сегменты команд, данных и стека в памяти. В принципе, все эти сегменты могут и перекрываться для оптимального использования пространства памяти. Например, если программа занимает только часть сегмента, то сегмент данных может начинаться сразу после завершения работы программы (с точностью 16 байт), а не после окончания всего сегмента программы. Следующие пять регистров процессора (SP — Stack Pointer, BP — Base Pointer, SI — Source Index, DI — Destination Index, IP —Instruction Pointer) служат указателями (то есть определяют смещение в пределах сегмента). Например, счетчик команд процессора образуется парой регистров CS и IP, а указатель стека — парой регистров SP и SS. Регистры SI, DI используются в строковых операциях, то есть при последовательной обработке нескольких ячеек памяти одной командой. Последний регистр FLAGS — это регистр состояния процессора (PSW). Из его 16 разрядов используются только девять (рис. 3.11): CF (Carry Flag) — флаг переноса при арифметических операциях, PF (Parity Flag) — флаг четности результата, AF (Auxiliary Flag) — флаг дополнительного переноса, ZF (Zero Flag) — флаг нулевого результата, SF (Sign Flag) — флаг знака (совпадает со старшим битом результата), TF (Trap Flag) — флаг пошагового режима (используется при отладке), IF (Interrupt-enable Flag) — флаг разрешения аппаратных прерываний, DF (Direction Flag) — флаг направления при строковых операциях, OF (Overflow Flag) — флаг переполнения.
Рис. 3.11. Регистр состояния процессора 8086. Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора (о системе команд процессора будет рассказано в следующем разделе). Во многих процессорах выделяется специальный регистр, называемый аккумулятором (то есть накопителем). При этом, как правило, только этот регистр-аккумулятор может участвовать во всех операциях, только через него может производиться взаимодействие с устройствами ввода/вывода. Иногда в него же помещается результат любой выполненной команды (в этом случае говорят даже об "аккумуляторной" архитектуре процессора). Например, в процессоре 8086 регистр данных АХ можно считать своеобразным аккумулятором, так как именно он обязательно участвует в командах умножения и деления, а также только через него можно пересылать данные в устройство ввода/вывода и из устройства ввода/вывода. Выделение специального регистра-аккумулятора упрощает структуру процессора и ускоряет пересылки кодов внутри процессора, но в некоторых случаях замедляет работу системы в целом, так как весь поток информации должен пройти через один регистр-аккумулятор. В случае, когда несколько регистров процессора полностью взаимозаменяемы, таких проблем не возникает. 5. Лекция: Система команд процессора Страницы: 1 | 2 | 3 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассказывается об основных группах команд процессора, об особенностях выполнения различных команд, о методах организации подпрограмм.
3.3. Система команд процессора В общем случае система команд процессора включает в себя следующие четыре основные группы команд: команды пересылки данных; арифметические команды; логические команды; команды переходов. Команды пересылки данных не требуют выполнения никаких операций над операндами. Операнды просто пересылаются (точнее, копируются) из источника (Source) в приемник (Destination). Источником и приемником могут быть внутренние регистры процессора, ячейки памяти или устройства ввода/вывода. АЛП в данном случае не используется. Арифметические команды выполняют операции сложения, вычитания, умножения, деления, увеличения на единицу (инкрементирования), уменьшения на единицу (декрементирования) и т.д. Этим командам требуется один или два входных операнда. Формируют команды один выходной операнд. Логические команды производят над операндами логические операции, например, логическое И, логическое ИЛИ, исключающее ИЛИ, очистку, инверсию, разнообразные сдвиги (вправо, влево, арифметический сдвиг, циклический сдвиг). Этим командам, как и арифметическим, требуется один или два входных операнда, и формируют они один выходной операнд. Наконец, команды переходов предназначены для изменения обычного порядка последовательного выполнения команд. С их помощью организуются переходы на подпрограммы и возвраты из них, всевозможные циклы, ветвления программ, пропуски фрагментов программ и т.д. Команды переходов всегда меняют содержимое счетчика команд. Переходы могут быть условными и безусловными. Именно эти команды позволяют строить сложные алгоритмы обработки информации. В соответствии с результатом каждой выполненной команды устанавливаются или очищаются биты регистра состояния процессора (PSW). Но надо помнить, что не все команды изменяют все имеющиеся в PSW флаги. Это определяется особенностями каждого конкретного процессора. У разных процессоров системы команд существенно различаются, но в основе своей они очень похожи. Количество команд у процессоров также различно. Например, у упоминавшегося уже процессора МС68000 всего 61 команда, а у процессора 8086 — 133 команды. У современных мощных процессоров количество команд достигает нескольких сотен. В то же время существуют процессоры с сокращенным набором команд (так называемые RISC-процессоры), в которых за счет максимального сокращения количества команд достигается увеличение эффективности и скорости их выполнения. Рассмотрим теперь особенности четырех выделенных групп команд процессора более подробно. 3.3.1. Команды пересылки данных Команды пересылки данных занимают очень важное место в системе команд любого процессора. Они выполняют следующие важнейшие функции: загрузка (запись) содержимого во внутренние регистры процессора; сохранение в памяти содержимого внутренних регистров процессора; копирование содержимого из одной области памяти в другую; запись в устройства ввода/вывода и чтение из устройств ввода/вывода. В некоторых процессорах (например, Т-11) все эти функции выполняются одной единственной командой MOV (для байтовых пересылок — MOVB) но с различными методами адресации операндов. В других процессорах помимо команды MOV имеется еще несколько команд для выполнения перечисленных функций. Например, для загрузки регистров могут использоваться команды загрузки, причем для разных регистров — разные команды (их обозначения обычно строятся с использованием слова LOAD — загрузка). Часто выделяются специальные команды для сохранения в стеке и для извлечения из стека (PUSH — сохранить в стеке, POP — извлечь из стека). Эти команды выполняют пересылку с автоинкрементной и с автодекрементной адресацией (даже если эти режимы адресации не предусмотрены в процессоре в явном виде). Иногда в систему команд вводится специальная команда MOVS для строчной (или цепочечной) пересылки данных (например, в процессоре 8086). Эта команда пересылает не одно слово или байт, а заданное количество слов или байтов (MOVSB), то есть инициирует не один цикл обмена по магистрали, а несколько. При этом адрес памяти, с которым происходит взаимодействие, увеличивается на 1 или на 2 после каждого обращения или же уменьшается на 1 или на 2 после каждого обращения. То есть в неявном виде применяется автоинкрементная или автодекрементная адресация. В некоторых процессорах (например, в процессоре 8086) специально выделяются функции обмена с устройствами ввода/вывода. Команда IN используется для ввода (чтения) информации из устройства ввода/вывода, а команда OUT используется для вывода (записи) в устройство ввода/вывода. Обмен информацией в этом случае производится между регистром-аккумулятором и устройством ввода/вывода. В более продвинутых процессорах этого же семейства (начиная с процессора 80286) добавлены команды строчного (цепочечного) ввода (команда INS) и строчного вывода (команда OUTS). Эти команды позволяют пересылать целый массив (строку) данных из памяти в устройство ввода/вывода (OUTS) или из устройства ввода/вывода в память (INS). Адрес памяти после каждого обращения увеличивается или уменьшается (как и в случае с командой MOVS). Также к командам пересылки данных относятся команды обмена информацией (их обозначение строится на основе слова Exchange). Может быть предусмотрен обмен информацией между внутренними регистрами, между двумя половинами одного регистра (SWAP) или между регистром и ячейкой памяти. 3.3.2. Арифметические команды Арифметические команды рассматривают коды операндов как числовые двоичные или двоично-десятичные коды. Эти команды могут быть разделены на пять основных групп: команды операций с фиксированной запятой (сложение, вычитание, умножение, деление); команды операций с плавающей запятой (сложение, вычитание, умножение, деление); команды очистки; команды инкремента и декремента; команда сравнения. Команды операций с фиксированной запятой работают с кодами в регистрах процессора или в памяти как с обычными двоичными кодами. Команда сложения (ADD) вычисляет сумму двух кодов. Команда вычитания (SUB) вычисляет разность двух кодов. Команда умножения (MUL) вычисляет произведение двух кодов (разрядность результата вдвое больше разрядности сомножителей). Команда деления (DIV) вычисляет частное от деления одного кода на другой. Причем все эти команды могут работать как с числами со знаком, так и с числами без знака. Команды операций с плавающей запятой (точкой) используют формат представления чисел с порядком и мантиссой (обычно эти числа занимают две последовательные ячейки памяти). В современных мощных процессорах набор команд с плавающей запятой не ограничивается только четырьмя арифметическими действиями, а содержит и множество других более сложных команд, например, вычисление тригонометрических функций, логарифмических функций, а также сложных функций, необходимых при обработке звука и изображения. Команды очистки (CLR) предназначены для записи нулевого кода в регистр или ячейку памяти. Эти команды могут быть заменены командами пересылки нулевого кода, но специальные команды очистки обычно выполняются быстрее, чем команды пересылки. Команды очистки иногда относят к группе логических команд, но суть их от этого не меняется. Команды инкремента (увеличения на единицу, INC) и декремента (уменьшения на единицу, DEC) также бывают очень удобны. Их можно в принципе заменить командами суммирования с единицей или вычитания единицы, но инкремент и декремент выполняются быстрее, чем суммирование и вычитание. Эти команды требуют одного входного операнда, который одновременно является и выходным операндом. Наконец, команда сравнения (обозначается CMP) предназначена для сравнения двух входных операндов. По сути, она вычисляет разность этих двух операндов, но выходного операнда не формирует, а всего лишь изменяет биты в регистре состояния процессора (PSW) по результату этого вычитания. Следующая за командой сравнения команда (обычно это команда перехода) будет анализировать биты в регистре состояния процессора и выполнять действия в зависимости от их значений (о командах перехода речь идет в разделе 3.3.4). В некоторых процессорах предусмотрены команды цепочечного сравнения двух последовательностей операндов, находящихся в памяти (например, в процессоре 8086 и совместимых с ним). Дальше » 3.3.3. Логические команды Логические команды выполняют над операндами логические (побитовые) операции, то есть они рассматривают коды операндов не как единое число, а как набор отдельных битов. Этим они отличаются от арифметических команд. Логические команды выполняют следующие основные операции: логическое И, логическое ИЛИ, сложение по модулю 2 (Исключающее ИЛИ); логические, арифметические и циклические сдвиги; проверка битов и операндов; установка и очистка битов (флагов) регистра состояния процессора (PSW). Команды логических операций позволяют побитно вычислять основные логические функции от двух входных операндов. Кроме того, операция И (AND) используется для принудительной очистки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие очистки, установлены в нуль). Операция ИЛИ (OR) применяется для принудительной установки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие установки в единицу, равны единице). Операция "Исключающее ИЛИ" (XOR) используется для инверсии заданных битов (в качестве одного из операндов при этом применяется код маски, в котором биты, подлежащие инверсии, установлены в единицу). Команды требуют двух входных операндов и формируют один выходной операнд. Команды сдвигов позволяют побитно сдвигать код операнда вправо (в сторону младших разрядов) или влево (в сторону старших разрядов). Тип сдвига (логический, арифметический или циклический) определяет, каково будет новое значение старшего бита (при сдвиге вправо) или младшего бита (при сдвиге влево), а также определяет, будет ли где-то сохранено прежнее значение старшего бита (при сдвиге влево) или младшего бита (при сдвиге вправо). Например, при логическом сдвиге вправо в старшем разряде кода операнда устанавливается нуль, а младший разряд записывается в качестве флага переноса в регистр состояния процессора. А при арифметическом сдвиге вправо значение старшего разряда сохраняется прежним (нулем или единицей), младший разряд также записывается в качестве флага переноса. Циклические сдвиги позволяют сдвигать биты кода операнда по кругу (по часовой стрелке при сдвиге вправо или против часовой стрелки при сдвиге влево). При этом в кольцо сдвига может входить или не входить флаг переноса. В бит флага переноса (если он используется) записывается значение старшего бита при циклическом сдвиге влево и младшего бита при циклическом сдвиге вправо. Соответственно, значение бита флага переноса будет переписываться в младший разряд при циклическом сдвиге влево и в старший разряд при циклическом сдвиге вправо. Для примера на рис. 3.12 показаны действия, выполняемые командами сдвигов вправо. Команды проверки битов и операндов предназначены для установки или очистки битов регистра состояния процессора в зависимости от значения выбранных битов или всего операнда в целом. Выходного операнда команды не формируют. Команда проверки операнда (TST) проверяет весь код операнда в целом на равенство нулю и на знак (на значение старшего бита), она требует только одного входного операнда. Команда проверки бита (BIT) проверяет только отдельные биты, для выбора которых в качестве второго операнда используется код маски. В коде маски проверяемым битам основного операнда должны соответствовать единичные разряды.
Рис. 3.12. Команды сдвигов вправо. Наконец, команды установки и очистки битов регистра состояния процессора (то есть флагов) позволяют установить или очистить любой флаг, что бывает очень удобно. Каждому флагу обычно соответствуют две команды, одна из которых устанавливает его в единицу, а другая сбрасывает в нуль. Например, флагу переноса C (от Carry) будут соответствовать команды CLC (очистка) и SEC или STC (установка). 3.3.4. Команды переходов Команды переходов предназначены для организации всевозможных циклов, ветвлений, вызовов подпрограмм и т.д., то есть они нарушают последовательный ход выполнения программы. Эти команды записывают в регистр-счетчик команд новое значение и тем самым вызывают переход процессора не к следующей по порядку команде, а к любой другой команде в памяти программ. Некоторые команды переходов предусматривают в дальнейшем возврат назад, в точку, из которой был сделан переход, другие не предусматривают этого. Если возврат предусмотрен, то текущие параметры процессора сохраняются в стеке. Если возврат не предусмотрен, то текущие параметры процессора не сохраняются. Команды переходов без возврата делятся на две группы: команды безусловных переходов; команды условных переходов. В обозначениях этих команд используются слова Branch (ветвление) и Jump (прыжок). Команды безусловных переходов вызывают переход в новый адрес независимо ни от чего. Они могут вызывать переход на указанную величину смещения (вперед или назад) или же на указанный адрес памяти. Величина смещения или новое значение адреса указываются в качестве входного операнда. Команды условных переходов вызывают переход не всегда, а только при выполнении заданных условий. В качестве таких условий обычно выступают значения флагов в регистре состояния процессора (PSW). То есть условием перехода является результат предыдущей операции, меняющей значения флагов. Всего таких условий перехода может быть от 4 до 16. Несколько примеров команд условных переходов: переход, если равно нулю; переход, если не равно нулю; переход, если есть переполнение; переход, если нет переполнения; переход, если больше нуля; переход, если меньше или равно нулю. Если условие перехода выполняется, то производится загрузка в регистр-счетчик команд нового значения. Если же условие перехода не выполняется, счетчик команд просто наращивается, и процессор выбирает и выполняет следующую по порядку команду. Специально для проверки условий перехода применяется команда сравнения (CMP), предшествующая команде условного перехода (или даже нескольким командам условных переходов). Но флаги могут устанавливаться и любой другой командой, например командой пересылки данных, любой арифметической или логической командой. Отметим, что сами команды переходов флаги не меняют, что как раз и позволяет ставить несколько команд переходов одну за другой. Совместное использование нескольких команд условных и безусловных переходов позволяет процессору выполнять разветвленные алгоритмы любой сложности. Для примера на рис. 3.13 показано разветвление программы на две ветки с последующим соединением, а на рис. 3.14 — разветвление на три ветки с последующим соединением. Команды переходов с дальнейшим возвратом в точку, из которой был произведен переход, применяются для выполнения подпрограмм, то есть вспомогательных программ. Эти команды называются также командами вызова подпрограмм (распространенное название — CALL). Использование подпрограмм позволяет упростить структуру основной программы, сделать ее более логичной, гибкой, легкой для написания и отладки. В то же время надо учитывать, что широкое использование подпрограмм, как правило, увеличивает время выполнения программы.
Рис. 3.13. Реализация разветвления на две ветки.
Рис. 3.14. Реализация разветвления на три ветки. Все команды переходов с возвратом предполагают безусловный переход (они не проверяют никаких флагов). При этом они требуют одного входного операнда, который может указывать как абсолютное значение нового адреса, так и смещение, складываемое с текущим значением адреса. Текущее значение счетчика команд (текущий адрес) сохраняется перед выполнением перехода в стеке. Для обратного возврата в точку вызова подпрограммы (точку перехода) используется специальная команда возврата (RET или RTS). Эта команда извлекает из стека значение адреса команды перехода и записывает его в регистр-счетчик команд. Особое место среди команд перехода с возвратом занимают команды прерываний (распространенное название — INT). Эти команды в качестве входного операнда требуют номер прерывания (адрес вектора). Обслуживание таких переходов осуществляется точно так же, как и аппаратных прерываний. То есть для выполнения данного перехода процессор обращается к таблице векторов прерываний и получает из нее по номеру прерывания адрес памяти, в который ему необходимо перейти. Адрес вызова прерывания и содержимое регистра состояния процессора (PSW) сохраняются в стеке. Сохранение PSW — важное отличие команд прерывания от команд переходов с возвратом. Команды прерываний во многих случаях оказываются удобнее, чем обычные команды переходов с возвратом. Сформировать таблицу векторов прерываний можно один раз, а потом уже обращаться к ней по мере необходимости. Номер прерывания соответствует номеру подпрограммы, то есть номеру функции, выполняемой подпрограммой. Поэтому команды прерывания гораздо чаще включаются в системы команд процессоров, чем обычные команды переходов с возвратом. Для возврата из подпрограммы, вызванной командой прерывания, используется команда возврата из прерывания (IRET или RTI). Эта команда извлекает из стека сохраненное там значение счетчика команд и регистра состояния процессора (PSW). Отметим, что у некоторых процессоров предусмотрены также команды условных прерываний, например, команда прерывания при переполнении. Конечно, в данном разделе мы рассмотрели только основные команды, наиболее часто встречающиеся в процессорах. У конкретных процессоров могут быть и многие другие команды, не относящиеся к перечисленным группам команд. Но изучать их надо уже после того, как выбран тип процессора, подходящий для задачи, решаемой данной микропроцессорной системой. 3.4. Быстродействие процессора Быстродействие процессора — это одна из важнейших его характеристик, определяющая эффективность работы всей микропроцессорной системы в целом. Быстродействие процессора зависит от множества факторов, что затрудняет сравнение быстродействия даже разных процессоров внутри одного семейства, не говоря уже о процессорах разных фирм и разного назначения. Выделим важнейшие факторы, влияющие на быстродействие процессора. Прежде всего, быстродействие зависит от тактовой частоты процессора. Все операции внутри процессора выполняются синхронно, тактируются единым тактовым сигналом. Понятно, что чем больше тактовая частота, тем быстрее работает процессор, причем, например, двукратное увеличение тактовой частоты какого-то процессора снижает вдвое время выполнения команд этим процессором. Однако надо учитывать, что разные процессоры выполняют одинаковые команды за разное количество тактов, причем количество тактов, затрачиваемых на команду, может изменяться от одного такта до десятков или даже сотен. В некоторых процессорах за счет распараллеливания микроопераций на команду тратится даже меньше одного такта. Количество тактов, затрачиваемых на выполнение команды, зависит от сложности этой команды и от методов адресации операндов. Например, быстрее всего (за меньшее число тактов) выполняются команды пересылки данных между внутренними регистрами процессора. Медленнее всего (за большое число тактов) выполняются сложные арифметические команды с плавающей запятой, операнды которых хранятся в памяти. Первоначально для количественной оценки производительности процессоров применялась единица измерения MIPS (Mega Instruction Per Second), соответствовавшая количеству миллионов выполняемых инструкций (команд) за секунду. Естественно, изготовители микропроцессоров старались ориентироваться на самые быстрые команды. Понятно, что подобный показатель не слишком удачен. Для измерения производительности при выполнении вычислений с плавающей запятой (точкой) чуть позже была предложена единица FLOPS (Floating point Operations Per Second), но она по определению узкоспециальная, так как в некоторых системах операции с плавающей запятой просто не используются. Другой аналогичный показатель быстродействия процессора — время выполнения коротких (быстрых) операций. Для примера в таблице 3.1 представлены показатели быстродействия нескольких 8-разрядных и 16-разрядных процессоров. В настоящее время этот показатель практически не используется, как и MIPS. Время выполнения команд — важный, но далеко не единственный фактор, определяющий быстродействие. Большое значение имеет также структура системы команд процессора. Например, некоторым процессорам для выполнения какой-то операции понадобится одна команда, а другим процессорам — несколько команд. Какие-то процессоры имеют систему команд, позволяющую быстро решать задачи одного типа, а какие-то — задачи другого типа. Важны и методы адресации, разрешенные в данном процессоре, и наличие сегментирования памяти, и способы взаимодействия процессора с устройствами ввода/вывода и т.д. Существенно влияет на быстродействие системы в целом и то, как процессор "общается" с памятью команд и памятью данных, применяется ли совмещение выборки команд из памяти с выполнением ранее выбранных команд. Таблица 3.1. Параметры некоторых процессоров.Процессор 8085 6800 68000 8086 Фирма Intel Motorola Motorola Intel Разрядность 8 8 16 16 Количество команд 80 72 61 133 Тактовая частота, МГц 3 1 8 5 Время выполнения коротких операций, мкс 1,3 2 0,5 0,4 Быстродействие системы в целом определяется также и разрядностью процессора. Например, 8-разрядный процессор будет медленнее пересылать и обрабатывать большие массивы данных, чем 16-разрядный процессор. Точно так же 16-разрядный процессор будет значительно медленнее работать с большими числами (большими, чем 65536), чем 32-разрядный процессор. При высокой сложности решаемых задач быстродействие системы зависит и от общего объема системной памяти. Ведь если системной памяти мало, системе приходится сохранять данные во внешней памяти (например, на магнитном диске), а это очень сильно (на несколько порядков) замедляет работу. Так что разрядность шины адреса процессора тоже важна. Поэтому количественные показатели производительности процессоров очень условны, они лишь косвенно характеризуют быстродействие системы на базе этого процессора. Тем не менее, некоторые производители предлагают количественные показатели для своих процессоров, которые характеризуют время выполнения специально составленных тестовых программ, содержащих самые различные команды в тех или иных соотношениях. Так, для сравнения производительности 32-разрядных процессоров фирма Intel, производящая процессоры для персональных компьютеров, в 1992 году предложила свою единицу измерения iCOMP Index (Intel COmparative Microprocessor Performance). Для вычисления этого показателя используется смесь 16- и 32-битных целочисленных команд, команд с плавающей точкой, команд обработки графики и видео. В качестве базового взят процессор i486SX-25, чей индекс принят равным 100. В Таблице 3.2 приведены индексы iCOMP для некоторых процессоров фирмы Intel. Как видно из таблицы, за счет более развитой архитектуры процессоры семейства 486 всегда быстрее процессоров семейства 386, а любой Pentium быстрее любого процессора из семейства 486. Тактовая частота (указана в таблице через черточку) определяет производительность только в пределах одного семейства. В 1996 году разработчиками Intel был предложен другой показатель — iCOMP Index 2.0, для вычисления которого не используются 16-разрядные команды, зато введен мультимедийный тест, а за базу взят Pentium-120, чей индекс принят равным 100. В таблице 3.3 представлены эти показатели для некоторых типов процессоров Intel. При этом надо учитывать, что измерения проводятся в составе системы, настроенной на максимальное быстродействие именно данных процессоров, и только самой фирмой Intel. Ценность этих показателей и всех им подобных не слишком велика. Для конкретного компьютера и разных процессоров величина показателя может предоставить вполне объективные данные, позволяющие оценить, например, целесообразность замены процессора на более мощный. Но усредненность показателей iCOMP не позволяет точно сказать, как будет себя вести процессор в различных задачах, которые ориентированы на преимущественное использование разных типов команд. Таблица 3.2. Индексы производительности iCOMP.i486SX-25 100 i486DX4-100 435 i386DX-33 56 Pentium-60 510 i486SX-33 136 Pentium-100 815 i486DX2-66 297 Pentium-133 1110 Таблица 3.3. Индексы производительности iCOMP Index 2.0.Pentium-100 90 Pentium MMX-166 160 Pentium-120 100 Pentium MMX-233 203 Pentium-150 114 Pentium Pro-200 220 Pentium-200 142 Pentium II-266 303 Точная оценка быстродействия процессора возможна только в составе конкретной системы при решении определенной задачи. Но все перечисленные здесь факторы можно и нужно учитывать при выборе процессора. А количественные показатели помогают сделать выбор. Глава 4. Организация микроконтроллеров 6. Лекция: Процессорное ядро и память микроконтроллеров Страницы: 1 | 2 | 3 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассказывается о структуре процессорного ядра и особенностях системы команд микроконтроллеров, функциях и организации памяти программ и данных, об использовании стека и внешней памяти микроконтроллеров.
Основной особенностью современного этапа развития МПС является завершение перехода от систем, выполненных на основе нескольких больших ИС, к однокристальным МК, которые объединяют в одном кристалле все основные элементы МПС: центральный процессор (ЦП), постоянное запоминающее устройство (ПЗП), оперативное запоминающее устройство (ОЗУ), порты ввода/вывода, таймеры. 4.1. Классификация и структура микроконтроллеров В настоящее время выпускается целый ряд типов МК. Все эти приборы можно условно разделить на три основных класса: 8-разрядные МК для встраиваемых приложений; 16- и 32-разрядные МК; цифровые сигнальные процессоры (DSP). Наиболее распространенным представителем семейства МК являются 8-разрядные приборы, широко используемые в промышленности, бытовой и компьютерной технике. Они прошли в своем развитии путь от простейших приборов с относительно слаборазвитой периферией до современных многофункциональных контроллеров, обеспечивающих реализацию сложных алгоритмов управления в реальном масштабе времени. Причиной жизнеспособности 8-разрядных МК является использование их для управления реальными объектами, где применяются, в основном, алгоритмы с преобладанием логических операций, скорость обработки которых практически не зависит от разрядности процессора. Росту популярности 8-разрядных МК способствует постоянное расширение номенклатуры изделий, выпускаемых такими известными фирмами, как Motorola, Microchip, Intel, Zilog, Atmel и многими другими. Современные 8-разрядные МК обладают, как правило, рядом отличительных признаков. Перечислим основные из них: модульная организация, при которой на базе одного процессорного ядра (центрального процессора) проектируется ряд (линейка) МК, различающихся объемом и типом памяти программ, объемом памяти данных, набором периферийных модулей, частотой синхронизации; использование закрытой архитектуры МК, которая характеризуется отсутствием линий магистралей адреса и данных на выводах корпуса МК. Таким образом, МК представляет собой законченную систему обработки данных, наращивание возможностей которой с использованием параллельных магистралей адреса и данных не предполагается; использование типовых функциональных периферийных модулей (таймеры, процессоры событий, контроллеры последовательных интерфейсов, аналого-цифровые преобразователи и др.), имеющих незначительные отличия в алгоритмах работы в МК различных производителей; расширение числа режимов работы периферийных модулей, которые задаются в процессе инициализации регистров специальных функций МК. При модульном принципе построения все МК одного семейства содержат процессорное ядро, одинаковое для всех МК данного семейства, и изменяемый функциональный блок, который отличает МК разных моделей. Структура модульного МК приведена на рис. 4.1. Процессорное ядро включает в себя: центральный процессор; внутреннюю контроллерную магистраль (ВКМ) в составе шин адреса, данных и управления; схему синхронизации МК; схему управления режимами работы МК, включая поддержку режимов пониженного энергопотребления, начального запуска (сброса) и т.д. Изменяемый функциональный блок включает в себя модули памяти различного типа и объема, порты ввода/вывода, модули тактовых генераторов (Г), таймеры. В относительно простых МК модуль обработки прерываний входит в состав процессорного ядра. В более сложных МК он представляет собой отдельный модуль с развитыми возможностями. В состав изменяемого функционального блока могут входить и такие дополнительные модули как компараторы напряжения, аналого-цифровые преобразователи (АЦП) и другие. Каждый модуль проектируется для работы в составе МК с учетом протокола ВКМ. Данный подход позволяет создавать разнообразные по структуре МК в пределах одного семейства.
Рис. 4.1. Модульная организация МК. 4.2. Процессорное ядро микроконтроллера 4.2.1. Структура процессорного ядра МК Основными характеристиками, определяющими производительность процессорного ядра МК, являются: набор регистров для хранения промежуточных данных; система команд процессора; способы адресации операндов в пространстве памяти; организация процессов выборки и исполнения команды. С точки зрения системы команд и способов адресации операндов процессорное ядро современных 8-разрядных МК реализует один из двух принципов построения процессоров: процессоры с CISC-архитектурой, реализующие так называемую полную систему команд (Complicated Instruction Set Computer); процессоры с RISC-архитектурой, реализующие сокращенную систему команд (Reduced Instruction Set Computer). CISC-процессоры выполняют большой набор команд с развитыми возможностями адресации, давая разработчику возможность выбрать наиболее подходящую команду для выполнения необходимой операции. В применении к 8-разрядным МК процессор с CISC-архитектурой может иметь однобайтовый, двухбайтовый и трехбайтовый (редко четырехбайтовый) формат команд. При этом система команд, как правило, неортогональна, то есть не все команды могут использовать любой из способов адресации применительно к любому из регистров процессора. Выборка команды на исполнение осуществляется побайтно в течение нескольких циклов работы МК. Время выполнения команды может составлять от 1 до 12 циклов. К МК с CISC-архитектурой относятся МК фирмы Intel с ядром MCS-51, которые поддерживаются в настоящее время целым рядом производителей, МК семейств НС05, НС08 и НС11 фирмы Motorola и ряд других. В процессорах с RISC-архитектурой набор исполняемых команд сокращен до минимума. Для реализации более сложных операций приходится комбинировать команды. При этом все команды имеют формат фиксированной длины (например, 12, 14 или 16 бит), выборка команды из памяти и ее исполнение осуществляется за один цикл (такт) синхронизации. Система команд RISC-процессора предполагает возможность равноправного использования всех регистров процессора. Это обеспечивает дополнительную гибкость при выполнении ряда операций. К МК с RISC-процессором относятся МК AVR фирмы Atmel, МК PIC16 и PIC17 фирмы Microchip и другие. На первый взгляд, МК с RISC-процессором должны иметь более высокую производительность по сравнению с CISC МК при одной и той же тактовой частоте внутренней магистрали. Однако на практике вопрос о производительности более сложен и неоднозначен. Во-первых, оценка производительности МК по времени выполнения команд различных систем (RISC и CISC) не совсем корректна. Обычно производительность МП и МК принято оценивать числом операций пересылки "регистр-регистр", которые могут быть выполнены в течение одной секунды. В МК с CISC-процессором время выполнения операции "регистр-регистр" составляет от 1 до 3 циклов, что, казалось бы, уступает производительности МК с RISC-процессором. Однако стремление к сокращению формата команд при сохранении ортогональности системы команд RISC-процессора приводит к вынужденному ограничению числа доступных в одной команде регистров. Так, например, системой команд МК PIC16 предусмотрена возможность пересылки результата операции только в один из двух регистров — регистр-источник операнда f или рабочий регистр W. Таким образом, операция пересылки содержимого одного из доступных регистров в другой (не источник операнда и не рабочий) потребует использования двух команд. Такая необходимость часто возникает при пересылке содержимого одного из регистров общего назначения (РОН) в один из портов МК. В то же время, в системе команд большинства CISC-процессоров присутствуют команды пересылки содержимого РОН в один из портов ввода/вывода. То есть более сложная система команд иногда позволяет реализовать более эффективный способ выполнения операции. Во-вторых, оценка производительности МК по скорости пересылки "регистр-регистр" не учитывает особенностей конкретного реализуемого алгоритма управления. Так, при разработке быстродействующих устройств автоматизированного управления основное внимание следует уделять времени выполнения операций умножения и деления при реализации уравнений различных передаточных функций. А при реализации пульта дистанционного управления бытовой техникой следует оценивать время выполнения логических функций, которые используются при опросе клавиатуры и генерации последовательной кодовой посылки управления. Поэтому в критических ситуациях, требующих высокого быстродействия, следует оценивать производительность на множестве тех операций, которые преимущественно используются в алгоритме управления и имеют ограничения по времени выполнения. В-третьих, необходимо еще учитывать, что указанные в справочных данных на МК частоты синхронизации обычно соответствуют частоте подключаемого кварцевого резонатора, в то время как длительность цикла центрального процессора определяется частотой обмена по ВКМ. Соотношение этих частот индивидуально для каждого МК и должно быть принято в расчет при сравнении производительности различных моделей контроллеров. С точки зрения организации процессов выборки и исполнения команды в современных 8-разрядных МК применяется одна из двух уже упоминавшихся архитектур МПС: фон-неймановская (принстонская) или гарвардская. Основной особенностью фон-неймановской архитектуры является использование общей памяти для хранения программ и данных, как показано на рис. 4.2.
Рис. 4.2. Структура МПС с фон-неймановской архитектурой. Основное преимущество архитектуры Фон-Неймана – упрощение устройства МПС, так как реализуется обращение только к одной общей памяти. Кроме того, использование единой области памяти позволяло оперативно перераспределять ресурсы между областями программ и данных, что существенно повышало гибкость МПС с точки зрения разработчика программного обеспечения. Размещение стека в общей памяти облегчало доступ к его содержимому. Неслучайно поэтому фон-неймановская архитектура стала основной архитектурой универсальных компьютеров, включая персональные компьютеры. Основной особенностью гарвардской архитектуры является использование раздельных адресных пространств для хранения команд и данных, как показано на рис. 4.3.
Рис. 4.3. Структура МПС с гарвардской архитектурой. Гарвардская архитектура почти не использовалась до конца 70-х годов, пока производители МК не поняли, что она дает определенные преимущества разработчикам автономных систем управления. Дело в том, что, судя по опыту использования МПС для управления различными объектами, для реализации большинства алгоритмов управления такие преимущества фон-неймановской архитектуры как гибкость и универсальность не имеют большого значения. Анализ реальных программ управления показал, что необходимый объем памяти данных МК, используемый для хранения промежуточных результатов, как правило, на порядок меньше требуемого объема памяти программ. В этих условиях использование единого адресного пространства приводило к увеличению формата команд за счет увеличения числа разрядов для адресации операндов. Применение отдельной небольшой по объему памяти данных способствовало сокращению длины команд и ускорению поиска информации в памяти данных. Кроме того, гарвардская архитектура обеспечивает потенциально более высокую скорость выполнения программы по сравнению с фон-неймановской за счет возможности реализации параллельных операций. Выборка следующей команды может происходить одновременно с выполнением предыдущей, и нет необходимости останавливать процессор на время выборки команды. Этот метод реализации операций позволяет обеспечивать выполнение различных команд за одинаковое число тактов, что дает возможность более просто определить время выполнения циклов и критичных участков программы. Большинство производителей современных 8-разрядных МК используют гарвардскую архитектуру. Однако гарвардская архитектура является недостаточно гибкой для реализации некоторых программных процедур. Поэтому сравнение МК, выполненных по разным архитектурам, следует проводить применительно к конкретному приложению. 4.2.2. Система команд процессора МК Так же, как и в любой микропроцессорной системе, набор команд процессора МК включает в себя четыре основные группы команд: команды пересылки данных; арифметические команды; логические команды; команды переходов. Для реализации возможности независимого управления разрядами портов (регистров) в большинстве современных МК предусмотрена также группа команд битового управления (булевый или битовый процессор). Наличие команд битового процессора позволяет существенно сократить объем кода управляющих программ и время их выполнения. В ряде МК выделяют также группу команд управления ресурсами контроллера, используемую для настройки режимов работы портов ввода/вывода, управления таймером и т.п. В большинстве современных МК внутренние ресурсы контроллера отображаются на память данных, поэтому для целей управления ресурсами используются команды пересылки данных. Система команд МК по сравнению с системой команд универсального МП имеет, как правило, менее развитые группы арифметических и логических команд, зато более мощные группы команд пересылки данных и управления. Эта особенность связана со сферой применения МК, требующей, прежде всего, контроля окружающей обстановки и формирования управляющих воздействий. 4.2.3. Схема синхронизации МК Схема синхронизации МК обеспечивает формирование сигналов синхронизации, необходимых для выполнения командных циклов центрального процессора, а также обмена информацией по внутренней магистрали. В зависимости от исполнения центрального процессора командный цикл может включать в себя от одного до нескольких (4 — 6) тактов синхронизации. Схема синхронизации формирует также метки времени, необходимые для работы таймеров МК. В состав схемы синхронизации входят делители частоты, которые формируют необходимые последовательности синхросигналов. 4.3. Память программ и данных МК В МК используется три основных вида памяти. Память программ представляет собой постоянную память (ПЗП), предназначенную для хранения программного кода (команд) и констант. Ее содержимое в ходе выполнения программы не изменяется. Память данных предназначена для хранения переменных в процессе выполнения программы и представляет собой ОЗУ. Регистры МК — этот вид памяти включает в себя внутренние регистры процессора и регистры, которые служат для управления периферийными устройствами (регистры специальных функций). 4.3.1. Память программ Основным свойством памяти программ является ее энергонезависимость, то есть возможность хранения программы при отсутствии питания. С точки зрения пользователей МК следует различать следующие типы энергонезависимой памяти программ: ПЗП масочного типа — 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-памятью становятся конкурентоспособными по отношению не только к МК с однократно программируемыми ПЗП, но и с масочными ПЗП также. 4.3.2. Память данных Память данных МК выполняется, как правило, на основе статического ОЗУ. Термин "статическое" означает, что содержимое ячеек ОЗУ сохраняется при снижении тактовой частоты МК до сколь угодно малых значений (с целью снижения энергопотребления). Большинство МК имеют такой параметр, как "напряжение хранения информации" — USTANDBY. При снижении напряжения питания ниже минимально допустимого уровня UDDMIN, но выше уровня USTANDBY работа программы МК выполняться не будет, но информация в ОЗУ сохраняется. При восстановлении напряжения питания можно будет сбросить МК и продолжить выполнение программы без потери данных. Уровень напряжения хранения составляет обычно около 1 В, что позволяет в случае необходимости перевести МК на питание от автономного источника (батареи) и сохранить в этом режиме данные ОЗУ. Объем памяти данных МК, как правило, невелик и составляет обычно десятки и сотни байт. Это обстоятельство необходимо учитывать при разработке программ для МК. Так, при программировании МК константы, если возможно, не хранятся как переменные, а заносятся в ПЗП программ. Максимально используются аппаратные возможности МК, в частности, таймеры. Прикладные программы должны ориентироваться на работу без использования больших массивов данных. 4.3.3. Регистры МК Как и все МПС, МК имеют набор регистров, которые используются для управления его ресурсами. В число этих регистров входят обычно регистры процессора (аккумулятор, регистры состояния, индексные регистры), регистры управления (регистры управления прерываниями, таймером), регистры, обеспечивающие ввод/вывод данных (регистры данных портов, регистры управления параллельным, последовательным или аналоговым вводом/выводом). Обращение к этим регистрам может производиться по-разному. В МК с RISC-процессором все регистры (часто и аккумулятор) располагаются по явно задаваемым адресам. Это обеспечивает более высокую гибкость при работе процессора. Одним из важных вопросов является размещение регистров в адресном пространстве МК. В некоторых МК все регистры и память данных располагаются в одном адресном пространстве. Это означает, что память данных совмещена с регистрами. Такой подход называется "отображением ресурсов МК на память". В других МК адресное пространство устройств ввода/вывода отделено от общего пространства памяти. Отдельное пространство ввода/вывода дает некоторое преимущество процессорам с гарвардской архитектурой, обеспечивая возможность считывать команду во время обращения к регистру ввода/вывода. 4.3.4. Стек МК В микроконтроллерах ОЗУ данных используется также для организации вызова подпрограмм и обработки прерываний. При этих операциях содержимое программного счетчика и основных регистров (аккумулятор, регистр состояния и другие) сохраняется и затем восстанавливается при возврате к основной программе. В фон-неймановской архитектуре единая область памяти используется, в том числе, и для реализации стека. При этом снижается производительность устройства, так как одновременный доступ к различным видам памяти невозможен. В частности, при выполнении команды вызова подпрограммы следующая команда выбирается после того, как в стек будет помещено содержимое программного счетчика. В гарвардской архитектуре стековые операции производятся в специально выделенной для этой цели памяти. Это означает, что при выполнении программы вызова подпрограмм процессор с гарвардской архитектурой производит несколько действий одновременно. Необходимо помнить, что МК обеих архитектур имеют ограниченную емкость памяти для хранения данных. Если в процессоре имеется отдельный стек и объем записанных в него данных превышает его емкость, то происходит циклическое изменение содержимого указателя стека, и он начинает ссылаться на ранее заполненную ячейку стека. Это означает, что после слишком большого количества вызовов подпрограмм в стеке окажется неправильный адрес возврата. Если МК использует общую область памяти для размещения данных и стека, то существует опасность, что при переполнении стека произойдет запись в область данных либо будет сделана попытка записи загружаемых в стек данных в область ПЗП. 4.3.5. Внешняя память Несмотря на существующую тенденцию по переходу к закрытой архитектуре МК, в некоторых случаях возникает необходимость подключения дополнительной внешней памяти (как памяти программ, так и данных). Если МК содержит специальные аппаратные средства для подключения внешней памяти, то эта операция производится штатным способом (как для МП). Второй, более универсальный, способ заключается в том, чтобы использовать порты ввода/вывода для подключения внешней памяти и реализовать обращение к памяти программными средствами. Такой способ позволяет задействовать простые устройства ввода/вывода без реализации сложных шинных интерфейсов, однако приводит к снижению быстродействия системы при обращении к внешней памяти. Глава 4. Организация микроконтроллеров 7. Лекция: Организация связи микроконтроллера с внешней средой и временем Страницы: 1 | 2 | 3 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассказывается о структуре и организации портов ввода/вывода информации микроконтроллеров, режимах работы таймеров и процессоров событий, а также об организации обработки прерываний.
4.4. Порты ввода/вывода Каждый МК имеет некоторое количество линий ввода/вывода, которые объединены в многоразрядные (чаще 8-разрядные) параллельные порты ввода/вывода. В памяти МК каждому порту ввода/вывода соответствует свой адрес регистра данных. Обращение к регистру данных порта ввода/вывода производится теми же командами, что и обращение к памяти данных. Кроме того, во многих МК отдельные разряды портов могут быть опрошены или установлены командами битового процессора. В зависимости от реализуемых функций различают следующие типы параллельных портов: однонаправленные порты, предназначенные только для ввода или только для вывода информации; двунаправленные порты, направление передачи которых (ввод или вывод) определяется в процессе инициализации МК; порты с альтернативной функцией (мультиплексированные порты). Отдельные линии этих портов используются совместно со встроенными периферийными устройствами МК, такими как таймеры, АЦП, контроллеры последовательных интерфейсов; порты с программно управляемой схемотехникой входного/выходного буфера. Порты выполняют роль устройств временного согласования функционирования МК и объекта управления, которые в общем случае работают асинхронно. Различают три типа алгоритмов обмена информацией между МК и внешним устройством через параллельные порты ввода/вывода: режим простого программного ввода/вывода; режим ввода/вывода со стробированием; режим ввода/вывода с полным набором сигналов подтверждения обмена. Типичная схема двунаправленного порта ввода/вывода МК приведена на рис. 4.4.
Рис. 4.4. Типовая схема двунаправленного порта ввода/вывода МК. Триггер управления разрешает вывод данных на внешний вывод. В современных МК, как правило, обеспечивается индивидуальный доступ к триггерам данных и управления, что позволяет использовать каждую линию независимо в режиме ввода или вывода. Необходимо обратить особое внимание на то, что при вводе данных считывается значение сигнала, поступающее на внешний вывод, а не содержимое триггера данных. Если к внешнему выводу МК подключены выходы других устройств, то они могут установить свой уровень выходного сигнала, который и будет считан вместо ожидаемого значения триггера данных. Другим распространенным вариантом схемотехнической организации порта ввода/вывода является вывод с "открытым истоком", называемый еще "квазидвунаправленным". Такая организация вывода позволяет создавать шины с объединением устройств по схеме "монтажное И". Дальше » 4.5. Таймеры и процессоры событий Большинство задач управления, которые реализуются с помощью МК, требуют исполнения их в реальном времени. Под этим понимается способность системы получить информацию о состоянии управляемого объекта, выполнить необходимые расчетные процедуры и выдать управляющие воздействия в течение интервала времени, достаточного для желаемого изменения состояния объекта. Возлагать функции формирования управления в реальном масштабе времени только на центральный процессор неэффективно, так как это занимает ресурсы, необходимые для расчетных процедур. Поэтому в большинстве современных МК используется аппаратная поддержка работы в реальном времени с использованием таймера (таймеров). Модули таймеров служат для приема информации о времени наступления тех или иных событий от внешних датчиков событий, а также для формирования управляющих воздействий во времени. Модуль таймера 8-разрядного МК представляет собой 8-ми или 16-разрядный счетчик со схемой управления. Схемотехникой МК обычно предусматривается возможность использования таймера в режиме счетчика внешних событий, поэтому его часто называют таймером/счетчиком. Структура типичного 16-разрядного таймера/счетчика в составе МК приведена на рис. 4.5.
Рис. 4.5. Структура модуля таймера/счетчика. В памяти МК 16-разрядный счетчик отображается двумя регистрами: TH — старший байт счетчика, TL — младший байт. Регистры доступны для чтения и для записи. Направление счета — только прямое, то есть при поступлении входных импульсов содержимое счетчика инкрементируется. В зависимости от настройки счетчик может использовать один из источников входных сигналов: импульсную последовательность с выхода управляемого делителя частоты fBUS; сигналы внешних событий, поступающие на вход TOCKI контроллера. В первом случае говорят, что счетчик работает в режиме таймера, во втором — в режиме счетчика событий. При переполнении счетчика устанавливается в "единицу" триггер переполнения TF, который генерирует запрос на прерывание, если прерывания от таймера разрешены. Пуск и останов таймера могут осуществляться только под управлением программы. Программным способом можно также установить старший и младший биты счетчика в произвольное состояние или прочитать текущий код счетчика. Рассмотренный "классический" модуль таймера/счетчика широко применяется в различных моделях относительно простых МК. Он может использоваться для измерения временных интервалов и формирования последовательности импульсов. Основными недостатками "классического" таймера/счетчика являются: потери времени на выполнение команд пуска и останова таймера, приводящие к появлению ошибки при измерении временных интервалов и ограничивающие минимальную длительность измеряемых интервалов времени единицами мс; сложности при формировании временных интервалов (меток времени), отличных от периода полного коэффициента счета, равного (Kдел/fBUS) · 216; невозможность одновременного обслуживания (измерения или формирования импульсного сигнала) сразу нескольких каналов. Первые из двух перечисленных недостатков были устранены в усовершенствованном модуле таймера/счетчика, используемом в МК семейства MCS-51 (Intel). Дополнительная логика счетного входа позволяет тактовым импульсам поступать на вход счетчика, если уровень сигнала на одной из линий ввода равен "1". Такое решение повышает точность измерения временных интервалов, так как пуск и останов таймера производится аппаратно. Также в усовершенствованном таймере реализован режим перезагрузки счетчика произвольным кодом в момент переполнения. Это позволяет формировать временные последовательности с периодом, отличным от периода полного коэффициента счета. Однако эти усовершенствования не устраняют главного недостатка модуля "классического" таймера — одноканального режима работы. Совершенствование подсистемы реального времени МК ведется по следующим направлениям: увеличение числа модулей таймеров/счетчиков. Этот путь характерен для фирм, выпускающих МК со структурой MCS-51, а также для МК компаний Mitsubishi и Hitachi; модификация структуры модуля таймера/счетчика, при которой увеличение числа каналов достигается не за счет увеличения числа счетчиков, а за счет введения дополнительных аппаратных средств входного захвата (input capture — IC) и выходного сравнения (output compare — OC). Такой подход используется, в частности, в МК компании Motorola. Принцип действия канала входного захвата таймера/счетчика иллюстрирует рис. 4.6.
Рис. 4.6. Структурная схема канала входного захвата таймера. Схема детектора события "наблюдает" за уровнем напряжения на одном из входов МК. Чаще всего это одна из линий порта ввода/вывода. При изменении уровня логического сигнала с "0" на "1" и наоборот вырабатывается строб записи, и текущее состояние счетчика таймера записывается в 16-разрядный регистр входного захвата. Описанное действие в микропроцессорной технике называют событием захвата. Предусмотрена возможность выбора типа сигнала на входе, и это воспринимается как событие: положительный (передний) фронт сигнала; отрицательный (задний) фронт сигнала; любое изменение логического уровня сигнала. Выбор типа события захвата устанавливается в процессе инициализации таймера и может неоднократно изменяться в ходе выполнения программы. Каждое событие захвата приводит к установке в "1" триггера входного захвата и появлению на его выходе флага (признака) входного захвата ICF. Состояние триггера входного захвата может быть считано программно, а если прерывания по событию захвата разрешены — формируется запрос на прерывание INT IC. Использование режима входного захвата позволяет исключить ошибки измерения входного интервала времени, связанные со временем перехода к подпрограмме обработки прерывания, так как копирование текущего состояния счетчика осуществляется аппаратными, а не программными средствами. Однако время перехода на подпрограмму обработки прерывания накладывает ограничение на длительность измеряемого интервала времени, так как предполагается, что второе событие захвата произойдет позже, чем код первого события будет считан МК. Структура аппаратных средств канала выходного сравнения представлена на рис. 4.7. Цифровой компаратор непрерывно сравнивает текущий код счетчика таймера с кодом, который записан в 16-разрядном регистре выходного сравнения. В момент равенства кодов на одном из выходов МК (Pxj на рис. 4.7) устанавливается заданный уровень логического сигнала. Обычно предусмотрено три типа изменения сигнала на выходе Pxj в момент события выходного сравнения: установка высокого логического уровня; установка низкого логического уровня; инвертирование сигнала на выходе. При наступлении события сравнения устанавливаются в "1" триггер выходного сравнения и соответствующий ему признак выходного сравнения OCF. Аналогично режиму входного захвата состояние триггера выходного сравнения может быть считано программно, а если прерывания по событию сравнения разрешены — формируется запрос на прерывание INT OC. Режим выходного сравнения предназначен, прежде всего, для формирования временных интервалов заданной длительности. Длительность сформированного временного интервала определяется только разностью кодов, последовательно загружаемых в регистр выходного сравнения, и не зависит от программного обеспечения МК. Время, необходимое для записи нового значения кода в регистр канала сравнения, ограничивает минимальную длительность формируемого временного интервала.
Рис. 4.7. Структурная схема канала выходного сравнения таймера. Модули усовершенствованного таймера используются в составе МК в различных модификациях. При этом число каналов входного захвата и выходного сравнения в модуле может быть различным. Так, в МК семейства HC05 фирмы Motorola типовыми решениями являются модули 1IC+1OC или 2IC+2OC, а модуль таймера в составе МК только один. В ряде модулей каналы могут быть произвольно настроены на функцию входного захвата или выходного сравнения посредством инициализации. Счетчик модуля усовершенствованного таймера может не иметь функции программного останова. В этом случае состояние счетчика нельзя синхронизировать с каким-либо моментом работы МК, и такой счетчик характеризуется как свободно считающий (free counter). Аппаратные средства усовершенствованного таймера позволяют решить многие задачи управления в реальном времени. Однако по мере роста сложности алгоритмов управления отчетливо проявляются ограничения модулей усовершенствованного таймера, а именно: недостаточное число каналов захвата и сравнения, принадлежащих одному счетчику временной базы. Это не позволяет сформировать синхронизированные между собой многоканальные импульсные последовательности; однозначно определенная конфигурация канала (или захват или сравнение) часто не удовлетворяет потребностям решаемой задачи; формирование сигналов по методу широтно-импульсной модуляции (ШИМ) требует программной поддержки, что снижает максимально достижимую частоту выходного сигнала. Поэтому следующим этапом развития модулей подсистемы реального времени МК стали модули процессоров событий. Впервые модули процессоров событий были использованы компанией Intel в МК семейства 8xC51Fx. Этот модуль получил название программируемого счетного массива (Programmable Counter Array — PCA). РСА обеспечивает более широкие возможности работы в реальном масштабе времени и в меньшей степени расходует ресурсы центрального процессора, чем стандартный и усовершенствованный таймеры/счетчики. К преимуществам РСА также можно отнести более простое программирование и более высокую точность. К примеру, РСА может обеспечить лучшее временное разрешение, чем таймеры 0, 1 и 2 МК семейства MCS-51, так как счетчик РСА способен работать с тактовой частотой, втрое большей, чем у этих таймеров. РСА также может решать многие задачи, выполнение которых с использованием таймеров требует дополнительных аппаратных затрат (например, определение фазового сдвига между импульсами или генерация ШИМ-сигнала). РСА состоит из 16-битного таймера-счетчика и пяти 16-битных модулей сравнения-защелки, как показано на рис. 4.8. Таймер-счетчик РСА используется в качестве базового таймера для функционирования всех пяти модулей сравнения-защелки. Вход таймера-счетчика РСА может быть запрограммирован на счет сигналов от следующих источников: выход делителя на 12 тактового генератора МК; выход делителя на 4 тактового генератора МК; сигнал переполнения таймера 0; внешний входной сигнал на выводе ЕСI (P1.2).
Рис. 4.8. Структура процессора событий МК семейства Intel 8xC51Fx. Любой из модулей сравнения-защелки может быть запрограммирован для работы в следующих режимах: защелкивания по фронту и/или спаду импульса на входе CEXi; программируемого таймера; высокоскоростного выхода; широтно-импульсного модулятора. Модуль 4 может быть также запрограммирован как сторожевой таймер (Watchdog Timer – WDT). Режим защелкивания по импульсу на входе МК эквивалентен режиму входного захвата (IC ) усовершенствованного таймера. Режимы программируемого таймера и высокоскоростного выхода близки по своим функциональным возможностям к режиму выходного сравнения (OC). В режиме ШИМ на соответствующем выводе МК формируется последовательность импульсов с периодом, равным периоду базового таймера/счетчика PCA. Значение 8-разрядного кода, записанное в младший байт регистра-защелки соответствующего модуля задает скважность формируемого сигнала. При изменении кода от 0 до 255 скважность меняется от 100 % до 0,4 %. Режим ШИМ очень прост с точки зрения программного обслуживания. Если изменения скважности не предполагается, то достаточно один раз занести соответствующий код в регистр данных модуля, проинициализировать режим ШИМ, и импульсная последовательность будет воспроизводиться с заданными параметрами без вмешательства программы. Назначение и особенности работы сторожевого таймера будут рассмотрены далее отдельно. При работе модуля сравнения-защелки в режиме защелки, программируемого таймера или высокоскоростного выхода модуль может сформировать сигнал прерывания. Сигналы от всех пяти модулей сравнения-защелки и сигнал переполнения таймера РСА разделяют один вектор прерывания. Иными словами, если прерывания разрешены, то и сигнал переполнения таймера PCA и сигнал от любого из модулей вызывают одну и ту же подпрограмму прерываний, которая должна сама идентифицировать источник, вызвавший ее. Для работы с внешними устройствами таймер-счетчик РСА и модули сравнения-защелки используют выводы P1 порта МК. Если какой-либо вывод порта не используется при работе РСА, или РСА не задействован, порт может применяться стандартным образом. Реализованный в 8xC51FX PCA оказался настолько удачным, что архитектура данных МК стала промышленным стандартом де-факто, а сам PCA многократно воспроизводился в различных модификациях микроконтроллеров разных фирм. Тенденция развития подсистемы реального времени современных МК находит свое отражение в увеличении числа каналов процессоров событий и расширении их функциональных возможностей. Дальше » 4.6. Модуль прерываний МК Обработка прерываний в МК происходит в соответствии с общими принципами обработки прерываний в МПС. Модуль прерываний принимает запросы прерывания и организует переход к выполнению определенной прерывающей программы. Запросы прерывания могут поступать как от внешних источников, так и от источников, расположенных в различных внутренних модулях МК. В качестве входов для приема запросов от внешних источников чаще всего используются выводы параллельных портов ввода/вывода, для которых эта функция является альтернативной. Источниками запросов внешних прерываний также могут быть любые изменения внешних сигналов на некоторых специально выделенных линиях портов ввода/вывода. Источниками внутренних запросов прерываний могут служить следующие события: переполнение таймеров/счетчиков; сигналы от каналов входного захвата и выходного сравнения таймеров/счетчиков или от процессора событий; готовность памяти EEPROM; сигналы прерывания от дополнительных модулей МК, включая завершение передачи или приема информации по одному из последовательных портов и другие. Любой запрос прерывания поступает на обработку, если прерывания в МК разрешены и разрешено прерывание по данному запросу. Адрес, который загружается в программный счетчик при переходе к обработке прерывания, называется "вектор прерывания". В зависимости от организации модуля прерываний конкретного МК различные источники прерываний могут иметь разные векторы или использовать некоторые из них совместно. Использование различными прерываниями одного вектора обычно не вызывает проблем при разработке программного обеспечения, так как аппаратная часть МК фиксирована, а контроллер чаще всего выполняет одну-единственную программу. Вопрос о приоритетах при одновременном поступлении нескольких запросов на прерывание решается в различных МК по-разному. Есть МК с одноуровневой системой приоритетов (все запросы равноценны), многоуровневой системой с фиксированными приоритетами и многоуровневой программируемой системой приоритетов. Отдельно необходимо описать аппаратные прерывания, связанные с включением питания, подачей сигнала "сброс" и переполнением сторожевого таймера. Они имеют немаскируемый характер и чаще всего разделяют один общий вектор прерывания. Это вполне логично, поскольку результатом каждого из событий является начальный сброс МК. 8. Лекция: Вспомогательные аппаратные средства микроконтроллера Страницы: 1 | 2 | 3 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассказывается о режимах пониженного энергопотребления микроконтроллера, а также о структуре и организации таких вспомогательных аппаратных средств как тактовые генераторы, схемы контроля напряжения питания, сторожевые таймеры и дополнительные модули микроконтроллера.
4.7. Минимизация энергопотребления в системах на основе МК Малый уровень энергопотребления является зачастую определяющим фактором при выборе способа реализации цифровой управляющей системы. Современные МК предоставляют пользователю большие возможности в плане экономии энергопотребления и имеют, как правило, следующие основные режимы работы: активный режим (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 Гц (часовой кварцевый резонатор). 4.8. Тактовые генераторы МК Современные МК содержат встроенные тактовые генераторы, которые требуют минимального числа внешних времязадающих элементов. На практике используются три основных способа определения тактовой частоты генератора: с помощью кварцевого резонатора, керамического резонатора и внешней RC-цепи. Типовая схема подключения кварцевого или керамического резонатора приведена на рис. 4.9а.
Рис. 4.9. Тактирование с использованием кварцевого или керамического резонаторов (а) и с использованием 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-цепью, также может изменяться программными средствами. Дальше » 4.9. Аппаратные средства обеспечения надежной работы МК Прикладная программа, записанная в память программ МК, должна обеспечивать его надежную работу при любых комбинациях входных сигналов. Однако в результате электромагнитных помех, колебаний напряжения питания и других внешних факторов предусмотренный разработчиком ход выполнения программы может быть нарушен. С целью обеспечения надежного запуска, контроля работы МК и восстановления работоспособности системы в отсутствие оператора все современные МК снабжаются аппаратными средствами обеспечения надежной работы. К ним относятся: схема формирования сигнала сброса МК; модуль мониторинга напряжения питания; сторожевой таймер. 4.9.1. Схема формирования сигнала сброса МК При включении напряжения питания МК должен начать выполнять записанную в памяти программу работы. На этапе нарастания напряжения питания МК принудительно переводится в начальное состояние, которое называют состоянием сброса. При этом устанавливаются в исходное состояние внутренние магистрали МК, сигналы управления и регистры специальных функций. Последние определяют начальное состояние периферийных модулей МК, которое чаще всего по умолчанию неактивно. С целью обеспечения надежного запуска от любых источников питания с различной динамикой нарастания напряжения большинство современных МК содержат встроенный детектор напряжения питания (схема Power-On-Reset — POR), который формирует сигнал сброса при нарастании напряжения питания. В частности, входящий в состав МК семейства PIC16 таймер установления питания (PWRT) начинает отсчет времени после того, как напряжение питания пересекло уровень около 1,2…1,8 В. По истечении выдержки около 72 мс считается, что напряжение достигло номинала. Сразу после выхода из состояния сброса МК выполняет следующие действия: запускает генератор синхронизации МК. Для стабилизации частоты тактирования внутренними средствами формируется задержка времени; считывает энергонезависимые регистры конфигурации в соответствующие регистры ОЗУ (если необходимо); загружает в счетчик команд адрес начала рабочей программы; производит выборку первой программы из памяти программ и приступает к выполнению программы. Адрес ячейки памяти, в которой хранится код первой исполняемой команды, называют вектором начального запуска или вектором сброса. В некоторых МК этот адрес однозначно определен и приведен в техническом описании. Про такие МК говорят, что они имеют фиксированный вектор сброса. В других МК вектор сброса может быть произвольно определен пользователем. На этапе программирования МК необходимый вектор начального запуска записывается в ячейки с фиксированными адресами, и при выходе МК из сброса автоматически загружается в счетчик команд. О таких МК говорят, что они имеют загружаемый вектор сброса. Загружаемый вектор сброса имеют все 8-разрядные МК фирмы Motorola, выполненные по структуре с единым адресным пространством команд и данных. Для перевода МК в состояние сброса при установившемся напряжении питания достаточно подать сигнал высокого или низкого уровня (в соответствии со спецификацией МК) на вход сброса (RESET). Обычно для формирования сигнала сброса при включении напряжения питания и нажатии кнопки сброса используют RC-цепь. Типовые схемы формирования сигнала сброса представлены на рис. 4.10. Кнопка Кн предназначена для "ручного" сброса МК при отладке. Диод VD препятствует попаданию на вход RESET отрицательного напряжения при выключении питания. Номиналы R и C определяют задержку времени, необходимую для завершения всех переходных процессов при сбросе (указываются в техническом описании на МК). Триггер Шмитта на входе допускает подачу сигнала сброса с ненормированной длительностью фронта. При отсутствии триггера Шмитта на входе приходится использовать специальную внешнюю схему формирователя. В современных МК линия RESET обычно является двунаправленной и имеет низкий активный уровень. При нажатии кнопки "сброс" или включении питания буфер линии устанавливается в режим ввода и реализует так называемый внешний сброс. МК может перейти в состояние сброса также по сигналам устройств контроля состояния, которые имеются в составе контроллера. В этом случае говорят, что МК находится в состоянии внутреннего сброса. При этом буфер линии RESET устанавливается в состояние вывода с низким логическим уровнем на выходе. Данный сигнал может быть использован для установки в начальное состояние периферийных ИС.
Рис. 4.10. Типовые схемы формирования сигнала внешнего сброса для МК с высоким активным уровнем сигнала сброса (а) и низким активным уровнем сигнала сброса (б). Порядок выхода МК из состояний внешнего и внутреннего сброса в целом одинаков. 4.9.2. Блок детектирования пониженного напряжения питания В реальных условиях эксплуатации может сложиться такая ситуация, при которой напряжение питания МК опустится ниже минимально допустимого, но не достигнет порога отпускания схемы POR. В этих условиях МК может "зависнуть". При восстановлении напряжения питания до номинального значения МК останется неработоспособным. Для восстановления работоспособности системы после "просадки" напряжения питания МК необходимо снова сбросить. Для этой цели в современных МК реализован дополнительный блок детектирования пониженного напряжения питания. Такой модуль используется в МК семейства HC08 фирмы Motorola, аналогичный модуль имеется в составе семейства PIC17 фирмы Microchip. Рассматриваемый модуль генерирует сигнал внутреннего сброса при снижении напряжения питания до уровня чуть ниже минимально допустимого. Уровень срабатывания блока детектирования пониженного напряжения питания значительно превышает напряжение сохранения данных в ОЗУ МК. Событие сброса по сигналу блока пониженного напряжения питания отмечается специальным битом в одном из регистров МК. Следовательно, программно анализируя этот бит после сброса МК, можно установить, что данные целы, и продолжить выполнение программы. 4.9.3. Сторожевой таймер Если, несмотря на все принятые меры, МК все же "завис" , то на случай выхода из этого состояния все современные контроллеры имеют встроенный модуль сторожевого таймера. Принцип действия сторожевого таймера показан на рис. 4.11.
Рис. 4.11. Принцип действия сторожевого таймера. Основу сторожевого таймера составляет многоразрядный счетчик. При сбросе МК счетчик обнуляется. После перехода МК в активный режим работы значение счетчика начинает увеличиваться независимо от выполняемой программы. При достижении счетчиком максимального кода генерируется сигнал внутреннего сброса, и МК начинает выполнять рабочую программу сначала. Для исключения сброса по переполнению сторожевого таймера рабочая программа МК должна периодически сбрасывать счетчик. Сброс счетчика сторожевого таймера осуществляется путем исполнения специальной команды (например, CLRWDT) или посредством записи некоторого указанного кода в один из регистров специальных функций. Тогда при нормальном, предусмотренном разработчиком, порядке исполнения рабочей программы переполнения счетчика сторожевого таймера не происходит, и он не оказывает влияния на работу МК. Однако, если исполнение рабочей программы было нарушено, например, вследствие "зависания", то велика вероятность того, что счетчик не будет сброшен вовремя. Тогда произойдет сброс по переполнению сторожевого таймера, и нормальный ход выполнения рабочей программы будет восстановлен. Модули сторожевых таймеров конкретных МК могут иметь различные особенности: в ряде МК векторы внешнего сброса и сброса по переполнению сторожевого таймера совпадают. Это не позволяет выявить причину сброса программным путем и затрудняет написание рабочей программы. Более высокоуровневые МК имеют либо различные векторы сброса, либо отмечают событие сброса по переполнению сторожевого таймера установкой специального бита в одном из регистров специальных функций; в некоторых МК при переходе в один из режимов пониженного энергопотребления, когда рабочая программа не выполняется, автоматически приостанавливается работа сторожевого таймера. В других МК сторожевой таймер имеет независимый тактовый генератор, который продолжает функционировать и в режиме ожидания. В этом случае необходимо периодически выводить МК из состояния ожидания для сброса сторожевого таймера. В PIC-контроллерах фирмы Microchip выработка таких сбросов может быть запрещена путем записи нуля в специальный бит конфигурации WDTE. Использование сторожевого таймера существенно повышает способность к самовосстановлению системы на основе МК. Дальше » 4.10. Дополнительные модули МК Описанные выше модули составляют так называемый базовый комплект МК и входят в состав любого современного контроллера. Очевидна необходимость включения в состав МК дополнительных модулей, состав и возможности которых определяются конкретной решаемой задачей. Среди таких дополнительных модулей следует, прежде всего, отметить: модули последовательного ввода/вывода данных; модули аналогового ввода/вывода. 4.10.1. Модули последовательного ввода/вывода Наличие в составе 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). Каждый из этих интерфейсов имеет достаточно сложные протоколы обмена, для ознакомления с которыми следует обращаться к специальной литературе. 4.10.2. Модули аналогового ввода/вывода Необходимость приема и формирования аналоговых сигналов требует наличия в МК модулей аналогового ввода/вывода. Простейшим устройством аналогового ввода в МК является встроенный компаратор напряжения. Компаратор сравнивает входное аналоговое напряжение с опорным потенциалом VREF и устанавливает на выходе логическую "1", если входное напряжение больше опорного. Компараторы удобнее всего использовать для контроля определенного значения входного напряжения, например, в термостатах. В комбинации с внешним генератором линейно изменяющегося напряжения встроенный компаратор позволяет реализовать на МК интегрирующий аналого-цифровой преобразователь (АЦП). Однако более широкие возможности для работы с аналоговыми сигналами дает АЦП, встроенный в МК. Чаще всего он реализуется в виде модуля многоканального АЦП, предназначенного для ввода в МК аналоговых сигналов с датчиков физических величин и преобразования этих сигналов в двоичный код. Структурная схема типового модуля АЦП представлена на рис. 4.12.
Рис. 4.12. Структура модуля АЦП. Многоканальный аналоговый коммутатор К служит для подключения одного из источников аналоговых сигналов (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. Момент завершения каждого цикла преобразования отмечается установкой триггера готовности данных. Если прерывания от модуля АЦП разрешены, то генерируется запрос на прерывания. Как правило, чтение регистра результата сбрасывает триггер готовности. Большинство модулей АЦП имеют только режим программного запуска: установка одного из битов регистра режима запускает очередное измерение. Наиболее универсальные модули АЦП имеют также режим автоматического запуска, при котором после завершения одного цикла преобразования немедленно начинается следующий. Однако данные измерения каждого цикла должны быть считаны программным способом. Цифро-аналоговые преобразователи в составе МК являются большой редкостью. Функция цифро-аналогового преобразователя реализуется средствами модуля программируемого таймера в режиме ШИМ. На одном из выводов МК формируется высокочастотная импульсная последовательность с регулируемой длительностью импульса. Полученный сигнал сглаживается фильтром нижних частот на операционном усилителе. Разрешающая способность такого ЦАП определяется дискретностью регулирования коэффициента заполнения в режиме ШИМ. Глава 5. Однокристальные микроконтроллеры серии PIC 9. Лекция: Аппаратные средства микроконтроллеров серии PIC Страницы: 1 | 2 | 3 | 4 | 5 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассказывается об особенностях организации и параметрах популярных PIC-микроконтроллеров фирмы "Microchip", а также более подробно о составе, структуре и возможностях аппаратных средств микроконтроллеров подгруппы PIC16F8X.
5.1. Основные особенности микроконтроллеров серии PIC 5.1.1. Состав и назначение семейств PIC-контроллеров Микроконтроллеры семейств PIC (Peripheral Interface Controller) компании Microchip объединяют все передовые технологии микроконтроллеров: электрически программируемые пользователем ППЗУ, минимальное энергопотребление, высокую производительность, хорошо развитую RISC-архитектуру, функциональную законченность и минимальные размеры. Широкая номенклатура изделий обеспечивает использование микроконтроллеров в устройствах, предназначенных для разнообразных сфер применения. Первые микроконтроллеры компании Microchip PIC16C5x появились в конце 1980-х годов и благодаря своей высокой производительности и низкой стоимости составили серьезную конкуренцию производившимся в то время 8-разрядным МК с CISC-архитектурой. Высокая скорость выполнения команд в PIC-контроллерах достигается за счет использования двухшинной гарвардской архитектуры вместо традиционной одношинной фон-неймановской. Гарвардская архитектура основывается на наборе регистров с разделенными шинами и адресными пространствами для команд и данных. Все ресурсы микроконтроллера, такие как порты ввода/вывода, ячейки памяти и таймер, представляют собой физически реализованные аппаратные регистры. Микроконтроллеры PIC содержат RISC-процессор с симметричной системой команд, позволяющей выполнять операции с любым регистром, используя произвольный метод адресации. Пользователь может сохранять результат операции в самом регистре-аккумуляторе или во втором регистре, используемом для операции. В настоящее время компания Microchip выпускает пять основных семейств 8-разрядных RISC-микроконтроллеров, совместимых снизу вверх по программному коду: PIC12CXXX – семейство микроконтроллеров, выпускаемых в миниатюрном 8-выводном исполнении. Эти микроконтроллеры выпускаются как с 12-разрядной (33 команды), так и с 14-разрядной (35 команд) системой команд. Содержат встроенный тактовый генератор, таймер/счетчик, сторожевой таймер, схему управления прерываниями. В составе семейства есть микроконтроллеры со встроенным 8-разрядным четырехканальным АЦП. Способны работать при напряжении питания до 2,5 В; PIC16C5X – базовое семейство микроконтроллеров с 12-разрядными командами (33 команды), выпускаемое в 18-, 20- и 28-выводных корпусах. Представляют собой простые недорогие микроконтроллеры с минимальной периферией. Способность работать при малом напряжении питания (до 2 В) делает их удобными для применения в переносных конструкциях. В состав семейства входят микроконтроллеры подгруппы PIC16HV5XX, способные работать непосредственно от батареи в диапазоне питающих напряжений до 15 В; PIC16CXXX – семейство микроконтроллеров среднего уровня с 14-разрядными командами (35 команд). Наиболее многочисленное семейство, объединяющее микроконтроллеры с разнообразными периферийными устройствами, в число которых входят аналоговые компараторы, аналогово-цифровые преобразователи, контроллеры последовательных интерфейсов SPI, USART и I2C, таймеры-счетчики, модули захвата/сравнения, широтно-импульсные модуляторы, сторожевые таймеры, супервизорные схемы и так далее; PIC17CXXX – семейство высокопроизводительных микроконтроллеров с расширенной системой команд 16-разрядного формата (58 команд), работающие на частоте до 33 МГц, с объемом памяти программ до 16 Кслов. Кроме обширной периферии, 16-уровневого аппаратного стека и векторной системы прерываний, почти все микроконтроллеры этого семейства имеют встроенный аппаратный умножитель 8х8, выполняющий операцию умножения за один машинный цикл. Являются одними из самых быстродействующих в классе 8-разрядных микроконтроллеров; PIC18CXXX – семейство высокопроизводительных микроконтроллеров с расширенной системой команд 16-разрядного формата (75 команд) и встроенным 10-разрядным АЦП, работающие на частоте до 40 МГц. Содержат 31-уровневый аппаратный стек, встроенную память команд до 32 Кслов и способны адресовать до 4 Кбайт памяти данных и до 2 Мбайт внешней памяти программ. Расширенное RISC-ядро микроконтроллеров данного семейства оптимизировано под использование нового Си-компилятора. Большинство PIC-контроллеров выпускаются с однократно программируемой памятью программ (OTP), с возможностью внутрисхемного программирования или масочным ПЗП. Для целей отладки предлагаются более дорогие версии с ультрафиолетовым стиранием и Flash-памятью. Полный список выпускаемых модификаций PIC-контроллеров включает порядка пятисот наименований. Поэтому продукция компании перекрывает почти весь диапазон применений 8-разрядных микроконтроллеров. Из программных средств отладки наиболее известны и доступны различные версии ассемблеров, а также интегрированная программная среда MPLAB. Российские производители программаторов и аппаратных отладочных средств также уделяют внимание PIC-контроллерам. Выпускаются как специализированные программаторы, такие как PICPROG, программирующие почти весь спектр PIC-микроконтроллеров, так и универсальные: UNIPRO и СТЕРХ, поддерживающие наиболее известные версии PIC-контроллеров. Наиболее распространенными семействами PIC-контроллеров являются PIC16CXXX и PIC17CXXX. 5.1.2. Микроконтроллеры семейств PIC16CXXX и PIC17CXXX Основным назначением микроконтроллеров семейств PIC16 и PIC17, как следует из аббревиатуры PIC (Peripheral Interface Controller), является выполнение интерфейсных функций. Этим объясняются особенности их архитектуры: RISC-система команд, характеризующаяся малым набором одноадресных инструкций (33, 35 или 58), каждая из которых имеет длину в одно слово (12, 14 или 16 бит) и большинство выполняется за один машинный цикл. В системе команд отсутствуют сложные арифметические команды (умножение, деление), предельно сокращен набор условных переходов; высокая скорость выполнения команд: при тактовой частоте 20 МГц время машинного цикла составляет 200 нс (быстродействие равно 5 млн. операций/сек); наличие мощных драйверов (до 25 мА) на линиях портов ввода/вывода, что позволяет подключать непосредственно к ним довольно мощную нагрузку, например, светодиоды. низкая потребляемая мощность; ориентация на ценовую нишу предельно низкой стоимости, определяющая использование дешевых корпусов с малым количеством выводов (8, 14, 18, 28), отказ от внешних шин адреса и данных (кроме PIC17C4X), использование упрощенного механизма прерываний и аппаратного (программно недоступного) стека. 5.1.3. Особенности архитектуры микроконтроллеров семейства PIC16CXXX Микроконтроллеры семейства PIC16CXXX, выполненные по технологии HCMOS представляют собой 8-разрядные микроконтроллеры на основе RISC-процессора, выполненные по гарвардской архитектуре. Имеют встроенное ПЗП команд объемом от 0,5 до 4 Кслов (разрядность слова команд равна 12 – 14 бит). Память данных PIC-контроллеров организована в виде регистрового файла объемом 32 – 128 байт, в котором от 7 до 16 регистров отведено для управления системой и обмена данными с внешними устройствами. Одним из основных достоинств этих устройств является очень широкий диапазон напряжений питания (2 – 6 В). Ток потребления на частоте 32768 Гц составляет менее 15 мкА, на частоте 4 МГц – 1 – 2 мА, на частоте 20 МГц 5 – 7 мА и в режиме микропотребления (режим SLEEP) – 1 – 2 мкА. Выпускаются модификации для работы в трех температурных диапазонах: от 0 до +70°С, от -40 до +85°С и от -40 до +125°С. Каждый из контроллеров содержит универсальные (от 1 до 3) и сторожевой таймеры, а также надежную встроенную систему сброса при включении питания. Частота внутреннего тактового генератора задается либо кварцевым резонатором, либо RC-цепочкой в диапазоне 0 – 25 МГц. PIC-контроллеры имеют от 12 до 33 линий цифрового ввода-вывода, причем каждая из них может быть независимо настроена на ввод или вывод. В устройство PIC16C64 входит широтно-импульсный модулятор, с помощью которого можно реализовать ЦАП с разрешением до 16 разрядов. Здесь есть и последовательный двунаправленный синхронно-асинхронный порт, обеспечивающий возможность организации шины I2C. Приборы PIC16C71 и PIC16C74 содержат встроенный многоканальный 8-разрядный АЦП с устройством выборки-хранения. Помимо памяти программ в PIC предусмотрено несколько индивидуально прожигаемых перемычек, с помощью которых можно на этапе программирования кристалла выбрать тип тактового генератора, отключить сторожевой таймер или систему сброса, включить защиту памяти программ от копирования, а также записать серийный номер кристалла (16 бит). С программной точки зрения PIC-контроллер представляет собой 8-разрядный RISC-процессор с гарвардской архитектурой. Число команд небольшое — от 33 до 35. Все команды имеют одинаковую длину и, кроме команд ветвления, выполняются за четыре периода тактовой частоты (в отличие, например, от 12 периодов для i87C51). Поддерживаются непосредственный, косвенный и относительный методы адресации, можно эффективно управлять отдельными битами в пределах всего регистрового файла. Стек реализован аппаратно. Его максимальная глубина составляет два или восемь уровней в зависимости от типа контроллера. Почти во всех микросхемах PIC есть система прерываний, источниками которых могут быть таймер и внешние сигналы. Система команд практически симметрична и, как следствие, легка в освоении. Применение PIC-контроллеров целесообразно в несложных приборах с ограниченным током потребления (автономные устройства, приборы с питанием от телефонной линии и т.п.). Благодаря малому количеству компонентов, используемых при построении таких приборов, их размеры уменьшаются, а надежность увеличивается. Типичным представителем микроконтроллеров семейства PIC16CXXX являются микроконтроллеры подгруппы PIC16F8X. 5.2. Микроконтроллеры подгруппы PIC16F8X 5.2.1. Основные характеристики Микроконтроллеры подгруппы PIC16F8X относятся к семейству 8-разрядных КМОП микроконтроллеров группы PIC16CXXX, для которых характерны низкая стоимость, полностью статическая КМОП-технология и высокая производительность. В состав подгруппы входят МК PIC16F83, PIC16CR83, PIC16F84 и PIC16CR84. Основные характеристики МК подгруппы PIC16F8X приведены в табл. 5.1. Все микроконтроллеры подгруппы PIC16F8X используют гарвардскую архитектуру с RISC-процессором, обладающую следующими основными особенностями: используются только 35 простых команд; все команды выполняются за один цикл (400 нс при частоте 10 МГц), кроме команд перехода, которые требуют 2 цикла; рабочая частота 0 Гц ... 10 МГц; раздельные шины данных (8 бит) и команд (14 бит); 512 х 14 или 1024 х 14 память программ, выполненная на ПЗП или электрически перепрограммируемой Flash- памяти; 15 восьмиразрядных регистров специальных функций (SFR); восьмиуровневый аппаратный стек; прямая, косвенная и относительная адресация данных и команд; 36 или 68 восьмиразрядных регистров общего назначения (GPR) или ОЗУ; четыре источника прерывания: внешний вход RB0/INT; переполнение таймера TMR0; изменение сигналов на линиях порта B; завершение записи данных в память EEPROM; 64 x 8 электрически перепрограммируемая EEPROM память данных с возможностью выполнения 1000000 циклов стирания/записи; сохранение данных в EEPROM в течение как минимум 40 лет. Таблица 5.1. Основные характеристики МК подгруппы PIC16F8X.Параметр PIC16F83 PIC16CR83 PIC16F84 PIC16CR84 Максимальная частота, МГц 10 10 10 10 Flash-память программ, слов 512 - 1K - ПЗП программ, слов - 512 - 1K Память данных, байт 36 36 68 68 Память данных в РПЗУ (EEPROM), байт 64 64 64 64 Таймеры TMR0 TMR0 TMR0 TMR0 Число источников прерываний 4 4 4 4 Число линий ввода/вывода 13 13 13 13 Диапазон напряжений питания, В 2,0 – 6,0 2,0 – 6,0 2,0 – 6,0 2,0 – 6,0 Число выводов и тип корпуса 18 DIP, SOIC 18 DIP, SOIC 18 DIP, SOIC 18 DIP, SOIC Микроконтроллеры подгруппы PIC16F8X обладают развитыми возможностями ввода/вывода: 13 линий ввода-вывода с индивидуальной установкой направления обмена; высокий втекающий/вытекающий ток, достаточный для управления светодиодами: максимальный втекающий ток – 25 мА; максимальный вытекающий ток – 20 мА; 8-битный таймер/счетчик TMR0 с 8-битным программируемым предварительным делителем. Специализированные микроконтроллерные функции включают следующие возможности: автоматический сброс при включении (Power-on-Reset); таймер включения при сбросе (Power-up Timer); таймер запуска генератора (Oscillator Start-up Timer); сторожевой (Watchdog) таймер WDT с собственным встроенным генератором, обеспечивающим повышенную надежность; EEPROM бит секретности для защиты кода; экономичный режим SLEEP; выбираемые пользователем биты для установки режима возбуждения встроенного генератора; последовательное встроенное устройство программирования Flash/EEPROM памяти программ и данных с использованием только двух выводов. КМОП технология обеспечивает МК подгруппы PIC16F8X дополнительные преимущества: статический принцип работы; широкий диапазон напряжений питания: 2,0 ... 6,0 В; низкое энергопотребление: менее 2 мА при 5В и 4МГц; порядка 15 мкА при 2В и 32КГц; менее 1 мкА для SLEEP-режима при 2В. Микроконтроллеры подгруппы PIC16F8X различаются между собой только объемом ОЗУ данных, а также объемом и типом памяти программ. Наличие в составе подгруппы МК с Flash-памятью программ облегчает создание и отладку прототипов промышленных образцов изделий. 5.2.2. Особенности архитектуры Упрощенная структурная схема МК подгруппы PIC16F8X приведена на рис. 5.1.
Рис. 5.1. Структурная схема МК подгруппы PIC16F8X. Архитектура основана на концепции раздельных шин и областей памяти для данных и для команд (гарвардская архитектура). Шина данных и память данных (ОЗУ) – имеют ширину 8 бит, а программная шина и программная память (ПЗП) имеют ширину 14 бит. Такая концепция обеспечивает простую, но мощную систему команд, разработанную так, что битовые, байтовые и регистровые операции работают с высокой скоростью и с перекрытием по времени выборок команд и циклов выполнения. 14-битовая ширина программной памяти обеспечивает выборку 14-битовой команды в один цикл. Двухступенчатый конвейер обеспечивает одновременную выборку и исполнение команды. Все команды выполняются за один цикл, исключая команды переходов. Микроконтроллеры PIC16F83 и PIC16CR83 адресуют 512х14 памяти программ, а PIC16F84 и PIC16CR84 – 1Кх14 памяти программ. Вся память программ является внутренней. Микроконтроллер может прямо или косвенно обращаться к регистрам или памяти данных. Все регистры специальных функций, включая счетчик команд, отображаются на память данных. Ортогональная (симметричная) система команд позволяет выполнять любую команду над любым регистром с использованием произвольного метода адресации. Ортогональная архитектура и отсутствие специальных исключений делает программирование МК группы PIC16F8X простым и эффективным. Назначение выводов МК подгруппы PIC16F8X приведено в табл. 5.2. Таблица 5.2. Назначение выводов МК подгруппы PIC16F8X.Обозначение Тип Буфер Описание OSC1/CLKIN I ТШ/КМОП1) Вход кристалла генератора, RC-цепочки или вход внешнего тактового сигнала OSC2/CLKOUT O - Выход кристалла генератора. В RC-режиме – выход 1/4 частоты OSC1 /MCLR I/P ТШ Сигнал сброса/вход программирующего напряжения. Сброс низким уровнем. RA0 I/O ТТЛ PORTA – двунаправленный порт ввода/вывода RA4/T0CKI может быть выбран как тактовый вход таймера/счетчика TMR0. Выход с открытым стоком. RA1 I/O ТТЛ RA2 I/O ТТЛ RA3 I/O ТТЛ RA4 I/O ТШ /T0CKI RB0/INT I/O ТТЛ/ТШ2) PORTB – двунаправленный порт ввода/вывода. Может быть запрограммирован в режиме внутренних активных нагрузок на линию питания по всем выводам. Вывод RB0/INT может быть выбран как внешний вход прерывания. Выводы RB4...RB7 могут быть программно настроены как входы прерывания по изменению состояния на любом из входов. При программировании МК RB6 используется как тактовый, а RB7 как вход/выход данных. RB1 I/O ТТЛ RB2 I/O ТТЛ RB3 I/O ТТЛ RB4 I/O ТТЛ RB5 I/O ТТЛ RB6 I/O ТТЛ/ТШ3) RB7 I/O ТТЛ/ТШ4) Таблица 5.2. Назначение выводов МК подгруппы PIC16F8X (продолжение).Обозначение Тип Буфер Описание Vdd P - Положительное напряжение питания Vss P - Общий провод (земля) В таблице использованы следующие обозначения: I — вход; O — выход; I/O — вход/выход; P — питание; – — не используется; ТТЛ — ТТЛ вход; ТШ — вход триггера Шмитта. Микроконтроллер содержит 8-разрядное АЛП и рабочий регистр W. АЛП является арифметическим модулем общего назначения и выполняет арифметические и логические функции над содержимым рабочего регистра и любого из регистров контроллера. АЛП может выполнять операции сложения, вычитания, сдвига и логические операции. Если не указано иное, то арифметические операции выполняются в дополнительном двоичном коде. В зависимости от результата операции, АЛП может изменять значения бит регистра STATUS: C (Carry), DC (Digit carry) и Z (Zero). 5.2.3. Схема тактирования и цикл выполнения команды Входная тактовая частота, поступающая с вывода OSC1/CLKIN, делится внутри на четыре, и из нее формируются четыре циклические не перекрывающиеся тактовые последовательности Q1, Q2, Q3 и Q4. Счетчик команд увеличивается в такте Q1, команда считывается из памяти программы и защелкивается в регистре команд в такте Q4. Команда декодируется и выполняется в течение последующего цикла в тактах Q1...Q4. Схема тактирования и выполнения команды изображена на рис. 5.2. Цикл выполнения команды состоит из четырех тактов: Q1...Q4. Выборка команды и ее выполнение совмещены по времени таким образом, что выборка команды занимает один цикл, а выполнение – следующий цикл. Эффективное время выполнения команды составляет один цикл. Если команда изменяет счетчик команд (например, команда GOTO), то для ее выполнения потребуется два цикла, как показано на рис. 5.3.
Рис. 5.2. Схема тактирования и выполнения команды.
Рис. 5.3. Выборка команд. Цикл выборки начинается с увеличения счетчика команд в такте Q1. В цикле выполнения команды выбранная команда защелкивается в регистр команд в такте Q1. В течение тактов Q2, Q3 и Q4 происходит декодирование и выполнение команды. В такте Q2 считывается память данных (чтение операнда), а запись происходит в такте Q4. Дальше » 5.2.4. Организация памяти программ и стека Счетчик команд в МК PIC16F8Х имеет ширину 13 бит и способен адресовать 8Кх14бит объема программной памяти. Однако физически на кристаллах PIC16F83 и PIC16CR83 имеется только 512х14 памяти (адреса 0000h-01FFh), а в МК PIC16F84 и PIC16CR84 – 1Кх14 памяти (адреса 0000h-03FFh). Обращение к адресам выше 1FFh (3FFh) фактически есть адресация в те же первые 512 адресов (первые 1К адресов). Организация памяти программ и стека приведена на рис. 5.4. В памяти программ есть выделенные адреса. Вектор сброса находится по адресу 0000h, вектор прерывания – по адресу 0004h. Обычно по адресу 0004h располагается подпрограмма идентификации и обработки прерываний, а по адресу 0000h – команда перехода на метку, расположенную за подпрограммой обработки прерываний.
Рис. 5.4. Организация памяти программ и стека. 5.2.5. Организация памяти данных Память данных МК разбита на две области. Первые 12 адресов – это область регистров специальных функций (SFR), а вторая – область регистров общего назначения (GPR). Область SFR управляет работой прибора. Обе области разбиты в свою очередь на банки 0 и 1. Банк 0 выбирается обнулением бита RP0 регистра статуса (STATUS). Установка бита RP0 в единицу выбирает банк 1. Каждый банк имеет протяженность 128 байт. Однако для PIC16F83 и PIC16CR83 память данных существует только до адреса 02Fh, а для PIC16F84 и PIC16CR84 – до адреса 04Fh. На рис. 5.5 изображена организация памяти данных.
Рис. 5.5. Организация памяти данных. Некоторые регистры специального назначения продублированы в обоих банках, а некоторые расположены в банке 1 отдельно. Регистры с адресами 0Ch-4Fh могут использоваться как регистры общего назначения, которые представляют собой статическое ОЗУ. Адреса регистров общего назначения банка 1 отображаются на банк 0. Следовательно, когда установлен банк 1, то обращение к адресам 8Ch-CFh фактически адресует банк 0. В регистре статуса помимо бита RP0 есть еще бит RB1, что позволяет обращаться к четырем страницам (банкам) будущих модификаций этого кристалла. К ячейкам ОЗУ можно адресоваться прямо, используя абсолютный адрес каждого регистра, или косвенно, через регистр указатель FSR. Косвенная адресация использует текущее значение разрядов RP1:RP0 для доступа к банкам. Это относится и к EEPROM памяти данных. В обоих случаях можно адресовать до 512 регистров. 5.2.6. Регистры специального назначения Регистр статуса (STATUS) содержит признаки операции (арифметические флаги) АЛП, состояние контроллера при сбросе и биты выбора страниц для памяти данных. Назначение бит регистра приведено в табл. 5.3. Таблица 5.3. Назначение бит регистра STATUS (адрес 03h, 83h).R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x IRP RP1 RP0 /TO /PD Z DC C Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0 Бит 7: IRP: бит выбора страницы банка данных (используется при косвенной адресации) 0 = банк 0,1 (00h – FFh) 1 = банк 2,3 (100h – 1FFh) Бит IRP не используется в МК подгруппы PIC16F8X Биты 6-5: RP1:RP0: биты выбора страницы банка данных (используются при прямой адресации) 00 = банк 0 (00h – 7Fh) 01 = банк 1 (80h – FFh) 10 = банк 2 (100h – 17Fh) 11 = банк 3 (180h – 1FFh) В МК подгруппы PIC16F8X используется только бит RP0 Бит 4: /TO: бит срабатывания сторожевого таймера 1 = после включения питания, а также командами CLRWDT и SLEEP 0 = по завершении выдержки сторожевого таймера Бит 3: /PD: бит снижения потребляемой мощности 1 = после включения питания, а также командой CLRWDT 0 = по команде SLEEP Бит 2: Z: бит нулевого результата 1 = результат арифметической или логической операции нулевой 0 = результат арифметической или логической операции ненулевой Бит 1: DC: бит десятичного переноса/заема (для команд ADDWF и ADDLW) 1 = имеет место перенос из 4-го разряда 0 = нет переноса из 4-го разряда Бит 0: C: бит переноса/заема (для команд ADDWF и ADDLW) 1 = имеет место перенос из самого старшего разряда 0 = нет переноса из самого старшего разряда Примечание: вычитание осуществляется путем прибавления дополнительного кода второго операнда. При выполнении команд сдвига этот бит загружается из младшего или старшего разряда сдвигаемого источника. Здесь и далее: R — читаемый бит; W — записываемый бит; S — устанавливаемый бит; U — неиспользуемый бит (читается как "0"); -n = 0 или 1 — значение бита после сброса. Регистр статуса доступен для любой команды так же, как любой другой регистр. Однако если регистр STATUS является регистром назначения для команды, влияющей на биты Z, DC или C, то запись в эти три бита запрещается. Кроме того, биты /TO и /PD устанавливаются аппаратно и не могут быть записаны в статус программно. Это следует иметь в виду при выполнении команды с использованием регистра статуса. Например, команда CLRF STATUS обнулит все биты, кроме битов /TO и /PD, а затем установит бит Z=1. После выполнения этой команды регистр статуса может и не иметь нулевого значения (из-за битов /TO и /PD) STATUS=000uu1uu, где u – неизменяемое состояние. Поэтому рекомендуется для изменения регистра статуса использовать только команды битовой установки BCF, BSF, MOVWF, которые не изменяют остальные биты статуса. Воздействие всех команд на биты статуса рассматривается в разделе "Описание системы команд". Регистр конфигурации (OPTION) является доступным по чтению и записи регистром, который содержит управляющие биты для конфигурации предварительного делителя (пределителя), внешних прерываний, таймера, а также резисторов "pull-up" на выводах PORTB. Назначение бит регистра приведено в табл. 5.4. Таблица 5.4. Назначение бит регистра OPTION (адрес 81h).R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0 Бит 7: /RBPU: бит установки резисторов "pull-up" на выводах PORTB 0 = резисторы "pull-up" подключены 1 = резисторы "pull-up" отключены Бит 6: INTEDG: бит выбора перехода сигнала прерывания 0 = прерывание по спаду сигнала на выводе RB0/INT 1 = прерывание по фронту сигнала на выводе RB0/INT Бит 5: T0CS: бит выбора источника сигнала таймера TMR0 0 = внутренний тактовый сигнал (CLKOUT) 1 = переход на выводе RA4/T0CKI Бит 4: T0SE: бит выбора перехода источника сигнала для TMR0 0 = приращение по фронту сигнала на выводе RA4/T0CKI 1 = приращение по спаду сигнала на выводе RA4/T0CKI Бит 3: PSA: бит назначения пределителя 0 = предделитель подключен к TMR0 1 = предделитель подключен к сторожевому таймеру WDT Биты 2-0: PS2:PS0: биты выбора коэффициента деления пределителя Значения бит Скорость TMR0 Скорость WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 В том случае, когда предделитель обслуживает сторожевой таймер WDT, таймеру TMR0 назначается коэффициент предварительного деления 1:1. Регистр условий прерывания (INTCON) является доступным по чтению и записи регистром, который содержит биты доступа для всех источников прерываний. Назначение бит регистра приведено в табл. 5.5. Таблица 5.5. Назначение бит регистра INTCON (адреса 0Bh, 8Bh).R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x GIE EEIE T0IE INTE RBIE T0IF INTF RBIF Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0 Бит 7: GIE: бит разрешения всех прерываний 0 = запрещены все прерывания 1 = разрешены все незамаскированные прерывания Бит 6: EEIE: бит разрешения прерывания записи в EEPROM 0 = запрещены прерывания записи в EEPROM 1 = разрешены прерывания записи в EEPROM Бит 5: T0IE: бит разрешения прерывания по переполнению TMR0 0 = запрещены прерывания от TMR0 1 = разрешены прерывания от TMR0 Бит 4: INTE: бит разрешения прерываний по входу RB0/INT 0 = запрещены прерывания по входу RB0/INT 1 = разрешены прерывания по входу RB0/INT Бит 3: RBIE: бит разрешения прерываний по изменению PORTB 0 = запрещены прерывания по изменению PORTB 1 = разрешены прерывания по изменению PORTB Бит 2: T0IF: бит запроса прерывания по переполнению TMR0 0 = прерывание по переполнению TMR0 отсутствует 1 = прерывание по переполнению TMR0 имеет место Бит 1: INTF: бит запроса прерывания по входу RB0/INT 0 = прерывание по входу RB0/INT отсутствует 1 = прерывание по входу RB0/INT имеет место Бит 0: RBTF: бит запроса прерывания по изменению PORTB 0 = ни на одном из входов RB7:RB4 состояние не изменилось 1 = хотя бы на одном из входов RB7:RB4 изменилось состояние Бит разрешения всех прерываний GIE сбрасывается автоматически при следующих обстоятельствах: по включению питания; по внешнему сигналу /MCLR при нормальной работе; по внешнему сигналу /MCLR в режиме SLEEP; по окончанию задержки таймера WDT при нормальной работе; по окончанию задержки таймера WDT в режиме SLEEP. Прерывание INT может вывести процессор из режима SLEEP, если перед входом в этот режим бит INTE был установлен в единицу. Состояние бита GIE также определяет: будет ли процессор переходить на подпрограмму прерывания после выхода из режима SLEEP. Сброс битов – запросов прерываний – должен осуществляться соответствующей программой обработки. Дальше » 5.2.7. Счетчик команд Счетчик команд PCL и PCLATH имеет разрядность 13 бит. Младший байт счетчика (PCL) доступен для чтения и записи и находится в регистре 02h. Старший байт счетчика команд не может быть напрямую записан или считан и берется из регистра PCLATH (PC latch high), адрес которого 0Ah. Содержимое PCLATH передается в старший байт счетчика команд, когда он загружается новым значением. В зависимости от того, загружается ли в счетчик команд новое значение во время выполнения команд CALL, GOTO, или в младший байт счетчика команд (PCL) производится запись, – старшие биты счетчика команд загружаются из PCLATH разными способами, как показано на рис. 5.6.
Рис. 5.6. Загрузка старших бит счетчика команд. Команды CALL и GOTO оперируют 11-разрядным адресным диапазоном, достаточным для смещения в пределах страницы программной памяти объемом 2К слов. Для МК подгруппы PIC16F8X этого хватает. С целью обеспечения возможности расширения памяти команд для будущих моделей МК предусмотрена загрузка двух старших бит счетчика команд из регистра PCLATH<4:3>. При использовании команд CALL и GOTO пользователь должен убедиться в том, что эти страничные биты запрограммированы для выхода на нужную страницу. При выполнении команды CALL или выполнении прерывания весь 13-битный счетчик команд помещается в стек, поэтому для возвращения из подпрограммы не нужны манипуляции с разрядами PCLATH<4:3>. Микроконтроллеры подгруппы PIC16F8X игнорируют значения бит PCLATH<4:3>, которые используются для обращения к страницам 1, 2 и 3 программной памяти. Однако применять биты PCLATH<4:3> в качестве ячеек памяти общего назначения не рекомендуется, так как это может повлиять на совместимость с будущими поколениями изделий. Возможность выполнять арифметические операции непосредственно над счетчиком команд позволяет очень быстро и эффективно осуществлять табличные преобразования в PIC-контроллерах. Микроконтроллеры подгруппы PIC16F8X имеют восьмиуровневый аппаратный стек шириной 13 бит (см. рис. 5.4). Область стека не принадлежит ни к программной области, ни к области данных, а указатель стека пользователю недоступен. Текущее значение счетчика команд посылается в стек, когда выполняется команда CALL или производится обработка прерывания. При выполнении процедуры возврата из подпрограммы (команды RETLW, RETFIE или RETURN) содержимое счетчика команд восстанавливается из стека. Регистр PCLATH при операциях со стеком не изменяется. Стек работает как циклический буфер. Следовательно, после того как стек был загружен 8 раз, девятая загрузка перепишет значение первой. Десятая загрузка перепишет вторую и т.д. Если стек был выгружен 9 раз, счетчик команд становится таким же, как после первой выгрузки. Признаков положения стека в контроллере не предусмотрено, поэтому пользователь должен самостоятельно следить за уровнем вложения подпрограмм. 5.2.8. Прямая и косвенная адресации Когда производится прямая 9-битная адресация, младшие 7 бит берутся как прямой адрес из кода операции, а два бита указателя страниц (RP1, RP0) из регистра статуса, как показано на рис. 5.7.
Рис. 5.7. Методы адресации данных. Признаком косвенной адресации является обращение к регистру INDF. Любая команда, которая использует INDF (адрес 00h) в качестве регистра фактически обращается к указателю, который хранится в FSR (адрес 04h). Чтение косвенным образом самого регистра INDF даст результат 00h. Запись в регистр INDF косвенным образом будет выглядеть как NOP, но биты статуса могут быть изменены. Необходимый 9-битный адрес формируется объединением содержимого 8-битного FSR регистра и бита IRP из регистра статуса (см. рис. 5.7). Обратите внимание, что некоторые регистры специальных функций располагаются в банке 1. Чтобы адресоваться к ним, нужно дополнительно установить в единицу бит RP0 в регистре статуса. 5.2.9. Порты ввода/вывода Контроллеры подгруппы PIC16F8X имеют два порта: PORTA (5 бит) и PORTB (8 бит) с побитовой индивидуальной настройкой на ввод или на вывод. Порт A (PORTA) представляет собой 5-битовый фиксатор, соответствующий выводам контроллера RA<4:0>. Линия RA4 имеет вход триггера Шмитта и выход с открытым стоком. Все остальные линии порта имеют ТТЛ входные уровни и КМОП выходные буферы. Адрес регистра порта А – 05h. Каждой линии порта поставлен в соответствие бит направления передачи данных, который хранится в управляющем регистре TRISA, расположенном по адресу 85h. Если бит управляющего TRISA регистра имеет значение 1, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра-фиксатора порта. При включении питания все линии порта по умолчанию настроены на ввод. На рис. 5.8 дана схема линий RA<3:0> порта A.
Рис. 5.8. Схема линий RA <3:0 порта А. Выводы порта имеют защитные диоды к Vdd и Vss Операция чтения порта А считывает состояние выводов порта, в то время как запись в него изменяет состояние триггеров порта. Все операции с портом являются операциями типа "чтение-модификация-запись". Поэтому запись в порт предполагает, что состояние выводов порта вначале считывается, затем модифицируется и записывается в триггер-фиксатор. Вывод RA4 мультиплексирован с тактовым входом таймера TMR0. Схема линии RA4 порта А приведена на рис. 5.9. Порт В (PORTB) – это двунаправленный 8-битовый порт, соответствующий выводам RB<7:0> контроллера и расположенный по адресу 06h. Относящийся к порту В управляющий регистр TRISB расположен на первой странице регистров по адресу 86h. Если бит управляющего TRISB регистра имеет значение 1, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра защелки. При включении питания все линии порта по умолчанию настроены на ввод.
Рис. 5.9. Схема линии RA4 порта А. Вывод порта имеет защитный диод только к Vss. У каждой ножки порта В имеется небольшая активная нагрузка (около 100мкА) на линию питания (pull-up). Она автоматически отключается, если эта ножка запрограммирована как вывод. Более того, управляющий бит /RBPU регистра OPTION<7> может отключить (при RBPU=1) все нагрузки. Сброс при включении питания также отключает все нагрузки. Четыре линии порта В (RB<7:4>) могут вызвать прерывание при изменении значения сигнала на любой из них. Если эти линии настроены на ввод, то они опрашиваются и защелкиваются в цикле чтения Q1. Новая величина входного сигнала сравнивается со старой в каждом командном цикле. При несовпадении значения сигнала на ножке и в фиксаторе генерируется высокий уровень. Выходы детекторов "несовпадений" RB4, RB5, RB6, RB7 объединяются по ИЛИ и генерируют прерывание RBIF (запоминаемое в регистре INTCON<0>). Любая линия, настроенная как вывод, в этом сравнении не участвует. Прерывание может вывести кристалл из режима SLEEP. В подпрограмме обработки прерывания следует сбросить запрос прерывания одним из следующих способов: прочитать (или записать в) порт В. Это завершит состояние сравнения; обнулить бит RBIF регистра INTCON<0>. При этом необходимо иметь в виду, что условие "несовпадения" будет продолжать устанавливать признак RBIF. Только чтение порта В может устранить "несовпадение" и позволит обнулить бит RBIF. Прерывание по несовпадению и программно устанавливаемые внутренние активные нагрузки на этих четырех линиях могут обеспечить простой интерфейс, например, с клавиатурой, с выходом из режима SLEEP по нажатию клавиш. Схемы линий порта B приведены на рис. 5.10 и 5.11.
Рис. 5.10. Схема линий RB <7:4 порта B. Выводы порта имеют защитные диоды к Vdd и Vss.
Рис. 5.11. Схема линий RB <3:0 порта B. Выводы порта имеют защитные диоды к Vdd и Vss При организации двунаправленных портов необходимо учитывать особенности организации ввода/вывода данных МК. Любая команда, которая осуществляет запись, выполняет ее внутри как "чтение-модификация-запись". Например, команды BCF и BSF считывают порт целиком, модифицируют один бит и выводят результат обратно. Здесь необходима осторожность. В частности, команда BSF PORTB, 5 (установить в единицу бит 5 порта B) сначала считывает все реальные значения сигналов, присутствующие в данный момент на выводах порта. Затем выполняются действия над битом 5, и новое значение байта целиком записывается в выходные фиксаторы. Если другой бит регистра PORTB используется в качестве двунаправленного ввода/вывода (скажем, бит 0), и в данный момент он определен как входной, то входной сигнал на этом выводе будет считан и записан обратно в выходной триггер-фиксатор этого же вывода, стирая предыдущее состояние. До тех пор, пока эта ножка остается в режиме ввода, никаких проблем не возникает. Однако если позднее линия 0 переключится в режим вывода, ее состояние будет неопределенным. На ножку, работающую в режиме вывода, не должны нагружаться внешние источники токов ("монтажное И", "монтажное ИЛИ"). Большие результирующие токи могут повредить кристалл. Необходимо выдерживать определенную последовательность обращения к портам ввода/вывода. Запись в порт вывода происходит в конце командного цикла. Но при чтении данные должны быть стабильны в начале командного цикла. Будьте внимательны в операциях чтения, следующих сразу за записью в тот же порт. Здесь надо учитывать инерционность установления напряжения на выводах. Может потребоваться программная задержка, чтобы напряжение на ножке (которое зависит от нагрузки) успело стабилизироваться до начала исполнения следующей команды чтения. Дальше » 5.2.10. Модуль таймера и регистр таймера Структура модуля таймера/счетчика TIMER0 и его взаимосвязь с регистрами TMR0 и OPTION показаны на рис. 5.12. TIMER0 является программируемым модулем и содержит следующие компоненты: 8-разрядный таймер/счетчик TMR0 с возможностью чтения и записи как регистр; 8-разрядный программно управляемый предварительный делитель (предделитель); мультиплексор входного сигнала для выбора внутреннего или внешнего тактового сигнала; схему выбора фронта внешнего тактового сигнала; формирователь запроса прерывания по переполнению регистра TMR0 с FFh до 00h. Режим таймера выбирается путем сбрасывания в ноль бита T0CS регистра OPTION <5>. В режиме таймера TMR0 инкрементируется каждый командный цикл (без пределителя). После записи информации в TMR0 инкрементирование его начнется после двух командных циклов. Это происходит со всеми командами, которые производят запись или чтение-модификацию-запись TMR0 (например, MOVF TMR0, CLRF TMR0). Избежать этого можно при помощи записи в TMR0 скорректированного значения. Если TMR0 нужно проверить на равенство нулю без останова счета, следует использовать инструкцию MOVF TMR0,W. Режим счетчика выбирается путем установки в единицу бита T0CS регистра OPTION<5>. В этом режиме регистр TMR0 будет инкрементироваться либо нарастающим, либо спадающим фронтом на выводе RA4/T0CKI от внешних событий. Направление фронта определяется управляющим битом T0SE в регистре OPTION<4>. При T0SE = 0 будет выбран нарастающий фронт. Предделитель может использоваться или совместно с TMR0, или со сторожевым (Watchdog) таймером. Вариант подключения делителя контролируется битом PSA регистра OPTION<3>. При PSA=0 делитель будет подсоединен к TMR0. Содержимое делителя программе недоступно. Коэффициент деления пределителя программируется битами PS2…PS0 регистра OPTION<2:0>.
Рис. 5.12. Структурная схема таймера/счетчика TMR0. Прерывание по TMR0 вырабатывается тогда, когда происходит переполнение регистра таймера/счетчика при переходе от FFh к 00h. Тогда устанавливается бит запроса T0IF в регистре INTCON<2>. Данное прерывание можно замаскировать битом T0IE в регистре INTCON<5>. Бит запроса T0IF должен быть сброшен программно при обработке прерывания. Прерывание по TMR0 не может вывести процессор из режима SLEEP потому, что таймер в этом режиме не функционирует. При PSA=1 делитель будет подсоединен к сторожевому таймеру как постделитель (делитель на выходе). Возможные варианты использования пределителя показаны на рис. 5.13. При использовании пределителя совместно с TMR0, все команды, изменяющие содержимое TMR0, обнуляют предделитель. Если предделитель используется совместно с WDT, команда CLRWDT обнуляет содержимое пределителя вместе с WDT. При использовании модуля TIMER0 в режиме счетчика внешних событий необходимо учитывать то, что внешний тактовый сигнал синхронизируется внутренней частотой Fosc. Это приводит к появлению задержки во времени фактического инкрементирования содержимого TMR0. Синхронизация происходит по окончании 2-го и 4-го тактов работы МК, поэтому, если предделитель не используется, то для фиксации входного события необходимо, чтобы длительности высокого и низкого состояний сигнала на входе RA4/T0CKI были бы не менее 2 периодов тактовой частоты Tosc плюс некоторая задержка ( ~ 20 нс). Если модуль TIMER0 используется совместно с пределителем, то частота входного сигнала делится асинхронным счетчиком так, что сигнал на выходе пределителя становится симметричным. При этом необходимо, чтобы длительности высокого и низкого уровней сигнала на входе RA4/T0CKI были бы не менее 10 нс. Синхронизация сигнала происходит на выходе пределителя, поэтому существует небольшая задержка между фронтом внешнего сигнала и временем фактического инкремента таймера/счетчика. Эта задержка находится в диапазоне от 3 до 7 периодов колебаний тактового генератора. Таким образом, измерение интервала между событиями будет выполнено с точностью ±4 · Tosc.
Рис. 5.13. Структура и возможные варианты использования пределителя. 5.2.11. Память данных в РПЗУ (EEPROM) Микроконтроллеры подгруппы PIC6F8X имеют энергонезависимую память данных 64х8 EEPROM бит, которая допускает запись и чтение во время нормальной работы (во всем диапазоне питающих напряжений). Эта память не принадлежит области регистровой памяти ОЗУ. Доступ к ней осуществляется посредством косвенной адресации через регистры специальных функций: EEDATA <08h>, который содержит 8-битовые данные для чтения/записи и EEADR <09h>, включающий адрес ячейки, к которой идет обращение. Для управления процессом чтения/записи используются два регистра: EECON1 <88h> и EECON2 <89h>. При записи байта автоматически стирается предыдущее значение, и записываются новые данные (стирание перед записью). Все эти операции производит встроенный автомат записи EEPROM. Содержимое ячеек этой памяти при выключении питания сохраняется. Регистр EEADR может адресовать до 256 байт данных EEPROM. В МК подгруппы PIC6F8X используются только первые 64 байта, адресуемые шестью младшими битами EEADR<5:0>. Однако старшие два бита также декодируются. Поэтому эти два бита должны быть установлены в ‘0’, чтобы адрес попал в доступные 64 бита адресного пространства. Назначение бит регистра EECON1 приведено в табл. 5.6. Таблица 5.6. Назначение бит регистра EECON1 (адреса 88h).U U U R/W-0 R/W-x R/W-0 R/S-0 R/S-x - - - EEIF WRERR WREN WR RD Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0 Биты 7:5 не используются (читаются как ‘0’) Бит 4: EEIF: бит запроса прерывания по записи в EEPROM 0 = операция записи не завершена или не начиналась 1 = операция записи завершена (должен быть сброшен программно) Бит 3: WRERR: бит признака ошибки записи в EEPROM 0 = операция записи завершена 1 = операция записи прервана преждевременно (сбросом по /MCLR или сбросом от WDT) Бит 2: WREN: бит разрешения записи в EEPROM 0 = запрещена запись в EEPROM 1 = разрешены циклы записи Бит 1: WR: бит управления записью 0 = цикл записи данных в EEPROM завершен 1 = инициирует цикл записи (сбрасывается аппаратно по завершении записи. Бит WR может быть только установлен (но не сброшен) программно) Бит 0: RD: бит управления чтением 0 = чтение данных EEPROM не инициировано 1 = инициирует чтение данных EEPROM (чтение занимает один цикл. Бит RD сбрасывается аппаратно. Бит RD может быть только установлен (но не сброшен) программно) Регистр EECON2 не является физическим регистром. Он используется исключительно при организации записи данных в EEPROM. Чтение регистра EECON2 дает нули. При считывании данных из памяти EEPROM необходимо записать нужный адрес в EEADR регистр и затем установить бит RD EECON1<0> в единицу. Данные появятся в следующем командном цикле в регистре EEDATA и могут быть прочитаны. Данные в регистре EEDATA фиксируются. При записи в память EEPROM необходимо сначала записать адрес в EEADR-регистр и данные в EEDATA-регистр. Затем следует выполнить специальную последовательность команд, производящую непосредственную запись: movlw 55h movwf EECON2 movlw AAh movwf EECON2 bsf EECON1,WR;установить WR бит, начать запись Во время выполнения этого участка программы все прерывания должны быть запрещены, для точного выполнения временной диаграммы. Время записи – примерно 10 мс. Фактическое время записи может изменяться в зависимости от напряжения, температуры и индивидуальных свойств кристалла. В конце записи бит WR автоматически обнуляется, а флаг завершения записи EEIF, он же запрос на прерывание, устанавливается. Для предотвращения случайных записей в память данных предусмотрен специальный бит WREN в регистре EECON1. Рекомендуется держать бит WREN выключенным, кроме тех случаев, когда нужно обновить память данных. Более того, кодовые сегменты, которые устанавливают бит WREN, и те, которые выполняют запись, следует хранить на различных адресах, чтобы избежать случайного выполнения их обоих при сбое программы. 5.2.12. Организация прерываний МК подгруппы PIC16F8X имеют четыре источника прерываний: внешнее прерывание с вывода RB0/INT; прерывание от переполнения счетчика/таймера TMR0; прерывание от изменения сигналов на линиях порта RB<7:4>; прерывание по окончании записи данных в EEPROM. Все прерывания имеют один и тот же вектор/адрес – 0004h. Однако в управляющем регистре прерываний INTCON соответствующим битом-признаком записывается, от какого именно источника поступил запрос прерывания. Исключение составляет прерывание по завершении записи в EEPROM, признак которого находится в регистре EECON1. Бит общего разрешения/запрещения прерывания GIE (INTCON <7>) разрешает (если = 1) все индивидуально незамаскированные прерывания или запрещает их (если = 0). Каждое прерывание в отдельности может быть дополнительно разрешено/запрещено установкой/сбросом соответствующего бита в регистре INTCON. Бит GIE при сбросе обнуляется. Когда начинает обрабатываться прерывание, бит GIE обнуляется, чтобы запретить дальнейшие прерывания, адрес возврата посылается в стек, а в программный счетчик загружается адрес 0004h. Время реакции на прерывание для внешних событий, таких как прерывание от ножки INT или порта B, составляет приблизительно пять циклов. Это на один цикл меньше, чем для внутренних событий, таких как прерывание по переполнению от таймера TMR0. Время реакции всегда одинаковое. В подпрограмме обработки прерывания источник прерывания может быть определен по соответствующему биту в регистре признаков. Этот флаг-признак должен быть программно сброшен внутри подпрограммы. Признаки запросов прерываний не зависят от соответствующих маскирующих битов и бита общего маскирования GIE. Команда возврата из прерывания RETFIE завершает прерывающую подпрограмму и устанавливает бит GIE, чтобы опять разрешить прерывания. Логика прерываний контроллера изображена на рис. 5.14.
Рис. 5.14. Логика прерываний микроконтроллера. Внешнее прерывание на ножке RB0/INT осуществляется по фронту: либо по нарастающему (если в регистре OPTION бит INTEDG=1), либо по спадающему (если INTEDG=0). Когда фронт обнаруживается на ножке INT, бит запроса INTF устанавливается в единицу (INTCON <1>). Это прерывание может быть замаскировано сбросом управляющего бита INTE в ноль (INTCON <4>). Бит запроса INTF необходимо очистить прерывающей программой перед тем, как опять разрешить это прерывание. Прерывание INT может вывести процессор из режима SLEEP, если перед входом в этот режим бит INTE был установлен в единицу. Состояние бита GIE также определяет, будет ли процессор переходить на подпрограмму прерывания после выхода из режима SLEEP. Переполнение счетчика TMR0 (FFh->00h) устанавливает в единицу бит запроса T0IF (INTCON<2>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски T0IE (INTCON<5>). Сброс запроса T0IF – дело программы обработки. Любое изменение сигнала на одном из четырех входов порта RB<7:4> устанавливает в единицу бит RBIF (INTCON<0>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски RBIE (INTCON<3>). Сброс запроса RBIF – дело программы обработки. Признак запроса прерывания по завершении записи в EEPROM, EEIF (EECON1<4>) устанавливается в единицу по окончании автоматической записи данных в EEPROM. Это прерывание может быть замаскировано сбросом бита EEIE (INTCON<6>). Сброс запроса EEIF – дело программы обработки. ПРОПУСК Глава 6. Проектирование устройств на микроконтроллерах 11. Лекция: Особенности разработки цифровых устройств на основе микроконтроллеров Страницы: 1 | 2 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассказывается об основных этапах проектирования и разработки цифровых устройств и систем на основе микроконтроллеров, а также приводится обзор методов совместной отладки аппаратных и программных средств.
6.1. Разработка микропроцессорной системы на основе микроконтроллера 6.1.1. Основные этапы разработки МПС на основе МК используются чаще всего в качестве встроенных систем для решения задач управления некоторым объектом. Важной особенностью данного применения является работа в реальном времени, т.е. обеспечение реакции на внешние события в течение определенного временного интервала. Такие устройства получили название контроллеров. Технология проектирования контроллеров на базе МК полностью соответствует принципу неразрывного проектирования и отладки аппаратных и программных средств, принятому в микропроцессорной технике. Это означает, что перед разработчиком такого рода МПС стоит задача реализации полного цикла проектирования, начиная от разработки алгоритма функционирования и заканчивая комплексными испытаниями в составе изделия, а, возможно, и сопровождением при производстве. Сложившаяся к настоящему времени методология проектирования контроллеров может быть представлена так, как показано на рис. 6.1. В техническом задании формулируются требования к контроллеру с точки зрения реализации определенной функции управления. Техническое задание включает в себя набор требований, который определяет, что пользователь хочет от контроллера и что разрабатываемый прибор должен делать. Техническое задание может иметь вид текстового описания, не свободного в общем случае от внутренних противоречий.
Рис. 6.1. Основные этапы разработки контроллера. На основании требований пользователя составляется функциональная спецификация, которая определяет функции, выполняемые контроллером для пользователя после завершения проектирования, уточняя тем самым, насколько устройство соответствует предъявляемым требованиям. Она включает в себя описания форматов данных, как на входе, так и на выходе, а также внешние условия, управляющие действиями контроллера. Функциональная спецификация и требования пользователя являются критериями оценки функционирования контролера после завершения проектирования. Может потребоваться проведение нескольких итераций, включающих обсуждение требований и функциональной спецификации с потенциальными пользователями контроллера, и соответствующую коррекцию требований и спецификации. Требования к типу используемого МК формулируются на данном этапе чаще всего в неявном виде. Этап разработки алгоритма управления является наиболее ответственным, поскольку ошибки данного этапа обычно обнаруживаются только при испытаниях законченного изделия и приводят к необходимости дорогостоящей переработки всего устройства. Разработка алгоритма обычно сводится к выбору одного из нескольких возможных вариантов алгоритмов, отличающихся соотношением объема программного обеспечения и аппаратных средств. При этом необходимо исходить из того, что максимальное использование аппаратных средств упрощает разработку и обеспечивает высокое быстродействие контроллера в целом, но сопровождается, как правило, увеличением стоимости и потребляемой мощности. Связано это с тем, что увеличение доли аппаратных средств достигается либо путем выбора более сложного МК, либо путем использования специализированных интерфейсных схем. И то, и другое приводит к росту стоимости и энергопотребления. Увеличение удельного веса программного обеспечения позволяет сократить число элементов контроллера и стоимость аппаратных средств, но это приводит к снижению быстродействия, увеличению необходимого объема внутренней памяти МК, увеличению сроков разработки и отладки программного обеспечения. Критерием выбора здесь и далее является возможность максимальной реализации заданных функций программными средствами при минимальных аппаратных затратах и при условии обеспечения заданных показателей быстродействия и надежности в полном диапазоне условий эксплуатации. Часто определяющими требованиями являются возможность защиты информации (программного кода) контроллера, необходимость обеспечения максимальной продолжительности работы в автономном режиме и другие. В результате выполнения этого этапа окончательно формулируются требования к параметрам используемого МК. При выборе типа МК учитываются следующие основные характеристики: разрядность; быстродействие; набор команд и способов адресации; требования к источнику питания и потребляемая мощность в различных режимах; объем ПЗП программ и ОЗУ данных; возможности расширения памяти программ и данных; наличие и возможности периферийных устройств, включая средства поддержки работы в реальном времени (таймеры, процессоры событий и т.п.); возможность перепрограммирования в составе устройства; наличие и надежность средств защиты внутренней информации; возможность поставки в различных вариантах конструктивного исполнения; стоимость в различных вариантах исполнения; наличие полной документации; наличие и доступность эффективных средств программирования и отладки МК; количество и доступность каналов поставки, возможность замены изделиями других фирм. Список этот не является исчерпывающим, поскольку специфика проектируемого устройства может перенести акцент требований на другие параметры МК. Определяющими могут оказаться, например, требования к точности внутреннего компаратора напряжений или наличие большого числа выходных каналов ШИМ. Номенклатура выпускаемых в настоящее время МК исчисляется тысячами типов изделий различных фирм. Современная стратегия модульного проектирования обеспечивает потребителя разнообразием моделей МК с одним и тем же процессорным ядром. Такое структурное разнообразие открывает перед разработчиком возможность выбора оптимального МК, не имеющего функциональной избыточности, что минимизирует стоимость комплектующих элементов. Однако для реализации на практике возможности выбора оптимального МК необходима достаточно глубокая проработка алгоритма управления, оценка объема исполняемой программы и числа линий сопряжения с объектом на этапе выбора МК. Допущенные на данном этапе просчеты могут впоследствии привести к необходимости смены модели МК и повторной разводки печатной платы макета контроллера. В таких условиях целесообразно выполнять предварительное моделирование основных элементов прикладной программы с использованием программно-логической модели выбранного МК. При отсутствии МК, обеспечивающего требуемые по ТЗ характеристики проектируемого контроллера, необходим возврат к этапу разработки алгоритма управления и пересмотр выбранного соотношения между объемом программного обеспечения и аппаратных средств. Отсутствие подходящего МК чаще всего означает, что для реализации необходимого объема вычислений (алгоритмов управления) за отведенное время нужна дополнительная аппаратная поддержка. Отрицательный результат поиска МК с требуемыми характеристиками может быть связан также с необходимостью обслуживания большого числа объектов управления. В этом случае возможно использование внешних схем обрамления МК. На этапе разработки структуры контроллера окончательно определяется состав имеющихся и подлежащих разработке аппаратных модулей, протоколы обмена между модулями, типы разъемов. Выполняется предварительная проработка конструкции контроллера. В части программного обеспечения определяются состав и связи программных модулей, язык программирования. На этом же этапе осуществляется выбор средств проектирования и отладки. Возможность перераспределения функций между аппаратными и программными средствами на данном этапе существует, но она ограничена характеристиками уже выбранного МК. При этом необходимо иметь в виду, что современные МК выпускаются, как правило, сериями (семействами) контроллеров, совместимых программно и конструктивно, но различающихся по своим возможностям (объем памяти, набор периферийных устройств и т.д.). Это дает возможность выбора структуры контроллера с целью поиска наиболее оптимального варианта реализации. Нельзя не упомянуть здесь о новой идеологии разработки устройств на базе МК, предложенной фирмой "Scenix". Она основана на использовании высокоскоростных RISC-микроконтроллеров серии SX с тактовой частотой до 100 МГц. Эти МК имеют минимальный набор встроенной периферии, а все более сложные периферийные модули эмулируются программными средствами. Такие модули программного обеспечения называются "виртуальными периферийными устройствами", они обеспечивают уменьшение числа элементов контроллера, времени разработки, увеличивают гибкость исполнения. К настоящему времени разработаны целые библиотеки виртуальных устройств, содержащие отлаженные программные модули таких устройств как модули ШИМ и ФАПЧ, последовательные интерфейсы, генераторы и измерители частоты, контроллеры прерываний и многие другие. Дальше » 6.1.2. Разработка и отладка аппаратных средств После разработки структуры аппаратных и программных средств дальнейшая работа над контроллером может быть распараллелена. Разработка аппаратных средств включает в себя разработку общей принципиальной схемы, разводку топологии плат, монтаж макета и его автономную отладку. Время выполнения этих этапов зависит от имеющегося набора апробированных функционально-топологических модулей, опыта и квалификации разработчика. На этапе ввода принципиальной схемы и разработки топологии используются, как правило, распространенные системы проектирования типа "ACCEL EDA" или "OrCad". Автономная отладка аппаратуры на основе МК с открытой архитектурой предполагает контроль состояния многоразрядных магистралей адреса и данных с целью проверки правильности обращения к внешним ресурсам памяти и периферийным устройствам. Закрытая архитектура МК предполагает реализацию большинства функций разрабатываемого устройства внутренними средствами микроконтроллера. Поэтому разрабатываемый контроллер будет иметь малое число периферийных ИС, а обмен с ними будет идти преимущественно по последовательным интерфейсам. Здесь на первый план выйдут вопросы согласования по нагрузочной способности параллельных портов МК и отладка алгоритмов обмена по последовательным каналам. 6.1.3. Разработка и отладка программного обеспечения Содержание этапов разработки программного обеспечения, его трансляции и отладки на моделях существенно зависит от используемых системных средств. В настоящее время ресурсы 8-разрядных МК достаточны для поддержки программирования на языках высокого уровня. Это позволяет использовать все преимущества структурного программирования, разрабатывать программное обеспечение с использованием раздельно транслируемых модулей. Одновременно продолжают широко использоваться языки низкого уровня типа ассемблера, особенно при необходимости обеспечения контролируемых интервалов времени. Задачи предварительной обработки данных часто требуют использования вычислений с плавающей точкой, трансцендентных функций. В настоящее время самым мощным средством разработки программного обеспечения для МК являются интегрированные среды разработки, имеющие в своем составе менеджер проектов, текстовый редактор и симулятор, а также допускающие подключение компиляторов языков высокого уровня типа Паскаль или Си. При этом необходимо иметь в виду, что архитектура многих 8-разрядных МК вследствие малого количества ресурсов, страничного распределения памяти, неудобной индексной адресации и некоторых других архитектурных ограничений не обеспечивает компилятору возможности генерировать эффективный код. Для обхода этих ограничений разработчики ряда компиляторов вынуждены были перекладывать на пользователя заботу об оптимизации кода программы. Для проверки и отладки программного обеспечения используются так называемые программные симуляторы, предоставляющие пользователю возможность выполнять разработанную программу на программно-логической модели МК. Программные симуляторы распространяются, как правило, бесплатно и сконфигурированы сразу на несколько МК одного семейства. Выбор конкретного типа МК среди моделей семейства обеспечивает соответствующая опция меню конфигурации симулятора. При этом моделируется работа ЦП, всех портов ввода/вывода, прерываний и другой периферии. Карта памяти моделируемого МК загружается в симулятор автоматически, отладка ведется в символьных обозначениях регистров. Загрузив программу в симулятор, пользователь имеет возможность запускать ее в пошаговом или непрерывном режимах, задавать условные или безусловные точки останова, контролировать и свободно модифицировать содержимое ячеек памяти и регистров симулируемого МК. 6.1.4. Методы и средства совместной отладки аппаратных и программных средств Этап совместной отладки аппаратных и программных средств в реальном масштабе времени является самым трудоемким и требует использования инструментальных средств отладки. К числу основных инструментальных средств отладки относятся: внутрисхемные эмуляторы; платы развития (оценочные платы); мониторы отладки; эмуляторы ПЗП. Внутрисхемный эмулятор – программно-аппаратное средство, способное заменить эмулируемый МК в реальной схеме. Стыковка внутрисхемного эмулятора с отлаживаемой системой производится при помощи кабеля со специальной эмуляционной головкой, которая вставляется вместо МК в отлаживаемую систему. Если МК нельзя удалить из отлаживаемой системы, то использование эмулятора возможно, только если этот микроконтроллер имеет отладочный режим, при котором все его выводы находятся в третьем состоянии. В этом случае для подключения эмулятора используют специальный адаптер-клипсу, который подключается непосредственно к выводам эмулируемого МК. Внутрисхемный эмулятор – это наиболее мощное и универсальное отладочное средство, которое делает процесс функционирования отлаживаемого контроллера прозрачным, т.е. легко контролируемым, произвольно управляемым и модифицируемым. Платы развития, или, как принято их называть в зарубежной литературе, оценочные платы (Evaluation Boards), являются своего рода конструкторами для макетирования электронных устройств. Обычно это печатная плата с установленным на ней МК и всей необходимой ему стандартной периферией. На этой плате также устанавливают схемы связи с внешним компьютером. Как правило, там же имеется свободное поле для монтажа прикладных схем пользователя. Иногда предусмотрена уже готовая разводка для установки дополнительных устройств, рекомендуемых фирмой. Например, ПЗП, ОЗУ, ЖКИ-дисплей, клавиатура, АЦП и др. Кроме учебных или макетных целей, такие доработанные пользователем платы можно использовать в качестве одноплатных контроллеров, встраиваемых в малосерийную продукцию. Для большего удобства платы развития комплектуются еще и простейшим средством отладки на базе монитора отладки. Используются два типа мониторов отладки: один для МК, имеющих внешнюю шину, а второй – для МК, не имеющих внешней шины. В первом случае отладочный монитор поставляется в виде микросхемы ПЗП, которая вставляется в специальную розетку на плате развития. Плата также имеет ОЗУ для программ пользователя и канал связи с внешним компьютером или терминалом. Во втором случае плата развития имеет встроенные схемы программирования внутреннего ПЗП МК, которые управляются от внешнего компьютера. При этом программа монитора просто заносится в ПЗП МК совместно с прикладными кодами пользователя. Прикладная программа должна быть специально подготовлена: в нужные места необходимо вставить вызовы отладочных подпрограмм монитора. Затем осуществляется пробный прогон. Чтобы внести в программу исправления, пользователю надо стереть ПЗП и произвести повторную запись. Готовую прикладную программу получают из отлаженной путем удаления всех вызовов мониторных функций и самого монитора отладки. Возможности отладки, предоставляемые комплектом "плата развития плюс монитор", не столь универсальны, как возможности внутрисхемного эмулятора, да и некоторая часть ресурсов МК в процессе отладки отбирается для работы монитора. Тем не менее, наличие набора готовых программно-аппаратных средств, позволяющих без потери времени приступить к монтажу и отладке проектируемой системы, во многих случаях является решающим фактором. Особенно если учесть, что стоимость такого комплекта несколько меньше, чем стоимость более универсального эмулятора. Эмулятор ПЗП – программно-аппаратное средство, позволяющее замещать ПЗП на отлаживаемой плате, и подставляющее вместо него ОЗУ, в которое может быть загружена программа с компьютера через один из стандартных каналов связи. Это устройство позволяет пользователю избежать многократных циклов перепрограммирования ПЗП. Эмулятор ПЗП нужен только для МК, которые могут обращаться к внешней памяти программ. Это устройство сравнимо по сложности и по стоимости с платами развития и имеет одно большое достоинство: универсальность. Эмулятор ПЗП может работать с любыми типами МК. Эмулируемая память доступна для просмотра и модификации, но контроль над внутренними управляющими регистрами МК был до недавнего времени невозможен. В последнее время появились модели интеллектуальных эмуляторов ПЗП, которые позволяют "заглядывать" внутрь МК на плате пользователя. Интеллектуальные эмуляторы представляют собой гибрид из обычного эмулятора ПЗП, монитора отладки и схем быстрого переключения шины с одного на другой. Это создает эффект, как если бы монитор отладки был установлен на плате пользователя и при этом он не занимает у МК никаких аппаратных ресурсов, кроме небольшой зоны программных шагов, примерно 4К. Этап совместной отладки аппаратных и программных средств в реальном масштабе времени завершается, когда аппаратура и программное обеспечение совместно обеспечивают выполнение всех шагов алгоритма работы системы. В конце этапа отлаженная программа заносится с помощью программатора в энергонезависимую память МК, и проверяется работа контроллера без эмулятора. При этом используются лабораторные источники питания. Часть внешних источников сигналов может моделироваться. Этап интеграции разработанного контроллера в изделие заключается в повторении работ по совместной отладке аппаратуры и управляющей программы, но при работе в составе изделия, питании от штатного источника и с информацией от штатных источников сигналов и датчиков. Состав и объем испытаний разработанного и изготовленного контроллера зависит от условий его эксплуатации и определяется соответствующими нормативными документами. Проведение испытаний таких функционально сложных изделий, как современные контроллеры, может потребовать разработки специализированных средств контроля состояния изделия во время испытаний.
12. Лекция: Разработка программного обеспечения для PIC-микроконтроллеров Страницы: 1 | 2 | 3 | 4 | 5 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассказывается об основных этапах проектирования и разработки цифровых устройств и систем на основе микроконтроллеров, а также приводится обзор методов совместной отладки аппаратных и программных средств.
6.2. Разработка программного обеспечения для PIC-микроконтроллеров Разработка программного обеспечения является центральным моментом общего процесса проектирования. Центр тяжести функциональных свойств современных цифровых систем находится именно в программных средствах. Основным инструментом для профессиональной разработки программ является ассемблер, предполагающий детализацию на уровне команд МК. Только ассемблер позволяет максимально использовать ресурсы кристалла. Для микроконтроллеров PIC выпущено большое количество различных средств разработки. В данной главе речь пойдет о средствах, предоставляемых фирмой Microchip, которые весьма эффективны и широко используются на практике. 6.2.1. Ассемблер MPASM Ассемблер MPASM представляет собой интегрированную программную среду для разработки программных кодов PIC микроконтроллеров всех семейств. Выпускается фирмой Microchip в двух вариантах: для работы под DOS и для работы под Windows 95/98/NT. Ассемблер MPASM может использоваться как самостоятельно, так и в составе интегрированной среды разработки MPLAB. Он включает несколько программ: собственно MPASM, MPLINK и MPLIB, причем каждая из них обладает собственным интерфейсом. Программа MPASM может использоваться для двух целей: генерации исполняемого (абсолютного) кода, предназначенного для записи в МК с помощью программатора; генерации перемещаемого объектного кода, который затем будет связан с другими ассемблированными или компилированными модулями. Исполняемый код является для MPASM выходным кодом по умолчанию. При этом все переменные источника должны быть явно описаны в тексте программы или в файле, подключаемом с помощью директивы INCLUDE <filename>. Если при ассемблировании не выявляется ошибок, то генерируется выходной .hex-файл, который может быть загружен в МК с помощью программатора. При использовании ассемблера MPASM в режиме генерации перемещаемого объектного кода формируются объектные модули, которые могут быть впоследствии объединены с другими модулями при помощи компоновщика MPLINK. Программа-компоновщик MPLINK преобразует перемещаемые объектные коды в исполняемый бинарный код, привязанный к абсолютным адресам МК. Библиотечная утилита MPLIB позволяет для удобства работы сгруппировать перемещаемые объекты в один файл или библиотеку. Эти библиотеки могут быть связаны компоновщиком MPLINK в файл выходного объектного кода ассемблера MPASM. Программы MPASM и MPLINK доступны через оболочку MPASM, тогда как MPLIB доступна только со своей командной строки. Исходным файлом для ассемблера MPASM по умолчанию является файл с расширением .ASM. Текст исходного файла должен соответствовать требованиям синтаксиса, приведенным далее. Ассемблер MPASM может быть вызван командной строкой MPASM [/<Option>[ /<Option>...]] <file_name> где /<Option> означает выбор режима работы ассемблера в командной строке; <file_name> – имя файла на ассемблирование. Режимы работы ассемблера, выбранные по умолчанию, приведены в табл. 6.1. Таблица 6.1. Режимы работы ассемблера по умолчанию.Выбор Значение по умолчанию Описание ? N/A Вызвать помощь a INHX8M Генерировать абсолютный .COD и hex выход непосредственно из ассемблера: c On Выбрать/запретить случай чувствительности e On Выбрать/запретить файл ошибок h N/A Отобразить панель помощи MPASM l On Выбрать/запретить файл листинга, генерированный из макроассемблера. m On Вызвать/запретить макрорасширение o N/A Установить путь для объектных файлов /o<path>\object.file p None Установить тип процессора: /p<processor_type>; q Off Разрешить/Запретить скрытый режим (запретить вывод на экран) r Hex Определяет тип числа по умолчанию: /r<radix> w 0 Определяет уровень диагностических сообщений в файле листинга /w<level>, где <level> может быть: 0 – сообщать все, 1 – сообщать о предупреждениях и ошибках, 2 – сообщать только об ошибках. x Off Разрешить/запретить перекрестные ссылки в файле листинга. Здесь и далее используются следующие соглашения по использованию символов: [ ] – для аргументов по выбору; < > – для выделения специальных ключей <TAB>, <ESC> или дополнительного выбора; | – для взаимоисключающих аргументов (выбор ИЛИ); строчные символы – для обозначения типа данных. Выбор по умолчанию, приведенный в табл. 6.1, может быть изменен командной строкой: /<option> разрешает выбор; /<option>+ разрешает выбор; /<option> – запрещает выбор. Исходный ассемблерный файл создается с использованием любого ASCII текстового редактора. Каждая линия исходного файла может содержать до четырех типов информации: метки (labels) мнемоника (mnemonics) операнды (operands) комментарий (comments) Порядок и положение каждого типа имеет значение. Метка должна начинаться в колонке номер один. Мнемоника может начинаться в колонке два или далее. Операнды идут за мнемоникой. Комментарий может следовать за операндом, мнемоникой или меткой или может начинаться в любом столбце, если в качестве первого не пустого символа используется * или ;. Максимальная длина строки 255 символов. Один или несколько пробелов должны отделять метку и мнемонику или мнемонику и операнд(ы). Операнды могут отделяться запятой. Например: List p=16C54, r=HEX ORG 0x1FF ;Вектор сброса GOTO START ;Возврат на начало ORG 0x000 ;Адрес начала исполнения ;программы START MOVLW 0x0A ;Выполнение программы ;PIC МК MOVLW 0x0B ;Выполнять всегда GOTO START END Метки В поле метки размещается символическое имя ячейки памяти, в которой хранится отмеченный операнд. Все метки должны начинаться в колонке 1. За ними может следовать двоеточие (:), пробел, табуляция или конец строки. Комментарий может также начинаться в колонке 1, если используется одно из обозначений комментария. Метка может начинаться с символа или нижнего тире (_) и содержать буквенные символы, числа, нижние тире и знак вопроса. Длина метки может быть до 32 символов. Мнемоники Мнемоники представляют собой мнемонические обозначения команды, которые непосредственно транслируются в машинный код. Мнемоники ассемблерных инструкций, директивы ассемблера и макровызовы должны начинаться, по крайней мере, в колонке 2. Если есть метка на той же линии, она должна быть отделена от этой метки двоеточием или одним или более пробелами или табуляцией. Операнды В этом поле определяются операнды (или операнд), участвующие в операции. Операнды должны быть отделены от мнемоники одним или более пробелами или табуляцией. Операнды отделяются друг от друга запятыми. Если операция требует фиксированного номера (числа) или операндов, то все на линии после операндов игнорируется. Комментарии разрешаются в конце линии. Если мнемоники позволяют использовать различное число операндов, конец списка операндов определяется концом строки или комментарием. Выражения используются в поле операнда и могут содержать константы, символы или любые комбинации констант и символов, разделенных арифметическими операторами. Перед каждой константой или символом может стоять + или –, что указывает на положительное или отрицательное выражение. В ассемблере MPASM используются следующие форматы выражений: текстовая строка; числовые константы и Radix; арифметические операторы и приоритеты; High / Low операторы. Текстовая строка – это последовательность любых допустимых ASCII символов (в десятичном диапазоне от 0 до 127), заключенная в двойные кавычки. Строка может иметь любую длину в пределах 132 колонок. При отсутствии ограничения строки она считается до конца линии. Если строка используется как буквенный операнд, она должна иметь длину в один символ, иначе будет ошибка. Числовая константа представляет собой число, выраженное в некоторой системе счисления. Перед константой может стоять + или –. Промежуточные величины в константах рассматриваются как 32-разрядные целые без знака. MPASM поддерживает следующие системы счисления (представления значений или Radix): шестнадцатиричную, десятичную, восьмиричную, двоичную и символьную. По умолчанию принимается шестнадцатиричная система. Табл. 6.2 представляет различные системы счисления. Операторы – это арифметические символы, подобные + и –, которые используются при формировании выражений. Каждый оператор имеет свой приоритет. В общем случае приоритет устанавливается слева направо, а выражения в скобках оцениваются первыми. В табл. 6.3 приведены обозначения, описания и примеры применения основных операторов MPASM. Таблица 6.2. Системы счисления (Radix).Тип Синтаксис Пример Десятичная D'<цифры>' или .<цифры> D'100' или .100 16-ричная H'<цифры>' или 0x<цифры> H'9f' или 0x9f Восьмиричная O'<цифры>' O'777' Двоичная B'<цифры>' B'00111001' Символьная '<символ>' или A'<символ>' "C" или A'C' Таблица 6.3. Основные арифметические операторы MPASMОператор Описание Пример $ Текущий счетчик команд goto $ + 3 ( левая скобка 1 + ( d * 4 ) ) правая скобка ( lenght + 1 ) * 255 ! операция "НЕ" (логическая инверсия) if ! ( a - b ) ~ дополнение flags = ~ flags - инверсия (двоичное дополнение) – 1 * lenght High выделить старший байт слова movlw high llasid Low выделить младший байт слова movlw low (llasid + .251) upper выделить наибольший байт слова movlw upper (llasid + .251) * Умножение a = c * b / Деление a = b / c % Модуль lenght = totall % 16 + Сложение Tot_len = lenght * 8 + 1 - Вычитание Entry_Son = ( Tot – 1 ) / 8 << сдвиг влево Val = flags << 1 >> сдвиг вправо Val = flags >> 1 >= больше либо равно if ent >= num > больше if ent > num < меньше if ent < num <= меньше либо равно if ent <= num == равно if ent == num != не равно if ent != num & поразрядное "И" flags = flags & err_bit ^ поразрядное "ИСКЛЮЧАЮЩЕЕ ИЛИ" flags = flags ^ err_bit | поразрядное "ИЛИ" flags = flags | err_bit && логическое "И" if (len == 512)&&( b == c ) || логическое "ИЛИ" if (len == 512 ) || ( b == c ) = установить равным... entry_index = 0 ++ увеличить на 1 (инкремент) i ++ — уменьшить на 1 (декремент) i — Операторы high, low и upper используются для получения одного байта из многобайтного значения, соответствующего метке. Применяются для управления расчетом точек динамического перехода при чтении таблиц и записи программ. Операторы инкремента и декремента могут применяться к переменной только в качестве единственного оператора в строке. Они не могут быть встроенным фрагментом более сложного выражения. Дальше » Поле комментария может использоваться программистом для текстового или символьного пояснения логической организации программы. Поле комментария полностью игнорируется ассемблером, поэтому в нем можно применять любые символы. Комментарии, которые используются в строке сами по себе, должны начинаться с символа комментария (* или ;). Комментарии в конце строки должны быть отделены от остатка строки одним или более пробелами или табуляцией. Расширения файлов, используемые MPASM и утилитами Существует ряд расширений файлов, применяемых по умолчанию MPASM и связанными утилитами. Назначения таких расширений приведены в табл. 6.4. Таблица 6.4. Используемые по умолчанию назначения расширений файлов.Расширение Назначение .ASM Входной файл ассемблера для MPASM <source_name>.ASM .OBJ Выходной файл перемещаемого объектного кода из MPASM <source_name>.OBJ .LST Выходной файл листинга, генерируемый ассемблером MPASM или MPLINK: <source_name>.LST .ERR Выходной файл ошибок из MPASM: <source_name>.ERR .MAP Выходной файл распределения памяти из MPASM: <source_name>.MAP .HEX Выходной файл объектного кода в шестнадцатиричном представлении из MPASM: <source_name>.HEX .HXL/.HXH Выходной файл объектного кода в шестнадцатиричном представлении c раздельным представлением младших и старших байт: <source_name>.HXL, <source_name>.HXH .LIB Библиотечный файл, созданный MPLIB и привязанный компоновщиком MPLINK: <source_name>.LIB .LNK Выходной файл компоновщика: <source_name>.LNK .COD Выходной символьный файл или файл отладчика. Формируются MPASM или MPLINK: <source_name>.COD Листинг представляет собой текстовый файл в формате ASCII, который содержит машинные коды, сгенерированные в соответствии с каждой ассемблерной командой, директивой ассемблера или макрокомандой исходного файла. Файл листинга содержит: имя продукта и версии, дату и время, номер страницы вверху каждой страницы. В состав листинга входят также таблица символов и карта использования памяти. В таблице символов перечисляются все символы, которые есть в программе, и где они определены. Карта использования памяти дает графическое представление о расходовании памяти МК. Директивы языка Директивы языка – это ассемблерные команды, которые встречаются в исходном коде, но не транслируются прямо в исполняемые коды. Они используются ассемблером при трактовке мнемоники входного файла, размещении данных и формировании файла листинга. Существует четыре основных типа директив в MPASM: директивы данных; директивы листинга; управляющие директивы; макро-директивы. Директивы данных управляют распределением памяти и обеспечивают доступ к символическим обозначениям данных. Директивы листинга управляют листингом файла MPASM и форматом. Они определяют спецификацию заголовков, генерацию страниц и другие функции управления листингом. Директивы управления позволяют произвести секционирование обычного ассемблерного кода. Макро-директивы управляют исполнением и распределением данных в пределах определений макротела. Ниже приводится описание некоторых директив ассемблера MPASM, используемых в данном учебном пособии. CODE – начало секции объектного кода Синтаксис: [<label>] code [ROM address>] Используется при генерации объектных модулей. Объявляет начало секции программного кода. Если <label> не указана, секция будет названа code. Стартовый адрес устанавливается равным указанному значению или нулю, если адрес не был указан. Пример: RESET code H'01FF' goto START #DEFINE – определить метку замены текста Синтаксис: #define <name> [<string>] Директива задает строку <string>, замещающую метку <name> всякий раз, когда та будет встречаться в исходном тексте. Символы, которые определены директивой #DEFINE, не могут быть просмотрены симулятором. Используйте вместо этой директивы EQU. Пример
#define length 20 #define control 0x19,7 #define position (X,Y,Z) (y-(2 * Z +X)). test_label dw position(1, length, 512) bsf control ; установить в 1 бит 7 в f19 END – конец программного блока Синтаксис: end Определяет конец программы. После остановки программы таблица символов сбрасывается в файл листинга. Пример: start ;исполняемый код ; end ; конец программы EQU – определить ассемблерную константу Синтаксис: <label> equ <expr> Здесь <expr> – это правильное MPASM выражение. Значение выражения присваивается метке <label>. Пример: four equ 4 ; присваивает численное значение ; метке four INCLUDE – включить дополнительный файл источника Синтаксис: include <<include_file>> include "<include_file>" Определяемый файл считывается как источник кода. По окончании включаемого файла будет продолжаться ассемблирование исходника. Допускается до шести уровней вложенности. <include_file> может быть заключен в кавычки или угловые скобки. Если указан полный путь к файлу, то поиск будет происходить только по этому пути. В противном случае порядок поиска следующий: текущий рабочий каталог, каталог, в котором находится исходник, каталог MPASM. Пример: include "c:\sys\sysdefs.inc" ; system defs include <addmain.asm> ; register defs LIST – установить параметры листинга Синтаксис:
list [<list_option>, , <list_option>] Директива <list> разрешает вывод листинга, если он до этого был запрещен. Кроме того, один из параметров листинга может быть изменен для управления процессом ассемблирования в соответствии с табл. 6.5. Таблица 6.5. Параметры, используемые директивой list.Параметр Значение по умолчанию Описание C=nnn 80 Количество символов в строке n=nnn 59 Количество строк на странице t=ON|OFF OFF Укорачивать строки листинга p=<type> None Установить тип процессора: PIC16C54, PIC16C84, PIC16F84, PIC17C42 и др. r=<radix> HEX Установить систему счисления по умолчанию: hex, dec, oct. w=<level> 0 Установить уровень сообщений диагностики в файле листинга: 0 – выводить все сообщения; 1 – выводить предупреждения и ошибки; 2 – выводить только ошибки. x=ON|OFF OFF Включить или выключить макрорасширения. NOLIST – выключить выход листинга Синтаксис: NOLIST ORG – установить начальный адрес программы Синтаксис: <label> org <expr> Устанавливает начальный адрес программы для последующего кода в соответствии с адресом в <expr>. MPASM выводит перемещаемый объектный код, а MPLINK разместит код по определенному адресу. Если метка <label> определена, то ей будет присвоена величина <expr>. По умолчанию начальный адрес имеет нулевое значение. Директива может не использоваться, если создается объектный модуль. Пример: int_1 org 0x20; Переход по вектору 20 int_2 org int_1+0x10; Переход по вектору 30 PROCESSOR – установить тип процессора Синтаксис: processor <processor_type> Устанавливает тип используемого процессора <processor_type>: [16C54 | 16C55 | 16C56 | 16C57 | 16C71 | 16C84 | 16F84 | 17C42]. Общие процессорные семейства могут быть выбраны как:[16C5X | 16CXX | 17CXX] Для поддержания совместимости с новыми изделиями выбирается максимум доступной памяти. SET – определить ассемблерную переменную Синтаксис: <label> set <expr> Директива SET функционально эквивалентна директиве EQU, за исключением того, что величина, определяемая SET, может быть изменена директивой SET. Пример: area set 0 width set 0x12 length set 0x14 area set length * width length set length + 1 TITLE – Определить программный заголовок Синтаксис: title "<title_text>" Эта директива устанавливает текст, который используется в верхней линии страницы листинга. <title_text> - это печатная ASCII последовательность, заключенная в двойные скобки. Она может быть до 60 символов длиной. Пример title "operational code, rev 5.0" Дальше » 6.2.2. Компоновщик MPLINK Абсолютный (неперемещаемый) код программы генерируется непосредственно при ассемблировании и располагается в программной памяти в порядке следования операторов программы. Операторы перехода на метку сразу же заменяются соответствующим кодом перехода на адрес метки. При генерации перемещаемого кода каждая секция программного кода должна предваряться директивой CODE. Окончательное размещение программных кодов, расстановку физических адресов переходов выполняет компоновщик MPLINK. Компоновщик MPLINK выполняет следующие задачи: распределяет коды и данные, т.е. определяет, в какой части программной памяти будут размещены коды и в какую область ОЗУ будут помещены переменные; распределяет адреса, т.е. присваивает ссылкам на внешние объекты в объектном файле конкретные физические адреса; генерирует исполняемый код, т.е. выдает файл в формате .hex, который может быть записан в память МК; отслеживает конфликты адресов, т.е. гарантирует, что программа или данные не будут размещаться в пространстве адресов, которое уже занято; предоставляет символьную информацию для отладки. Для более подробного изучения работы компоновщика следует обратиться к специальной литературе. 6.2.3. Менеджер библиотек MPLIB Менеджер библиотек позволяет создавать и модифицировать файлы библиотек. Библиотечный файл является коллекцией объектных модулей, которые размещены в одном файле. MPLIB использует объектные модули с именем типа "filename.o" формата COFF (Common Object File Format). Использование библиотечных файлов упрощает компоновку программы, делает ее более структурированной и облегчает ее модификацию. 6.2.4. Симулятор MPSIM Симулятор MPSIM представляет собой симулятор событий, предназначенный для отладки программного обеспечения PIC-контроллеров. MPSIM моделирует все функции контроллера, включая все режимы сброса, функции таймера/счетчика, работу сторожевого таймера, режимы SLEEP и Power-down, работу портов ввода/вывода. MPSIM запускается из командной строки DOS, конфигурируется пользователем и непосредственно применяет выходные данные ассемблера MPASM. Перед использованием симулятора необходимо отассемблировать исходный файл <file_name>.asm и получить файл объектного кода в формате INHX8M, создаваемый MPASM по умолчанию:
MPASM <file_name>.asm <RETURN> Чтобы запустить симулятор, необходимо набрать в командной строке MPSIM<RETURN>. Вид экрана, получаемого при запуске MPSIM, показан на рис. 6.2. Экран разделен на три части, или окна. В верхнем окне показано текущее состояние моделирования, включая моделируемую программу, тип МК, число выполненных командных циклов и затраченное на них время. Среднее окно используется для вывода содержимого регистров пользователя. Набор регистров и формат выводимых на экран данных определяются файлом MPSIM.INI, который далее будет описан подробнее. Нижнее окно содержит приглашение на ввод команд, а также текущие операции и результат их выполнения. При запуске симулятор MPSIM начинает искать командный файл MPSIM.INI. Этот текстовой файл создается пользователем и используется для задания всех задействованных в программе параметров.
Рис. 6.2. Вид рабочего окна симулятора MPSIM. Один из примеров файла MPSIM.INI приведен ниже. ; MPSIM file for user4 P84 ;использование МК семейства PIC16C84 SR X ;представление данных в 16-ричном формате ZR ;сброс регистров МК в нуль ZT ;сброс таймера в нуль RE ;сброс времени выполнения команды и счетчика циклов V W,X,2 ;вывод регистра W в hex формате на два знакоместа AD F1,X,2 ;вывод на экран регистра TMR0 в hex формате на два знакоместа AD F2,X,3 ;вывод на экран регистра PCL в hex формате на три знакоместа AD F3,B,8 ;вывод на экран регистра STATUS в bin формате на восемь знакомест AD IOA,X,2 ;вывод на экран регистра TRISA в hex формате на два знакоместа AD F5,X,2 ;вывод на экран регистра порта A в hex формате на два знакоместа SC 1 ;установка тактовой частоты 1 МГц RS ;сброс МК LO user4 Пример 12.1. Пример файла MPSIM.INI (html, txt) В представленном файле указаны: тип микроконтроллера, система счисления данных по умолчанию, регистры, содержимое которых выводится на экран, способ представления данных, рабочие параметры. Любая команда, которая исполняется MPSIM, может быть задана в файле MPSIM.INI, который определяет начальное состояние программы. При работе MPSIM создает файл MPSIM.JRN, в котором сохраняются все сведения о нажатии клавиш в процессе работы. В файле MPSIM.INI допускается вводить комментарии, которые даются после знака ";", но не допускается использование пустых строк. Основные команды, применяемые в симуляторе MPSIM, приведены в табл. 6.6. Когда эти команды вводятся в сеансе работы с MPSIM, они заносятся в файл MPSIM.JRN, который используется при создании расширенного файла MPSIM.INI. Данный файл можно задействовать для выявления ошибок и обеспечения нормального выполнения программы после исправления кода. Таблица 6.6. Основные команды симулятора MPSIM.Команда Параметр Комментарии AB - Прерывание текущей сессии AD Reg[, Radix[, Digits]] Вывод содержимого регистра на экран в указанном формате и заданной системе счисления X, B или D B [addr] Установка точки останова по текущему или указанному адресу C [#break] Продолжение выполнения программы с пропуском указанного количества следующих точек останова DB - Вывод на экран всех активных точек останова DI [addr1[,addr2]] Вывод на экран фрагмента памяти программ DR - Вывод содержимого всех регистров DW [E|D] Разрешение/запрещение функционирования сторожевого таймера E [addr] Выполнение программы с текущего или указанного адреса F Reg Вывод на экран содержимого регистра и возможность его редактирования пользователем GE filename Получение и выполнение командного файла. Это способ загрузки командного файла .INI GO - Запуск МК и начало выполнения программы IP [time|step] Ввод входных воздействий в соответствии со значением параметра step в файле Stimulus LO filename Загрузка в MPSIM файлов .HEX и .COD M addr Вывод на экран содержимого памяти программ, начиная с адреса "addr" и возможность его редактирования. Ввод "Q" завершает команду. P device Выбор типа моделируемого МК Q - Выход из MPSIM и запись команд в файл .JRN RE - Сброс времени выполнения и счетчика циклов RS - Сброс моделируемого МК SE pin|port Вывод на экран состояния указанного вывода или порта и возможность его изменения SR O|X|D Установка системы счисления по умолчанию SS [addr] Пошаговое исполнение, начиная с указанного адреса. При отсутствии адреса – исполнение идет с текущего места ST filename Загрузка файла стимуляции W Отображение состояния регистра W с возможностью его модификации ZM addr1,addr2 Очистка памяти программ с адреса addr1 по addr2 ZR - Сброс всех регистров МК ZT - Сброс таймера/счетчика МК Для моделирования внешних тестовых событий (воздействий) на моделируемый МК используются файлы стимуляции с расширением .STI. Эти файлы используются MPSIM для того, чтобы обеспечить подачу однократных и повторяющихся входных сигналов в процессе выполнения программы. При этом можно наблюдать на экране, как МК реагирует на сигналы. В качестве примера ниже приведен файл для тестирования программы, выполняющей опрос состояния линии 1 порта A. ! test1.STI STEP RA1 1 1 !Установка на входе RA1 состояния "1" 200 0 !Поступление на вход RA1 сигнала "0" 1000 1 !Переход сигнала на входе RA1 в "1" 1200 0 !Повторная подача нулевого сигнала Файл воздействия состоит из множества состояний, для которых задается параметр STEP, определяющий число циклов, в течение которых поддерживается указанное состояние. Он позволяет одновременно подавать сигналы на различные выводы МК. В файле воздействия можно указать любой вывод МК, в том числе и вывод сброса (_MCLR). Для обозначения комментариев используется знак !. Дальше » 6.3. Практика программирования PIC-микроконтроллеров 6.3.1. Описание лабораторного макета Для того чтобы написать первые учебные программы и проверить их функционирование, желательно иметь относительно несложный макет, содержащий самые распространенные периферийные устройства. Схема подобного макета, используемого при выполнении лабораторных работ студентами, приведена на рис. 6.3. Макет питается от источника стабилизированного напряжения +5В. Тактовая частота МК задается RC-цепью и составляет около 2 МГц. К линии RA0 порта А подключен биполярный транзистор в ключевом режиме, нагруженный на динамик ВА1. Звучание динамика обеспечивается подачей на выход RA0 изменяющегося сигнала в звуковом диапазоне. К линии RA1 порта А подключен светодиод VD2, светящийся при высоком напряжении на выходе. Тумблеры SA1 и SA2, а также кнопки SB1 и SB2 подключены, соответственно, к линиям RA2 и RA3 порта А, а также к линии RA4 порта А и линии RB0 порта В. Исходное состояние кнопок – разомкнутое, что обеспечивает подачу на соответствующие входы МК высокого уровня сигнала. Линии RB1 – RB7 порта B обслуживают семисегментный индикатор HL1 с общим анодом. Поэтому свечение сегмента индикатора обеспечивается при низком уровне сигнала на соответствующем выходе порта B. Макет также содержит средства программирования и связи с компьютером, которые на схеме не показаны.
Рис. 6.3. Схема лабораторного макета. 6.3.2. Инициализация микроконтроллера макета Прежде чем переходить к созданию простейших пользовательских программ, необходимо описать используемые в дальнейшем переменные и настроить МК на работу с выбранным макетом. С этой целью мы напишем и подробно рассмотрим листинг исходной программы init.asm, в состав которой будут включаться все остальные программы пользователя. ;****************************************************** ;*листинг исходной программы ;****************************************************** LIST P=16C84, R=HEX ;директива, определяющая тип ;процессора и систему счисления ;по умолчанию ;****************************************************** ;*описание используемых переменных и назначения адресов ;*ячеек для хранения переменных пользователя ;****************************************************** ; INTCON EQU 0x0B ; OPTION EQU 0x81 ; TMR0 EQU 0x01 ; INTF EQU 1 ; T0IF EQU 5 PCL EQU 0x02 STATUS EQU 0x03 RP0 EQU 5 PORTA EQU 0x05 PORTB EQU 0x06 TRISA EQU 0x05 TRISB EQU 0x06 W EQU 0 F EQU 1 TEMPA EQU 0x0C TEMPB EQU 0x0D COUNT1 EQU 0x0E COUNT2 EQU 0x0F COUNT3 EQU 0x10 ;****************************************************** ;*определение меток замены текста ;****************************************************** #DEFINE Z STATUS,2 ;бит нулевого результата #DEFINE BA1 PORTA,0 ;динамик BA1 #DEFINE VD2 PORTA,1 ;светодиод VD2 #DEFINE SA1 PORTA,2 ;тумблер SA1 #DEFINE SA2 PORTA,3 ;тумблер SA2 #DEFINE SB1 PORTA,4 ;кнопка SB1 #DEFINE SB2 PORTB,0 ;кнопка SB2 #DEFINE HL1_A PORTB,1 ;индикатор-сегмент A #DEFINE HL1_B PORTB,2 ;индикатор-сегмент B #DEFINE HL1_C PORTB,3 ;индикатор-сегмент C #DEFINE HL1_D PORTB,4 ;индикатор-сегмент D #DEFINE HL1_E PORTB,5 ;индикатор-сегмент D #DEFINE HL1_F PORTB,6 ;индикатор-сегмент E #DEFINE HL1_G PORTB,7 ;индикатор-сегмент F ;****************************************************** ;*исполняемая программа ;****************************************************** ORG 0x000 ;установка начального адреса по ;сбросу GOTO BEGIN ;переход на начало программы ORG 0x005 ;установка начального адреса ;размещения программы BEGIN CALL INIT_PORTS ;вызов подпрограммы ;инициализации портов МК ;***************************************************** ;*программа пользователя ; ;***************************************************** ; INIT_PORTS ;подпрограмма инициализации ;портов MOVLW 0xFF ;установка линий портов MOVWF PORTA ;A и B в единичное MOVWF PORTB ;состояние BSF STATUS,RP0 ;переход на банк 1 MOVLW 0x1C ;настройка линий RA0 и MOVWF TRISA ;RA1 порта A на вывод – ;остальных – на ввод MOVLW 0x01 ;настройка линии RB0 MOVWF TRISB ;порта B на ввод - ;остальных – на вывод BCF STATUS,RP0 ;возврат в банк 0 RETURN ;возврат из подпрограммы ; END ;конец программы Листинг 12.1. Программа init.asm (html, txt) Рассмотрим работу этой программы. Вначале она указывает ассемблеру тип используемого МК и систему счисления по умолчанию. Идущие далее ассемблерные директивы EQU определяют ассемблерные константы, используемые в этой и последующих программах. Они позволяют использовать в тексте программы более удобные мнемонические метки, привязанные к структуре конкретного МК, вместо корректных, но более сложных ассемблерных выражений. Указатели TEMPA, TEMPB, COUNT1 и COUNT2 назначают адреса ячеек памяти для хранения промежуточных данных (текущих состояний, переменных циклов и т.п.). Ассемблерные директивы #define задают строку, замещающую соответствующую метку, каждый раз, когда та будет встречаться в исходном тексте. В нашем случае эти директивы позволяют использовать символические имена, привязанные к схеме макета, вместо физических адресов соответствующих разрядов портов и регистров. При этом необходимо иметь в виду, что символы, которые определены директивой #DEFINE, не могут быть просмотрены симулятором. Поэтому для просмотра необходимо использовать физические адреса портов и регистров. Директива ORG 0x00 устанавливает стартовый адрес программного кода равным 0, т.е. соответствующим начальному состоянию счетчика команд МК после сброса. Команда GOTO BEGIN вместе с ассемблерной директивой ORG 0x005 и меткой BEGIN обеспечивают переход на адрес памяти программ 0x005, начиная с которого и размещается основная часть программы. Это необходимо для того, чтобы обойти адрес 0x004, используемый в качестве вектора прерывания, и тем самым зарезервировать его для возможных будущих применений. Затем с помощью команды CALL INIT_PORTS производится вызов подпрограммы инициализации портов. Вначале подпрограмма инициализации устанавливает в высокое (единичное) состояние выходные триггеры данных. Эта операция рекомендуется разработчиком МК для того, чтобы исключить неопределенность в состояниях регистров портов. Затем командой BSF STATUS,RP0 производится переключение на банк 1 памяти данных, где расположены регистры управления направлением передачи информации TRISA и TRISB. С помощью команд MOVLW 0x1C и MOVWF TRISA линии RA0 и RA1 порта A настраиваются на вывод, а остальные – на ввод. Команды MOVLW 0x01 и MOVWF TRISB настраивают линию RB0 порта B на ввод, а остальные – на вывод. С помощью команды BCF STATUS,RP0 производится возврат в банк 0, где располагаются необходимые для работы программы регистры и порты. Поскольку в процессе работы с макетом перенастройка портов не производится, и введенных переменных достаточно для работы всех рассматриваемых учебных задач, они будут далее рассматриваться включенными по умолчанию в состав исходной программы init.asm. При написании учебных задач будет по возможности использоваться метод структурного программирования, при котором прикладная программа строится из некоторого набора программных модулей, каждый из которых реализует определенную процедуру обработки данных. При этом каждый из программных модулей имеет только одну точку входа и одну точку выхода. Введенные однажды программные модули могут использоваться под своим именем в других прикладных программах. Дальше » 6.3.3. Программирование учебных задач Начнем программирование учебных задач с написания программы, которая считывает состояние кнопки SB1 и выводит его на светодиодный индикатор VD2 так, что не нажатому состоянию кнопки (высокому уровню сигнала на входе RA4) соответствует светящееся состояние светодиода, и наоборот. ;основная программа LOOP CLRWDT ;сброс сторожевого таймера CALL GET_RA ;вызов подпрограммы GET_RA CALL SB1_VD2 ;вызов подпрограммы SB1_VD2 GOTO LOOP ;переход к метке LOOP для ;повторения процесса ; GET_RA ;подпрограмма чтения состояния ;порта A MOVF PORTA,W ;чтение состояния порта A в W MOVWF TEMPA ;пересылка W в TEMPA RETURN ;возврат из подпрограммы ; SB1_VD2 ;подпрограмма вывода на светодиод ;VD2 состояния кнопки SB1 (разряда 4 ;регистра TEMPA) BTFSS TEMPA,4 ;пропустить команду, если ;TEMPA,4=1 (кнопка не нажата) GOTO P0 ;перейти на P0 BSF VD2 ;зажечь светодиод VD2 P0 BTFSC TEMPA,4 ;пропустить команду, если ;TEMPA,4=0 (кнопка нажата) GOTO P1 ;перейти на P1 BCF VD2 ;погасить светодиод P1 RETURN ; Листинг 12.2. (html, txt) Основная программа содержит замкнутый цикл LOOP – GOTO LOOP, необходимый для периодического повторения цикла контроля состояния кнопки и вывода его на индикатор. Команда CLRWDT исключает влияние возможного сброса по переполнению сторожевого таймера на работу программы. Две следующие команды осуществляют вызов подпрограмм GET_RA и SB1_VD2. Первая из них (GET_RA) вначале считывает текущее состояние порта A, которое помещается в рабочий регистр W. Поскольку рабочий регистр может потребоваться при исполнении других команд, его состояние записывается в регистр TEMPA, используемый здесь для временного хранения состояния порта A. Таким образом, после возврата из подпрограммы GET_RA в разряде 4 регистра TEMPA содержится информация о состоянии кнопки SB1: "1" – не нажата, "0" – нажата. Подпрограмма SB1_VD2 анализирует состояние разряда 4 регистра TEMPA и, в зависимости от него, зажигает или гасит светодиод. В системе команд МК PIC16F84 нет команд условного перехода, поэтому для организации проверки того или иного условия используются команды, позволяющие пропустить выполнение следующей команды программы, в зависимости от состояния определенного бита в заданном регистре (BTFSS и BTFSC). В частности, команда BTFSS TEMP,4 пропускает исполнение команды GOTO P0, если TEMP,4 = 1 (кнопка не нажата). Тем самым реализуется команда BSF VD2, которая зажигает светодиод VD2. Затем анализируется условие TEMP,4 = 0 (кнопка нажата) и, если оно имеет место, светодиод гасится. Возможна более простая реализация заданного алгоритма, поскольку нажатое состояние кнопки исключает не нажатое (и наоборот), но представленный вариант более нагляден. Рассмотрим более сложный вариант программы, предусматривающий зажигание светодиода VD2 только при следующем состоянии тумблеров и кнопок макета: SA1 = 1, SA2 = 1, SB1 = 1 и SB2 = 0. ;основная программа LOOP CLRWDT ;сброс сторожевого таймера CALL GET_RA ;вызов подпрограммы GET_RA CALL GET_RB ;вызов подпрограммы GET_RB CALL ZAG_1110 ;вызов подпрограммы ZAG_1110 GOTO LOOP ;переход к метке LOOP для ;повторения процесса ; GET_RB ;подпрограмма чтения состояния ;порта B MOVF PORTB,W ;чтение состояния порта B в W MOVWF TEMPB ;пересылка W в TEMPB RETURN ; ZAG_1110 ;зажигает светодиод VD2 только при ;следующем состоянии тумблеров и ;кнопок макета: ;SA1 = SA2 = SB1 = 1 и SB2 = 0 BTFSS TEMPA,2 ;пропустить команду, если GOTO P0 ;TEMPA,2=1 BTFSS TEMPA,3 ;пропустить команду, если GOTO P0 ;TEMPA,3=1 BTFSS TEMPA,4 ;пропустить команду, если GOTO P0 ;TEMPA,4=1 BTFSC TEMPB,0 ;пропустить команду, если GOTO P0 ;TEMPB,0=0 BSF VD2 ;зажечь светодиод VD2 GOTO P1 P0 BCF VD2 ;погасить светодиод VD2 P1 RETURN ; INCLUDE GET_RA.ASM ; Листинг 12.3. (html, txt) Подпрограммы GET_RA и GET_RB помещают в регистры TEMPA и TEMPB текущие состояния портов A и B, соответственно. Подпрограмма ZAG_1110 анализирует состояния разрядов 2,3 и 4 регистра TEMPA и разряда 0 регистра TEMPB, и при условии TEMPA,2,3,4 = 1,1,1 и TEMPB,0 = 0, зажигает светодиод VD2. При невыполнении хотя бы одного из этих условий светодиод гасится. Использование директивы INCLUDE GET_PORTA.ASM позволяет включать уже отлаженные модули подпрограмм в текущую программу. Для того чтобы этой возможностью можно было воспользоваться, необходимо сохранять отлаженные модули в виде отдельных ассемблерных файлов. Попробуем теперь использовать семисегментный индикатор для контроля состояния тумблеров макета. Вначале напишем программу, которая выводит на индикатор HL семисегментное изображение любого двоичного числа от 0b до 1111b в шестнадцатиричном представлении. ;основная программа LOOP CLRWDT ;сброс сторожевого таймера MOVLW 0x0A ;пересылка константы 0A в W CALL SEV_SEG ;вызов подпрограммы SEVEN_SEG MOVWF PORTB ;пересылка W в PORTB GOTO LOOP ;переход к метке LOOP для ;повторения процесса ; SEV_SEG ;подпрограмма обслуживания ;семисегментного индикатора ANDLW 0x0F ;маскирование 4-х младших разрядов ;W и обнуление 4-х старших ADDWF PCL,F ;сложение W с PCL и пересылка ;результата в PCL RETLW 0x80 ;возврат из подпрограммы с 80 в W RETLW 0xF2 ;возврат из подпрограммы с F2 в W RETLW 0x48 ;возврат из подпрограммы с 48 в W RETLW 0x60 ;возврат из подпрограммы с 60 в W RETLW 0x32 ;возврат из подпрограммы с 32 в W RETLW 0x25 ;возврат из подпрограммы с 25 в W RETLW 0x04 ;возврат из подпрограммы с 04 в W RETLW 0xF0 ;возврат из подпрограммы с F0 в W RETLW 0x00 ;возврат из подпрограммы с 00 в W RETLW 0x20 ;возврат из подпрограммы с 20 в W RETLW 0x10 ;возврат из подпрограммы с 10 в W RETLW 0x06 ;возврат из подпрограммы с 06 в W RETLW 0x8C ;возврат из подпрограммы с 8C в W RETLW 0x42 ;возврат из подпрограммы с 42 в W RETLW 0x0C ;возврат из подпрограммы с 0C в W RETLW 0x1C ;возврат из подпрограммы с 1C в W ; Листинг 12.4. (html, txt) Программа начинает свою работу с пересылки константы 0x0A в рабочий регистр W. Затем производится вызов подпрограммы обслуживания семисегментного индикатора SEV_SEG. Работа подпрограммы SEV_SEG начинается с маскирования 4-х младших разрядов W и обнуления 4-х старших. Тем самым из анализа исключаются старшие разряды передаваемого из рабочего регистра W числа. Затем маскированное содержимое регистра W добавляется к текущему состоянию младшего байта счетчика команд PCL, и результат помещается в PCL. Таким образом, производится дополнительное смещение счетчика команд на величину, которая была передана в рабочем регистре. Например, если было W=0, то содержимое счетчика команд не изменится, и будет выполнена следующая команда RETLW 0x80, которая вызовет возврат из подпрограммы с записью 0x80 = B'1000000' в регистр W. Если, как было в при веденной программе, W=0A, то к содержимому PCL будет добавлено число 0x0A, и произойдет дополнительное смещение на 10 шагов. В результате будет выполнена команда RETLW 0x10, которая вызовет возврат из подпрограммы с записью 0x10 = B'0001000' в регистр W. После возврата из подпрограммы производится пересылка W в PORTB и отображение его состояния на семисегментном индикаторе HL. В частности, если W = 0, то при выводе 1000000b на порт B семисегментный индикатор покажет 0, а при W = A покажет A.Таким образом, может быть отображено любое 4-разрядное двоичное число. Метод прямого управления счетчиком команд, использованный в подпрограмме SEV_SEG, может применяться для реализации табличной конвертации чисел. При этом необходимо иметь в виду, что данный метод не позволяет конвертировать более 256 значений в одной таблице. Кроме того, программа табличной конвертации должна целиком располагаться внутри 256-байтного блока во избежание переполнения младшего байта счетчика команд. Используя подпрограмму SEV_SEG, напишем теперь программу, которая читает состояния тумблеров SA1 и SA2 и выводит на индикатор соответствующее число. ;основная программа LOOP CLRWDT ;сброс сторожевого таймера CALL GET_RA ;вызов подпрограммы GET_RA RRF TEMPA,F ;сдвиг вправо на один разряд ;через перенос RRF TEMPA,W ;сдвиг вправо на один разряд ;через перенос ANDLW 0x03 ;маска на два младших разряда CALL SEV_SEG ;вызов подпрограммы SEVEN_SEG MOVWF PORTB ;пересылка W в PORTB GOTO LOOP ;переход к метке LOOP для ;повторения процесса ; INCLUDE GET_RA.ASM INCLUDE SEV_SEG.ASM ; Листинг 12.5. (html, txt) Подпрограмма GET_RA помещает в регистр TEMPA текущее состояние порта A. Таким образом, в разрядах 2 и 3 регистра TEMPA хранится текущее состояние тумблеров SA1 и SA2. Для того чтобы биты состояния тумблеров заняли позиции 0 и 1 регистра TEMPA, производится два сдвига вправо через перенос, причем результат второго сдвига помещается в регистр W. Затем накладывается маска на два младших разряда рабочего регистра и производится вызов подпрограммы SEV_SEG. После выхода из подпрограммы результат подается на порт B и отображается на индикаторе. Рассмотрим теперь программы, работающие в реальном масштабе времени, т.е. выдающие сигналы определенной длительности и частоты следования, либо учитывающие временные параметры входных сигналов. Основным элементом таких программ является подпрограмма формирования временной задержки. Рассмотрим один из возможных вариантов такой подпрограммы с использованием программных методов формирования задержки, т.е. без применения встроенного таймера. ;основная программа MOVLW 0xL ;пересылка константы H'L' в W CALL DELAY ;вызов подпрограммы DELAY ; DELAY ;подпрограмма формирования ;задержки времени MOVWF COUNT1 ;загрузка W в регистр COUNT1 LOOPD DECFSZ COUNT1,F ;декремент COUNT1 GOTO LOOPD ;повторение цикла H'L' раз RETURN ;возврат из подпрограммы ; Листинг 12.6. (html, txt) Основная программа производит вызов подпрограммы DELAY с некоторой константой L в рабочем регистре W, определяющей число внутренних циклов подпрограммы. Подпрограмма DELAY начинает свою работу с загрузки содержимого рабочего регистра в регистр пользователя COUNT1. Команда DECFSZ COUNT1,F уменьшает на единицу содержимое регистра COUNT1 и проверяет его на равенство нулю. Нулевое состояние регистра COUNT1 приводит к выходу из цикла и возврату из подпрограммы. Для исполнения каждого внутреннего цикла требуется три машинных цикла МК (1 цикл на исполнение команды DECFSZ при ненулевом результате и 2 цикла на каждую команду GOTO). Выход из подпрограммы DELAY потребует 4-х циклов (2 цикла на исполнение команды DECFSZ при нулевом результате и 2 цикла на RETURN). Если добавить к этому еще 4 цикла, необходимых для загрузки константы в рабочий регистр , вызова подпрограммы и загрузки регистра пользователя COUNT1, то общее время исполнения подпрограммы DELAY (задержка) составит TD = 4 + 3*(L – 1) + 4 = 5 + 3*L циклов, где L – константа, переданная через рабочий регистр в подпрограмму DELAY. При тактовой частоте fosc = 2МГц время цикла равно tц = 2 мкс, поэтому при загрузке L = H'00' = .0 максимальный формируемый интервал времени составит 1,55 мс. Такой результат связан с тем, что команда DECFSZ сначала декрементирует содержимое регистра (H'00' – 1 = H'FF'), а затем уже анализирует результат. Минимальный формируемый интервал времени составит при тех же условиях 5 циклов или 10 мкс. Для получения такого интервала необходимо перед вызовом подпрограммы DELAY загрузить в рабочий регистр число 0x01. Для расширения верхней границы формируемых временных интервалов, а также с целью повышения удобства работы с подпрограммой, можно добавить в цикл LOOPD одну или несколько дополнительных команд, в качестве которых чаще всего используется команда NOP. Для примера рассмотрим подпрограмму формирования задержки времени DELAY_C ; DELAY_C ;подпрограмма формирования ;задержки времени (вариант C) MOVWF MOVWF COUNT1 ;загрузка W в регистр COUNT1 LOOPD NOP ;пустая команда DECFSZ COUNT1,F ;декремент COUNT1 GOTO LOOPD ;повторение цикла H'L' раз RETURN ;возврат из подпрограммы ; Листинг 12.7. (html, txt) Общее время исполнения подпрограммы DELAY_C, включая ее вызов, составит TD = 4 + 4*(L – 1) + 4 = 4 + 4*L циклов. При тактовой частоте fosc = 2МГц и загрузке константы L = H'F9' = .249 формируемый интервал времени составит ровно 2 мс. Уменьшение константы на единицу уменьшает формируемый временной интервал на 8 мкс. В частности, при L = .124 образуется задержка в 1 мс. Для формирования больших задержек времени, лежащих в диапазоне долей и единиц секунд, такой подход неудобен. В этом случае используются вложенные циклы, как показано в следующем примере. ;основная программа MOVLW 0xL ;пересылка константы H'L' в W CALL DELAY_D ;вызов подпрограммы DELAY_D ; DELAY_D ;подпрограмма формирования ;большой задержки времени (вариант D) MOVWF COUNT2 ;загрузка W в регистр COUNT2 CLRF COUNT1 ;сброс содержимого регистра COUNT1 LOOPD DECFSZ COUNT1,F ;декремент COUNT1 GOTO LOOPD ;повторение цикла 256 раз CLRWDT ;сброс сторожевого таймера DECFSZ COUNT2,F ;декремент COUNT2 GOTO LOOPD ;повторение цикла H'L' раз RETURN ;возврат из подпрограммы ; Листинг 12.8. (html, txt) Время исполнения внутреннего цикла подпрограммы DELAY_D составляет 3*256 + 4 машинных циклов МК, поэтому общая задержка составит TD = 5 + (3*256 + 4)*L циклов. При тактовой частоте fosc = 2МГц время цикла равно tц = 2 мкс, поэтому при загрузке L = H'00' = .0 максимальный формируемый интервал времени составит около 0,4 с. Поскольку формируемый интервал времени достаточно велик, во внешний цикл включена команда сброса сторожевого таймера. Интервал времени 0,4 с не совсем удобен для получения задержек времени, кратных секунде, поэтому рассмотрим еще один вариант подпрограммы формирования больших задержек времени с дополнительной командой NOP во внутреннем цикле. ; DELAY_E ;подпрограмма формирования ;большой задержки времени (вариант E) MOVWF COUNT2 ;загрузка W в регистр COUNT2 CLRF COUNT1 ;сброс содержимого регистра COUNT1 LOOPD NOP ;пустая команда DECFSZ COUNT1,F ;декремент COUNT1 GOTO LOOPD ;повторение цикла 256 раз CLRWDT ;сброс сторожевого таймера DECFSZ COUNT2,F ;декремент COUNT2 GOTO LOOPD ;повторение цикла H'L' раз RETURN ;возврат из подпрограммы ; Листинг 12.9. (html, txt) Время исполнения внутреннего цикла подпрограммы DELAY_E составляет 4*256 + 4 машинных циклов МК, поэтому общая задержка составит TD = 5 + (4*256 + 4)*L циклов. При тактовой частоте fosc = 2МГц и при загрузке L = H'F3' = .243 формируемый интервал времени составит около 0,5 с при погрешности не более 0,2%. Если необходима более высокая точность, можно вставить необходимое количество пустых операций во внешний цикл формирования задержки. Рассмотрим далее несколько программ с использованием подпрограмм формирования задержки времени. Начнем с написания программы, которая подает звуковой сигнал на динамик BA1 при нажатии на кнопку SB1. Динамик будет звучать только в том случае, если на выход RA0 будет подан периодически изменяющийся сигнал. Для того чтобы звук был хорошо слышен, его частота должна находиться вблизи максимума слышимости человеческого уха. Выберем частоту звучания равной 1 КГц, что соответствует периоду следования импульсов сигнала 1 мс. ;основная программа LOOP CLRWDT ;сброс сторожевого таймера CALL GET_RA ;вызов подпрограммы GET_PORTA CALL SB1_BA1 ;вызов подпрограммы SB1_BA1 GOTO LOOP ;переход к метке LOOP для ;повторения процесса ; SB1_BA1 ;подпрограмма подачи звука на ;динамик BA1 при нажатии на кнопку ;SB1 BTFSC TEMPA,4 ;пропустить команду, если ;TEMPA,4=0 (кнопка нажата) GOTO B0 ;перейти на B0 BSF BA1 ;подача высокого уровня на RA0 MOVLW 0x3E ;пересылка константы ;H'3E' = .62 в W CALL DELAY_C ;вызов подпрограммы DELAY_C BCF BA1 ;подача низкого уровня на RA0 MOVLW 0x3E ;пересылка константы ;H'3E' = .62 в W CALL DELAY_C ;вызов подпрограммы DELAY_C B0 RETURN ; INCLUDE GET_RA.ASM INCLUDE DELAY_C.ASM ; Листинг 12.10. (html, txt) Как и раньше, подпрограмма GET_RA считывает текущее состояние порта A, которое затем передается в регистр TEMPA. Подпрограмма SB1_BA1 анализирует состояние разряда 4 регистра TEMPA и, в зависимости от результата, озвучивает динамик BA1 или нет. Необходимая выдержка линии RA0 в единичном и нулевом состояниях обеспечивается подпрограммой DELAY_C с параметром L = H'3E' = .62. Это соответствует времени задержки около 0,5 мс, что и дает в результате необходимую частоту следования сигнала 1 Кгц. Рассмотрим далее программу, которая заставляет мигать светодиод VD2 при нажатии на кнопку SB1. Для того чтобы мигания были хорошо видны, выберем их частоту равной 1 Гц. ;основная программа LOOP CLRWDT ;сброс сторожевого таймера CALL GET_RA ;вызов подпрограммы GET_RA CALL SB1_VD2M ;вызов подпрограммы ;SB1_VD2M GOTO LOOP ;переход к метке LOOP для ;повторения процесса ; SB1_VD2M ;подпрограмма мигания светодиода ;VD2 при нажатии на кнопку SB1 BTFSC TEMPA,4 ;пропустить команду, если ;TEMPA,4=0 (кнопка нажата) GOTO V0 ;перейти на V0 BSF VD2 ;зажечь светодиод VD2 MOVLW 0xF3 ;пересылка константы ;H'F3' = .243 в W CALL DELAY_E ;вызов подпрограммы DELAY_E BCF VD2 ;погасить светодиод MOVLW 0xF3 ;пересылка константы ;H'F3' = .243 в W CALL DELAY_E ;вызов подпрограммы DELAY_E V0 BTFSS TEMPA,4 ;пропустить команду, если ;TEMPA,4=1 (кнопка не нажата) GOTO V1 ;перейти на V1 BCF VD2 ;погасить светодиод V1 RETURN ; INCLUDE GET_RA.ASM INCLUDE DELAY_E.ASM ; Листинг 12.11. (html, txt) Программа работает почти так же, как и предыдущая. Первое отличие заключается в том, что светодиод принудительно гасится при не нажатой кнопке. Второе отличие заключается в величине интервала времени, который составляет здесь 0,5 с и формируется подпрограммой DELAY_E. Подпрограммы формирования задержки времени могут быть также полезны при работе с такими внешними источниками сигналов, как тумблеры, кнопки, переключатели и т.п. Дело в том, что все механические коммутаторы имеют одно негативное свойство, известное как "дребезг" контактов, которое обусловлено механическими колебаниями контактов при их замыкании и размыкании. Длительность колебаний составляет обычно несколько миллисекунд, в течение которых на вход МК может поступать пачка импульсов вместо идеального перепада. Аппаратные способы борьбы с "дребезгом" контактов основаны на использовании RS-триггеров, одновибраторов или триггеров Шмитта. В устройствах на основе МК подавление "дребезга" контактов обычно осуществляется программными способами, которые основаны на повторном считывании состояния линии порта через определенное время. В качестве примера рассмотрим "бездребезговый" вариант подпрограммы чтения состояния порта A. ; GET_RAD ;подпрограмма чтения состояния ;порта A в регистр TEMPA ;с подавлением "дребезжания" DD MOVF PORTA,W ;чтение состояния порта A в W ANDLW 0x1C ;наложение маски b'00011100' ;на неиспользуемые биты W MOVWF TEMPA ;пересылка W в TEMPA CLRWDT ;сброс сторожевого таймера WDT MOVLW 0x0A ;пересылка константы ;H'0A' = .10 в W CALL DELAY_E ;вызов подпрограммы DELAY_E MOVF PORTA,W ;чтение состояния порта A в W ANDLW 0x1C ;наложение на W маски b'00011100' SUBWF TEMPA,W ;вычитание W из TEMPA BTFSS Z ;пропустить команду, если результат ;нулевой GOTO DD ;перейти на метку DD RETURN ; INCLUDE DELAY_E.ASM ; Листинг 12.12. (html, txt) Суть работы подпрограммы заключается в повторном чтении состояния порта A спустя некоторое время после предыдущего и сравнении его с прежним значением. Константа H'0A' = .10, пересылаемая в регистр W перед вызовом подпрограммы DELAY_E, обеспечивает значение задержки времени около 20 мс - этого, как правило, достаточно для завершения переходных процессов при переключении механических коммутаторов. Маскирование неиспользуемых разрядов порта повышает надежность работы подпрограммы. Сброс сторожевого таймера перед вызовом подпрограммы задержки нужен для исключения сброса МК между двумя процедурами опроса порта A. Рассмотрим теперь работу программы, которая использует некоторые из разработанных ранее подпрограмм. Пусть целью работы программы является подсчет числа нажатий на кнопку SB1 с выводом результата на семисегментный индикатор в шестнадцатиричном коде. ;основная программа CLRF COUNT3 ;сброс счетчика нажатий LOOP CLRWDT ;сброс сторожевого таймера CALL GET_RAD ;вызов подпрограммы GET_RAD BTFSC TEMPA,4 ;проверка нажатия SB1 GOTO LOOP ;если не нажата – возврат ;на метку LOOP INCF COUNT3,F ;инкремент счетчика MOVF COUNT3,W ;пересылка содержимого ;счетчика в рабочий регистр CALL SEV_SEG ;вызов подпрограммы SEV_SEG MOVWF PORTB ;пересылка W в PORTB TEST CALL GET_RAD ;вызов подпрограммы GET_RAD BTFSS TEMPA,4 ;проверка нажатия SB1 GOTO TEST ;если еще нажата – возврат ;на метку TEST GOTO LOOP ;возврат на метку LOOP ; INCLUDE GET_RAD.ASM INCLUDE SEV_SEG.ASM ; Листинг 12.13. (html, txt) Приведенные в главе программы не охватывают и малой доли возможностей, которые предоставляет даже такой простой макет, как изображенный на рис. 6.3. Однако их освоение, надеюсь, будет полезным для начинающих пользователей PIC-контроллеров. Глава 7. Организация персонального компьютера 13. Лекция: Архитектура и процессоры персональных компьютеров Страницы: 1 | 2 | 3 | 4 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассказывается об особенностях архитектуры персональных компьютеров семейства IBM PC, о процессорах, применяемых в персональных компьютерах, об их функциях, характеристиках, этапах их эволюции.
Как уже отмечалось, персональный компьютер представляет собой наиболее развитый вид микропроцессорных систем. На основе персональных компьютеров можно строить самые сложные контрольно-измерительные, управляющие, вычислительные и информационные системы. Имеющиеся в персональном компьютере аппаратные и программные средства делают его универсальным инструментом для самых разных задач. В случае вычислительных и информационных систем персональный компьютер не нуждается в подключении нестандартной аппаратуры, все сводится к подбору или написанию необходимого программного обеспечения. В случае же контрольно-измерительных и управляющих систем персональный компьютер оснащается набором инструментов для сопряжения с внешними устройствами и соответствующими программными средствами. Во многих случаях строить систему на основе персонального компьютера оказывается гораздо проще, быстрее и даже дешевле, чем проектировать ее с нуля на базе какого-то микропроцессора, микропроцессорного комплекта или микроконтроллера. Конечно, в большинстве случаев система на основе персонального компьютера оказывается сильно избыточной, это плата за универсальность. Но в то же время один и тот же компьютер может решать самые разнообразные задачи. Например, в системе управления технологическими процессами или научными установками он может математически моделировать происходящие процессы, выдавать в реальном времени управляющие сигналы, принимать в реальном времени ответные сигналы, накапливать информацию, обрабатывать ее, обмениваться информацией с другими компьютерами и т.д. Развитый интерфейс пользователя (видеомонитор, полноразмерная клавиатура, мышь) делают работу с персональным компьютером комфортной и эффективной. А стоимость персональных компьютеров вследствие большого объема выпуска постоянно снижается. Поэтому их использование не только удобно, но и экономически выгодно. Но чтобы грамотно и полноценно использовать персональный компьютер в составе любых систем, надо иметь представление о его архитектуре, об основных принципах построения, об устройствах, входящих в его состав, наконец, о внешних интерфейсах. 7.1. Архитектура персонального компьютера Персональный компьютер типа IBM PC имеет довольно традиционную архитектуру микропроцессорной системы и содержит все обычные функциональные узлы: процессор, постоянную и оперативную память, устройства ввода/вывода, системную шину, источник питания (рис.7.1). Основные особенности архитектуры персональных компьютеров сводятся к принципам компоновки аппаратуры, а также к выбранному набору системных аппаратных средств.
Рис. 7.1. Архитектура персонального компьютера типа IBM PC. Функции основных узлов компьютера следующие: Центральный процессор — это микропроцессор со всеми необходимыми вспомогательными микросхемами, включая внешнюю кэш-память и контроллер системной шины. (О кэш-памяти подробнее будет рассказано в следующих разделах). В большинстве случаев именно центральный процессор осуществляет обмен по системной шине. Оперативная память может занимать почти все адресуемое пространство памяти процессора. Однако чаще всего ее объем гораздо меньше. В современных персональных компьютерах стандартный объем системной памяти составляет, как правило, от 64 до 512 Мбайт. Оперативная память компьютера выполняется на микросхемах динамической памяти и поэтому требует регенерации. Постоянная память (ROM BIOS — Base Input/Output System) имеет небольшой объем (до 64 Кбайт), содержит программу начального запуска, описание конфигурации системы, а также драйверы (программы нижнего уровня) для взаимодействия с системными устройствами. Контроллер прерываний преобразует аппаратные прерывания системной магистрали в аппаратные прерывания процессора и задает адреса векторов прерывания. Все режимы функционирования контроллера прерываний задаются программно процессором перед началом работы. Контроллер прямого доступа к памяти принимает запрос на ПДП из системной магистрали, передает его процессору, а после предоставления процессором магистрали производит пересылку данных между памятью и устройством ввода/вывода. Все режимы функционирования контроллера ПДП задаются программно процессором перед началом работы. Использование встроенных в компьютер контроллеров прерываний и ПДП позволяет существенно упростить аппаратуру применяемых плат расширения. Контроллер регенерации осуществляет периодическое обновление информации в динамической оперативной памяти путем проведения по шине специальных циклов регенерации. На время циклов регенерации он становится хозяином (задатчиком) шины. Перестановщик байтов данных помогает производить обмен данными между 16-разрядным и 8-разрядным устройствами, пересылать целые слова или отдельные байты. Часы реального времени и таймер-счетчик — это устройства для внутреннего контроля времени и даты, а также для программной выдержки временных интервалов, программного задания частоты и т.д. Системные устройства ввода/вывода — это те устройства, которые необходимы для работы компьютера и взаимодействия со стандартными внешними устройствами по параллельному и последовательному интерфейсам. Они могут быть выполнены на материнской плате, а могут располагаться на платах расширения. Платы расширения устанавливаются в слоты (разъемы) системной магистрали и могут содержать оперативную память и устройства ввода/вывода. Они могут обмениваться данными с другими устройствами на шине в режиме программного обмена, в режиме прерываний и в режиме ПДП. Предусмотрена также возможность захвата шины, то есть полного отключения от шины всех системных устройств на некоторое время. Важная особенность подобной архитектуры — ее открытость, то есть возможность включения в компьютер дополнительных устройств, причем как системных устройств, так и разнообразных плат расширения. Открытость предполагает также возможность простого встраивания программ пользователя на любом уровне программного обеспечения компьютера. Первый компьютер семейства, получивший широкое распространение, IBM PC XT, был выполнен на базе оригинальной системной магистрали PC XT-Bus. В дальнейшем (начиная с IBM PC AT) она была доработана до магистрали, ставшей стандартной и получившей название ISA (Industry Standard Architecture). До недавнего времени ISA оставалась основой компьютера. Однако, начиная с появления процессоров i486 (в 1989 году), она перестала удовлетворять требованиям производительности, и ее стали дублировать более быстрыми шинами: VLB (VESA Local Bus) и PCI (Peripheral Component Interconnect bus) или заменять совместимой с ISA магистралью EISA (Enhanced ISA). Постепенно шина PCI вытеснила конкурентов и стала фактическим стандартом, а начиная с 1999 года в новых компьютерах рекомендуется полностью отказываться от магистрали ISA, оставляя только PCI. Правда, при этом приходится отказываться от применения плат расширения, разработанных за долгие годы для подключения к магистрали ISA. Другое направление совершенствования архитектуры персонального компьютера связано с максимальным ускорением обмена информацией с системной памятью. Именно из системной памяти компьютер читает все исполняемые команды, и в системной же памяти он хранит данные. То есть больше всего обращений процессор совершает именно к памяти. Ускорение обмена с памятью приводит к существенному ускорению работы всей системы в целом. Но при использовании для обмена с памятью системной магистрали приходится учитывать скоростные ограничения магистрали. Системная магистраль должна обеспечивать сопряжение с большим числом устройств, поэтому она должна иметь довольно большую протяженность; она требует применения входных и выходных буферов для согласования с линиями магистрали. Циклы обмена по системной магистрали сложны, и ускорять их нельзя. В результате существенного ускорения обмена процессора с памятью по магистрали добиться невозможно. Разработчиками был предложен следующий подход. Системная память подключается не к системной магистрали, а к специальной высокоскоростной шине, находящейся "ближе" к процессору, не требующей сложных буферов и больших расстояний. В таком случае обмен с памятью идет с максимально возможной для данного процессора скоростью, и системная магистраль не замедляет его. Особенно актуальным это становится с ростом быстродействия процессора (сейчас тактовые частоты процессоров персональных компьютеров достигают 1—3 ГГц). Таким образом, структура персонального компьютера из одношинной, применявшейся только в первых компьютерах, становится трехшинной (рис. 7.2).
Рис. 7.2. Организация связей в случае трехшинной структуры. Назначение шин следующее: к локальной шине подключаются центральный процессор и кэш-память (быстрая буферная память); к шине памяти подключается оперативная и постоянная память компьютера, а также контроллер системной шины; к системной шине (магистрали) подключаются все остальные устройства компьютера. Все три шины имеют адресные линии, линии данных и управляющие сигналы. Но состав и назначение линий этих шин не совпадают между собой, хотя они и выполняют одинаковые функции. С точки зрения процессора, системная шина (магистраль) в системе всего одна, по ней он получает данные и команды и передает данные как в память, так и в устройства ввода/вывода. Временные задержки между системной памятью и процессором в данном случае минимальны, так как локальная шина и шина памяти соединены только простейшими быстродействующими буферами. Еще меньше задержки между процессором и кэш-памятью, подключаемой непосредственно к локальной шине процессора и служащей для ускорения обмена процессора с системной памятью. Если в компьютере применяются две системные шины, например, ISA и PCI, то каждая из них имеет свой собственный контроллер шины, и работают они параллельно, не влияя друг на друга. Тогда получается уже четырехшинная, а иногда и пятишинная структура. Пример такой структуры компьютера приведен на рис. 7.3.
Рис. 7.3. Пример многошинной структуры. В наиболее распространенных настольных компьютерах класса Desk-top в качестве конструктивной основы используется системная или материнская плата (motherboard), на которой располагаются все основные системные узлы компьютера, а также несколько разъемов (слотов) системной шины для подключения дочерних плат — плат расширения (интерфейсных модулей, контроллеров, адаптеров). Как правило, современные системные платы допускают замену процессора, выбор его тактовой частоты, замену и наращивание оперативной памяти, выбор режимов работы других узлов. На системной плате сейчас обычно располагаются также основные средства внешнего интерфейса, служащие для присоединения как встроенных устройств (например, дисковых носителей), так и внешних устройств компьютера (например, клавиатуры, мыши, принтера, сканера, модема). Для подключения видеомонитора, как правило, используется специальная плата расширения (контроллер дисплея), вставляемая в один из слотов. Это позволяет заменять ее более мощной при необходимости установки нового монитора. Отметим, что для получающих все более широкое распространение портативных персональных компьютеров класса ноутбуков (notebook) применяются несколько иные конструктивные решения. В частности, в них отсутствуют слоты расширения системной шины, а практически все узлы компьютера выполняются на одной плате. Но мы в основном будем говорить о компьютерах типа desktop (настольных), так как именно они наиболее приспособлены для построения сложных систем, допускают довольно простую модернизацию (upgrade) и настройку на конкретные нужды пользователя. Дальше » 14. Лекция: Устройства, входящие в состав персонального компьютера Страницы: 1 | 2 | 3 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассматриваются основные устройства, входящие в состав персонального компьютера, их функции, принципы их организации, принципы обмена информацией с ними.
7.3. Память персонального компьютера Как и в любой другой микропроцессорной системе, память персонального компьютера состоит из двух частей: оперативной памяти и постоянной памяти. Обе части расположены в адресном пространстве памяти, к обеим компьютер может обращаться одинаковым образом. Обе памяти допускают обращения к отдельным байтам, 16-разрядным словам (имеющим четные адреса), к 32-разрядным двойным словам (имеющим адреса, кратные четырем) и к 64-разрядным учетверенным словам (имеющим адреса, кратные восьми). Различие только в том, что оперативную память используют для временного хранения программ и данных, а в постоянной памяти хранятся программы начального запуска, начального самотестирования компьютера, а также набор программ ввода/вывода нижнего уровня, то есть то, что не должно теряться при выключении питания компьютера. Объем оперативной памяти гораздо больше, чем постоянной памяти. 7.3.1. Оперативная память Оперативная память занимает значительную часть адресного пространства компьютера. Ее установленный объем и быстродействие оказывают огромное влияние на быстродействие персонального компьютера в целом (порой даже большее, чем скорость процессора). Надежность ее работы во многом определяет надежность всего компьютера. Поэтому всеми разработчиками ей уделяется большое внимание. Все персональные компьютеры используют оперативную память динамического типа (DRAM — Dynamic Random Access Memory), основным преимуществом которой перед статической оперативной памятью (SRAM — Static RAM) является низкая цена. Это связано с тем, что если элемент статической памяти (триггер) требует 4—6 транзисторов, то элемент динамической памяти — это интегральный конденсатор, для обслуживания которого требуется 1—2 транзистора. Отсюда же следуют два основных недостатка динамической памяти: она требует регенерации (то есть постоянного возобновления заряда на разряжающемся конденсаторе) и имеет в несколько раз меньшее быстродействие по сравнению со статической памятью. К тому же во время регенерации динамическая память недоступна для обмена, что также снижает быстродействие компьютера. Отметим, что сейчас обычно применяют встроенную регенерацию, не требующую внешнего обслуживания, но опять-таки занимающую время. Переход на полностью статическую память слишком сильно повысил бы стоимость компьютера в целом (к тому же необходимый объем оперативной памяти компьютера все увеличивается), поэтому статическую память применяют только в самых "узких" местах, там, где без высокой скорости не обойтись, например, для кэш-памяти. Что касается динамической памяти, то ее развитие идет по пути снижения времени доступа благодаря структурным и технологическим усовершенствованиям. Например, второе поколение динамической памяти EDO RAM (Extended Data Output RAM) имело быстродействие примерно на 20—25% выше, чем у обычной памяти. Это достигается за счет того, что следующее обращение к памяти возможно еще до завершения предыдущего обращения. Третье поколение динамической памяти — SDRAM (Synchronous DRAM) — еще на столько же быстрее (рабочая частота в настоящее время достигает 133 МГц). Еще более быстродействующая память — DDR SDRAM (частота до 400 МГц) и память RDRAM (частота до 1 ГГц и даже выше). Для упрощения установки оперативной памяти в компьютер ее выполняют в виде небольших модулей — печатных плат с ножевым (печатным) разъемом, на которые установлены микросхемы памяти (SIMM — Single In-Line Memory Module). Эти модули устанавливаются в специальные SIMM-разъемы на материнской плате, что позволяет пользователю легко менять объем памяти компьютера, учитывая при этом необходимый уровень быстродействия, сложность решаемых задач и свои финансовые возможности. Широко применяются 72-контактные SIMM-модули разного объема. Отметим, что не рекомендуется одновременно использовать несколько модулей с разным быстродействием: в некоторых компьютерах это приводит к сбоям. В современных компьютерах на базе процессоров Pentium применяются также модули DIMM (Dual In-Line Memory Module — модуль памяти с двусторонними печатными выводами), имеющие 64 бита данных. Модули памяти иногда поддерживают проверку содержимого памяти на четность. Для этого к 8 битам данных каждого адреса памяти добавляется девятый бит четности. Он записывается при каждой записи информации в соответствующий байт памяти и проверяется при чтении информации из соответствующего байта памяти. Если обнаруживается несоответствие бита четности байту информации, то вырабатывается сигнал, вызывающий немаскируемое прерывание NMI. Все адресное пространство памяти компьютера разделяется на несколько областей, что связано, в первую очередь, с необходимостью обеспечения совместимости с первыми компьютерами семейства. В компьютере IBM PC XT на процессоре i8088 процессор мог адресовать 1 Мбайт памяти (20 адресных разрядов). Но все программные и аппаратные средства строились исходя из предположения, что доступное адресное пространство — только младшие 640 Кбайт (тогда это казалось вполне достаточным). Данная область памяти получила название стандартной памяти (Conventional memory). Именно в пределах этих 640 Кбайт (адреса 0…9FFFF) работает операционная система MS DOS и все ее прикладные программы. Первые 1024 байта (адреса 0…3FF) хранят таблицу векторов прерывания (Interrupt Vectors) объемом 256 двойных слов, формируемую на этапе начальной загрузки. Однако если процессор работает в защищенном режиме, таблица векторов может располагаться в любом другом месте памяти. Адреса 400…4FF отводятся под область переменных BIOS (BIOS Data Area). Подробнее о BIOS будет рассказано в следующем разделе. Адреса 500…9FFFF включают в себя область операционной системы DOS (DOS Area) и память пользователя (User RAM). Оставшиеся от 1 Мбайта памяти 384 Кбайта (адреса A0000…FFFFF), зарезервированные под другие системные нужды, называются UMA (Upper Memory Area) — область верхней памяти или UMB (Upper Memory Blocks) — блоки верхней памяти или High DOS Memory. Пространство видеопамяти (адреса A0000…BFFFF) содержит области для хранения текстовой и графической информации видеоадаптера. Пространство памяти с адресами E0000…FFFFF отведено под системную постоянную память компьютера ROM BIOS. В этой же области выделено окно размером в 64 Кбайта (page frame) с адресами D0000…DFFFF, через которое программы могли получать доступ к дополнительной (отображаемой) памяти (Expanded memory) объемом до 32 Мбайт, оставаясь в пределах того же 1 Мбайта адресуемой памяти. Это достигается путем поочередного отображения четырех страниц по 16 Кбайт из дополнительной памяти в выделенное окно. При этом положение страниц в дополнительной памяти можно изменять программным путем. Понятно, что работать с дополнительной памятью менее удобно, чем с основной, так как в каждый момент компьютер "видит" только окно в 64 Кбайт. Поэтому сейчас она применяется довольно редко. В настоящее время область памяти с адресами C0000…DFFFF чаще используется для оперативной и постоянной памяти, входящей в состав различных адаптеров и плат расширения компьютера. В результате логическая организация адресного пространства в пределах 1 Мбайт получилась довольно сложной (рис. 7.10). И такую же организацию должны поддерживать все персональные компьютеры семейства IBM PC для обеспечения совместимости с предшествующими моделями.
Рис. 7.10. Распределение адресного пространства памяти. При дальнейшем расширении адресуемого пространства памяти в последующих моделях компьютеров вся память объемом свыше 1 Мбайт получила название расширенной памяти (Extended memory). Для доступа к ней микропроцессор должен переходить из реального режима в защищенный и обратно. Общий объем памяти персонального компьютера (верхняя граница расширенной памяти) может доходить до 16 Мбайт (24 разряда адреса) или до 4 Гбайт (32 разряда адреса). Особого упоминания заслуживает так называемая теневая память (Shadow RAM), представляющая собой часть оперативной памяти, в которую при запуске компьютера переписывается содержание постоянной памяти, и заменяющая эту постоянную память на время работы компьютера. Необходимость данной процедуры вызвана тем, что даже сравнительно медленная динамическая оперативная память оказывается все-таки быстрее, чем постоянная память. Постоянная память часто заметно сдерживает быстродействие компьютера. Поэтому было предложено выделять часть оперативной памяти для исполнения обязанностей как системной постоянной памяти ROM BIOS, так и постоянной памяти, входящей в состав дополнительных адаптеров, которые подключаются к компьютеру. Переписывание информации обычно предусмотрено в программе начального пуска. В связи с особенностями работы динамической памяти для сокращения времени доступа к ней применяются специальные режимы работы оперативной памяти: режим расслоения (интерливинг) и страничный режим. Использование режима интерливинга предполагает не совсем обычное разбиение памяти на банки (части). Если при обычном разбиении ( последовательной адресации) адреса следующего банка начинаются после окончания адресов предыдущего, то при интерливинге адреса банков чередуются. То есть, например, после первого адреса первого банка следует первый адрес второго банка, затем второй адрес первого банка и второй адрес второго банка и т.д. Получается, что в одном банке четные слова, а в другом — нечетные. Таких чередующихся банков может быть не только два, а четыре, восемь, шестнадцать. Объемы банков при этом должны быть одинаковыми. В результате такого подхода появляется возможность начинать обращение к следующему слову еще до окончания процесса доступа к предыдущему. Страничный режим предполагает постраничную работу микросхем памяти, когда выбор страницы производится один раз на всю страницу, а выбор ячейки внутри страницы может происходить гораздо быстрее. Для поддержки обоих режимов применяются специальные технологические решения. Здесь же отметим, что при замене памяти компьютера или при установке дополнительных банков памяти надо строго следовать рекомендациям изготовителей системных плат, так как порядок заполнения банков может быть далеко не очевиден. 7.3.2. Постоянная память Системная постоянная память (ПЗП) занимает сравнительно небольшой объем (обычно 64 Кбайта). Однако ее значение для компьютера очень велико. Само ее название ROM BIOS (ROM Basic Input/Output System) — базовая система ввода/вывода — говорит о том, что в ней находится функционально полный набор программ нижнего уровня для управления устройствами ввода/вывода. Поэтому даже до загрузки в оперативную память исполняемых программ с диска компьютер имеет возможность обслуживать клавиатуру, дисплей, подавать звуковые сигналы, общаться с дисками и т.д. Важно отметить, что большинство современных видеоадаптеров, а также контроллеров накопителей имеют собственную систему BIOS, которая дополняет или даже заменяет системную BIOS во время основной работы. Вызов программ BIOS осуществляется через программные или аппаратные прерывания, для чего BIOS формирует соответствующую таблицу векторов прерываний. Но этим функции постоянной памяти не ограничиваются. В принципе, под память ROM BIOS отведено 128 Кбайт адресного пространства памяти. В первых компьютерах (IBM PC XT) она занимала всего 8 Кбайт, сейчас обычно занимает 64 Кбайт. Если же нужно использовать системную постоянную память большего объема, то она поочередно отображается на окно системной памяти размером 64 Кбайт (адреса F0000…FFFFF). Это связано со стремлением сэкономить пространство верхней памяти для других целей. При старте компьютера после включения питания, нажатия кнопки на передней панели RESET или после программного перезапуска начинает выполняться программа начального запуска, также хранящаяся в постоянной памяти (начальный адрес FFFF0) . Эта программа включает в себя: программу самотестирования компьютера (POST — Power On Self Test); программу начальной загрузки операционной системы с соответствующего дискового накопителя компьютера; программу задания текущих параметров компьютера (Setup). Кроме программы начального запуска ROM BIOS также обслуживает аппаратные прерывания от системных устройств (таймера, клавиатуры, дисков), а также отрабатывает базовые программные обращения к системным устройствам. Отметим, что в последнее время ROM BIOS выполняется не на микросхемах собственно постоянной памяти, а на микросхемах, допускающих многократную перезапись информации пользователем EPROM (Erasable Programmable ROM) с электрической перезаписью — типа флэш (flash), что позволяет более гибко настраивать компьютер. Пользователь может легко модернизировать BIOS своего компьютера с помощью программы перезаписи флэш-памяти. При использовании же микросхем ПЗП с ультрафиолетовым стиранием для этого требовались специальный программатор и стирающее устройство (ультрафиолетовая лампа). Программа самотестирования POST позволяет производить простейшую диагностику основных узлов компьютера, включая определение полного объема установленной оперативной памяти. Информация о ее результатах выводится тремя способами: сообщениями на дисплее (наиболее наглядно и понятно пользователю); звуковыми сигналами (что очень полезно при неработоспособном дисплее); выдачей кодов в определенный порт ввода/вывода, обычно это порт с адресом 080 (на этом основаны все диагностические приборы). Сообщения на дисплее могут прямо называть обнаруженную неисправность или неисправный блок или же выдавать специальный код ошибки, по которому впоследствии в прилагаемой документации можно найти причину неисправности компьютера. Таблица 7.2. Звуковые сигналы POST BIOS.Звуковые сигналы Неисправность 1 короткий Все в порядке 2 коротких Ошибка монитора Нет сигналов Источник питания, системная плата Непрерывный сигнал Источник питания, системная плата Повторяющиеся короткие сигналы Источник питания, системная плата 1 длинный, 1 короткий Системная плата 1 длинный, 2 коротких Адаптер дисплея (MDA, CGA) 1 длинный, 3 коротких Адаптер дисплея (EGA) Звуковые сигналы не отличаются особым разнообразием, но, тем не менее, позволяют обнаружить и идентифицировать основные ошибки. Для примера в табл. 7.2 приведены звуковые сигналы об ошибках, используемые BIOS компании IBM (для BIOS других фирм сигналы могут быть иными). Использование специальных диагностических приборов особенно эффективно: по некоторым оценкам, с их помощью можно обнаружить до 95% неисправностей. Однако их применяют только специальные сотрудники сервисных служб. Начиная с компьютеров на процессоре 80286 (IBM PC AT) постоянная память ROM BIOS обязательно дополняется небольшой энергонезависимой оперативной памятью CMOS RAM, которая выполнена на микросхемах с пониженным энергопотреблением с технологией КМОП (CMOS) и при выключении питания компьютера подпитывается от батарейки или аккумулятора (эта память, как правило, входит в состав других микросхем). В CMOS-памяти хранится информация о текущих показаниях часов (дате и времени), о значении времени для будильника, о конфигурации компьютера: приоритете загрузки с разных накопителей, количестве памяти, типах накопителей, режимах энергопотребления, о типе дисплея, об установках клавиатуры и т.д. CMOS RAM отличается от постоянной памяти тем, что записанная в нее информация легко меняется программным путем. Задавать все параметры компьютера, сохраняемые в CMOS RAM, позволяет программа BIOS Setup, вызвать которую можно путем нажатия назначенных клавиш во время процедуры начальной загрузки компьютера (информация об этом всегда выводится на экран). В современных компьютерах данная программа предлагает довольно удобный и наглядный интерфейс пользователя с привычными меню. Описание работы с BIOS Setup любого компьютера обязательно поставляется вместе с ним. Иногда с помощью этой программы удается значительно повысить быстродействие компьютера благодаря выбору оптимальных (или даже предельных) для данной конфигурации параметров: частоты системной шины, количества тактов задержки при обмене с системной памятью и кэш-памятью. Программа Setup позволяет также разрешить или запретить использование теневой (Shadow) памяти как для системного BIOS, так и для BIOS используемых адаптеров (по отдельным сегментам памяти). При использовании теневой памяти в выбранную область оперативной памяти копируется содержимое BIOS ROM, эта область определяется как доступная только для чтения, и производится переадресация памяти. То есть при любых обращениях по адресам ROM чтение данных будет производиться из соответствующих адресов Shadow RAM, а постоянная память уже не используется. Такой подход может существенно (иногда в 4 — 5 раз) ускорить выборку команд для программ обмена с видеоадаптером и с дисковыми накопителями. В программе Setup всегда предусмотрена возможность установки параметров компьютера по умолчанию (Default Setting). Это особенно удобно в случае разряда или повреждения батареи или аккумулятора. В новых компьютерах, поддерживающих режим экономии потребляемой электроэнергии, можно также задавать переход компьютера в режимы Doze (спящий), Standby (ожидания или резервный) и Suspend (приостановки работы) при отсутствии обращений к узлам компьютера в течение заданного времени. Режимы перечислены в порядке снижения потребления электроэнергии. Компьютеры (а также их системные платы), где применяются такие режимы, называются иногда "зелеными". Дальше » 7.4. Системные устройства Помимо микропроцессора и системной памяти на системной (материнской) плате располагаются и другие важные модули, обеспечивающие работоспособность компьютера: контроллеры прерываний и прямого доступа, тактовый генератор, системный таймер, буферные микросхемы, контроллер шины и т.д. В первых компьютерах семейства все эти функции выполняли отдельные специализированные микросхемы сравнительно низкой степени интеграции. В современных компьютерах применяются сверхбольшие интегральные схемы, которые, тем не менее, обеспечивают полную программную и аппаратную совместимость с предыдущими моделями. Эти микросхемы называются набором микросхем или chipset (чипсет). Преимущества такого подхода — chipset занимает меньше места на плате, меньшая потребляемая мощность, значительно большая надежность. Компьютеры, выполненные на системных платах с chipset известных фирм, имеют лучшую репутацию. В большинство наборов микросхем входит так называемый периферийный контроллер, включающий два контроллера прерываний, два контроллера прямого доступа к памяти, таймер, часы реального времени, а также CMOS-память. 7.4.1. Тактовый генератор Системный тактовый генератор генерирует сигналы синхронизации для работы микропроцессора, всех контроллеров и системной шины. Для обеспечения высокой стабильности тактовых частот и их независимости от температуры применяются кварцевые резонаторы, то есть кристаллы кварца, имеющие высокостабильную частоту собственных колебаний. Как правило, в состав системной платы входит несколько кварцевых резонаторов, каждый из которых обеспечивает свой тактовый сигнал. Тактовую частоту процессора можно выбирать путем установки перемычек на системной плате. Это позволяет пользователю модернизировать компьютер путем замены процессора на другой, рассчитанный на более высокую тактовую частоту. Иногда удается заставить процессор работать на более высокой тактовой частоте, чем та, на которую он рассчитан, но здесь нужно соблюдать осторожность, так как повышение частоты ведет не только к увеличению потребляемой мощности и перегреву микросхемы, но и к ошибкам и сбоям в работе, причем проявляющихся только в отдельных режимах, например, в многозадачном. В компьютерах на базе процессоров 486 и Pentium применяется деление опорной тактовой частоты для синхронизации системной шины и внутреннее умножение частоты в процессорах. Например, в процессоре 486DX2-66 используется умножение на два тактовой частоты 33,3 МГц, а в процессорах семейства Pentium применяется умножение на 2,5 (при опорной частоте 60 МГц частота процессора 150 МГц) или на 3 (при опорной частоте 66,6 МГц частота процессора 200 МГц). В общем случае в компьютере существуют следующие тактовые частоты: Host Bus Clock (CLK2IN) — это опорная частота (внешняя частота шины процессора). Именно из нее могут получаться другие частоты и именно она задается перемычками (джамперами); CPU Clock (Core Speed) — это внутренняя частота процессора, на которой работает его вычислительное ядро. Может совпадать с Host Bus Clock или получаться из нее умножением на 1,5, 2, 2,5, 3, 4. Умножение должно быть предусмотрено в конструкции процессора. ISA Bus Clock (ATCLK, BBUSCLK) — это тактовая частота системной шины ISA (сигнал SYSCLK). По стандарту она должна быть близка к 8 МГц, но в BIOS Setup имеется возможность выбрать ее через коэффициент деления частоты Host Bus Clock. Иногда компьютер остается работоспособным и при частоте шины ISA около 20 МГц, но обычно платы расширения ISA разрабатываются из расчета на 8 МГц, и при больших частотах они перестают работать. Не следует рассчитывать, что компьютер станет вдвое быстрее при удвоении этой частоты. Для каналов прямого доступа к памяти на системной плате используется еще один тактовый сигнал SCLK, частота которого, как правило, составляет половину от ISA Bus Clock. PCI Bus Clock — это тактовая частота системной шины PCI, которая по стандарту должна быть 25 — 33,3 МГц. Ее обычно получают делением частоты Host Bus Clock на нужный коэффициент. В компьютерах предусматривается возможность ее увеличения до 75 или даже 83 МГц, но из соображений надежности работы рекомендуется придерживаться стандартных значений. VLB Bus Clock — это частота локальной шины VLB, определяемая аналогично PCI Bus Clock. 7.4.2. Контроллер прерываний Контроллеры радиальных прерываний в первых компьютерах выполнялись на микросхемах i8259, каждая из которых имела 8 входов запроса прерываний. В IBM PC AT применялось две таких микросхемы, в результате чего количество входов запросов прерываний увеличилось до 15. Режимы работы контроллеров прерываний определяются процессором путем записи соответствующих управляющих кодов по адресам в пространстве устройств ввода/вывода. О циклах обмена по прерываниям уже говорилось в разделе 2.2.2. При поступлении запроса прерывания на один из входов IRQ и удовлетворении этого запроса контроллер прерываний вырабатывает выходной сигнал запроса прерывания, поступающий на процессор. В ответ на это процессор запрашивает контроллер о том, прерывание с каким адресом вектора необходимо обслужить. Всего прерываний может быть 256 (от 00 до FF). Номер прерывания, полученный от контроллера, процессор умножает на 4 и получает, таким образом, адрес памяти, где хранится адрес начала программы обработки прерываний (вектор прерывания). Присваивание каждому из каналов IRQ своего номера процессор осуществляет на этапе инициализации контроллера. Контроллер прерываний может выполнять следующий набор операций: маскирование запросов на прерывание, то есть временное запрещение реакции на них; установка приоритетов запросов по различным входам, то есть разрешение конфликтов при одновременном приходе нескольких запросов на прерывание; работа в качестве основного контролера (Master) или подчиненного (Slave). Для маскирования прерываний используется внутренний регистр контроллера, программно доступный процессору как по записи, так и по чтению. Замаскирован может быть каждый запрос (по каждой из линий IRQ), путем установки соответствующего бита маскирования в записываемом в контроллер управляющем байте. Схема приоритетов прерываний может быть задана процессором программным путем. В базовом варианте все приоритеты фиксированы (то есть IRQ0 имеет высший приоритет, а IRQ7 — низший). Но в принципе высший уровень приоритета задается для любого из входов запросов, можно также установить циклическое переключение приоритетов (последний обслуженный запрос получает низший приоритет), обеспечивая тем самым всем запросам равные приоритеты. Если во время обработки прерывания с меньшим уровнем приоритета приходит более приоритетный запрос, то процессор переходит на программу обработки более приоритетного запроса, а после ее выполнения возвращается к программе обработки менее приоритетного запроса. Отметим, что немаскируемое прерывание NMI имеет приоритет выше любого другого аппаратного прерывания. Завершив выполнение программы обработки прерывания, процессору необходимо с помощью специальной команды сообщить об этом контроллеру прерываний, чтобы разрешить ему дальнейшую работу, в частности, вновь обрабатывать тот же самый запрос. Контроллер 8259 предусматривает возможность выбора способа распознавания запроса на прерывание — по фронту сигнала IRQ и по уровню этого сигнала. В архитектуре компьютера типа PC используется запрос по фронту. При каскадировании контроллеров основному контроллеру надо указать, к какому из его входов подключен подчиненный контроллер, а подчиненному контроллеру необходимо указать, к какому входу основного контроллера подключен его выходной сигнал запроса. Все операции начальной настройки контроллеров прерываний выполняет BIOS, и пользователю нужно прибегать к программированию этих контроллеров только при необходимости смены режимов обслуживания прерываний или при написании собственной программы обработки аппаратных прерываний. 7.4.3. Контроллер прямого доступа к памяти Контроллер прямого доступа к памяти имеет более сложную структуру по сравнению с контроллером прерываний, что связано с его более сложными функциями. На время ПДП контроллер ПДП становится задатчиком (активным устройством) системной шины, выставляя все основные сигналы шины самостоятельно. Однако все режимы работы контроллера ПДП, все его параметры устанавливаются процессором на этапе инициализации контроллера. В частности, процессор определяет тип решаемой задачи, задает начальный адрес передаваемого или принимаемого массива данных, а также размер этого массива. В персональном компьютере применяется два четырехканальных контроллера ПДП типа i8237, обеспечивающих 7 каналов ПДП (один канал задействован под каскадирование контроллеров по тому же принципу, что и контроллеры прерываний). Помимо собственно контроллеров ПДП в подсистему ПДП входят также программно доступные регистр старшего байта адреса и регистры страниц ПДП. О циклах обмена в режиме ПДП уже говорилось в разделе 2.2.3. Получив сигнал запроса ПДП по одной из линий DRQ, контроллер формирует запрос процессору на захват шины и, получив разрешение от процессора, сообщает о предоставлении ПДП запросившему прямой доступ устройству по соответствующей линии DACK. После этого производится цикл ПДП, пересылающий данные из устройства ввода/вывода в память или наоборот. При этом сам контроллер ПДП формирует только 16 младших разрядов адреса памяти, а восемь старших разрядов содержатся в регистре страниц. Свой собственный регистр страниц соответствует каждому из каналов ПДП. Передача данных в случае ПДП возможна по одному из следующих режимов: Режим одиночной (поцикловой) передачи. В этом случае за время предоставления ПДП выполняется только один цикл передачи данных, и для следующей передачи надо опять же запросить ПДП. Однако адрес памяти, с которым осуществляется обмен, автоматически меняется после каждого цикла. Этот режим позволяет процессору вставлять свои циклы обмена после каждого цикла ПДП. Режим передачи блока (режим блочной передачи). В этом режиме за один раз передается целый блок данных определенной длины (до 64 Кбайт). Режим обеспечивает более высокую скорость передачи по сравнению с режимом одиночной передачи, но может на длительное время захватить системную шину, не допуская к ее управлению процессор. Режим передачи по требованию. Этот режим позволяет продолжать ПДП до тех пор, пока устройство, запросившее ПДП, не исчерпает весь объем данных. Каскадный режим позволяет объединять контроллеры для увеличения количества каналов ПДП. В принципе, возможен режим передачи в режиме ПДП из памяти в память, но в компьютере он не используется. Как и в случае контроллера прерываний, возможны две схемы приоритетов каналов ПДП, выбираемые программно, — фиксированный и циклический. Исходная схема — фиксированные приоритеты, причем нулевой канал имеет максимальный приоритет, а седьмой — минимальный. Во время обслуживания любого запроса ПДП остальные запросы не могут вмешаться, но после завершения обслуживания данного запроса будет обслуживаться запрос с наибольшим приоритетом. Как и в случае контроллера прерываний, возможно программное маскирование каждого канала ПДП. Перед началом работы каждому из каналов контроллера процессор должен указать режим, в котором он будет работать, базовый адрес памяти, с которого начнется обмен, количество передаваемых байтов или слов, направление записи в память или чтения из памяти (от старших адресов к младшим или наоборот). Возможен режим автоинициализации, при котором после окончания пересылки всего массива данных контроллер автоматически восстанавливает все параметры, и для этого не требуется вмешательство процессора. Предусмотрена также возможность программного запроса ПДП, обслуживаемого так же, как и аппаратный запрос. 7.4.4. Системный таймер и часы реального времени В качестве системного таймера компьютера используется микросхема трехканального 16-разрядного таймера i8254 или ее аналог. Таймер предназначен для получения программно управляемых временных задержек и генерации сигналов заданной частоты. Таймер позволяет повысить эффективность программирования процессов управления и синхронизации внешних устройств, особенно в реальном времени. Таймер содержит три независимых канала (0, 1 и 2), каждый из которых может быть, в принципе, запрограммирован на работу в одном из шести режимов счета: прерывание терминального счета; программируемый генератор одиночного импульса; генератор импульсов заданной частоты; генератор прямоугольных импульсов типа "меандр"; программно формируемый строб; аппаратно формируемый строб. На каждый канал могут подаваться входные синхросигналы. Из каждого канала можно получать сигнал с частотой, равной входной частоте, деленной на произвольное 16-разрядное число. В компьютере на все входы поступают синхросигналы частотой 1,19 МГц. Все каналы таймера в компьютере имеют специальное назначение, поэтому особой свободы в выборе режима работы или переназначении функций у пользователя нет. Выход канала 0 связан с сигналом запроса прерывания IRQ0 и обеспечивает прерывание для счетчика реального времени (используется режим работы 3). Пользователю не рекомендуется перепрограммировать этот канал. При старте компьютера канал программируется так, чтобы выдавать импульсы примерно 18,2 раза в секунду. По этому прерыванию программно увеличивается состояние счетчика реального времени. Пользователь может читать состояние данного счетчика из специально выделенной ячейки памяти и применять его для задержек в своих программах. Выход канала 1 генерирует сигнал запроса регенерации динамической памяти (режим работы 2). Использование этого канала не по назначению может привести к потере содержимого оперативной памяти. Выход канала 2 генерирует тональный сигнал для встроенного динамика компьютера (режим работы 3). Однако разрешение этого тонального сигнала производится установкой выделенных разрядов (0 и 1) программно доступного параллельного порта контроллера периферийных устройств. Один разряд (0) разрешает работу канала, другой разряд (1) пропускает выходной сигнал на динамик. Таким образом, пользователь компьютера может задействовать только канал 2. Чаще всего его применяют для генерации звуков заданной частоты и длительности. Кроме того, выходной сигнал данного канала программно доступен по чтению из одного из разрядов параллельного порта. Это позволяет, запрограммировав таймер соответствующим образом, выдерживать нужные временные интервалы. Для этого следует программно разрешить генерацию (при отключенном динамике), а затем программно опрашивать выходной сигнал таймера и принимать решения по изменению его уровня. Подсистема часов реального времени в первых компьютерах выполнялась на микросхеме контроллера MC146818 фирмы Motorola. Этот контроллер содержит 64 байта СMOS-памяти, из которых первые 14 байт используются для часов реального времени, а остальные 50 байт хранят информацию о конфигурации системы. Для входного тактового сигнала контроллера применяется специальный "часовой" кварцевый генератор с частотой 32 768 кГц, что позволяет с помощью деления частоты получить импульсы с частотой 1 Гц. Контроллер считает секунды, минуты, часы, дни недели, месяцы и годы. Причем работает он даже при отключении питания компьютера, подпитываясь от батареи или аккумулятора. Это позволяет сохранять информацию о текущем времени постоянно. Помимо счетчика текущего времени, контроллер имеет в своем составе будильник. Будильник может формировать прерывания (IRQ8) с программно заданной периодичностью. Состояния всех счетчиков (секунд, минут, часов и т.д.) программно доступны как по чтению, так и по записи, что позволяет устанавливать нужное время и следить за ним. Дальше7.5. Средства интерфейса пользователя Для связи компьютера с пользователем (то есть организации интерфейса пользователя) применяются видеоадаптер, управляющий видеомонитором, клавиатура и графический манипулятор типа "мышь" (mouse), touch pad или stick pointer. Видеоадаптер представляет собой устройство сопряжения компьютера с видеомонитором и чаще всего выполняется в виде специальной платы расширения, вставляемой в системную шину или локальную шину компьютера. При этом изображение, формируемое на экране монитора, хранится в видеопамяти, входящей в состав видеоадаптера. Видеопамять представляет собой оперативную память, которая, хотя и не является, по сути, системной памятью, рассматривается процессором как часть системной памяти с адресами A0000 — BFFFF (всего 128 Кбайт). То есть с этой памятью процессор может взаимодействовать как с системной оперативной памятью: писать информацию в любую ячейку и читать информацию из любой ячейки. Но одновременно эта же память постоянно сканируется (то есть последовательно опрашивается) самим видеоадаптером для формирования растрового изображения на экране монитора. То есть доступ к этой памяти имеют как процессор, так и видеоадаптер. Скорость обмена с видеопамятью — довольно важный параметр, он влияет на удобство работы с компьютером и часто определяет круг задач, который может им выполняться. Поэтому для видеопамяти используют самые быстродействующие микросхемы. Кроме того, применяют специальные архитектурные решения, позволяющие облегчить разделение доступа к памяти со стороны процессора и видеоадаптера. Например, в случае двухпортовой памяти VRAM — Video RAM, к каждой ее ячейке одновременно могут получить доступ (с записью или чтением) как процессор, так и сам адаптер. Отметим, что в старых видеоадаптерах для снижения искажений изображения на экране во время перезаписи содержимого памяти использовалось обращение к памяти со стороны центрального процессора только в периоды кадрового и строчного гасящего импульсов (когда электронный луч монитора гасится при переходе к следующей строке экрана или к следующему кадру). Все современные видеоадаптеры могут работать в двух основных режимах: текстовом (символьном, алфавитно-цифровом) и графическом. В текстовом режиме видеопамять имеет начальный адрес B8000, а в графическом — А0000. В текстовом режиме на экран можно выводить только отдельные символы, причем только в определенные позиции на экране. При этом в видеопамяти хранятся исключительно коды выводимых символов (8-разрядные) и коды атрибутов символов (8-разрядные). То есть каждой символьной позиции на экране соответствует два байта памяти. К атрибутам символа относятся яркость, цвет, мерцание как символа, так и его фона. Для преобразования содержимого памяти в видеосигнал точечного изображения применяется так называемый знакогенератор. Он может представлять собой ПЗП, в котором записано построчное растровое изображение каждого символа. При этом чем больше точек растра отводится под изображение символа, тем он качественнее, но тем больше места занимает на экране. Преимущества текстового режима — это простота управления экраном и малый объем требуемой памяти. Примером его использования является программа начального запуска BIOS. В графическом режиме в видеопамяти хранится описание каждой точки на экране монитора. Каждой точке соответствует несколько бит памяти (используется ряд: 1, 4, 8, 16, 24 бит на одну точку). При этом, соответственно, каждая точка может иметь 2n состояний, где n — количество битов, а под состоянием понимается цвет и яркость точки. При одном бите точка может быть белой или черной, при 4 битах она может иметь 16 цветов, при 8 битах — 256, при 16 битах — 65 536, а при 24 битах — 16 777 216 цветов и оттенков. Здесь же отметим, что общее количество точек на экране в современных компьютерах выбирается из ряда 640 (по горизонтали) x 480 (по вертикали), 800x600, 1024x768, 1280x1024, 1600x1200. Отсюда нетрудно рассчитать требуемый для полного экрана объем видеопамяти. Так, например, при разрешении 800x600 точек и при 256 цветах (8 бит или 1 байт) требуется 800x600x1 = 480 000 байт памяти. При разрешении 1024x768 и 65 536 цветов (2 байта) требуется 1024x768x2 = 1 572 864 байта. Однако объем видеопамяти выбирается из следующего ряда: 256 Кбайт, 512 Кбайт, 1 Мбайт, 2 Мбайт, 4 Мбайт, 8 Мбайт, 16 Мбайт. В табл. 7.3 приведены необходимые объемы видеопамяти для различных режимов работы видеоадаптера. Таблица 7.3. Необходимые объемы видеопамяти.Разрешение и количество цветов Количество бит на точку Объем видеопамяти 800 x 600, 16 цветов 4 256 Кбайт 800 x 600, 256 цветов 8 512 Кбайт 800 x 600, 64 К цветов 16 1 Мбайт 800 x 600, 16 М цветов 24 2 Мбайт 1024 x 768, 16 цветов 4 512 Кбайт 1024 x 768, 256 цветов 8 1 Мбайт 1024 x 768, 64 К цветов 16 2 Мбайт 1024 x 768, 16 М цветов 24 4 Мбайт 1280 x 1024, 16 цветов 4 1 Мбайт 1280 x 1024, 256 цветов 8 2 Мбайт 1280 x 1024, 64 К цветов 16 4 Мбайт 1280 x 1024, 16 М цветов 24 4 Мбайт Понятно, что для полного обновления такого большого объема памяти требуется значительное время даже при быстрой видеопамяти и быстром процессоре. В роли ограничивающего фактора будет выступать темп обмена по системной шине. Поэтому именно видеоадаптеры первыми стали размещать на локальной шине VLB или на шине PCI, а позднее — на выделенной шине AGP. Другое направление ускорения формирования изображения — совершенствование принципов обмена с компьютером. Первые видеоадаптеры были рассчитаны на то, чтобы все манипуляции с изображением проводил сам центральный процессор компьютера. Принципиально иной подход — использование графического сопроцессора. При этом центральный процессор только дает команды на формирование изображения, а сопроцессор, расположенный на плате видеоадаптера, сам уже выполняет всю обработку, расчеты и формирование объектов на экране, что дает большое увеличение скорости формирования изображений. Промежуточный вариант — это применение так называемых графических ускорителей, то есть узлов, выполняющих наиболее трудоемкие операции по формированию изображений, но центральный процессор при этом не освобождается полностью от управления видеопамятью. В настоящее время наиболее распространены два стандарта дисплеев: SVGA (Super VGA), который поддерживает максимальное разрешение 1024х768 точек (стандартным считается 800х600 точек) в 16- и 256-цветных режимах при максимальном объеме видеопамяти 4 Мбайт. Кроме того, предусмотрено использование двухпортовой памяти и 16-разрядной шины данных и ряд других новшеств. XGA и XGA-2 (eXtended Graphics Array) — эти стандарты предложены в 1990 и 1992 г.г. компанией IBM. Основным режимом считается разрешение 1024х768 точек при 256 цветах (XGA) или при 64 К цветах (XGA-2). Отличительная особенность — использование быстродействующего графического сопроцессора и наличие возможности управлять системной шиной, что позволяет выполнять видеооперации без участия центрального процессора. Так же, как и в SVGA, используется двухпортовая оперативная память, причем она располагается в адресном пространстве компьютера в последних адресах полной 4-гигабайтной области, на которые обычно никто не претендует. В XGA-2, в отличие от XGA, используется только прогрессивная (сплошная, non-interlaced, NI), а не чересстрочная (interlaced) развертка изображения на экране монитора, что обеспечивает малые мерцания. Оба стандарта поддерживают полную совместимость с SVGA. UVGA (Ultra VGA) — основным разрешением считается 1280х1024 точек. UXGA — разрешение 1600х1200 точек, XVGA — 1280х768 точек. Для подключения к компьютеру клавиатуры применяется специальный интерфейс с последовательной передачей информации. Это позволяет использовать для присоединения клавиатуры всего два двунаправленных провода (линия данных и тактовый сигнал). Обмен информацией идет 11-битовыми посылками, включающими 8 разрядов данных и служебную информацию (то есть стартовый бит, бит четности и стоповый бит). В компьютере IBM PC XT для подключения клавиатуры использовалась микросхема PPI (Programmable Peripheral Interface) i8255, а в PC AT — микросхема UPI (Universal Peripheral Interface) i8042. Принцип работы клавиатуры довольно прост. Он сводится к постоянному сканированию (последовательному опросу) всех клавиш (обычно применяется 101-клавишная клавиатура) и к пересылке в компьютер номера нажатой клавиши (8-битного скэн-кода), причем как при ее нажатии, так и при отпускании. При отпускании клавиши ее скэн-код предваряется посылкой кода F0. Если клавиша удерживается длительное время, то через заданный интервал посылки ее скэн-кодов повторяются с заданной частотой. Если одновременно нажимается более одной клавиши, то повторяется посылка кода только последней из нажатых клавиш. При получении скэн-кода контроллером 8042 он формирует сигнал запроса аппаратного прерывания IRQ1. Это приводит к вызову программы обработки нажатия клавиши, находящейся в BIOS. Служебные клавиши (Shift, Сtrl, Alt) и переключающие клавиши (Caps Lock, Insert, Num Lock) обрабатываются специальным образом, а в случае нажатия символьных клавиш их скэн-коды преобразуются в коды соответствующих символов и помещаются в буфер клавиатуры. Буфер клавиатуры — это 16-байтная область памяти, организованная по принципу FIFO "первый вошел — первый вышел", в которой хранятся коды нажатых клавиш до тех пор, пока их сможет обработать программа. Современные клавиатуры персональных компьютеров имеют 101 или 102 клавиши. Имеются "расширенные" модели с количеством клавиш до 122 и "усеченные" модели с количеством клавиш около 90, применяемые в портативных компьютерах типа ноутбук. Начиная с компьютера PC AT, клавиатура может не только передавать информацию, но и принимать ее. Эта возможность используется для пересылки в клавиатуру команд, устанавливающих режимы ее работы (например, скорость повтора ввода символов при удерживаемой клавише или временная задержка перед повтором). Компьютерная мышь, служащая для управления курсором, подключается к компьютеру через стандартный последовательный интерфейс RS-232C (о нем подробнее — в отдельной главе). Для передачи компьютеру информации о перемещении мыши используется 3-байтовый формат. Два байта при этом содержат информацию о перемещении мыши по вертикали и по горизонтали, а один байт — о состоянии кнопок мыши. Передача ведется только в одном направлении (от мыши к компьютеру) со скоростью 1200 бит/с. Перемещение измеряется в специальных единицах cpi (counts per inch), равных примерно 0,005 дюйма (0,13 мм). Стоит отметить, что мышь, как правило, питается от системного блока компьютера, для чего задействованы неиспользуемые сигнальные линии разъема интерфейса RS-232C, так как собственно напряжения питания на разъем не выведены. Именно поэтому мышь присоединяется к компьютеру четырехпроводным кабелем, хотя для информации хватило бы и двухпроводного. Подробнее об интерфейсе RS-232C в следующей главе. Сейчас используется также подключение мыши через интерфейс PS/2, похожий на RS-232C, но не совместимый с ним ни электрически, ни конструктивно. Альтернатива мыши — это манипуляторы Stick Pointer и Touch Pad, которые не имеют движущихся механических частей. Сначала они применялись только в ноутбуках, но затем их стали размещать и на клавиатурах обычных настольных компьютеров. Stick Pointer представляет собой небольшой рычажок, расположенный между клавишами. Давление на него в разные стороны вызывает перемещение курсора на экране. При этом сам рычажок остается неподвижным. Touch Pad представляет собой небольшую площадку, расположенную рядом с клавишами, по которой необходимо двигать пальцем или ручкой, причем движение пальца вызывает такое же перемещение курсора на экране. С точки зрения компьютера эти манипуляторы ничем не отличаются от мыши, они используют тот же интерфейс. Игровой адаптер джойстик подключается к компьютеру через собственный специальный интерфейс. Для связи с джойстиком не требуется никаких прерываний. Используется только один адрес ввода/вывода. 7.6. Внешняя память Внешняя память компьютера представляет собой дисковые накопители информации — встроенный накопитель на жестком диске (винчестер) и накопитель на сменных гибких дисках (дискетах). В обоих случаях магнитные диски хранят информацию в виде намагниченных концентрических дорожек (цилиндров) на магнитном покрытии, разбитых на сектора. Диск в накопителе постоянно вращается, а запись и чтение информации производятся перемещаемыми вдоль радиуса диска магнитными головками. Благодаря постоянному прогрессу технологии производства накопителей, развитию технологии магнитных покрытий и магнитных головок, емкость винчестеров повысилась до нескольких десятков гигабайт, а емкость дискет — до сотен мегабайт (правда, стандартным пока считается объем дискеты 1,44 Мбайт). Подробное описание работы дисководов и принципов хранения информации на магнитных дисках потребовало бы слишком много места, к тому же оно не имеет прямого отношения к теме данной книги, поэтому мы здесь приведем только некоторые особенности организации обмена информацией. Важный параметр любого дисковода — это его быстродействие, которое определяется, с одной стороны, достижимой скоростью записи/чтения информации, а с другой — временем позиционирования (то есть установки в нужное положение) магнитной головки дисковода. Немаловажно и быстродействие интерфейса, осуществляющего связь компьютера с накопителем, а также применяемые способы организации обмена информацией. В настоящее время наиболее распространены два стандартных интерфейса для винчестеров: IDE (Integrated Drive Electronics) — интерфейс для дисковых накопителей, официальное название — ATA (AT Attachment). Именно этот интерфейс применяется в качестве основного в персональных компьютерах. Скорость обмена может достигать 133 Мбайт/с. SCSI (Small Computer System Interface) — малый компьютерный системный интерфейс. В принципе, он используется и для подключения других устройств (например, сканеров), но основное его применение — для дисководов. Как правило, данный интерфейс изначально включается в структуру только некоторых серверов, а для его реализации в персональных компьютерах необходима дополнительная плата расширения (кстати, довольно дорогая). Скорость обмена может достигать 320 Мбайт/с. Сравнение этих двух интерфейсов (SCSI и IDE) показывает, что в однопользовательских автономных системах гораздо эффективнее применять IDE, а в многопользовательских и многозадачных системах выгоднее становится SCSI. Стоит также отметить, что установка SCSI сложнее и дороже, чем IDE. Кроме того, при использовании винчестера с интерфейсом SCSI в качестве сетевого диска могут возникнуть проблемы. Преимуществом SCSI является большее количество максимально подключенных дисководов и возможность одновременного выполнения ими подаваемых команд. А что касается скорости обмена, то она в основном определяется не пропускной способностью интерфейса, а другими параметрами, в частности скоростью используемой системной шины. Поэтому точно сказать, дисковод с каким интерфейсом будет работать быстрее, в общем случае невозможно. К тому же в случае IDE реальная скорость очень сильно зависит от схемотехнических решений, использованных изготовителем дисководов. Для ускорения обмена с дисками широко применяется кэширование, принцип которого близок к принципу кэширования оперативной памяти. Точно так же кэширование диска позволяет за счет использования более быстрой электронной памяти, чем дисковая память, существенно увеличить среднюю скорость обмена с диском. Здесь принципиально важны несколько моментов: в большинстве случаев каждое следующее обращение к диску будет обращением к следующему по порядку блоку информации на диске; для позиционирования головки требуется заметное время (порядка миллисекунды); искомый сектор на диске может не оказаться под головкой после ее установки, и потребуется ждать его прихода. Все это приводит к тому, что оказывается гораздо выгоднее содержать в оперативной памяти (дисковой кэш-памяти) копию части диска и обращаться на диск только в том случае, если нужной информации нет в кэш-памяти. Для обмена с кэш-памятью, как и в случае оперативной памяти, используются методы Write Through (WT) и Write Back (WB). Так как винчестер — это блочно-ориентированное устройство (размер блока равен 512 байт), то данные передаются в кэш блоками. При заполнении кэш-памяти в нее переписываются не только необходимые в данный момент блоки, но и следующие за ними (метод "чтение вперед", Read Ahead), дальнейшее обращение к которым наиболее вероятно. Особенно эффективно кэширование при оптимизации жесткого диска (его дефрагментации), когда каждый файл расположен в группе секторов, следующих друг за другом. Как и в случае кэширования памяти, при кэшировании диска используется механизм LRU, позволяющий обновлять те блоки, к которым дольше всего не было обращений. Кэш-память диска обычно располагается на плате специального кэш-контроллера дисковода, и ее объем может достигать 16 Мбайт. Для сопряжения с компьютером дисковода для гибких дисков (флоппи-дисков, дискет) традиционно применяется специальный интерфейс SA-400, разработанный в начале 70-х годов. Контроллер присоединяется к дисководу 34-проводным кабелем, причем к одному контроллеру обычно присоединяется до двух дисководов (теоретически их может быть четыре). На каждом накопителе, как правило, имеется четыре перемычки DS0—DS3 (Drive Select) для выбора номера данного дисковода. Данные по интерфейсу передаются в последовательном коде в обоих направлениях (по разным проводам). Скорость передачи данных для дискет емкостью 1,44 Мбайт составляет 500 Кбит/с. Как и контроллер жестких дисков, контроллер гибких дисков в современных компьютерах установлен на системной плате (для старых моделей компьютеров выпускались специальные платы расширения). В новых компьютерах стал стандартным дисковод на оптических компакт-дисках (CD-ROM). На этих дисках информация хранится в виде зон с разными степенями отражения света от поверхности диска. Вместо множества концентрических дорожек на поверхности диска (как у магнитного диска, винчестера), в случае компакт-диска применяется всего одна спиральная дорожка. Для чтения информации применяется миниатюрный лазер. Диски имеют диаметр 5 дюймов и стандартный объем 780 Мбайт. Скорость обмена информацией с компакт-дисками сейчас составляет от 2,4 Мбайт/с (для дисководов со скоростью 16х) до 3,6 Мбайт/с (для дисководов со скоростью 52х). Используются интерфейсы IDE и SCSI. На компакт-диск записываются не только данные, но и звук, а также изображение. Существуют компакт-диски с возможностью однократной записи или даже многократной перезаписи информации с компьютера. Возможно, дисководы, поддерживающие такие диски, вскоре войдут в стандартную комплектацию персонального компьютера. Правда, скорость записи информации на компакт-диски обычно существенно ниже скорости чтения информации. Перейти к вопросам » Глава 8. Интерфейсы персонального компьютера 15. Лекция: Системная магистраль ISA Страницы: 1 | 2 | 3 | вопросы | » для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь В этой лекции рассказывается о характеристиках системной магистрали ISA, о назначении сигналов и протоколах обмена информацией на магистрали, а также о принципах распределения ресурсов ПК.
Сразу же оговоримся, что под интерфейсами персонального компьютера в данном случае имеются в виду только внешние интерфейсы, то есть средства сопряжения с внешними по отношению к компьютеру в целом устройствами. При этом внешние устройства могут быть как стандартными (например, принтер или модем), так и нестандартными (например, измерительные и управляющие модули, приборы, установки). В настоящее время компьютеры могут иметь множество внешних интерфейсов. Наиболее распространены следующие: системная шина (магистраль) ISA; шина PCI; шина AGP; шина PC Cards (старое название PCMCIA) — обычно только в ноутбуках; параллельный порт (принтерный, LPT-порт) Centronics; последовательный порт (COM-порт) RS-232C; последовательный порт USB (Universal Serial Bus); последовательный инфракрасный порт IrDA. Кроме того, компьютеры могут иметь разъемы для подключения внешнего монитора, клавиатуры, мыши. Некоторые компьютеры имеют встроенные модемы и сетевые адаптеры, тогда они располагают, соответственно, телефонным и сетевым внешними интерфейсами. Подключение стандартных внешних устройств обычно не вызывает никаких проблем: надо только присоединить устройство к компьютеру соответствующим стандартным кабелем и (возможно) установить на компьютер программный драйвер. Знать особенности внешних интерфейсов пользователю в данном случае не обязательно. В случае инфракрасного порта не нужен даже кабель. Гораздо сложнее ситуация, когда к компьютеру требуется присоединить нестандартное внешнее устройство. В этом случае необходимо доскональное знание особенностей используемых интерфейсов и умение эффективно с ними работать. Ограниченный объем книги не позволяет полностью рассмотреть данный вопрос, поэтому мы остановимся только на общем описании некоторых внешних интерфейсов компьютера. Чаще всего для подключения нестандартных внешних устройств используются системная магистраль ISA, параллельный интерфейс Centronics (LPT) и последовательный интерфейс RS-232C (COM). 8.1. Системная магистраль ISA Системная шина (магистраль) ISA была разработана специально для персональных компьютеров типа IBM PC AT и является фактическим стандартом. В то же время, отсутствие официального международного статуса магистрали ISA (она не утверждена в качестве стандарта ни одним международным комитетом по стандартизации) приводит к тому, что многие производители допускают некоторые отклонения от фирменного стандарта. ISA явилась расширением магистрали компьютеров IBM PC и IBM PC XT. В ней было увеличено количество разрядов адреса и данных, увеличено число линий аппаратных прерываний и каналов ПДП, а также повышена тактовая частота. К 62-контактному разъему прежней магистрали был добавлен 36-контактный новый разъем. Тем не менее, совместимость была сохранена, и платы, предназначенные для IBM PC XT, годятся и для IBM PC AT. Характерное отличие ISA состоит в том, что ее тактовый сигнал не совпадает с тактовым сигналом процессора, как это было в IBM PC XT, поэтому скорость обмена по ней не пропорциональна тактовой частоте процессора. Магистраль ISA относится к немультиплексированным (то есть имеющим раздельные шины адреса и данных) 16-разрядным системным магистралям среднего быстродействия. Обмен осуществляется 8-ми или 16-ти разрядными данными. На магистрали реализован раздельный доступ к памяти компьютера и к устройствам ввода/вывода (для этого имеются специальные сигналы). Максимальный объем адресуемой памяти составляет 16 Мбайт (24 адресные линии). Максимальное адресное пространство для устройств ввода/вывода — 64 Кбайт (16 адресных линий), хотя практически все выпускаемые платы расширения используют только 10 младших адресных линий (1 Кбайт). Магистраль поддерживает регенерацию динамической памяти, радиальные прерывания и прямой доступ к памяти. Допускается также захват магистрали. Разъем магистрали ISA разделен на две части, что позволяет уменьшать размеры 8-разрядных плат расширения, а также использовать платы, разработанные для компьютеров IBM PC XT. Внешний вид плат расширения показан на рис. 8.1. Назначение контактов разъемов представлено в табл. 8.1 и 8.2. На магистрали присутствуют четыре напряжения питания: +5 В, –5 В, +12 В и –12 В, которые могут использоваться платами расширения. Рис. 8.1. Нумерация контактов разъема ISA (для IBM PC XT — только А1 ... А31 и В1 ... В31). В роли задатчика (Master) магистрали могут выступать процессор, контроллер ПДП, контроллер регенерации или другое устройство. Исполнителями (Slave) могут быть системные устройства компьютера, подключенные к ISA, или платы (карты) расширения. Наиболее распространенное конструктивное исполнение магистрали — разъемы (слоты), все одноименные контакты которых параллельно соединены между собой, то есть все разъемы абсолютно равноправны. В слоты устанавливаются платы расширения, которые оснащены интерфейсными разъемами магистрали, выполненными печатными проводниками на краю платы. Количество установочных мест для плат расширения зависит от типа корпуса компьютера и составляет обычно от 2 до 8 и даже более. В таблицах 8.1 и 8.2 знак минус перед названием сигнала говорит о том, что активному (рабочему) уровню сигнала соответствует низкий уровень напряжения на соответствующей линии магистрали. На линиях адреса и данных логическому нулю соответствует низкий уровень напряжения, а единице — высокий (то есть логика положительная). Таблица 8.1. Назначение контактов разъема магистрали ISA (продолжение в Табл. 8.2).Контакт Цепь Контакт Цепь A1 –I/O CH CK B1 GND A2 SD7 B2 RESET DRV A3 SD6 B3 +5 В A4 SD5 B4 IRQ9 (IRQ2) A5 SD4 B5 –5 В A6 SD3 B6 DRQ2 A7 SD2 B7 –12 B A8 SD1 B8 0WS A9 SD0 B9 +12 B A10 I/O CH RDY B10 GND A11 AEN B11 –SMEMW A12 SA19 B12 –SMEMR A13 SA18 B13 –IOW A14 SA17 B14 –IOR A15 SA16 B15 –DACK3 A16 SA15 B16 DRQ3 A17 SA14 B17 –DACK1 A18 SA13 B18 DRQ1 A19 SA12 B19 –REFRESH A20 SA11 B20 SYSCLK A21 SA10 B21 IRQ7 A22 SA9 B22 IRQ6 A23 SA8 B23 IRQ5 A24 SA7 B24 IRQ4 A25 SA6 B25 IRQ3 A26 SA5 B26 –DACK2 A27 SA4 B27 T/C A28 SA3 B28 BALE A29 SA2 B29 +5 B A30 SA1 B30 OSC A31 SA0 B31 GND Таблица 8.2. Назначение контактов разъема магистрали ISA (начало в Табл. 8.1).Контакт Цепь Контакт Цепь C1 -SBHE D1 –MEM CS16 C2 LA23 D2 –I/O CS16 C3 LA22 D3 IRQ10 C4 LA21 D4 IRQ11 C5 LA20 D5 IRQ12 C6 LA19 D6 IRQ15 C7 LA18 D7 IRQ14 C8 LA17 D8 –DACK0 C9 –MEMR D9 DRQ0 C10 –MEMW D10 –DACK5 C11 SD8 D11 DRQ5 C12 SD9 D12 –DACK6 C13 SD10 D13 DRQ6 C14 SD11 D14 –DACK7 C15 SD12 D15 DRQ7 C16 SD13 D16 +5 B C17 SD14 D17 –MASTER C18 SD15 D18 GND 8.1.1. Назначение сигналов ISA Вкратце о сигналах ISA уже говорилось в разделе 2.2. Рассмотрим назначение основных, наиболее часто используемых сигналов магистрали ISA подробнее. SA0...SA19 — фиксируемые адресные разряды (они действительны в течение всего цикла обмена). 16-разрядным словам соответствуют четные адреса (SA0=0). LA17...LA23 — нефиксируемые адресные разряды. Используются для адресации памяти. Действительны только в начале цикла обмена (в адресной фазе). BALE — сигнал стробирования адресных разрядов (действительности адреса соответствует отрицательный фронт сигнала). Основное назначение — фиксация нефиксированных адресных разрядов в регистре-защелке. -SBHE — сигнал типа цикла передачи данных (8-ми или 16-разрядный цикл). Активен при передаче старшего байта. SD0...SD15 — разряды данных. По линиям SD0...SD7 передается младший байт, по линиям SD8...SD15 — старший байт. -SMEMR, -MEMR — стробы чтения данных из памяти. Сигнал -SMEMR вырабатывается только при обращении к адресам, не превышающим FFFFF (находящимся в пределах младшего 1 Мбайта), а сигнал -MEMR — при обращении ко всем адресам памяти. -SMEMW, -MEMW — стробы записи данных в память. Сигнал -SMEMW вырабатывается только при обращении к адресам, не превышающим FFFFF (находящимся в пределах младшего 1 Мбайта), сигнал -MEMW — при обращении ко всем адресам памяти. -IOR — строб чтения данных из устройств ввода/вывода. При активном сигнале адресуемое устройство ввода/вывода должно выдать свои данные на шину данных. -IOW — строб записи данных в устройства ввода/вывода. По этому сигналу адресуемое устройство ввода/вывода должно принять данные с шины данных. -MEM CS16 — сигнал выставляется памятью для сообщения задатчику о том, что она имеет 16-разрядную организацию. Вырабатывается в ответ на распознавание адреса памяти. -I/O CS16 — сигнал выставляется устройством ввода/вывода для сообщения задатчику о том, что оно имеет 16-разрядную организацию, и необходим 16-разрядный цикл обмена. Вырабатывается в ответ на распознавание своего адреса. I/O CH RDY — сигнал снимается (делается низким) исполнителем (устройством ввода/вывода или памятью) по переднему фронту сигналов -IOR и -IOW в случае, если он не успевает выполнить нужную операцию в темпе задатчика. То есть этот сигнал используется для асинхронного обмена по магистрали. -I/O CH CK — сигнал вырабатывается любым исполнителем (устройством ввода/вывода или памятью) для информирования задатчика о фатальной ошибке, например, об ошибке четности при доступе к памяти. -0WS — сигнал выставляется исполнителем для информирования задатчика о необходимости проведения цикла обмена без вставки такта ожидания. -REFRESH — сигнал регенерации, выставляется контроллером регенерации для информирования всех устройств на магистрали о выполнении циклов регенерации динамической памяти компьютера. RESET DRV — сигнал сброса в начальное состояние всех устройств на магистрали. Вырабатывается центральным процессором при включении или сбое питания, а также при нажатии на кнопку сброса RESET компьютера. SYSCLK — сигнал системного тактового генератора, тактовый сигнал магистрали. В большинстве компьютеров его частота равна 8 МГц независимо от тактовой частоты процессора. OSC — не синхронизированный с SYSCLK сигнал кварцевого генератора с частотой 14,31818 МГц. IRQ — сигналы запроса радиальных прерываний. Запросом является положительный переход на соответствующей линии IRQ. DRQ — сигналы запроса ПДП. -DACK — сигналы предоставления ПДП. AEN — сигнал выбора устройства, запросившего ПДП. Отключает все остальные устройства, не участвующие в данном цикле ПДП. 8.1.2. Циклы обмена по ISA О циклах обмена по магистрали ISA уже упоминалось в разделе 2.2. Здесь мы рассмотрим их несколько подробнее, на уровне, достаточном для практического использования. В режиме программного обмена информацией на магистрали ISA выполняется четыре типа циклов: цикл записи в память; цикл чтения из памяти; цикл записи в устройство ввода/вывода; цикл чтения из устройства ввода/вывода. Циклы обмена с памятью и с устройствами ввода/вывода различаются между собой используемыми стробами записи и чтения, а также временными задержками между сигналами. Цикл обмена с устройствами ввода/вывода начинается с выставления задатчиком кода адреса на линиях SA0...SA15 и сигнала -SBHE, определяющего разрядность информации. Чаще всего используются только 10 младших линий SA0...SA9, так как большинство разработанных ранее плат расширения задействуют только их. В ответ на получение адреса исполнитель, распознавший свой адрес, должен сформировать сигнал -I/O CS16 в случае, если обмен должен быть 16-разрядным. Далее следует собственно команда чтения или записи. При цикле чтения задатчик выставляет сигнал -IOR, в ответ на который исполнитель должен выдать данные на шину данных. Эти данные должны быть сняты исполнителем после окончания сигнала -IOR. В цикле записи задатчик выставляет записываемые данные и сопровождает их стробом записи -IOW. Исполнитель должен принять эти данные (для гарантии — по заднему фронту сигнала -IOW). На рис. 8.2 приведены временные диаграммы циклов обмена с устройствами ввода/вывода. Для простоты на одном рисунке показаны как цикл записи, так и цикл чтения, хотя производятся они, конечно, в разное время. Рис. 8.2. Временные диаграммы циклов программного обмена с устройствами ввода/вывода (все интервалы в наносекундах). Если исполнитель не успевает выполнить команду в темпе магистрали, он может приостановить на целое число периодов Т сигнала SYSCLK завершение цикла чтения или записи за счет снятия (перевода в низкий уровень) сигнала I/O CH RDY (так называемый удлиненный цикл). Это производится в ответ на получение переднего фронта сигнала -IOR или -IOW. Сигнал I/O CH RDY может удерживаться низким не более 15,6 мкс, в противном случае процессор переходит в режим обработки немаскируемого прерывания NMI. Разработчику ISA-устройств необходимо, прежде всего, обращать внимание на те временные интервалы, которые связаны с быстродействием аппаратуры этих устройств. Например, на обработку адреса селектору адреса отводится не более 91 нс, а буфер данных в цикле чтения должен выдавать данные на магистраль не более чем за 110 нс. При циклах программного обмена с памятью используются те же самые сигналы, только вместо строба чтения -IOR применяются стробы чтения -MEMR и -SMEMR, а вместо строба записи -IOW — стробы записи -MEMW и -SMEMW. Для определения байтового или словного формата данных применяется сигнал -MEM CS16. Для асинхронного режима обмена (удлиненного цикла) здесь также используется сигнал I/O CH RDY. Отметим, что память должна обрабатывать все адресные разряды магистрали, включая и LA17...LA23. На рис. 8.3 показана временная диаграмма обмена с памятью, причем здесь указаны только временные интервалы, отличающиеся от аналогичных интервалов на рис. 8.2. Для простоты на одном рисунке показаны как цикл записи в память, так и цикл чтения из памяти. Рис. 8.3. Временные диаграммы циклов программного обмена с памятью (все интервалы в наносекундах). В случае циклов прямого доступа к памяти (ПДП) используется другой протокол обмена. Так как магистраль ISA имеет раздельные стробы чтения и записи для устройств ввода/вывода и для памяти, пересылка данных в режиме ПДП производится за один машинный цикл. То есть если данные надо переслать из устройства ввода/вывода в память, то одновременно производится чтение данных из устройства ввода/вывода (по сигналу -IOR) и их запись в память (по сигналу -MEMW). Аналогично осуществляется пересылка данных из памяти в устройство ввода/вывода (по сигналам -MEMR и -IOW). Цикл ПДП (рис. 8.4) начинается с запроса ПДП от исполнителя, желающего произвести обмен, с помощью одного из сигналов DRQ. После освобождения магистрали текущим задатчиком (например, процессором) контроллер ПДП через время t формирует соответствующий сигнал -DACK, говорящий о предоставлении ПДП запросившему его. Рис. 8.4. Временная диаграмма циклов прямого доступа к памяти (все интервалы в наносекундах). Затем контроллер ПДП вырабатывает адрес ячейки памяти, с которой будет производиться обмен в текущем цикле, и сигнал AEN, который говорит устройству ввода/вывода о том, что к нему идет обращение в режиме ПДП. После этого выставляется строб чтения (-IOR или -MEMR), в ответ на который источник передаваемых данных выставляет свою информацию на шину данных, и строб записи (-MEMW или -IOW), по которому данные записываются в приемник данных. Здесь так же, как и в обычном цикле, возможен асинхронный обмен (удлиненный цикл) с использованием сигнала I/O CH RDY. Для простоты на одном рисунке показано два цикла: передачи из памяти в устройство ввода/вывода и передачи из устройства ввода/вывода в память. Временные интервалы этих двух циклов несколько различаются. При аппаратных прерываниях протокол обмена совсем простой, так как прерывания используются радиальные. Исполнитель, желающий инициировать прерывание, выставляет свой запрос (положительный переход на одной из линий IRQ) на магистраль. Контроллер прерываний, получив этот запрос, преобразует его в запрос прерываний процессора. Процессор, закончив выполнение текущей команды, переходит на адрес начала программы обработки данного прерывания, который однозначно определяется по номеру используемого сигнала IRQ. После обработки прерывания процессор возвращается к основной программе. Для проведения регенерации динамической памяти компьютера используются специальные циклы регенерации (рис. 8.5). Рис. 8.5. Временные диаграммы циклов регенерации на ISA (все интервалы указаны в наносекундах). Такие циклы выполняет контроллер регенерации, который должен для этого получать управление магистралью каждые 15 микросекунд. Во время цикла регенерации производится чтение одной из 256 ячеек памяти (для адресации при этом используются только восемь младших разрядов адреса SA0...SA7). Читаемая информация нигде не применяется, то есть это цикл псевдочтения. Проведение 256 циклов регенерации, то есть псевдочтение из 256 последовательных адресов памяти, обеспечивает полное обновление информации в памяти и ее непрерывное сохранение. Если по каким-то причинам цикл регенерации памяти не производится вовремя, возможна потеря информации. Цикл регенерации включает в себя выставление сигнала -REFRESH, сигналов кода адреса SA0...SA7 и строба чтения из памяти -MEMR. В случае необходимости может использоваться сигнал I/O CH RDY, обеспечивающий асинхронный обмен. При включении питания, а также при нажатии кнопки RESET на передней панели компьютера на магистрали вырабатывается сигнал RESET DRV, который используется всеми устройствами, подключенными к магистрали для сброса в исходное состояние и отключения от магистрали. Захват магистрали сторонним задатчиком, в принципе, предусмотренная стандартом, используется на практике довольно редко, так как требует от устройства, захватившего магистраль, полного управления ею, включая и поддержку периодической регенерации памяти. Электрические характеристики магистрали предъявляют жесткие требования ко всем подключаемым устройствам по величине входных и выходных токов, а также по потребляемой мощности. В противном случае возможен выход из строя всего компьютера в целом. Стандарт определяет, что выходной ток любого источника магистральных сигналов не должен быть меньше 24 мА, а входной ток любого приемника магистральных сигналов не должен превышать 0,8 мА. Кроме того, нарушения в работе компьютера может вызвать несоблюдение временных ограничений, накладываемых используемыми протоколами обмена во всех рассмотренных циклах. 8.1.3. Распределение ресурсов компьютера Помимо архитектуры аппаратных средств и параметров системной шины специфика любого компьютера определяется принятым стандартным распределением всех его ресурсов. Соблюдать правила, установленные этим распределением, должны и программисты (как системные, так и занимающиеся разработкой прикладных программ), и разработчики дополнительного оборудования, и даже те пользователи, которые просто хотят установить в компьютер новую плату расширения. В случае малейшего нарушения этих правил возможны как непредсказуемые сбои в работе компьютера, невозможность его начальной загрузки, так и полный выход компьютера из строя. Под распределением ресурсов в данном случае понимается: распределение адресного пространства системной памяти, отведение отдельных областей памяти под особые цели; распределение адресного пространства устройств ввода/вывода, в том числе для системных средств компьютера; распределение каналов запроса прерываний, в том числе для системных устройств; распределение каналов запроса прямого доступа к памяти. Понятно, что если программист захочет использовать те адреса памяти, которые отведены для системных нужд (например, для памяти дисплея или системных таблиц), то работоспособность компьютера нарушится. Если выполняемая программа попытается записать какую-либо информацию по тем адресам системной памяти, которые стандартом отведены под постоянную память (ROM), то записываемая информация будет просто потеряна, и программа работать не будет. Если писать информацию по тем адресам памяти, которые отведены под видеопамять, то будет искажаться изображение на экране видеомонитора. Если вставляемая в компьютер плата расширения использует неправильные (занятые другими устройствами) адреса в адресном пространстве памяти, то ее работа будет невозможна, и не исключен даже выход из строя аппаратуры компьютера (так как при циклах чтения из перекрывающихся адресов памяти два устройства будут выставлять свои данные на шину одновременно, что может стать причиной выгорания буферных микросхем). Если разработчик платы расширения с устройством ввода/вывода или пользователь, подключающий новую плату расширения, установят адрес своего устройства так, что он будет совпадать с адресом системного устройства или адресом другой платы расширения, то возможны конфликты при обращении к данному устройству. При этом в цикле записи информация будет записываться не в одно, а в два или более устройств, а в цикле чтения на шину данных будут одновременно выставлять свои данные не одно, а несколько устройств. То есть в цикле записи возможно нарушение установленных режимов работы системных устройств (например, контроллера прерываний или контроллера ПДП) или неправильная работа новой платы расширения, а в цикле чтения — даже выход из строя одного из устройств, выставляющих свои данные на магистраль одновременно. Если при подключении к компьютеру новой платы расширения установить для нее неправильный канал запроса прерывания, это может привести к тому, что данное прерывание просто не будет обслуживаться. Может также перестать обслуживаться прерывание от системного устройства, с которым конфликтует новая плата. В худшем случае это может вызвать выход из строя новой платы расширения или же системного устройства. Точно так же при неправильном выборе номера канала запроса прямого доступа к памяти может перестать обслуживаться запрос ПДП системного устройства, а может выйти из строя системное устройство или новая плата расширения. То есть соблюдение правил стандартного распределения ресурсов компьютера — это не чья-то прихоть, а жизненная необходимость. Правда, в последнее время получила распространение снимающая данные проблемы технология автоматического распределения ресурсов Plug-and-Play (PnP, P&P), что можно перевести как "Вставляй и работай". При этом пользователю достаточно просто подключить свою плату к компьютеру, а все операции по распределению ресурсов компьютер выполнит самостоятельно, и любые конфликты будут автоматически устранены. Но для этого необходимо обязательное выполнение двух условий. Во-первых, технологию PnP должен поддерживать данный компьютер и его программное обеспечение. Во-вторых, эту технологию должно поддерживать подключаемое к компьютеру устройство. Определить это довольно просто: если на плате имеются переставляемые перемычки или механические переключатели для задания параметров платы (адресов портов ввода/вывода, номера используемого прерывания, базового адреса памяти, номера канала ПДП), то можно смело утверждать, что выбор конфигурации, учет стандартного распределения ресурсов компьютера ложится на пользователя. Компьютер здесь не помощник. Конечно же, перед установкой в компьютер новых плат расширения следует внимательно прочитать инструкцию и точно следовать ей. Подробнее о работе режима PnP будет рассказано ниже. А теперь рассмотрим принятое в персональных компьютерах стандартное распределение ресурсов. О стандартном распределении памяти уже говорилось в предыдущей главе. Чуть подробнее распределение адресов памяти описано в табл. 8.3. Из таблицы видно, что для памяти, входящей в состав устройств ввода/вывода, отводится зона всего лишь в 92 Кбайта (адреса С8000…DFFFF). В этом пространстве может располагаться как оперативная память, так и постоянная память устройств ввода/вывода. Иногда память устройств ввода/вывода захватывает также и зону адресов С0000…С7FFF. Таблица 8.3. Распределение адресов памяти (адреса даны в шестнадцатеричном коде).Адреса памяти Назначение 000000...0003FF Таблица векторов прерываний 000000...09FFFF Память DOS и пользовательских программ 0А0000...0АFFFF Память дисплея EGA или VGA 0B0000...0B7FFF Память монохромного дисплея MDA 0B8000...0BFFFF Память дисплея CGA 0C0000...0C3FFF ПЗП BIOS для EGA/VGA 0C8000...0DFFFF Память устройств ввода/вывода 0E0000...0EFFFF Резерв ПЗП ВIOS на материнской плате 0F0000...0FFFFF ПЗП BIOS на материнской плате Важно помнить, что помимо этого распределения, общего для любых программных и аппаратных средств, существуют еще и распределения памяти, специфические для каждой операционной системы. Их также необходимо учитывать во избежание отказа при выполнении системных программ. Отметим, что в современных компьютерах, конечно же, не используются давно устаревшие дисплеи стандартов CGA или MDA. Однако в том случае, если требуется универсальность программного обеспечения, надо учитывать и то, что его могут попытаться запустить на компьютерах с подобными дисплеями. Стандартное распределение адресов в адресном пространстве устройств ввода/вывода персонального компьютера приведено в табл. 8.4. Как уже отмечалось, стандарт допускает адресацию 64К устройств ввода/вывода (то есть можно использовать 16 разрядов адреса). Однако подавляющее большинство плат расширения для упрощения аппаратуры использует только 10 младших разрядов, что соответствует всего 1К (или 1024) адресов (от 000 до 3FF в шестнадцатеричном коде). При этом 16-разрядные порты ввода/вывода имеют четные адреса, то есть их может быть всего 512. Таблица 8.4. Распределение адресов устройств ввода/вывода.Адреса Назначение 000...01F Контроллер ПДП 1 020...03F Контроллер прерываний 1 040...05F Программируемый таймер 060...06F Контроллер клавиатуры 070...07F Часы реального времени 080...09F Регистр страницы ПДП 0A0...0BF Контроллер прерываний 2 0С0...0DF Контроллер ПДП 2 0F0...0FF Математический сопроцессор 170...177 Накопитель на жестком диске (второй) 1F0...1F7 Накопитель на жестком диске (первый) 200...207 Игровой порт (джойстик) 278...27F Параллельный порт LPT2 2С0...2DF Адаптер EGA 2 2F8...2FF Последовательный порт COM2 300...31F Прототипные платы 320...32F Накопитель на жестком диске XT 360...36F Резервные адреса 370...377 Накопитель на гибком диске (второй) 378...37F Параллельный порт LPT1 380...38F Контроллер бисинхронного обмена SDLC2 3A0...3AF Контроллер бисинхронного обмена SDLC1 3B0...3DF Адаптер VGA 3B0...3BF Адаптер дисплея MDA и принтера 3C0...3CF Адаптер EGA 1 3D0...3DF Адаптер СGA 3F0...3F7 Накопитель на гибком диске (первый) 3F8...3FF Последовательный порт COM1 Как видно из таблицы, значительная часть возможных адресов уже занята системными устройствами, свободных адресов не так много. Резервные адреса — это те, которые зарезервированы под дальнейшее расширение системы. В табл. 8.5 представлено стандартное распределение номеров аппаратных прерываний и соответствующих им номеров в таблице векторов прерываний (INT). Как видно из таблицы, большинство входов IRQ заняты системными ресурсами компьютера. Свободны (зарезервированы) только четыре канала: 10, 11, 12, 15, причем они находятся на 16-разрядной части разъема магистрали ISA. Правда, иногда в компьютерах применяется только один параллельный порт или (гораздо реже) только один последовательный порт, и тогда свободными оказываются еще IRQ3 и IRQ5. Сигналы IRQ0...IRQ2, IRQ8 и IRQ13 задействованы на системной плате и недоступны платам расширения. Таблица 8.5. Распределение каналов аппаратных прерываний.Номер прерывания IRQ INT Назначение 0 08 Программируемый таймер 1 09 Контроллер клавиатуры 2 0A Каскадирование второго контроллера 8 70 Часы реального времени (только АТ) 9 71 Программно переадресовано на IRQ2 10 72 Резерв 11 73 Резерв 12 74 Резерв 13 75 Математический сопроцессор 14 76 Контроллер жесткого диска 15 77 Резерв 3 0B Последовательный порт COM2 4 0C Последовательный порт COM1 5 0D Параллельный порт LPT2 6 0E Контроллер гибкого диска 7 0F Параллельный порт LPT1 В компьютере используются два 8-разрядных контроллера прерываний. Сигналы IRQ0...IRQ7 относятся к первому из них, а IRQ8...IRQ15 — ко второму. Для каскадирования второго контроллера прерываний задействован вход IRQ2 (рис. 8.6). В связи с этим запросы прерывания имеют следующие приоритеты обслуживания в порядке возрастания: IRQ7, IRQ6, IRQ5, IRQ4, IRQ3, IRQ15, IRQ14, IRQ12, IRQ11, IRQ10, IRQ9. Такая схема включения сложилась исторически, так как в компьютере IBM PC XT использовался только один 8-канальный контроллер прерываний, а при переходе на IBM PC AT к нему был добавлен второй контроллер для удвоения количества каналов запросов прерываний. В современных компьютерах оба контроллера прерываний вместе с другими контроллерами могут входить в состав одной и той же микросхемы, но совместимость распределения прерываний по-прежнему обеспечивается.
Рис. 8.6. Включение двух контроллеров прерываний. Стандартное распределение каналов запроса прямого доступа к памяти представлено в табл. 8.6. Как и в случае с контроллерами прерываний, здесь применяется два контроллера, причем один из них каскадируется через другой. На каждой линии DRQ должен быть один выход ISA-устройства. Каналы, соответствующие первому контроллеру ПДП (сигналы DRQ0...DRQ3), предназначены только для 8-битного обмена, а соответствующие второму контроллеру (DRQ5...DRQ7) — для 16-битного. Канал DRQ4 используется для каскадирования двух контроллеров ПДП и поэтому недоступен пользователям. Сигнал запроса DRQ0 имеет самый высокий приоритет, сигнал DRQ7 — самый низкий. В IBM PC XT канал DRQ0 использовался для регенерации динамической памяти. Каждый канал ПДП может передавать данные в пределах 16-мегабайтного адресного пространства блоками длиной до 64 Кбайт (каналы 0, 1, 2, 3) или до 128 Кбайт (каналы 5, 6, 7). Таблица 8.6. Стандартное распределение каналов прямого доступа к памяти.Номер канала ПДП Назначение 0 Резервный 1 Контроллер бисинхронного обмена SDLC 2 Накопитель на гибком диске 3 Резервный 4 Каскадирование первого контроллера 5 Резервный 6 Резервный 7 Резервный Естественно, обычному пользователю запомнить всю эту информацию о распределении ресурсов довольно сложно, к тому же при малейшей ошибке возможны неприятности. Именно из этих соображений фирмами Compaq Computer, Intel, Microsoft и Phoenix Technologies в 1993 году была предложена технология Plug-and-Play (PnP), возлагающая все заботы о конфигурации компьютера на сам компьютер. Пользователь при этом может даже ничего не знать об адресном пространстве, прерываниях и каналах прямого доступа, он просто подключает плату, и она сразу же начинает работать правильно. Правда, при этом все компоненты компьютера (базовая система ввода/вывода BIOS, операционная система, прикладное программное обеспечение, подключаемые устройства) должны поддерживать режим PnP. В конце концов, технология PnP должна работать на всех используемых интерфейсах компьютера: ISA, PCI, VLB, IDE, RS-232C и т.д. Наиболее же приспособлена для этого системная шина PCI, имеющая специально предусмотренные средства, что еще более увеличивает ее шансы стать единственным стандартом системной шины. При включении компьютера с PnP его программа начального запуска BIOS определяет устройства, которые необходимы в процессе загрузки. Затем BIOS запрашивает у каждого из этих устройств его уникальный номер (идентификатор), хранящийся в памяти PnP-устройства. После этого BIOS разрешает все конфликты между устройствами. При этом устройства, которые не нужны для загрузки компьютера, не обслуживаются. После загрузки операционной системы вступает в действие специальный программный драйвер — менеджер конфигурации (configuration manager), который с помощью драйверов-нумераторов шин (bus enumerators) определяет устройства, требующие системных ресурсов. Если подключенное устройство не поддерживает PnP и не может выдать информацию о себе, то такая информация должна быть заложена в формируемую вручную базу данных. Вся собранная информация о текущей конфигурации сохраняется в оперативной памяти, в области hardware tree. Эту информацию в дальнейшем использует программа-арбитр ресурсов (resource arbitrator) при распределении системных ресурсов между устройствами. После этого менеджер конфигурации через нумераторы шин сообщает PnP-устройствам о том, какие ресурсы компьютера им присвоены, и данная информация в дальнейшем хранится в программно доступных регистрах (или flash-EPROM) этих устройств. На этом работа PnP по распределению ресурсов заканчивается, и далее компьютер функционирует как обычно, обращаясь ко всем устройствам стандартным образом. Отметим также, что в некоторых компьютерах предусмотрена возможность так называемого "горячего подключения" внешних устройств (то есть без выключения питания компьютера). Режим PnP должен поддерживать и эту возможность, распределяя ресурсы не только при начальной загрузке, но и по мере подключения новых устройств. Перейти к вопросам » 8.4. Другие интерфейсы компьютера Интерфейс шины PCI (Peripheral Component Interconnect bus) стал широко применяться с появлением процессоров Pentium. Шина PCI дает компьютеру возможность наиболее быстро общаться с внешним миром, так как она существенно превосходит по быстродействию шину ISA. Предложенная в начале как локальная шина для дополнения к основной магистрали, PCI, тем не менее, обладает всеми достоинствами универсальной системной магистрали. Шина PCI имеет два варианта: 32-разрядный (в нем используется 124-контактный разъем) и 64-разрядный (188-контактный разъем). При этом гарантируется как прямая, так и обратная совместимость 32- и 64-разрядных устройств. Чаще всего применяется 32-разрядный вариант PCI. Тактовая частота PCI составляет 33 МГц (однако допускается и частота 66 МГц). Максимальная теоретически возможная скорость обмена при тактовой частоте 33 МГц достигает 132 или 264 Мбайт/с для 32 и 64 разрядов данных, соответственно, что в 20 раз превышает пропускную способность ISA. Предусмотрена возможность включения плат с напряжением питания как 5 В, так и 3,3 В (в раздельные разъемы). На магистрали предусмотрен арбитраж, то есть возможность поочередного захвата шины несколькими задатчиками, с разрешением конфликтов между ними. Предусмотрен высокоскоростной обмен по магистрали без участия процессора. Возможна автоконфигурация, то есть автоматическое распределение ресурсов между включенными платами (по принципу PnP). Каждое из устройств шины может захватить ее и провести необходимый обмен. Шина PCI представляет собой открытый непатентованный стандарт, который поддерживают все основные производители персональных компьютеров и периферийных контроллеров. Сейчас она рассматривается как основа для таких распространенных компьютерных платформ, как DOS/Windows, Macintosh и UNIX. Ведущие производители микросхем уже выпускают специальные комплекты микросхем для ее поддержки. Независимость от типа процессора обещает шине PCI большое будущее. Сейчас она занимает второе место по популярности после ISA. Большим недостатком шины PCI по сравнению с ISA является ограниченное количество устройств на шине (не более четырех), для большего количества устройств необходимо применение мостов PCI—PCI. Так как в компьютере одним из PCI-устройств является контроллер шины (то есть центральный процессор), для подключения карт расширения остается всего три разъема (слота). Один из PCI-слотов, как правило, используется для подключения контроллера дисплея, другой чаще всего применяется для включения контроллера локальной сети. Поэтому, несмотря на потенциально большие возможности PCI, в компьютере для дополнительных карт расширения остается всего один слот. К тому же надо учесть, что разработка и отладка PCI-устройств гораздо сложнее, чем ISA-устройств, а большее быстродействие PCI по сравнению с ISA нужно далеко не для всех задач. Поэтому о полном вытеснении шины ISA пока что речь не идет. Шина PCI относится к мультиплексированным шинам, она имеет полностью мультиплексированную шину адреса/данных. При этом адрес может быть 32 разрядным или 64-разрядным (он передается по 32-разрядной шине за два такта, сначала младшие разряды, затем старшие) Точно так же и данные могут передаваться как 32-разрядные, так и 64-разрядные (за два такта при 32-разрядной шине). В 64-разрядной версии PCI шина адреса/данных имеет 64 разряда. Основной режим обмена по шине — синхронный, тактируемый положительными фронтами тактового сигнала шины, но возможен и асинхронный обмен (как и в случае ISA). В цикл обмена (или транзакцию) входит фаза адреса (в начале) длительностью один такт и фаза данных длительностью в один или несколько тактов. Основные сигналы шины PCI следующие: AD0…AD31 — шина адреса/данных. Адрес передается в начале цикла, затем — данные; -C/BE0…-C/BE3 (Command/Byte Enable) — четыре линии, которые в фазе адреса определяют один из 16 возможных типов цикла передачи данных (табл. 8.9), а в фазе данных определяют действительность байтов данных; -FRAME — строб адреса, активен во время передачи данных; -IRDY (Initiator Ready) — готовность задатчика (инициатора обмена) к обмену данными; -TRDY (Target Ready) — готовность исполнителя (целевого устройства) к обмену данными; -DEVSEL (Device Select) — подтверждение опознания адреса от исполнителя; -STOP — запрос на останов текущего цикла от исполнителя к задатчику; -RST — сброс всех устройств; CLK — тактовый сигнал шины; PAR — бит четности для линий AD0…AD31 и C/BE0… C/BE3; -PERR — сигнал ошибки четности; -REQ0…-REQ3 — запрос от PCI-устройств на захват шины; -GNT0…-GNT3 — предоставление шины PCI-устройствам; -REQ64 — запрос на 64-битный обмен; -ASK64 — подтверждение 64-разрядного обмена; -INTRA, -INTRB, -INTRC, -INTRD — линии запросов прерываний; IDSEL — выбор устройства-исполнителя в циклах записи и чтения конфигурации. Таблица 8.9. Типы циклов обмена PCI.Сигналы С/ВЕ Команда 0000 Подтверждение прерывания 0001 Специальный цикл 0010 Чтение порта ввода/вывода 0011 Запись в порт ввода/вывода 0100…0101 Зарезервировано 0110 Чтение из памяти 0111 Запись в память 1000…1001 Зарезервировано 1010 Чтение конфигурации 1011 Запись конфигурации 1100 Множественное чтение памяти 1101 Двойной цикл адреса 1110 Чтение строки памяти 1111 Запись в память и проверка Операция конфигурирования (циклы записи и чтения конфигурации) служит для автоматического распределения ресурсов компьютера при включении питания. В этих циклах для выбора (адресации) конфигурируемого устройства-исполнителя применяется специальный сигнал IDSEL, передаваемый в фазе адреса. Каждому PCI-устройству соответствует 256-байтная область конфигурации, где находится информация как о самом устройстве, так и о выделенных ему ресурсах. Область конфигурации не относится ни к адресному пространству памяти, ни к адресному пространству устройств ввода/вывода. Компьютер распределяет ресурсы между устройствами в соответствии с их особенностями, потребностями и ограничениями. При синхронном обмене (рис. 8.11) в начале цикла (адресная фаза) по шине AD передается код адреса, а по линиям C/BE — код типа цикла (команда). Действительность адреса определяется сигналом -FRAME (по положительному фронту CLK после начала сигнала -FRAME). После опознания адреса исполнитель выставляет сигнал подтверждения выборки -DEVSEL, после чего начинается фаза данных. То есть можно сказать, что адрес передается асинхронно. В фазе данных по шине данных передаются слова данных, тактируемые положительными фронтами сигнала CLK. Сигналы готовности -IRDY и -TRDY выставляются в начале фазы данных и остаются активными до окончания цикла. По линиям -C/BE в фазе данных передаются сигналы разрешения байтов (то есть определяется формат передаваемых данных). Перед последним тактом передачи данных задатчик снимает сигнал -FRAME, после чего снимаются сигналы -IRDY, -TRDY и -DEVSEL.
Рис. 8.11. Синхронный обмен по шине PCI. При асинхронном обмене по шине PCI (рис. 8.12) фаза адреса осуществляется как в предыдущем случае, а в фазе данных как задатчик, так и исполнитель могут приостанавливать обмен снятием своих сигналов готовности (соответственно, -IRDY и -TRDY). Цикл обмена (транзакция) при этом удлиняется за счет введения дополнительных тактов ожидания. Сигналы -FRAME и -DEVSEL вырабатываются аналогично случаю синхронного обмена.
Рис. 8.12. Асинхронный обмен по шине PCI. И в заключение несколько слов еще о двух внешних интерфейсах компьютера. Стандарт интерфейса PCMCIA (Personal Computer Memory Card International Association) или PC-card был предложен в 1990 году для портативных компьютеров (notebook) и используется для подключения к ним различных внешних устройств: модулей памяти (в том числе флэш-памяти), модемов и факс-модемов, сетевых контроллеров, дополнительных накопителей и т.д. PC-card-адаптеры отличаются очень малыми габаритами (с обычную кредитную карточку) и довольно высокой, по сравнению с другими аналогичными устройствами, стоимостью. Сейчас уже выпускаются PC-card-адаптеры для обычных (настольных) компьютеров. Если первая версия PС-card была предназначена только для модулей памяти, то вторая (1991 год) позволяла включать устройства ввода/вывода и поддерживала два напряжения питания (5 В и 3,3 В). Последние разработки поддерживают режим PnP. Для подключения PCMCIA-карт используется 68-контактный разъем. Разрядность передаваемых данных — 16, количество разрядов адреса — 26, что позволяет адресовать до 64 Мбайт памяти. Тактовая частота шины - до 33 МГц. Стандарт определяет три различных длины контактов разъема для обеспечения правильной последовательности подачи напряжения питания при подключении и отключении карты во время работы компьютера. Компьютер имеет обычно 2—3 слота (разъема) для PC-card. Стандарт предусматривает автоматическое распределение ресурсов компьютера для устройств PC-card (режим PnP). Последовательный интерфейс USB (Universal Serial Bus) специально разрабатывался для простого подключения периферийных устройств. Шина USB представляет собой 4-проводную линию связи с пропускной способностью 1,5 Мбайт/с (12 Мбит/с). К ней можно подключать до 127 устройств по древовидной схеме с использованием одного или нескольких распределительных устройств. Длина соединительного кабеля между отдельными устройствами USB может достигать 5 метров. В шине USB реализована поддержка режима PnP и возможность "горячего" подключения (без выключения питания). В данном стандарте уже выпускаются модемы, клавиатуры, мыши, сканеры, цифровые фотокамеры и т.д. Важно, что в шине предусмотрена подача на подключаемые устройства питающего напряжения (в последовательном интерфейсе RS-232C, например, этого нет). Перейти к вопросам »
Мнемоника Функция команды AAA ASCII- коррекция результата сложения AAD ASCII- коррекция перед делением AAM ASCII- коррекция результата умножения AAS ASCII- коррекция результата вычитания ADC Сложение с переносом ADD Сложение AND Конъюнкция (функция И) ARPL Коррекция запрещенного уровня привилегий BOUND Проверка границ массива BSF Прямое сканирование битов BSR Обратное сканирование битов BSWAP Перестановка байтов BT Проверка бита BTC Проверка и инверсия бита BTR Проверка и сброс бита BTS Проверка и установка бита CALL Вызов подпрограммы CBW Преобразование байта в слово CDO Преобразование двойного слова в четверное CLC Сброс флага переноса CLD Сброс флага направления CLI Сброс флага прерывания CLTS Сброс флага переключения задачи CMC Инвертирование флага переноса CMP Сравнение операндов CMPXCHG Сравнение операндов и обмен CMPS Сравнение символов строки CWD Преобразование слова в двойное слово DAA Десятичная коррекция результата сложения DAS Десятичная коррекция результата вычитания DEC Декремент операнда DIV Беззнаковое деление ENTER Обращение к процедуре HLT Останов IDIV Знаковое деление IMUL Знаковое умножение IN Ввод операнда из порта INC Инкремент операнда INS Ввод символа строки INT Прерывание INTO Прерывание при переполнении IRET Возврат из прерывания INVD Аннулирование строки кэш-памяти INVLPG Аннулирование указателя входа в таблицу страниц JECXZ Условный переход по (ECX)=0 JMP Безусловный переход JB (JBNAF) Переход, если ниже JBE (JNA) Переход, если ниже или равно JE (JZ) Переход, если равно JL (JNGE) Переход, если меньше JLE (JNG) Переход, если меньше или равно JLNE (JG) Переход, если больше JNB (JAE) Переход, если не ниже JNBE (JA) Переход, если выше JNE (JNZ) Переход, если не равно JNL (JGE) Переход, если не меньше JNO Переход, если нет переполнения JNP (JPO) Переход, если нечетность JNS Переход, если положительный знак JO Переход, если переполнение JP (JPE) Переход, если четность JS Переход, если отрицательный знак LAHF Загрузка признаков в регистр AH LAR Загрузка прав доступа LDS Загрузка селектора в регистр DS LES Загрузка селектора в регистр ES LFS Загрузка селектора в регистр FS LGS Загрузка селектора в регистр GS LSS Загрузка селектора в регистр SS LEA Загрузка эффективного адреса в регистр LEAVE Выход из процедуры LGDT Загрузка регистра таблицы глобальных дескрипторов LIDT Загрузка регистра таблицы дескрипторов прерываний LLDT Загрузка регистра таблицы локальных дескрипторов LMSW Загрузка слова состояния машины (MSW) LOCK Префикс захвата шины LODS Загрузка символа строки LOOP Реализация цикла LOOPE (LOOPZ) Зациклить, если равно (если нуль) LOOPNE (LOOPNZ) Зациклить, если не равно (если не нуль) LTR Загрузка регистра задачи MOV Пересылка данных MOVS Пересылка символа строки MOVSX Пересылка с расширением знака MOVZX Пересылка с расширением нулями MUL Беззнаковое умножение NEG Перемена знака NOP Отсутствие операции NOT Логическая инверсия (операция НЕ) OR Дизъюнкция (операция ИЛИ) OUT Вывод операнда в порт OUTS Вывод символа строки POP Чтение операнда из стека POPA Чтение из стека содержимого всех регистров POPF Чтение из стека содержимого регистра флагов PUSH Запись операнда в стек PUSHA Запись в стек содержимого всех регистров PUSHF Запись в стек содержимого регистра флагов RCL Циклический сдвиг влево RCR Циклический сдвиг вправо REP Префикс повторения операции со строками символов REPE (REPZ) Повторение при совпадении REPNE (REPNZ) Повторение при несовпадении RET Возврат из подпрограммы ROL Циклический сдвиг влево через перенос ROR Циклический сдвиг вправо через перенос SAHF Запись содержимого AH в регистр флагов SAL (SHL) Арифметический сдвиг влево SAR Арифметический сдвиг вправо SBB Вычитание с заемом SCAS Сканирование строк символов SETусл. Условная установка байта (16 условий - см. команды условных переходов JB:JS) SGDT Запись содержимого регистра GDT SHR Логический сдвиг вправо SHLD Двухоперандный сдвиг влево SHRD Двухоперандный сдвиг вправо SIDT Запись содержимого регистра IDT SLDT Запись содержимого регистра LDT SMSW Запись слова состояния машины STC Установка флага переноса STD Установка флага направления STI Установка флага прерываний STOS Запись символов в строку SUB Вычитание TEST Логическое сравнение операндов VERR Проверка доступности сегмента при чтении VERW Проверка доступности сегмента при записи WAIT Ожидание XADD Обмен операндами и сложение XCHG Обмен XLAT Преобразование кодов XOR Исключающее ИЛИ Команды, выполняемые блоком обработки чисел с плавающей точкой FABS Получение абсолютного значения FADD Сложение вещественных чисел FADDP Сложение вещественных чисел с чтением из стека FBLD Загрузка двоично-десятичного числа FBSTP Запись в память двоично-десятичного числа с чтением из стека FCHS Изменение знака числа FCLEX Сброс флагов в регистре состояния SR FCOM Сравнение вещественных чисел FCOMP Сравнение вещественных чисел с чтением из стека FCOMPP Сравнение вещественных чисел с двойным чтением из стека FCOS Вычисление косинуса FDECSTP Декремент содержимого указателя стека FDIV Деление вещественных чисел FDIVP Деление вещественных чисел с чтением из стека FDIVR Обратное деление вещественных чисел FDIVRP Обратное деление вещественных чисел с чтением из стека FFREE Освобождение регистра ST FIADD Сложение целых чисел FICOM Сравнение целых чисел FICOMP Сравнение целых чисел с чтением из стека FIDIV Деление целых чисел FIDIVR Обратное деление целых чисел FILD Загрузка целого числа FIMUL Умножение целых чисел FINCSTP Декремент содержимого указателя стека FINIT Инициализация FPU FIST Запись в память целого числа FISTP Запись в память целого числа с чтением из стека FISUB Вычитание целых чисел FISUBR Обратное вычитание целых чисел FLD Загрузка вещественного числа FLD1 Загрузка единицы FLDCW Загрузка управляющего числа FLDENV Загрузка содержимого вспомогательных регистров FLDL2E Загрузка log2e FLDL2T Загрузка log210 FLDLG2 Загрузка lg2 FLDLN2 Загрузка ln2 FLDPL Загрузка числа Пи FLDZ Загрузка нуля FMUL Умножение вещественных чисел FMULP Умножение вещественных чисел с чтением из стека FNOP Отсутствие операции FPREM Нахождение частичного остатка деления FPREM1 Нахождение частичного остатка в стандарте IEEE-475 FPATAN Вычисление частичного арктангенса FPTAN Вычисление частичного тангенса FRNDINT Округление до целого значения FRSTOR Загрузка содержимого вспомогательных регистров и арифметического стека FSAVE Запись в память содержимого вспомогательных регистров и арифметического стека FSCALE Масштабирование (изменение порядка числа) FSIN Вычисление синуса FSINCOS Вычисление синуса и косинуса FSQRT Вычисление квадратного корня FST Запись в память вещественного числа FSTCW Передача слова состояния в память FCTENV Запись в память содержимого вспомогательных регистров FSTP Запись в память вещественного числа с чтением из стека FSTSW Передача слова состояния в память FSTSWAX Передача слова состояния в регистр AX FSUB Вычитание вещественных чисел FSUBP Вычитание вещественных чисел с чтением из стека FSUBR Обратное вычитание вещественных чисел FSUBRP Обратное вычитание вещественных чисел с чтением из стека FTST Сравнение с нулем FUCOM Сравнение неупорядоченных чисел FUCOMP Сравнение неупорядоченных чисел с чтением из стека FUCOMPP Сравнение неупорядоченных чисел с двойным чтением из стека FXAM Анализ вещественного числа FXCH Обмен данными между регистрами стека FXTRACT Вычисление мантиссы и порядка F2XM1 Вычисление функции (2x-1) FYL2X Вычисление функции ylogx FYL2XP1 Вычисление функции ylog (x+1) FWAIT Ожидание готовности FPU Дополнительные материалы: Система команд микроконтроллеров семейства MCS-51 (фирмы Intel, Atmel, Analog Devices) для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь
Мнемоника Функция команды ADD Сложение с аккумулятором ADDC Сложение с учетом переноса SUBB Вычитание из аккумулятора INC Инкремент DEC Декремент MUL Умножение DIV Деление DA Двоично-десятичная коррекция аккумулятора ANL Логическое И ORL Логическое ИЛИ XRL Исключающее ИЛИ CLR Очистка аккумулятора или бита CPL Инверсия аккумулятора или бита RL Сдвиг аккумулятора влево RLC Сдвиг аккумулятора влево через перенос RR Сдвиг аккумулятора вправо RRC Сдвиг аккумулятора вправо через перенос SWAP Перестановка тетрад аккумулятора MOV Пересылка MOVC Пересылка связанного байта в аккумулятор MOVX Пересылка байта из внешней памяти или во внешнюю память PUSH Сохранение в стеке POP Извлечение из стека XCH Обмен информацией XCHD Обмен младшими тетрадами между ячейкой памяти и аккумулятором SETB Установка бита JC Переход, если есть перенос JNC Переход, если нет переноса JB Переход, если бит установлен JNB Переход, если бит не установлен JBC Переход, если бит установлен, и очистка этого бита ACALL Короткий переход к подпрограмме с возвратом LCALL Длинный переход к подпрограмме с возвратом RET Возврат из подпрограммы RETI Возврат из прерывания AJMP Короткий переход без возврата LJMP Длинный переход без возврата SJMP Короткий переход со смещением JMP Переход относительно указателя данных JZ Переход, если аккумулятор равен нулю JNZ Переход, если аккумулятор не равен нулю CJNE Переход, если не равно DJNZ Декремент и переход, если не равно нулю NOP Нет операции Дополнительные материалы: Словарь терминов и сокращений для печати и PDA Если Вы заметили ошибку - сообщите нам или выделите ее и нажмите Ctrl+Enter Включить комментарии || Помощь
2S (2-States Output) — выход с двумя активными состояниями, 2С, стандартный выход ТТЛ. 3S (3-States Output) — выход с тремя состояниями, 3С. Abort — аварийное завершение; тип прерывания. AND — логическая функция И. ALU (Arithmetic and Logic Unit) — АЛП, арифметико-логическое устройство. APIC (Advanced Peripheral Interrupt Controller) — усовершенствованный контроллер прерываний. ASCII (American Standard Code for Information Interchange) — стандартный американский код обмена символьной информацией. BCD (Binary-Coded Decimal) — двоично-десятичный код. Bin — двоичная система счисления. BIOS (Basic Input/Output System) — базовая система ввода/вывода (в компьютере). BIST (Built In Self Test) — встроенное самотестирование. Buffer — буфер. Burst Mode — режим пакетной передачи информации по магистрали (один адрес на весь пакет данных). Bus — шина, магистраль. Cache — кэш-память. CAS (Column-Address Select) — сигнал выбора адреса столбца (в микросхемах динамической памяти). Centronics — стандартный 8-разрядный параллельный интерфейс. Chip — микросхема, чип. Chipset — набор микросхем контроллеров для организации компьютера, чипсет. CISC (Complete Instruction Set Computer) — компьютер (или процессор) с полным набором команд. Clear — очистка, сброс в нуль. Clock, CLK — тактовый, тактирующий сигнал. CMOS (Complementary Metal-Oxide-Semiconductor) — комплементарная МОП технология (КМОП). COM Port (COMmunication Port) — последовательный порт, поддерживающий интерфейс RS-232C. Core Speed — внутренняя частота процессора, на которой работает его вычислительное ядро. CPU (Central Processor Unit) — центральный процессор. CRC — циклическая контрольная сумма, а также метод, использующий такую сумму. DC (Direct Current) — постоянный ток. Desktop — настольный персональный компьютер. DIMM (Dual In-Line Memory Module) — модуль памяти с двусторонним расположением выводов. DMA (Direct Memory Access) — прямой доступ к памяти. DOS (Disk Operating System) — дисковая операционная система, ДОС. DRAM (Dynamic RAM) — динамическая оперативная память. Driver — выходной буфер, драйвер. DSP (Digital Signal Processor) — цифровой сигнальный процессор. EDA (Electronic Design Automation) — система автоматизации проектирования. EEPROM (Electrically Erasable Programmable ROM) — ПЗП с электрическим стиранием и возможностью дальнейшего программирования. EISA (Enhanced ISA) — расширенный (32-разрядный) вариант системной шины ISA, полностью совместимый с ISA. EMS (Expanded Memory Specification) — дополнительная (отображаемая) память персонального компьютера. EPROM (Erasable Programmable ROM) — ПЗП со стиранием (ультрафиолетовым излучением) и перезаписью информации (РПЗУ). Fault — отказ; тип прерывания. FDD (Floppy Disk Drive) — внешний накопитель информации на гибком диске. Female — разъем-розетка, гнездо. FIFO (First In, First Out) — "первым вошел — первым вышел", один из способов организации ОЗУ с последовательным доступом. Firmware — программы, хранящиеся в энергонезависимой памяти микропроцессорной системы. Flash memory — разновидность постоянной памяти с перезаписью EEPROM, характеризующаяся высокой емкостью, малым энергопотреблением и большим допустимым количеством циклов перезаписи, флэш-память. FLOPS (Floating point Operations Per Second) — количество операций с плавающей точкой в секунду, единица измерения производительности процессора. GND (Ground) — общий провод схемы, "земля". H (High) — высокий уровень сигнала, единичный уровень при положительной логике. H — признак шестнадцатеричной системы записи числа, например, 2FА9h. Handshake — асинхронный режим обмена, при котором используется сигнал подтверждения готовности исполнителя. Hardware — аппаратные (электронные) средства микропроцессорной системы. HDD (Hard Disk Drive) — внешний накопитель информации на жестком диске (винчестер). Hex — шестнадцатеричная система счисления. HMA (High Memory Area) — область "высокой памяти" в персональном компьютере. IC (Integrated Circuit) — интегральная микросхема, ИС. iCOMP (Intel Comparative Microprocessor Performance) — индекс оценки производительности микропроцессоров фирмы Intel. IDE (Integrated Drive Electronics) — интерфейс компьютера для подключения дисководов. Idle — режим холостого хода. IDT (Interrupt Descriptor Table) — таблица дескрипторов прерываний. Instruction — команда, инструкция. Instruction Set — система команд (процессора). INT (Interrupt) — прерывание, вектор прерывания. IO, I/O (Input/Output) — ввод/вывод (В/В), вход/выход. IOPL (Input/Output Privilege Level) — уровень привилегий операций ввода/вывода. IPC (Instruction Per Cycle) — количество операций, выполняемых процессором за один такт. IrDA (Infra-Red Data Association) — ассоциация передачи данных в инфракрасном диапазоне, а также стандартный интерфейс инфракрасного обмена, предложенный ей. IRQ (Interrupt ReQuest) — запрос прерывания. ISA (Industry Standard Architecture) — стандартная системная шина персонального компьютера. Jumper — съемная перемычка, соединяющая штыревые контакты на плате, джампер. L (Low) — низкий уровень сигнала, нулевой уровень при положительной логике. L1 Cash и L2 Cash — кэш-память первого уровня (внутренний кэш) и второго уровня (внешний кэш). LCD (Liquid Crystal Display) — жидкокристаллический дисплей, индикатор. LIFO (Last In, First Out) — тип оперативной памяти с принципом работы: "последний вошел — первый вышел". Line driver — драйвер линии, буфер. LPT (Line Printer) — порт для подключения принтера, работающий по интерфейсу Centronics. LRU (Least Recently Used) — дольше всех не используемый элемент в кэш-памяти. LSB (Least Significant Bit) — младший значащий бит (в байте или слове). LVT (Low-Voltage Technology) — низковольтная технология микросхем (напряжение питания 3,3 В). Male — разъем-вилка, штекер. Master — ведущее, главное устройство, участвующее в обмене информацией, задатчик. MFLOPS (Mega FLOPS) — миллион операций с плавающей запятой в секунду (единица производительности процессора). MIPS (Mega Instructions Per Second) — миллион операций в секунду (единица производительности процессора). MCP (Math CoProcessor) — математический сопроцессор. MCU (Microprogram Control Unit) — блок микропрограммного управления. MMU (Memory Management Unit) — блок управления памятью. MMX (Multi Media eXtensions) — расширение системы команд процессора для работы с мультимедийными приложениями. Motherboard — материнская системная плата, на которой располагаются дополнительные, дочерние платы. MSB (Most Significant Bit) — старший значащий бит (в байте или слове). MSW (Machine State Word) — слово состояния машины. NIC (Network Interface Card) — сетевая карта, адаптер локальной сети. NMI (Non Masked Interrupt) — немаскируемое прерывание. Notebook — класс портативных, "блокнотных" персональных компьютеров, отличающихся малыми размерами, небольшой массой, низким энергопотреблением. NPU (Numeric Processor Unit) — математический сопроцессор. NVRAM (Non-Volatile RAM) — энергонезависимое ОЗУ, сохраняющее информацию при отключении питания. OC (Open-Collector Output) — выход микросхемы с открытым коллектором. Oct — восьмеричная система счисления. OEM (Original Equipment Manufacturer) — производитель оборудования. OTPROM (One-Time Programmable ROM) — ПЗП, однократно программируемые пользователем. OR — логическая функция ИЛИ. Parity — четность, паритет. PC (Personal Computer) — персональный компьютер (обычно IBM-совместимый). PC (Program Counter) — счетчик команд. PC Card (PCMCIA) — стандартный высокоскоростной параллельный интерфейс для подключения карт расширения миниатюрного формата. PCI (Peripheral Component Interconnect) — шина для периферийных компонентов (в персональном компьютере). Pentium — 32-разрядный процессор фирмы Intel. PIC (Programmable Interruption Controller) — программируемый контроллер прерываний. PIO (Programming Input/Output) — программно управляемый ввод/вывод. PLD (Programmable Logic Device) — программируемая логическая микросхема, ПЛИС. Plug — разъем типа вилка. PnP, P&P (Plug-and-Play) — "вставляй и работай"—стандарт автоматической настройки конфигурации компьютера. Pointer — указатель. Polling — опрос флага (бита состояния) программным путем. POP — извлечение из стека. POST (Power On Self Test) — тест начального включения. POST (Procedure Of Self-Testing) — процедура самотестирования. Power down — режим пониженного энергопотребления. PPI (Programmable Peripheral Interface) — программируемый интерфейс периферийных устройств. Preset — предварительная установка. Processor — процессор. PROM (Programmable ROM) — программируемое ПЗП, ППЗУ. PSW (Processor Status Word) — слово состояния процессора, код во внутреннем регистре состояния процессора. Pull-up Resistor — нагрузочный резистор, включаемый между выходом микросхемы и проводом напряжения питания. Push — сохранение в стеке. RAM (Random Access Memory) — оперативная память, ОЗУ. RAS (Row-Address Select) — сигнал выбора адреса строки (в микросхемах динамической памяти). Receiver — приемник, входной буфер. Refresh — регенерация (в динамической памяти). Reset — сброс в нуль. RISC (Reduced Instruction Set Computer) — компьютер (или процессор) с сокращенным набором команд. ROM (Read-Only Memory) — постоянная память, ПЗП. RS-232C (Reference Standard) — стандартный интерфейс последовательной передачи данных. RTC (Real Time Clock) — часы реального времени. RxC (Received Clock) — принимаемый синхросигнал. RxD (Received Data) — принимаемые данные. SCSI (Small Computer System Interface) — интерфейс компьютера для подключения внешних устройств, в том числе и дисководов. SDRAM (Synchronous Dynamic RAM) — синхронное динамическое ОЗУ. Set — установка в единицу. Setup — программа установки системных параметров персонального компьютера. Shadow Memory — теневая память. SIMM (Single In-Line Memory Module) — модуль памяти с однорядным расположением выводов. Slave — ведомое, пассивное устройство, участвующее в обмене информацией, исполнитель. Slot — щелевой разъем для подключения печатных плат с разъемом в виде печатных проводников, слот. Socket — контактирующее устройство для установки микросхем на плату, сокет. Software — программные средства микропроцессорной системы (программы). SP (Stack Pointer) — указатель стека. SRAM (Static RAM) — статическая оперативная память. Stack — стек, стековая память. Strobe — стробирующий сигнал, строб. Terminator — оконечное согласующее устройство на линии связи (обычно — резистор). Timer — таймер, таймерное устройство. TR (Terminate Resistor) — нагрузочный резистор для линии связи. Transceiver — приемопередатчик, трансивер, двунаправленный буфер. Transmitter — передатчик, выходной буфер. Trap — ловушка; тип прерывания. TTL (Transistor-Transistor Logic) — транзисторно-транзисторная (биполярная) логика, ТТЛ. TTLS (Transistor-Transistor Logic Schottky) — транзисторно-транзисторная логика Шоттки, ТТЛШ. Turbo — режим повышенного быстродействия. TxC (Transmitted Clock) — передаваемый синхросигнал. TxD (Transmitted Data) — передаваемые данные. UART (Universal Asynchronous Receiver/Transmitter) — универсальный асинхронный приемопередатчик, контроллер для поддержки интерфейса RS-232C. UMA (Upper Memory Area) — область верхней памяти. Upgrade — модернизация персонального компьютера путем замены его отдельных блоков. UPI (Universal Peripheral Interface) — универсальный периферийный интерфейс. USB (Universal Serial Bus) — стандартный последовательный интерфейс с высокой скоростью передачи (до 12 Мбит/с). V — напряжение (Voltage), вольт (Volt). VLB (VESA Local Bus) — локальная шина персонального компьютера. VLSI (Very Large Scale Integration) — сверхбольшая интегральная схема (СБИС). Watchdog — сторожевой таймер, служащий для вывода микропроцессорной системы из состояния зависания. WB (Write Back) — алгоритм кэширования с обратной записью. WT (Write Through) — алгоритм кэширования со сквозной (прямой) записью. XMS (eXtended Memory Specification) — расширенная память персонального компьютера. XOR — исключающее ИЛИ. Z (Z-state) — третье (высокоимпедансное) состояние выхода микросхемы. ZIF (Zero Insertion Force) — разъем или сокет с нулевым усилием вставки. 2С — выход с двумя активными состояниями (нуль и единица), стандартный ТТЛ-совместимый выход. 3С — выход с тремя состояниями (два активных: нуль и единица, третье — пассивное, отключенное), а также само третье состояние выхода, в отличие от двух активных состояний. Адаптер — устройство сопряжения. Адрес — закодированный номер, определяющий, куда передается информация или откуда она принимается. Адресация — способ задания адреса операнда. Адресное пространство — совокупность всех адресов, к которым может обращаться микропроцессорная система. Активный уровень сигнала — уровень, соответствующий приходу, наличию сигнала, то есть выполнению этим сигналом соответствующей ему функции. Аккумулятор — выделенный внутренний регистр процессора, который принимает участие в выполнении большинства команд. АЛП — арифметико-логическое устройство (ALU). Аппаратное обеспечение — электронная аппаратура микропроцессорной системы. Аппаратное прерывание — прерывание, вызываемое устройствами-исполнителями. Арбитраж — метод определения единственного активного устройства, способ разрешения конфликтов. Асинхронная магистраль — магистраль, в которой предусмотрен только асинхронный обмен. Асинхронный обмен — обмен по магистрали с подтверждением готовности исполнителя. Асинхронный сигнал — сигнал, не привязанный по времени к внутренним процессам схемы, не синхронизированный со схемой. Ассемблер — язык программирования нижнего уровня, использующий мнемонические обозначения машинных команд. АЦП — аналого-цифровой преобразователь. Базовый адрес — младший адрес из группы адресов, приписанных какому-то устройству или задаче. Байт — группа двоичных разрядов, битов (как правило, 8 бит), содержащая какой-то код. Байтовые операции — операции, производимые над отдельными байтами операндов процессорами, имеющими разрядность больше 8. Бит (от англ. Binary Digit — двоичное число) — единица двоичной информации, разряд двоичного кода, принимающий значения 0 и 1. Бит четности — дополнительный контрольный бит, добавляемый к данным и хранимый или передаваемый вместе с этими данными. Буфер — память или область памяти, используемая для временного хранения данных. Буфер — логический элемент (микросхема), используемый для электрического согласования входов и выходов других микросхем. В/В — ввод/вывод, I/O. Ввод данных — то же, что чтение, считывание, прием данных. Вектор прерывания — адрес начала программы обработки прерывания. Векторные прерывания — прерывания, при которых номер прерывания (адрес вектора) выдается устройством, запросившим прерывание. Вилка (штекер) — часть разъема, контакты которого входят в контакты розетки (гнезда). Виртуальная память — внешняя память большого объема, которую процессор с помощью специальных механизмов использует как свою собственную системную память. ВКМ — внутренняя контроллерная магистраль. Внешние устройства — устройства, подключаемые к микропроцессорной системе посредством устройств сопряжения, устройств ввода/вывода. Временная диаграмма — графики зависимости от времени входных и выходных сигналов цифрового устройства в различных режимах работы. ВУ — внешние устройства. Вывод данных — то же, что запись, передача данных. Гарвардская архитектура — архитектура микропроцессорной системы с раздельными шинами данных и команд (двухшинная архитектура). Г (гига-) — приставка для обозначения 230 = 1 073 741 824. Данные — передаваемая в закодированном виде цифровая информация. Двунаправленная линия (шина) — линия (шина), по которой сигналы могут передаваться в обоих направлениях (по очереди). Двухшинная архитектура — архитектура микропроцессорной системы с раздельными памятями данных и команд и с раздельными шинами для обмена с каждой из них. Декремент — уменьшение на единицу. Дескриптор — описатель, код, содержащий информацию о сегменте памяти, о векторе прерывания и т.д. Джампер — съемная перемычка, устанавливаемая на плату для переключения режимов ее работы. Драйвер — программа нижнего уровня, осуществляющая управление аппаратурой. Единичный сигнал — то же, что положительный сигнал. Зависание — переход микропроцессорной системы в непредусмотренное состояние, остановка работы системы. Задатчик (master) — активное устройство на магистрали (чаще всего — процессор), которое производит обмен с исполнителем в данном цикле. Задержка — временной сдвиг между входным и выходным сигналами устройства, узла, микросхемы. Задний фронт сигнала (спад) — переход сигнала из активного уровня в пассивный. Запись — операция, при которой задатчик передает данные в память или в устройство ввода/вывода. Запрос — обращение к процессору для специального обслуживания (например, для прерывания или ПДП). Защищенный режим — режим процессоров фирмы Intel, начиная с 80286, обеспечивающий многозадачный режим и объем памяти свыше 1 Мбайт (см. реальный режим). ЗУ — запоминающее устройство, память. Инициализация — приведение в начальное состояние, запуск работы. Инкремент — увеличение на единицу. Инструкция — то же, что команда. Интерфейс — соглашение об обмене между электронными устройствами. Включает в себя требования по электрическому, логическому и конструктивному сопряжению устройств. ИС — интегральная микросхема, ИМС (IC), чип. Исключения — разновидность прерываний, которые возникают автоматически при определенных условиях в процессе работы процессора. Исполнитель (slave) — пассивное устройство на магистрали, с которым задатчик производит обмен в данном цикле. К (кило-) — приставка для обозначения 210 = 1024. Канал — то же, что системная шина, магистраль. Карта расширения — одноплатное устройство сопряжения, подключаемое к магистрали персонального компьютера. Каскадирование — совместное включение нескольких одинаковых устройств (обычно последовательное) для улучшения их характеристик. КМОП — комплементарная технология МОП (CMOS). Команда — код, определяющий элементарную функцию, которую должен выполнить процессор. Конвейер — память типа FIFO небольшого объема, входящая в состав процессора и служащая для ускорения выборки исполняемых команд. Контроллер — устройство управления, управляющее устройство сопряжения. Кристалл — то же, что микросхема, чип. Кэш-память — быстрая буферная память, содержащая копию части основной памяти системы и позволяющая ускорить обмен с медленной основной памятью. Линия — единичный проводник системной шины. М (мега-) — приставка для обозначения 220 = 1 048 576. Магистраль — системная шина микропроцессорной системы. Маска — управляющий код, который разрешает или запрещает отдельные разряды основного кода. Маскирование прерывания — временный запрет прерывания. МК — микроконтроллер. Монитор — программа для работы оператора с пультом управления с целью контроля функционирования микропроцессорной системы. Мониторинг — слежение, контроль состояния какого-либо устройства. МОП — полупроводниковая технология на основе полевых транзисторов типа "металл — окисел — полупроводник" (MOS). МП — микропроцессор. МПК — микропроцессорный комплект микросхем. МПС — микропроцессорная система. Мультиплексирование — передача различных сигналов по одной линии (шине) в разные моменты времени. Мультиплексированная магистраль — магистраль с мультиплексированными (полностью или частично) шинами адреса и данных. НМД — накопитель на магнитном диске. Немультиплексированная магистраль — магистраль, в которой шины адреса и данных не мультиплексированы. Ножки — то же, что выводы микросхемы. Нулевой сигнал — то же, что отрицательный сигнал. Одношинная архитектура — архитектура микропроцессорной системы с общей памятью данных и команд и общей шиной для обмена с памятью. ОЗУ — оперативное запоминающее устройство, оперативная память (RAM). ОК — выход с открытым коллектором. Операнд — код данных, с которым производится операция данной командой. ОС — операционная система. Опрос (поллинг) — постоянное чтение информации из устройства для определения его состояния. Отрицательная логика — система сигналов, в которой логической единице соответствует низкий уровень напряжения, а логическому нулю —высокий. Отрицательный сигнал (сигнал отрицательной полярности, нулевой сигнал) — сигнал, активный уровень которого — логический нуль. То есть единица — это отсутствие сигнала, нуль — сигнал пришел. Отрицательный фронт сигнала (спад) — переход сигнала из единицы (из высокого уровня) в нуль (в низкий уровень). Пассивный уровень сигнала — уровень, в котором сигнал не выполняет никакой функции. ПДП (прямой доступ к памяти) — режим обмена по системной шине между устройством ввода/вывода и памятью без участия центрального процессора. Перепад (переход) сигнала — переключение сигнала из нуля в единицу или из единицы в нуль, то же, что фронт сигнала. Передний фронт сигнала — переход сигнала из пассивного уровня в активный. ПЗП — постоянное запоминающее устройство, постоянная память (ROM). ПК — персональный компьютер, PC. ПЛИС — программируемые логические микросхемы, PLD. ПО — программное обеспечение (software). Подпрограмма — вспомогательная программа, вызываемая из основной программы или из подпрограммы. Подтверждение — выработка сигнала, подтверждающего выполнение той или иной функции. Положительная логика — система сигналов, в которой логической единице соответствует высокий уровень напряжения, а логическому нулю — низкий. Положительный сигнал (сигнал положительной полярности, единичный сигнал) — сигнал, активный уровень которого — логическая единица. То есть нуль — это отсутствие сигнала, единица — сигнал пришел. Положительный фронт сигнала (или просто фронт) — переход сигнала из нуля (из низкого уровня) в единицу (в высокий уровень). Полярность сигнала — уровень сигнала, соответствующий его активности. Положительной полярности соответствует активный единичный сигнал, отрицательной полярности — активный нулевой сигнал. Порт — устройство сопряжения микропроцессорной системы с внешним устройством (обычно простейшее). ППЗУ — программируемое ПЗП (PROM). Прерывание — временный перевод процессора на программную обработку внешнего события или на выполнение подпрограммы. Принстонская архитектура — архитектура микропроцессорной системы с единой шиной для данных и команд (одношинная архитектура). Программа — последовательность команд микропроцессора, выполняющих требуемую задачу, алгоритм. Программное обеспечение — набор программ, выполняемых микропроцессорной системой. Программное прерывание — программный переход к подпрограмме, обслуживаемый, как прерывание. Пространство памяти — весь объем системной памяти микропроцессорной системы. Протокол — порядок обмена сигналами между цифровыми устройствами. Радиальные прерывания — прерывания, при которых номер прерывания (адрес вектора) определяется номером используемой линии запроса прерывания. Разрядность (кода, шины) — количество двоичных разрядов кода или количество цифровых сигналов для передачи кода по шине. Реальный режим (режим реальной адресации) — режим процессоров фирмы Intel, начиная с 80286, обеспечивающий совместимость с процессором 8086 и объем памяти до 1 Мбайт (см. защищенный режим). Регенерация — периодическое восстановление, обновление информации, записанной в динамическую память. Требует подачи специальной последовательности управляющих сигналов. Регистр процессора — внутренняя ячейка памяти процессора, в которой хранится управляющая информация, адрес или данные. Регистр состояния процессора — внутренний регистр процессора, в котором хранятся флаги (биты) слова состояния процессора (ССП, PSW). Розетка (гнездо) — часть разъема, в контакты которого входят контакты вилки (штекера). РОН — регистр общего назначения (универсальный внутренний регистр процессора). РПЗУ — репрограммируемое ПЗП (EPROM), информация в котором стирается ультрафиолетовым излучением и может быть записана вновь. Рукопожатие — обмен сигналами между устройствами, участвующими в обмене с подтверждением выполнения операции (handshaking). СБИС — сверхбольшая интегральная схема (VLSI). Свопинг (подкачка) — процесс временного сохранения на диске областей оперативной памяти и чтения их с диска. Сегмент — выделенная часть памяти, хранящая данные или команды, для адресации которой используются одни и те же регистры процессора. Сегментный регистр — регистр, указывающий на начало того или иного сегмента памяти. Селектор (дешифратор) адреса — узел в составе устройства-исполнителя для распознавания адреса в циклах обмена по магистрали. Синхронизация — обеспечение согласованной во времени работы нескольких устройств, например, по общему тактовому сигналу. Синхронная магистраль — магистраль, в которой основной тип обмена синхронный. Синхронный обмен — обмен информацией по магистрали в темпе задатчика без учета быстродействия исполнителя. Синхросигнал — то же, что тактовый сигнал. Система команд — набор команд процессора, которые он способен выполнить. Системная память — прямо адресуемая память микропроцессорной системы (оперативная и постоянная). СК — счетчик команд (PC). Слово (двоичное) — группа бит (обычно 16, 32 или 64 бита), состоящая из нескольких байт. Слот — разъем для подключения к системной магистрали плат расширения. Сокет (Socket) — то же, что колодка, контактирующее устройство-гнездо, в которое устанавливается микросхема с возможностью простой ее замены. Сопроцессор — микросхема специализированного процессора, подключаемая к микросхеме основного процессора для улучшения ее характеристик. Чаще всего используются математические сопроцессоры, ускоряющие выполнение сложных арифметических команд. Спад сигнала — то же, что задний фронт сигнала (обычно — отрицательный фронт). ССП — слово состояния процессора, PSW. Стек — область памяти, адресация к которой построена по магазинному принципу (LIFO) — первым читается последний записанный в память код. Строб (стробирующий сигнал) — управляющий сигнал, который своим уровнем определяет момент выполнения элементом или узлом его функции. В более общем смысле строб — это любой синхронизирующий сигнал, тактовый сигнал. Счетчик команд — внутренний регистр процессора, определяющий адрес в памяти, в котором находится текущая команда. В обычном режиме состояние счетчика команд наращивается после выполнения каждой команды. Т (тера-) — приставка для обозначения 240 = 1 099 511 627 776. Таймер — устройство отсчета времени. Такт — то же, что тактовый сигнал, а также период тактового сигнала. Тактовый сигнал — управляющий сигнал, который своим фронтом определяет момент выполнения элементом или узлом его функции. Иногда то же, что и стробирующий сигнал. Теневая память — часть оперативной памяти, используемая для хранения копии постоянной памяти с целью повышения скорости доступа к информации. Терминатор — оконечный согласователь линии связи. Тетрада (полубайт, ниббл) — группа из четырех бит, кодируемая одним символом в шестнадцатеричной системе счисления. Транзакция — то же, что цикл обмена. ТТЛ — транзисторно-транзисторная логика и соответствующая ей полупроводниковая технология (TTL). ТТЛШ — технология ТТЛ с диодами Шоттки (TTLS). Характеризуется более высоким быстродействием при той же потребляемой мощности. УВВ — устройство ввода/вывода. Указатель — код, определяющий адрес операнда в памяти. Указатель стека — внутренний регистр процессора, в котором хранится текущий адрес стека. УС — указатель стека (SP). Устройство ввода/вывода — устройство, осуществляющее сопряжение микропроцессорной системы с внешними устройствами. Устройство сопряжения — устройство для обмена информацией между компьютером и внешними устройствами. Фаза — часть цикла, в течение которой меняется состояние каких-то сигналов шины. Флаг — сигнал (бит), соответствующий какому-либо состоянию устройства, например, готовности к обмену. Флэш-память (Flash Memory) — разновидность РПЗУ с электрическим стиранием информации и возможностью многократной перезаписи. Фон-неймановская архитектура — одношинная архитектура, то же, что принстонская архитектура. Фронт сигнала — переход сигнала из нуля в единицу или из единицы в нуль, иногда в более узком значении "передний положительный фронт". ЦАП — цифроаналоговый преобразователь. Цикл — последовательность обмена сигналами, в течение которого выполняется только одна элементарная операция (например, ввод или вывод). ЦП — центральный процессор, основной процессор микропроцессорной системы. ЦПЭ — центральный процессорный элемент. Чип — то же, что интегральная микросхема, ИМС. Чипсет — набор микросхем, предназначенный для решения какой-то одной задачи. Чтение — операция получения задатчиком шины кода данных из памяти или из устройства ввода/вывода. Чтение-модификация-запись — операция, при которой в течение одного цикла данные читаются из какого-то устройства, преобразуются и записываются в то же самое устройство по тому же адресу. ШИМ — широтно-импульсная модуляция. Шина — группа сигнальных линий, объединенных по какому-либо принципу. Например, шиной называют сигналы, соответствующие всем разрядам какого-то двоичного кода (шина данных, шина адреса). Иногда шиной называют также провод питания ("шина питания") и общий провод ("шина земли"). МІКРОПРОЦЕСОРНІ СИСТЕМИ Розділ 1. Філософія мікропроцесорної техніки Філософія мікропроцесорної техніки Розділ 2. Організація обміну інформацією 2. Шини мікропроцесорної системи і цикли обміну 3.Функції пристроїв магістралі Розділ 3. Функціонування процесора 4. Адресація операндов 5. Система команд процесора Розділ 4. Організація мікроконтролерів 6.Процесорне ядро і пам'ять мікроконтролерів 7. Організація зв'язку мікроконтролера із зовнішнім середовищем і часом 8. Допоміжні апаратні засоби мікроконтролера Розділ 5. Однокристальні мікроконтролери серії PIC 9. Апаратні засоби мікроконтролерів серії PIC 10. Спеціальні функції і система команд мікроконтролерів серії PIC Розділ 6. Проектування пристроїв на мікроконтролерах 11. Особливості розробки цифрових пристроїв на основі мікроконтролерів 12. Розробка програмного забезпечення для PIC-Мікроконтролерів Глава 7. Організація персонального комп'ютера 13. Архітектура і процесори персональних комп'ютерів 14. Пристрою, що входять до складу персонального комп'ютера Глава 8. Інтерфейси персонального комп'ютера 15. Системна магістраль ISA 16. Додаткові інтерфейси персонального комп'ютера Словник термінів і скорочень Тема 1. Мікропроцесорна система (МПС) - функціонально закінчений виріб, що складається з одного або декількох пристроїв, головним чином мікропроцесорних: мікропроцесора і/чи мікроконтролера. Мікропроцесорний пристрій (МПП) - функціонально і конструктивно закінчений виріб, що складається з декількох мікросхем, до складу яких входить мікропроцесор; МПП призначений для виконання певного набору функцій: ввід, опрацювання, передача, перетворення інформації і керування. Мікропроцесор - процесор, реалізований у вигляді однієї мікросхеми або комплекту з декількох спеціалізованих мікросхем. Мікроконтролер - мікросхема, призначена для керування електронними пристроями - сполучає функції процесора і периферійних пристроїв. По суті, це однокристальний комп'ютер. Мікроконтролери є основою для побудови вбудованих систем (телефони, пральні машини і т.п. Більшість процесорів, що випускаються у світі - мікроконтролери. Структура мікропроцесорної системи Структурна схема МПС наведена на рис. 4.1. Функціонування зводиться до такої послідовності дій: одержання даних від різних периферійних пристроїв (ПП) - клавіатура термінала, дисплеї, канали зв'язку, зовнішні запам'ятовувальні пристрої, опрацювання даних і видача результатів на ПП.
Рис.4.1. Структурна схема мікропроцесорної системи. Для виконання цих дій у МПС крім мікропроцесора передбачаються оперативна пам'ять (ОП) і контролери (забезпечують обмін даними різних ПП з мікропроцесором і ОП). Обмін даними з ПП здійснюється: програмно - у прямому і оберненому напрямках; (недоліки і переваги) шляхом переривань. (недоліки і переваги) Описані способи забезпечують низьку швидкість обміну, і застосовувати їх доцільно при обміні даними з низькошвидкісними ПП. При роботі з високошвидкісними ПП використовується режим ПДП. (Що робиться?) Обмін при цьому організується спеціальним контролером ПДП. У режимі ПДП ПП обмінюється з ОП не одиночними даними, а більшими блоками даних. У контролер ПДП мікропроцесор попередньо поміщає інформацію, необхідну для керування обміном (адреса комірки ОП, куди записується чи звідки зчитується перше слово, що підлягає обміну, кількість слів у блоці і ін.). У процесі обміну контролер ПДП видає на шину адреси адресу коиірки ОП, після закінчення передачі слова між ОП і ПП через шину даних контролер ПДП збільшує на одиницю значення адреси, що видається на шину адреси. Після завершення передачі заданої кількості слів контролер ПДП припиняє обмін, інформуючи про це мікропроцесор. Останній поновлює зв'язок із шинами адреси і даних і продовжує виконання програми.
Рис.4.2. Варіанти структур мікропроцесора. Розділ 1. Філософія мікропроцесорної техніки 1. Лекція: Філософія мікропроцесорної техніки Електронна система - у цьому випадку це будь-який електронний вузол, блок, прилад або комплекс, що робить обробку інформації. Завдання - це набір функцій, виконання яких потрібно від електронної системи. Швидкодія - це показник швидкості виконання електронною системою її функцій. Гнучкість - це здатність системи підлаштовуватися під різні задачі. Гнучкість - це показник ступеня відповідності можливостей системи задачі, що розв'язуються даною системою. Інтерфейс - угода про обмін інформацією, правила обміну інформацією, що припускають електричну, логічну і конструктивну сумісність пристроїв, що беруть участь в обміні. Інша назва - спряження. Мікропроцесорна система може розглядатися як окремий випадок електронної системи, призначеної для обробки вхідних сигналів і видачі вихідних сигналів (рис. 1.2).
Рис. 1.3. Інформаційні потоки в мікропроцесорній системі. Для виконання команд у структуру процесора входять внутрішні регістри, арифметико-логічний пристрій (АЛП, ALU - Arithmetic Logic Unit) , мультиплексори, буфери, регістри і інші вузли. Робота всіх вузлів синхронізується загальним зовнішнім тактовим сигналом процесора. (рис. 1.4).
Рис. 1.4. Приклад структури найпростішого процесора. Втім, для розроблювача мікропроцесорних систем інформація про тонкості внутрішньої структури процесора не занадто важлива. Розроблювач повинен розглядати процесор як "чорний ящик", що у відповідь на вхідні і керуючі коди робить ту або іншу операцію і видає вихідні сигнали. Розроблювачеві необхідно знати систему команд, режими роботи процесора, а також правила взаємодії процесора із зовнішнім світом або, як їх ще називають, протоколи обміну інформацією. Про внутрішню структуру процесора треба знати тільки те, що необхідно для вибору тої або іншої команди, того або іншого режиму роботи. Шинна структура зв'язків Для досягнення максимальної універсальності і спрощення протоколів обміну інформацією в мікропроцесорних системах застосовується шинна структура зв'язків між окремими пристроями, що входять у систему. При шинній структурі зв'язків (рис. 1.6) всі сигнали між пристроями передаються по цих самим лініях зв'язку, але в різний час (мультиплексована передача). Причому передача по всіх лініях зв'язку може здійснюватися в обох напрямках (двохнаправлена передача). У результаті кількість ліній зв'язку істотно скорочується, а правила обміну (протоколи) спрощуються. Однак при шинній структурі зв'язків вся інформація передається по лініях зв'язку послідовно в часі, по черзі, що знижує швидкодію системи в порівнянні із класичною структурою зв'язків.
Рис. 1.6. Шинна структура зв'язків. Перевага шинної структури - всі пристрої, підключені до шини, повинні приймати і передавати інформацію за стандартними протоколами обміну інформацією. Відповідно, всі вузли, відповідальні за обмін із шиною в цих пристроях, повинні бути однотипні, уніфіковані. Істотний недолік шинної структури пов'язаний з тим, що всі пристрої підключаються до кожної лінії зв'язку паралельно. Тому будь-яка несправність будь-якого пристрою може вивести з ладу всю систему, якщо вона псує лінію зв'язку. По цій же причині налагодження системи із шинною структурою зв'язків досить складна і звичайно вимагає спеціального устаткування. У системах із шинною структурою зв'язків застосовують всі три існуючі різновиди вихідних каскадів цифрових мікросхем: - стандартний вихід (ТТЛ); - вихід з відкритим колектором (ОК); - вихід із трьома станами (3С). Спрощено ці три типи вихідних каскадів можуть бути представлені у вигляді схем на рис. 1.7.
Рис. 1.7. Три типи виходів цифрових мікросхем. Вихідні каскади типів 3С и ОК дозволяють об’єднувати кілька виходів мікросхем для одержання мультиплексованих (рис. 1.8) або двонаправлених (рис. 1.9) ліній.
Рис. 1.8. Мультиплексована лінія.
Рис. 1.9. Двонаправлена лінія. При цьому у випадку виходів 3С необхідно забезпечити, щоб на лінії завжди працював тільки один активний вихід, а всі інші виходи перебували б у цей час у третьому стані, інакше можливі конфлікти. Об'єднані виходи ОК можуть працювати всі одночасно, без усяких конфліктів. Типова структура мікропроцесорної системи наведена на рис. 1.10. Рис. 1.10. Структура мікропроцесорної системи. 1.3. Режими роботи мікропроцесорної системи Практично будь-яка розвинена мікропроцесорна система підтримує три основних режими обміну по магістралі: програмний обмін інформацією; обмін з використанням переривань (Interrupts); обмін з використанням прямого доступу до пам'яті (ПДП, DMA - Direct Memory Access). Шлях процесора по програмі може бути лінійним, циклічним, може містити переходи, але він завжди безперервний і повністю перебуває під контролем процесора. Ні на які зовнішні події, не пов'язані із програмою, процесор не реагує (рис. 1.11). Всі сигнали на магістралі в цьому випадку контролюються процесором.
Рис. 1.11. Програмний обмін інформацією. Обмін по перериваннях використовується тоді, коли необхідна реакція мікропроцесорної системи на якусь зовнішню подію, на прихід зовнішнього сигналу. У загальному випадку організувати реакцію на зовнішню подію можна трьома різними шляхами: - за допомогою постійного програмного контролю факту настання події (так званий метод опитування прапора або polling); - за допомогою переривання (IRQ — Interrupt ReQuest); - за допомогою прямого доступу до пам'яті. У другому випадку в режимі переривання процесор, одержавши запит переривання від зовнішнього пристрою закінчує виконання поточної команди і переходить до програми обробки переривання. Закінчивши виконання програми обробки переривання, він вертається до перерваної програми з тої точки, де його перервали (рис. 1.12). Для обслуговування переривань у систему іноді вводиться спеціальний модуль контролера переривань, але він в обміні інформацією не бере участь. Його завдання полягає в тому, щоб спростити роботу процесора із зовнішніми запитами переривань. Цей контролер звичайно програмно управляється процесором по системній магістралі.
Рис. 1.12. Обслуговування переривання. Природно, ніякого прискорення роботи системи переривання не дає. Його застосування дозволяє тільки відмовитися від постійного опитування прапора зовнішньої події і тимчасово, до настання зовнішньої події, зайняти процесор виконанням якихось інших завдань. Прямий доступ до пам'яті (ПДП, DMA) - це режим, що принципово відрізняється від двох раніше розглянутих режимів тим, що обмін по системній шині йде без участі процесора. Зовнішній пристрій, що вимагає обслуговування, сигналізує процесору, що режим ПДП необхідний, у відповідь на це процесор закінчує виконання поточної команди і відключається від всіх шин, сигналізуючи пристрою, що запросив, що обмін у режимі ПДП можна починати. Коли пересилання інформації буде закінчена, процесор знову вертається до перерваної програми, продовжуючи її з тої крапки, де його перервали (рис. 1.13). Це схоже на режим обслуговування переривань, але в цьому випадку процесор не бере участь в обміні. Як і у випадку переривань, реакція на зовнішню подію при ПДП істотно повільніше, ніж при програмному режимі. Зрозуміло, що в цьому випадку потрібне введення в систему додаткового пристрою (контролера ПДП), що буде здійснювати повноцінний обмін по системній магістралі без усякої участі процесора. Причому процесор попередньо повинен повідомити цей контролер ПДП, звідки йому варто брати інформацію і/або куди її варто поміщати. Контролер ПДП може вважатися спеціалізованим процесором, що відрізняється тим, що сам не бере участь в обміні, не приймає в себе інформацію і не видає її (рис. 1.14). Рис. 1.13. Обслуговування ПДП.
Рис. 1.14. Інформаційні потоки в режимі ПДП. У принципі контролер ПДП може входити до складу пристрою вводу/виводу, якому необхідний режим ПДП або навіть до складу декількох пристроїв вводу/виводу. Теоретично обмін за допомогою прямого доступу до пам'яті може забезпечити більше високу швидкість передачі інформації, чим програмний обмін, тому що процесор передає дані повільніше, ніж спеціалізований контролер ПДП. Однак на практиці ця перевага реалізується далеко не завжди. Швидкість обміну в режимі ПДП звичайно обмежена можливостями магістралі. До того ж необхідність програмного завдання режимів контролера ПДП може звести нанівець виграш від більше високої швидкості пересилання даних у режимі ПДП. 1.4. Архітектура мікропроцесорних систем Архітектура з роздільними шинами даних і команд (двохшинна, або гарвардська, архітектура). Ця архітектура припускає наявність у системі окремої пам'яті для даних і окремої пам'яті для команд (рис. 1.16). Обмін процесора з кожним із двох типів пам'яті відбувається по своїй шині. Архітектура із загальною шиною простіше, вона не жадає від процесора одночасного обслуговування двох шин, контролю обміну по двох шинах відразу. Наявність єдиної пам'яті даних і команд дозволяє гнучко розподіляти її обсяг між кодами даних і команд. Наприклад, у деяких випадках потрібна більша і складна програма, а даних у пам'яті треба зберігати не занадто багато. В інших випадках, навпаки, програма потрібно проста, але необхідні більші обсяги збережених даних. Перерозподіл пам'яті не викликає ніяких проблем, головне - щоб програма і дані разом містилися в пам'яті системи.
Рис. 1.16. Архітектура з роздільними шинами даних і команд. Архітектура з роздільними шинами даних і команд складніше, вона заставляє процесор працювати одночасно із двома потоками кодів, обслуговувати обмін по двох шинах одночасно. Програма може розміщатися тільки в пам'яті команд, дані - тільки в пам'яті даних. Така вузька спеціалізація обмежує коло задач, розв'язуваних системою, тому що не дає можливості гнучкого перерозподілу пам'яті. У чому ж перевага архітектури із двома шинами? У першу чергу, у швидкодії. Сучасні процесори здатні сполучити в часі виконання команд і проведення циклів обміну по системній шині. Використання конвеєрних технологій і швидкої кеш-пам'яті дозволяє їм прискорити процес взаємодії з порівняно повільною системною пам'яттю. Підвищення тактової частоти і удосконалювання структури процесорів дають можливість скоротити час виконання команд. Але подальше збільшення швидкодії системи можливо тільки при об’єднанні пересилання даних і читання команд, тобто при переході до архітектури із двома шинами. У випадку двохшинної архітектури обмін по обох шинах може бути незалежним, паралельним у часі. Відповідно, структури шин (кількість розрядів коду адреси і коду даних, порядок і швидкість обміну інформацією і т.д.) можуть бути обрані оптимально для того завдання, що вирішується кожною шиною. Тому за інших рівних умов перехід на двохшинну архітектуру прискорює роботу мікропроцесорної системи, хоча і вимагає додаткових витрат на апаратуру, ускладнення структури процесора. Пам'ять даних у цьому випадку має свій розподіл адрес, а пам'ять команд - своє. 1.5. Типи мікропроцесорних систем Сформувалося кілька типів МПС, що розрізняються потужністю, універсальністю, швидкодією і структурними відмінностями. Основні типи такі: - мікроконтролери — тип мікропроцесорних систем, у яких всі або більшість вузлів системи виконані у вигляді однієї мікросхеми; - контролери — керуючі мікропроцесорні системи, виконані у вигляді окремих модулів; - мікрокомп'ютери — могутніші мікропроцесорні системи з розвиненими засобами сполучення із зовнішніми пристроями. - комп'ютери. Чітку границю між цими типами провести складно, проте принципові відмінності є. 1. Мікроконтролери - універсальні пристрої, які практично завжди використовуються не самі по собі, а в складі складніших пристроїв, у тому числі і контролерів. Системна шина мікроконтролера схована від користувача усередині мікросхеми. Можливості підключення зовнішніх пристроїв до мікроконтролера обмежені. Пристрої на мікроконтролерах звичайно призначені для розв’язання однієї задачі. 2. Контролери використовуються для розв’язання окремої задачі або групи подібних задач. Вони звичайно не мають можливостей підключення додаткових вузлів і пристроїв, наприклад, великої пам'яті, засобів вводу/виводу. Їх системна шина найчастіше недоступна користувачеві. Структура контролера проста і оптимізована під максимальну швидкодію. Конструктивно контролери випускаються в одноплатному варіанті. 3. Мікрокомп'ютери відрізняються від контролерів більш відкритою структурою, вони допускають підключення до системної шини декількох додаткових пристроїв. Виробляються мікрокомп'ютери в каркасі, корпусі з роз’ємами системної магістралі, доступними користувачеві. При виборі типу треба по можливості уникати надлишковості і передбачати необхідну для даного завдання гнучкість системи. У цей час при розробці нових мікропроцесорних систем найчастіше вибирають шлях використання мікроконтролерів (приблизно в 80% випадків). При цьому мікроконтролери застосовуються або самостійно, з мінімальною додатковою апаратурою, або в складі більше складних контролерів з розвиненими засобами вводу/виводу. Класичні мікропроцесорні системи на базі мікросхем процесорів і мікропроцесорних комплектів випускаються зараз досить рідко, у першу чергу, через складність процесу розробки і налагодження цих систем. Даний тип мікропроцесорних систем вибирають в основному тоді, коли мікроконтролери не можуть забезпечити необхідних характеристик.
2. Лекція: Шини мікропроцесорної системи і цикли обміну Головне, що повинен знати розроблювач мікропроцесорних систем - це принципи організації обміну інформацією із шин таких систем. Без цього неможливо розробити апаратні частини системи, а без апаратної частини не буде працювати ніяке програмне забезпечення. Як показала практика, принципи організації обміну по шинах важливіші, ніж особливості конкретних мікропроцесорів. Стандартні системні магістралі живуть набагато довше, ніж певні типи процесорів. Розроблювачі нових процесорів орієнтуються на вже існуючі стандарти магістралі. Цикли обміну інформацією діляться на такі типи: Цикл запису (виводу); Цикл читання (вводу). У деяких мікропроцесорних системах існує також цикл "читання-модифікація-запис" або " ввід-пауза-вивід". У цих циклах процесор спочатку читає інформацію з пам'яті або пристрою вводу/виводу, потім перетворює її і знову записує по тій ж адресі. Особливе місце займають цикли ПДП. Під час кожного циклу пристрою, що беруть участь в обміні інформацією, передають один одному інформаційні і керуючі сигнали в строго встановленому порядку або, як ще говорять, відповідно до прийнятого протоколу обміну інформацією. Тривалість циклу обміну може бути постійної або змінної, але вона завжди містить у собі кілька періодів сигналу тактової частоти системи. 2.1. Шини мікропроцесорної системи До системної шини МПС входить три основні інформаційні шини: адреси, даних і керування. Звичайно шина даних має 8, 16, 32 або 64 розряду. Шина адреси — кількість адрес, забезпечуваних шиною адреси, визначається як 2N, де N — кількість розрядів. Наприклад, 16-розрядна шина адреси забезпечує 65 536 адрес. Розрядність шини адреси звичайно кратна 4 і може досягати 32 і навіть 64. Як у шині даних, так і в шині адреси може використовуватися позитивна логіка або негативна логіка. У більшості випадків рівні сигналів на шинах - ТТЛ. Для зниження загальної кількості ліній зв'язку магістралі часто застосовується мультиплексування шин адреси і даних. Тобто ті самі лінії зв'язку використовуються в різні моменти часу для передачі як адреси, так і даних (на початку циклу - адреса, наприкінці циклу - дані). Для фіксації цих моментів (стробування) служать спеціальні сигнали на шині керування. Зрозуміло, що мультиплексована шина адреси/даних забезпечує меншу швидкість обміну, вимагає більше тривалого циклу обміну (рис. 2.1). За типом шини адреси і шини даних всі магістралі також діляться на мультиплексовані і немультиплексовані.
Рис. 2.1. Мультиплексування шин адреси і даних. Керуючі сигнали забезпечують узгодження роботи процесора (або іншого хазяїна магістралі, задатчика, master) з роботою пам'яті або пристрою вводу/виводу ( пристрою-виконавця, slave). Керуючі сигнали також обслуговують запит і надання переривань, запит і надання прямого доступу. Сигнали шини керування можуть передаватися як у позитивній логіці (рідше), так і в негативній логіці (частіше). Лінії шини керування можуть бути як однонаправленими, так і двонаправленими. Типи вихідних каскадів можуть бути самими різними: із двома станами (для однонаправлених ліній), із трьома станами (для двонаправлених ліній), з відкритим колектором (для двонаправлених і мультиплексованих ліній). Самі головні керуючі сигнали - це строби обміну: Строб запису (виводу), Строб читання (вводу). При цьому велике значення має те, як процесор закінчує обмін у межах циклу, у який момент він знімає свій строб обміну. Можливі два шляхи рішення (рис. 2.2): При синхронному обміні процесор закінчує обмін даними самостійно, через раз і назавжди встановлений часовий інтервал витримки (tвид), тобто без врахування інтересів пристрою-виконавця; При асинхронному обміні процесор закінчує обмін тільки тоді, коли пристрій-виконавець підтверджує виконання операції спеціальним сигналом (так званий режим handshake - рукостискання).
Рис. 2.2. Синхронний обмін і асинхронний обмін. Переваги синхронного обміну - простий протокол обміну, менша кількість керуючих сигналів. Недоліки - відсутність гарантії, що виконавець виконав необхідну операцію, а також високі вимоги до швидкодії виконавця. Переваги асинхронного обміну - надійніше пересилання даних, можливість роботи із різними за швидкодією виконавцями. Недолік - необхідність формування сигналу підтвердження всіма виконавцями, тобто додаткові апаратурні витрати. Який тип обміну швидший? Відповідь на це питання неоднозначний. З одного боку, при асинхронному обміні потрібно якийсь час на формування, передачу додаткового сигналу і на його обробку процесором. З іншого боку, при синхронному обміні доводиться штучно збільшувати тривалість стробу обміну для відповідності вимогам більшого числа виконавців, щоб вони встигали обмінюватися інформацією в темпі процесора. Тому іноді в магістралі передбачають можливість як синхронного, так і асинхронного обміну, причому синхронний обмін є основним і досить швидким, а асинхронний застосовується тільки для повільних виконавців. По використовуваному типі обміну магістралі мікропроцесорних систем також діляться на синхронні і асинхронні. 2.2. Цикли обміну інформацією 2.2.1. Цикли програмного обміну Розглянемо для приклада два досить типових випадки програмного обміну по магістралі мікропроцесорної системи. Перший приклад - це обмін по мультиплексованій асинхронній магістралі Q-bus (фірма DEC, застосування - мікрокомп'ютери і промислові контролери). Спрощені часові діаграми циклів читання (вводу) і запису (виводу) по цій магістралі наведені на рис. 2.3 і 2.4.
Рис. 2.3. Цикл читання на магістралі Q-bus. Одержавши (розпізнавши) свій код адреси, пристрій вводу/виводу або пам'ять (виконавець) готується до проведення обміну. Через якийсь час після початку (негативного фронту) сигналу -SYNC процесор знімає адресу і починає фазу даних.
Рис. 2.4. Цикл запису на магістралі Q-bus. У фазі даних циклу читання (рис. 2.3) процесор виставляє сигнал стробу читання даних -DIN, у відповідь на який пристрій, до якого звертається процесор (виконавець), повинен виставити свій код даних (дані, що читаються). Одночасно цей пристрій повинен підтвердити виконання операції сигналом підтвердження обміну -RPLY. Для сигналу -RPLY використовується тип вихідного каскаду ОК, щоб не було конфліктів між устроями-виконавцями. Процесор, одержавши сигнал -RPLY, закінчує цикл обміну. Для цього він знімає сигнал -DIN і сигнал -SYNC. Пристрій-Виконавець у відповідь на зняття сигналу -DIN повинне зняти код даних із шини AD і закінчити сигнал підтвердження -RPLY. Після цього процесор знімає сигнал -SYNC. У фазі даних циклу записи (рис. 2.4) процесор виставляє на шину AD код записуваних даних і супроводжує його негативним сигналом стробу запису даних -DOUT. Пристрій-виконавець повинен по цьому сигналу прийняти дані від процесора і сформувати сигнал підтвердження обміну -RPLY. Процесор, одержавши сигнал -RPLY, закінчує цикл обміну. Для цього він знімає код даних із шини AD і сигнал -DOUT. Пристрій-виконавець у відповідь на зняття сигналу -DOUT повинен закінчити сигнал підтвердження -RPLY. Після цього процесор знімає сигнал -SYNC. Тобто на даній магістралі адреса передається синхронно (без підтвердження його одержання виконавцем), а дані передаються асинхронно, з обов'язковим підтвердженням їхньої видачі або прийому виконавцем. Відсутність сигналу підтвердження -RPLY протягом заданого часу сприймається процесором як аварійна ситуація. У принципі можлива і асинхронна передача адреси, що збільшує надійність обміну, хоча може знижувати його швидкість. Крім циклів читання і запису на магістралі Q-bus використовуються також і цикли типу " ввід-пауза-вивід" (" читання-модифікація-запис"). Спрощена часова діаграма цього циклу представлена на рис. 2.5.
Рис. 2.5. Цикл " ввід-пауза-вивід" на магістралі Q-bus. У цьому циклі адресна фаза проводиться точно так само, як і в циклах читання (вводу) і запису (виводу). Але у фазі даних процесор проводить спочатку читання із заданого в адресній фазі адреси, а потім запис у ту ж саму адресу. Для читання використовується строб читання -DIN, а для запису - строб запису -DOUT. У відповідь на сигнал -DIN пристрій-виконавець видає свої дані на шину AD, а по сигналі -DOUT - приймає дані із шини AD. Як і в циклах читання і запису, пристрій-виконавець підтверджує виконання кожної операції сигналом підтвердження -RPLY. Зрозуміло, що цикл " ввід-пауза-вивід" вимагає більше часу, ніж кожний із циклів читання або запису, але менше часу, ніж два послідовно зроблених цикли читання і запису (так як нього потрібна тільки одна адресна фаза). Сигнал -SYNC виробляється процесором на початку циклу " ввід-пауза-вивід" і тримається до закінчення всього циклу. Як другий приклад розглянемо цикли обміну на синхронної немультиплексованої магістралі ISA (Industrial Standard Architecture), фірма IBM. Спрощені цикли запису в пристрій вводу/виводу і читання із пристрою вводу/виводу наведені на рис. 2.6 і 2.7. Обидва цикли починаються з виставляння процесором (задатчиком) коду адреси на шину адреси SA. Адреса залишається на шині SA до кінця циклу. Фаза адреси, однакова для обох циклів, закінчується з початком стробу обміну даними -IOR або -IOW. Протягом фази адреси пристрій-виконавець повинен прийняти код адреси і розпізнати або не розпізнати його. Якщо адреса розпізнана, виконавець готується до обміну. У фазі даних циклу читання (рис. 2.6) процесор виставляє негативний сигнал читання даних із пристрою вводу/виводу -IOR. У відповідь на нього пристрій-виконавець повинен видати на шину даних SD свій код даних (дані, що читаються). Логіка на шині даних позитивна. Через установлений час строб обміну -IOR знімається процесором, після чого знімається також і код адреси із шини SA. Цикл закінчується без обліку швидкодії виконавця.
Рис. 2.6. Цикл читання з пристрою вводу-виводу на магістралі ISA.
Рис. 2.7. Цикл запису в пристрій вводу-виводу на магістралі ISA. Але так відбувається тільки у випадку основного, синхронного обміну. Крім нього на магістралі ISA також передбачена можливість асинхронного обміну. Для цього застосовується сигнал готовності каналу I/O CH RDY. Тип вихідного каскаду для даного сигналу — ОК, для запобігання конфліктів між пристроями-виконавцями. При синхронному обміні сигнал I/O CH RDY завжди позитивний. Але повільний пристрій-виконавець, що не встигає працювати в темпі процесора, може цей сигнал зняти, тобто зробити нульовим відразу після початку стробу обміну. Тоді процесор до того моменту, поки сигнал I/O CH RDY не стане знову позитивним, припиняє завершення циклу, продовжує строб обміну. Принципова відмінність асинхронного обміну по магістралі ISA від асинхронного обміну по магістралі Q-bus полягає в наступному. Якщо у випадку Q-bus сигнал підтвердження обов'язковий, і його повинен формувати кожний виконавець, то у випадку ISA сигнал про неготовність виконавець може не формувати, якщо він устигає працювати в темпі процесора. Зате у випадку Q-bus до кінця циклу обміну процесор завжди впевнений, що пристрій-виконавець виконав необхідну операцію, а у випадку ISA такої впевненості немає. У фазі даних циклу записи по магістралі ISA (рис. 2.7) процесор виставляє на шину даних SD код записуваних даних і супроводжує їх стробом запису даних у пристрій вводу/виводу -IOW. Одержавши цей сигнал, пристрій-виконавець повинен прийняти із шини SD код записуваних даних. Якщо він не встигає зробити це в темпі процесора, то він може зняти на потрібний час сигнал I/O CH RDY після одержання переднього фронту сигналу -IOW. Тоді процесор призупинить закінчення циклу запису. 2.2.2. Цикли обміну по перериваннях Цикли обміну в режимі переривань будуються за такими ж принципам, що і цикли програмного обміну, але мають ряд специфічних особливостей. Переривання в мікропроцесорних системах бувають двох основних типів: - векторні переривання, які вимагають проведення циклу читання по магістралі; - радіальні переривання, які не вимагають ніякого циклу обміну по магістралі. Переривань у мікропроцесорній системі звичайно буває багато. Тому процесору необхідна інформація про номер (або, як ще говорять, про адресу вектора) конкретного переривання. Ця інформація може бути передана процесору двома шляхами. При векторному перериванні код номера переривання передається процесору тим пристроєм вводу/виводу, що дане переривання запросило. Для цього процесор проводить цикл читання по магістралі, і по шині даних одержує код номера переривання. Шина адреси в даному циклі звичайно не використовується, тому що пристрій, що запросив переривання, і так знає, що процесор буде звертатися саме до нього. У цьому випадку в магістралі досить усього однієї лінії запиту переривання для всіх пристроїв вводу/виводу.
Рис. 2.8. Сигнали запиту і надання переривання в магістралі Q-bus. Схема поширення сигналів, що беруть участь у перериваннях на магістралі Q-bus, показана на рис. 2.8. Спрощена часова діаграма циклу запиту і надання магістралі представлена на рис. 2.9.
Рис. 2.9. Цикл запиту/надання векторного переривання на магістралі Q-bus. Запит переривання здійснюється негативним сигналом -VIRQ, що може формуватися кожним із пристроїв, що запитують переривання. Тип вихідного каскаду для цього сигналу — ОК, щоб уникнути конфліктів між запитуючого переривання пристроями. Одержавши сигнал -VIRQ, процесор надає переривання (закінчивши попередньо виконання поточної команди). Для цього він виставляє сигнал читання даних -DIN і сигнал надання переривання IAKO. Цей сигнал IAKO послідовно проходить через всі пристрої, які можуть запитувати переривання. Якщо пристрій запросив переривання, то він не пропускає через себе цей сигнал. У результаті виходить, що якщо переривання одночасно запросили два або більше пристрої, то сигнал надання переривання одержить тільки один пристрій, а саме те, що ближче до процесору. Такий механізм дозволу конфліктів називається іноді географічним пріоритетом (або ланцюговим пріоритетом, Daisy Chain). Одержавши сигнал IAKO, пристрій, що запросив переривання, повинен зняти свій сигнал -VIRQ. Потім процесор проводить цикл безадресного читання номера переривання. У відповідь на отримані сигнали -DIN і IAKO пристрій, якому надане переривання, повинен видати на шину адреси/даних AD код номера переривання (адреси вектора переривання) і виставити сигнал підтвердження -RPLY. Процесор читає код номера переривання і закінчує цикл безадресного читання зняттям сигналів -DIN і IAKO.
Рис. 2.10. Структура зв'язків для організації радіальних переривань на магістралі ISA. При радіальному перериванні в магістралі є стільки ліній запиту переривання, скільки всього може бути різних переривань. Тобто кожний пристрій вводу/виводу, що бажає використовувати переривання, подає сигнал запиту переривання по своїй окремій лінії. Процесор довідається про номер переривання за номером лінії, по якій прийшов сигнал запиту переривання. Ніяких циклів обміну по магістралі при цьому не потрібно. У випадку радіальних переривань у систему звичайно включається додаткова мікросхема контролера переривань, що обробляє сигнали запитів переривань. Саме так організовані переривання, наприклад, у магістралі ISA. Спрощена структура зв'язків між пристроями, що беруть участь в обміні по перериваннях, на магістралі ISA показана на рис. 2.10. Процесор спілкується з контролером переривань як по магістралі (щоб задати йому режими роботи), так і поза магістраллю (при обробці запитів на переривання). Сигнали запитів переривань IRQ розподіляються між всіма пристроями магістралі. На кожну лінію IRQ доводиться один пристрій. Тип вихідного каскаду для цих ліній - 2С, тому що конфлікти тут не передбачені. Запитом переривання є передній, позитивний фронт сигналу IRQ. При одночасному надходженні сигналів IRQ від декількох пристроїв порядок їхнього обслуговування визначається контролером переривань. Який тип переривань кращий - векторний або радіальний? Векторні переривання забезпечують системі більшу гнучкість, у системі їх може бути дуже багато. Але зате вони вимагають додаткових апаратурних вузлів у всіх пристроях, що запитує переривання, для обслуговування циклів безадресного читання. Радіальних переривань у системі звичайно не дуже багато (від 1 до 16). При цьому типі переривань, як правило, потрібне введення в систему спеціального контролера переривань. Кожне радіальне переривання вимагає введення додаткової лінії в шину керування системної магістралі. Але працювати з радіальними перериваннями простіше, тому що все зводиться тільки до виробітку єдиного сигналу IRQ, і ніяких циклів обміну по магістралі не потрібно. 2.2.3. Цикли обміну в режимі ПДП Цикли обміну в режимі ПДП виконуються за тими ж правилами, що і цикли програмного обміну, і цикли надання переривань. Перш ніж почати обмін у режимі ПДП, пристрій, якому необхідний ПДП, повинен запросити ПДП і одержати його. Процедура запиту і надання ПДП дуже схожа на процедуру запиту і надання переривання. В обох випадках пристрій, що вимагає обслуговування, посилає сигнал запиту процесору. Однак у випадку ПДП процесор обов'язково повинен надати ПДП пристрою, що запросив, за допомогою спеціальних сигналів, тому що на час ПДП процесор відключається від магістралі. А при радіальних перериваннях надання переривання від процесора не потрібно. На магістралі Q-bus запит і надання ПДП організуються подібно запиту і наданню переривання. Спрощена структура зв'язків пристроїв, що беруть участь у ПДП, показана на рис. 2.11. Часова діаграма запиту/надання ПДП дуже близька до часової діаграми запиту/надання переривання (див. рис. 2.9).
Рис. 2.11. Структура зв'язків запиту/надання ПДП на магістралі Q-bus. Сигнал запиту ПДП (-DMR), передається всіма пристроями, що потребують ПДП, по одній лінії магістралі. Тип вихідного каскаду на цій лінії - ОК. Процесор, одержавши сигнал -DMR, видає сигнал надання ПДП DMGO, аналогічний сигналу IAKO. Цей сигнал також проходить через всі пристрої послідовно, у результаті чого ПДП одержує тільки той пристрій, що перебуває ближче до процесора. А потім пристрій, що одержав ПДП, проводить цикли обміну по магістралі, аналогічно циклам програмного обміну. У циклах ПДП інформація читається з пам'яті і записується в пристрій вводу/виводу, або навпаки - читається із пристрою вводу/виводу і передається на згадку. На магістралі ISA запит/надання ПДП дуже нагадує організацію радіальних переривань (рис. 2.12). Точно так само в системі існує контролер ПДП, до якого сходяться сигнали запиту ПДП (DRQ), і від якого розходяться сигнали надання ПДП (-DACK). До кожного каналу ПДП (пари сигналів DRQ і -DACK) підключається тільки один пристрій, що запитує ПДП. Тип вихідних каскадів для цих сигналів -2С. Пристрій, що потребує ПДП, посилає сигнал запиту DRQ і одержує у відповідь сигнал надання -DACK. Після цього контролер ПДП проводить цикли обміну по магістралі між пристроєм вводу/виводу і пам'яттю. Спрощена часова діаграма циклів ПДП на магістралі ISA показана на рис. 2.13. На магістралі ISA використовуються роздільні стробы запису на згадку (-MEMW) і запису в пристрої вводу/виводу (-IOW), а також роздільні стробы читання з пам'яті (-MEMR) і читання із пристроїв вводу/виводу (-IOR). Це дозволяє за один цикл обміну ПДП читати інформацію з пам'яті і записувати її в пристрій вводу/виводу або ж читати інформацію із пристрою вводу/виводу і записувати її в пам’ять. При цьому на шині адреси виставляється адреса пам'яті, а адреса пристрою вводу/виводу заміняється одним-єдиним сигналом AEN. Природно, у циклі обміну в режимі ПДП бере участь тільки той пристрій вводу/виводу, що попередньо запросив ПДП і якому ПДП було надано. Тому ніяких конфліктів між пристроями вводу/виводу через таку спрощену адресацію не виникає.
Рис. 2.12. Структура зв'язків запиту/надання ПДП на магістралі ISA.
Рис. 2.13. Цикл ПДП на магістралі ISA. 2.3. Проходження сигналів по магістралі При організації обміну по магістралях і шинах розроблювачеві необхідно враховувати кілька важливих моментів, зв'язаних як з особливістю поширення сигналів по шинах, так і із самою природою шин. У противному випадку мікропроцесорна система може попросту не працювати або працювати нестійко, хоча вся логіка цифрових пристроїв, що входять у систему, буде спроектована безпомилково. У випадку, коли системна шина (магістраль) мікропроцесорної системи є зовнішньою, а не схована усередині мікросхеми, необхідно враховувати особливості поширення сигналів по довгих лініях. Хоча в більшості випадків довжина магістралі не занадто велика, не перевищує 1-2 десятків сантиметрів, це однаково дуже впливає на синхронізацію обміну. На проходження сигналів по магістралі впливають наступні фактори: - скінченна величина затримки поширення сигналів по лініях магістралі; - різниця затримок поширення сигналів по різних лініях шини; - неодночасне виставляння сигналів на лінії шини; - спотворення фронтів сигналів, що проходять по лініях магістралі; - відбиття сигналів від кінців ліній зв'язку (рис. 2.14).
Рис. 2.14. Проходження сигналів по шині. Для врахування всіх цих факторів розроблювачі стандартних магістралей обміну і стандартних протоколів обміну завжди закладають необхідні затримки між сигналами, що беруть участь в обміні. Крім того, затримки між сигналами вибираються таким чином, щоб пристрій, якому адресований той або інший сигнал, мало досить часу для його обробки. Якщо розробляється нова магістраль, все це теж треба враховувати. Тому намагатися "модернізувати" якийсь стандартний протокол і прискорювати обмін по магістралі шляхом зменшення затримок, передбачених стандартом, дуже небезпечно. Точно так само небезпечно, не змінюючи протоколу обміну, намагатися збільшити довжину магістралі, збільшуючи тим самим затримки поширення сигналів по лініях і шинам. Особливо чутливі до такого роду "модернізаціям" синхронні магістралі, у яких не передбачене обов'язкове підтвердження виконання кожної операції. Наприклад, тривалість фази адреси в циклі обміну вибирається так. Протягом адресної фази всі сигнали всіх розрядів коду адреси, нехай навіть і сформовані процесором не одночасно, повинні дійти до пристрою-виконавця по своїм проводам шини. А пристрій-виконавець повинне цей код адреси прийняти і обробити (тобто відрізнити свою адресу від чужої). Природно, для гарантії в тривалість адресної фази ще додається невелика додаткова затримка. Точно так само тривалість фази даних у циклі читання повинна вибиратися так, щоб пристрій-виконавець встиг отримати строб читання і видати код даних, що читаються, на шину даних. Потім цей код повинен встигнути дійти до процесора і процесор повинен встигнути його прочитати. Після чого процесор знімає сигнал стробу читання, цей задній фронт сигналу доходить із затримкою до пристрою-виконавця, що також із затримкою знімає свій код даних. Аналогічно і у циклі запису. Для поліпшення форми сигналів, що поширюються по магістралі, іноді застосовують кінцеві погоджувачі (термінатори) на кінцях ліній магістралі. Особливо важливо їхнє застосування у випадку, коли припустима довжина магістралі перевищує кілька метрів. Наприклад, у випадку магістралі Q-bus застосовуються два типи погоджквачів: 120-омний і 250-омний (рис. 2.15).
Рис. 2.15. Оконечные согласователи на магістралі Q-bus. Включення погоджувачів висуває додаткові вимоги до навантажувальної здатності передавачів, що працюють на лінії магістралі. У магістралі ISA подібні погоджувачі не використовуються, хоча до деяких ліній приєднані резистори, з'єднані іншим своїм виводом із шиною живлення. У кожному разі вихідні каскади передавачів, що працюють на лінії магістралі, повинні забезпечувати високі вихідні струми, тому що до магістралі може підключатися кілька пристроїв, кожне з яких споживає вхідний струм. Типові величини необхідних вихідних струмів магістральних передавачів перебувають у межах 20-30 мА. У той же час вхідні струми магістральних приймачів повинні бути малими, щоб не перевантажувати передавачі. Типові величини припустимих вхідних струмів магістральних приймачів лежать у межах 0,2-0,8 мА. 2.4. Функції пристроїв магістралі Розглянемо тепер, як взаємодіють на магістралі основні пристрої мікропроцесорної системи: процесор, пам'ять, пристрої вводу/виводу. 2.4.1. Функції процесора Процесор (рис. 2.16) звичайно являє собою окрему мікросхему або ж частина мікросхеми (у випадку мікроконтролера). Мікросхема процесора обов'язково має виводи трьох шин: шини адреси, шини даних і шини керування. Іноді деякі сигнали і шини мультиплексуються, щоб зменшити кількість виводів мікросхеми процесора. Найважливіші характеристики процесора: кількість розрядів його шин даних, адреси і кількість керуючих сигналів у шині керування. Розрядність шини даних визначає швидкість роботи системи. Розрядність шини адреси визначає припустиму складність системи. Кількість ліній керування визначає розмаїтість режимів обміну і ефективність обміну процесора з іншими пристроями системи. Крім виводів для сигналів трьох основних шин процесор завжди має вивід (або два виводи) для підключення зовнішнього тактового сигналу або кварцового резонатора (CLK), тому що процесор завжди являє собою тактований пристрій. Чим більше тактова частота процесора, тим він швидше працює, тобто тим швидше виконує команди. Втім, швидкодія процесора визначається не тільки тактовою частотою, але і особливостями його структури. Сучасні процесори виконують більшість команд за один такт і мають засоби для паралельного виконання декількох команд. Тактова частота процесора не зв'язана прямо і жорстко зі швидкістю обміну по магістралі, тому що швидкість обміну по магістралі обмежена затримками поширення сигналів і спотворенями сигналів на магістралі. Тобто тактова частота процесора визначає тільки його внутрішню швидкодію, а не зовнішню. Іноді тактова частота процесора має нижню і верхню межу. При перевищенні верхньої межі частоти можливе перегрівання процесора, а також збої, причому, що саме неприємне, виникаючі не завжди і нерегулярно. Так що зі зміною цієї частоти треба бути дуже обережним.
Рис. 2.16. Схема включення процесора. Ще один важливий сигнал, що є в кожному процесорі, - це сигнал початкового скидання RESET. При включенні живлення, при аварійній ситуації або зависанні процесора подача цього сигналу приводить до ініціалізації процесора, змушує його приступитися до виконання програми початкового запуску. Аварійна ситуація може бути викликана перешкодами по ланцюгах живлення і "землі", збоями в роботі пам'яті, зовнішніми іонізуючими випромінюваннями і ще безліччю причин. У результаті процесор може втратити контроль над виконуваною програмою і зупинитися на певній адресі. Для виходу із цього стану саме і використовується сигнал початкового скидання. Цей же вхід початкового скидання може використовуватися для оповіщення процесора про те, що напруга живлення сталася нижче встановленої межі. У такому випадку процесор переходить до виконання програми збереження важливих даних. По суті, цей вхід являє собою особливий різновид радіального переривання. Іноді в мікросхеми процесора є ще один-два входу радіальних переривань для обробки особливих ситуацій (наприклад, для переривання від зовнішнього таймера). Шина живлення сучасного процесора звичайно має одну напругу живлення (+5В або +3,3В) і загальний провід ("землю"). Перші процесори нерідко вимагали декількох напруг живлення. У деяких процесорах передбачений режим зниженого енергоспоживання. Взагалі, сучасні мікросхеми процесорів, особливо з високими тактовими частотами, споживають досить велику потужність. У результаті для підтримки нормальної робочої температури корпуса на них нерідко доводиться встановлювати радіатори, вентилятори або навіть спеціальні мікрохолодильники. Для підключення процесора до магістралі використовуються буферні мікросхеми, що забезпечують, якщо необхідно, демультиплексування сигналів і електричну буферизацію сигналів магістралі. Іноді протоколи обміну по системній магістралі і по шинах процесора не збігаються між собою, тоді буферні мікросхеми ще і погодять ці протоколи один з одним. Іноді в мікропроцесорній системі використовується кілька магістралей (системних і локальних), тоді для кожної з магістралей застосовується свій буферний вузол. Така структура характерна, наприклад, для персональних комп'ютерів. Після включення живлення процесор переходить у першу адресу програми початкового пуску і виконує цю програму. Дана програма попередньо записана в постійну (енергонезалежну) пам'ять. Після завершення програми початкового пуску процесор починає виконувати основну програму, що перебуває в постійній або оперативній пам'яті, для чого вибирає по черзі всі команди. Від цієї програми процесор можуть відволікати зовнішні переривання або запити на ПДП. Команди з пам'яті процесор вибирає за допомогою циклів читання по магістралі. При необхідності процесор записує дані в пам’ять або в пристрої вводу/виводу за допомогою циклів запису або ж читає дані з пам'яті або із пристроїв вводу/виводу за допомогою циклів читання. Таким чином, основні функції процесора: - вибірка (читання) виконуваних команд; - ввід (читання) даних з пам'яті або пристрою вводу/виводу; - вивід (запис) даних в пам'ять або в пристрої вводу/виводу; - обробка даних (операндів), зокрема арифметичні операції над ними; - адресація пам'яті, тобто задання адреси пам'яті, з яким буде вироблятися обмін; - обробка переривань і режиму прямого доступу. Спрощено структуру мікропроцесора можна представити так (рис. 2.17).
Рис. 2.17. Внутрішня структура мікропроцесора. Основні функції вузлів такі. Схема керування вибіркою команд виконує читання команд із пам'яті і їх дешифрування. У перших мікропроцесорах було неможливо одночасне виконання попередньої команди і вибірка наступної команди, тому що процесор не міг сполучати ці операції. Але вже в 16-розрядних процесорах з'являється конвеєр команд, що дозволяє вибирати кілька наступних команд, поки виконується попередня. Два процеси йдуть паралельно, що прискорює роботу процесора. Конвеєр являє собою невелику внутрішню пам'ять процесора, у яку при найменшій можливості (при звільненні зовнішньої шини) записується кілька команд, що виконуються за виконуваною. Читаються ці команди процесором у тому ж порядку, що і записуються в конвеєр (це пам'ять типу FIFO, First In - First Out, перший увійшов - перший вийшов). Правда, якщо виконувана команда припускає перехід не на наступну комірку пам'яті, а на віддалену (з меншою або більшою адресою), конвеєр не допомагає, і його доводиться скидати. Але такі команди зустрічаються в програмах порівняно рідко. Розвитком ідеї конвеєра стало використання внутрішньої кеш-пам'яті процесора, що заповнюється командами, поки процесор зайнятий виконанням попередніх команд. Чим більший обсяг кеш-пам'яті, тим менша ймовірність того, що її вміст прийдеться скинути при команді переходу. Зрозуміло, що обробляти команди, що перебувають у внутрішній пам'яті, процесор може набагато швидше, ніж ті, які розташовані в зовнішній пам'яті. У кеш-пам'яті можуть зберігатися і дані, які обробляються в цей момент, це також прискорює роботу. Для більшого прискорення вибірки команд у сучасних процесорах застосовують сполучення вибірки і дешифрації, одночасну дешифрацію декількох команд, кілька паралельних конвеєрів команд, передбачення команд переходів і деякі інші методи. Арифметико-логічний пристрій (або АЛП, ALU) призначений для обробки інформації відповідно до отриманого процесора командою. Прикладами обробки можуть служити логічні операції (типу логічного "І", "АБО", "Виключаєче АБО" і т.д.) тобто побітні операції над операндами, а також арифметичні операції (додавання, віднімання, множення, ділення тощо). Над якими кодами проводиться операція, куди поміщаєтьься її результат - визначається виконуваною командою. Якщо команда зводиться всього лише до пересилання даних без їхньої обробки, то АЛП не бере участь у її виконанні. Швидкодія АЛП багато в чому визначає продуктивність процесора. Причому важливо не тільки частота тактового сигналу, яким тактується АЛП, але і кількість тактів, необхідне для виконання тої або іншої команди. Для підвищення продуктивності розроблювачі прагнуть довести час виконання команди до одного такту, а також забезпечити роботу АЛП на можливо більше високій частоті. Один зі шляхів розв’язання цієї задачі полягає в зменшенні кількості виконуваних АЛП команд, створення процесорів зі зменшеним набором команд (так звані RISC-процесори). Інший шлях підвищення продуктивності процесора - використання декількох паралельно працюючих АЛП. Що стосується операцій над числами із плаваючою крапкою і інших спеціальних складних операцій, то в системах на базі перших процесорів їх реалізували послідовністю більше простих команд, спеціальними підпрограмами, однак потім були розроблені спеціальні обчислювачі - математичні співпроцесори, які заміняли основний процесор на час виконання таких команд. У сучасних мікропроцесорах математичні співпроцесори входять у структуру як складова частина. Регістри процесора являють собою по суті осередку дуже швидкої пам'яті і служать для часового зберігання різних кодів: даних, адрес, службових кодів. Операції із цими кодами виконуються гранично швидко, тому, у загальному випадку, чим більше внутрішніх регістрів, тим краще. Крім того, на швидкодію процесора сильно впливає розрядність регістрів. Саме розрядність регістрів і АЛП називається внутрішньою розрядністю процесора, що може не збігатися із зовнішньою розрядністю. Стосовно призначення внутрішніх регістрів існує два основних підходи. Першого дотримується, наприклад, компанія Intel, що кожному регістру відводить строго певну функцію. З одного боку, це спрощує організацію процесора і зменшує час виконання команди, але з іншого боку - знижує гнучкість, а іноді і сповільнює роботу програми. Наприклад, деякі арифметичні операції і обмін із пристроями вводу/виводу проводяться тільки через один регістр - акумулятор, у результаті чого при виконанні деяких процедур може знадобитися кілька додаткових пересилань між регістрами. Другий підхід полягає в тому, щоб всі (або майже все) регістри зробити рівноправними, як , наприклад, в 16-розрядних процесорах Т-11 фірми DEC. При цьому досягається висока гнучкість, але необхідне ускладнення структури процесора. Існують і проміжні рішення, зокрема, у процесорі MC68000 фірми Motorola половина регістрів використовувалася для даних, і вони були взаємозамінні, а інша половина - для адрес, і вони також взаємозамінні. Регістр ознак (регістр стану) займає особливе місце, хоча він також є внутрішнім регістром процесора. Інформація, що міститься в ньому, - це не дані, не адреса, а слово стану процесора (ССП, PSW - Processor Status Word). Кожний біт цього слова (прапор) містить інформацію про результат попередньої команди. Наприклад, є біт нульового результату, що встановлюється в тому випадку, коли результат виконання попередньої команди - нуль, і очищається в тому випадку, коли результат виконання команди відмінний від нуля. Ці біти (прапори) використовуються командами умовних переходів, наприклад, командою переходу у випадку нульового результату. У цьому ж регістрі іноді містяться прапори керування, що визначають режим виконання деяких команд. Схема керування перериваннями обробляє запит переривання, визначає адресу початку програми обробки переривання (адреса вектора переривання), забезпечує перехід до цієї програми після виконання поточної команди і збереження в пам'яті (у стеці) поточного стану регістрів процесора. По закінченні програми обробки переривання процесор вертається до перерваної програми з відновленими з пам'яті (зі стека) значеннями внутрішніх регістрів. Докладніше про стеку буде розказано в наступному розділі. Схема керування прямим доступом до пам'яті служить для тимчасового відключення процесора від зовнішніх шин і припинення роботи процесора на час надання прямого доступу його пристрою, що запросив. Логіка керування організує взаємодію всіх вузлів процесора, перенаправляє дані, синхронізує роботу процесора із зовнішніми сигналами, а також реалізує процедури вводу і виводу інформації. Таким чином, у ході роботи процесора схема вибірки команд вибирає послідовно команди з пам'яті, потім ці команди виконуються, причому якщо буде потреба обробки даних підключається АЛП. На входи АЛП можуть подаватися оброблювані дані з пам'яті або із внутрішніх регістрів. У внутрішніх регістрах зберігаються також коди адрес оброблюваних даних, розташованих у пам'яті. Результат обробки в АЛП змінює стан регістра ознак і записується у внутрішній регістр або на згадку (як джерело, так і приймач даних вказується в складі коду команди). При необхідності інформація може переписуватися з пам'яті (або із пристрою вводу/виводу) у внутрішній регістр або із внутрішнього регістра в пам’ять (або в пристрій вводу/виводу). Внутрішні регістри будь-якого мікропроцесора обов'язково виконують дві службові функції: - визначають адреса в пам'яті, де перебуває виконувана в цей момент команда (функція лічильника команд або покажчика команд); - визначають поточна адреса стека (функція покажчика стека). У різних процесорах для кожної із цих функцій може приділятися один або два внутрішніх регістри. Ці два покажчики відрізняються від інших не тільки своїм специфічним, службовим, системним призначенням, але і особливим способом зміни вмісту. Їхній вміст програми можуть міняти тільки у випадку гострої потреби, тому що будь-яка помилка при цьому загрожує порушенням роботи комп'ютера, зависанням і псуванням умісту пам'яті. Вміст вказівника (лічильника) команд змінюється так. На початку роботи системи (при включенні живлення) у нього заноситься раз і назавжди встановлене значення. Це перша адреса програми початкового запуску. Потім після вибірки з пам'яті кожної наступної команди значення вказівника команд автоматично збільшується (інкремується) на одиницю (або на два залежно від формату команд і типу процесора). Тобто наступна команда буде вибиратися з наступної по порядку адреси пам'яті. При виконанні команд переходу, що порушують послідовний перебір адрес пам'яті, у вказівник команд примусово записується нове значення - нова адреса в пам'яті, починаючи з якого адреси команд знову ж будуть перебиратися послідовно. Така ж зміна вмісту вказівника команд проводиться при виклику підпрограми і поверненні з неї або при початку обробки переривання і після його закінчення. 2.4.2. Функції пам'яті Пам'ять мікропроцесорної системи виконує функцію тимчасового або постійного зберігання даних і команд. Об’єм пам'яті визначає допустиму складність виконуваних системою алгоритмів, а також до деякої міри і швидкість роботи системи в цілому. Інформація в пам'яті зберігається в комірках, кількість розрядів яких дорівнює кількості розрядів шини даних процесора. Звичайно вона кратна восьми. Допустима кількість комірок пам'яті визначається кількістю розрядів шини адреси як 2N, де N - кількість розрядів шини адреси. Найчастіше об’єм пам'яті виміряється в байтах незалежно від розрядності комірки пам'яті. Використовуються також наступні більші одиниці об'єму пам'яті: кілобайт - 210 або 1024 байта (позначається Кбайт), мегабайт - 220 або 1 048 576 байт (позначається Мбайт), гігабайт - 230 байт (позначається Гбайт), терабайт - 240 (позначається Тбайт) Наприклад, якщо пам'ять має 65 536 комірок, кожна з яких 16-розрядна, то говорять, що пам'ять має обсяг 128 Кбайт. Сукупність комірок пам'яті називається простором пам'яті системи. Для підключення модуля пам'яті до системної магістралі використовуються блоки спряження, які містять у собі дешифратор (селектор) адреси, схему обробки керуючих сигналів магістралі і буфери даних (рис. 2.18). Оперативна пам'ять спілкується із системною магістраллю в циклах читання і записи, постійна пам'ять - тільки в циклах читання. Звичайно в складі системи є кілька модулів пам'яті, кожний з яких працює у своїй області простору пам'яті. Селектор адреси саме і визначає, яка область адрес простору пам'яті відведена даному модулю пам'яті. Схема керування виробляє в потрібні моменти сигнали дозволу роботи пам'яті (CS) і сигнали дозволу запису в пам’ять (WR). Буфери даних передають дані від пам'яті до магістралі або від магістралі до пам'яті. У просторі пам'яті мікропроцесорної системи звичайно виділяються кілька особливих областей, які виконують спеціальні функції. Пам'ять програми початкового запуску завжди виконується на ПЗП або флеш-пам’яті. Саме із цієї області процесор починає роботу після включення живлення і після скидання його за допомогою сигналу RESET.
Рис. 2.18. Структура модуля пам'яті. Пам'ять для стека або стек (Stack) - це частина оперативної пам'яті, призначена для тимчасового зберігання даних у режимі LIFO (Last In - First Out). Особливість стека в порівнянні з іншою оперативною пам'яттю - це заданий і незмінний спосіб адресації. При записі будь-якого числа (коду) у стек число записується за адресою, обумовленому як вміст регістра вказівника стека, попередньо зменшене (декрементоване) на одиницю (або на два, якщо 16-розрядні слова розташовані в пам'яті по парних адресах). При читанні зі стека число читається з адреси, що визначається вмістом вказівника стека, після чого цей вміст вказівника стека збільшується (інкрементується) на одиницю (або на два). У результаті виходить, що число, записане останнім, буде прочитано першим, а число, записане першим, буде прочитано останнім. Така пам'ять називається LIFO або пам'яттю магазинного типу (наприклад, у магазині автомата патрон, установлений останнім, буде витягнутий першим). Принцип дії стека наведений на рис. 2.19 (адреси комірок пам'яті обрані умовно). Нехай, наприклад, що біжучий стан вказівника стека 1000008, і в нього треба записати два числа (слова). Перше слово буде записано за адресою 1000006 (перед записом вказівник стека зменшиться на два). Друге - за адресою 1000004. Після запису вміст вказівника стека - 1000004. Якщо потім прочитати зі стека два слова, то першим буде прочитане слово з адреси 1000004, а після читання вказівник стека стане рівним 1000006. Другим буде прочитане слово з адреси 1000006, а вказівник стека стане рівним 1000008. Усе повернулося до вихідного стану. Перше записане слово читається другим, а друге - першим.
Рис. 2.19. Принцип роботи стека. Необхідність такої адресації стає очевидною у випадку багаторазово вкладених підпрограм. Нехай, наприклад, виконується основна програма, і з неї викликається підпрограма 1. Якщо нам треба зберегти значення даних і внутрішніх регістрів основної програми на час виконання підпрограми, ми перед викликом підпрограми збережемо їх у стеці (запишемо в стек), а після її закінчення витягнемо (прочитаємо) їх зі стека. Якщо ж з підпрограми 1 викликається підпрограма 2, то ту ж саму операцію ми проробимо з даними і вмістом внутрішніх регістрів підпрограми 1. Зрозуміло, що усередині підпрограми 2 крайніми в стеці (читаються в першу чергу) будуть дані з підпрограми 1, а дані з основної програми будуть глибше. При цьому у випадку читання зі стека автоматично буде дотримуватися потрібний порядок інформації, що читається. Те ж саме буде і у випадку, коли таких рівнів вкладення підпрограм набагато більше. Тобто те, що треба зберігати подовше, ховається поглибше, а те, що незабаром може знадобитися - скраю. У системі команд будь-якого процесора для обміну інформацією зі стеком передбачені спеціальні команди запису в стек (PUSH) і читання зі стека (POP). У стеці можна ховати не тільки вміст всіх внутрішніх регістрів процесорів, але і вміст регістра ознак (слово стану процесора, PSW). Це дозволяє, наприклад, при поверненні з підпрограми контролювати результат останньої команди, виконаної безпосередньо перед викликом цієї підпрограми. Можна також зберігати в стеці і дані, для того щоб зручніше було передавати їх між програмами і підпрограмами. У загальному випадку, чим більша область пам'яті, відведена під стек, тим більше волі в програміста і тим більше складні програми можуть виконуватися. Наступна спеціальна область пам'яті - це таблиця векторів переривань. Взагалі, поняття переривання досить багатозначне. Під перериванням у загальному випадку розуміється не тільки обслуговування запиту зовнішнього пристрою, але і будь-яке порушення послідовної роботи процесора. Наприклад, може бути передбачене переривання за фактом некоректного виконання арифметичної операції типу ділення на нуль. Або ж переривання може бути програмним, коли в програмі використовується команда переходу на якусь підпрограму, з якої потім піде повернення в основну програму. В останньому випадку спільне із істинним перериванням тільки те, як здійснюється перехід на підпрограму і повернення з її. Будь-яке переривання обробляється через таблицю векторів (покажчиків) переривань. У цій таблиці в найпростішому випадку перебувають адреси початку програм обробки переривань, які і називаються векторами. Довжина таблиці може бути досить великою (до кількох сотень елементів). Звичайно таблиця векторів переривань розташовується на початку простору пам'яті (у комірках пам'яті з малими адресами). Адреса кожного вектора (або адреса початкового елемента кожного вектора) являє собою номер переривання. У випадку апаратних переривань номер переривання або задається пристроєм, що запросив переривання (при векторних перериваннях), або ж задається номером лінії запиту переривань (при радіальних перериваннях). Процесор, одержавши апаратне переривання, закінчує виконання поточної команди і звертається до пам'яті в область таблиці векторів переривань, у той її рядок, що визначається номером запитаного переривання. Потім процесор читає вміст цього рядка (код вектора переривання) і переходить на адресу пам'яті, що задається цим вектором. Починаючи із цієї адреси в пам'яті повинна розташовуватися програма обробки переривання з даним номером. Наприкінці програми обробки переривань обов'язково повинна розташовуватися команда виходу з переривання, виконавши яку, процесор вертається до виконання перерваної основної програми. Параметри процесора на час виконання програми обробки переривання зберігаються в стеці. Нехай, наприклад, процесор (рис.2.20) виконував основну програму і команду, що знаходиться за адресою пам'яті 5000 (умовно). У цей момент він одержав запит переривання з номером (адресою вектора) 4. Процесор закінчує виконання команди з адреси 5000. Потім він зберігає в стеці поточне значення лічильника команд (5001) і поточне значення PSW. Після цього процесор читає з адреси 4 пам'яті код вектора переривання. Нехай цей код дорівнює 6000. Процесор переходить на адресу пам'яті 6000 і приступає до виконання програми обробки переривання, що починається із цієї адреси. Нехай ця програма закінчується в адресі 6100. Дійшовши до цієї адреси, процесор вертається до виконання перерваної програми. Для цього він витягає зі стека значення адреси (5001), на якому його перервали, і бувше в той момент PSW. Потім процесор читає команду з адреси 5001 і далі послідовно виконує команди основної програми.
Рис. 2.20. Спрощений алгоритм обробки переривання. Переривання у випадку аварійної ситуації обробляється точно так само, тільки адреса вектора переривання (номер рядка в таблиці векторів) жорстко прив'язаний до даного типу аварійної ситуації. Програмне переривання теж обслуговується через таблицю векторів переривань, але номер переривання вказується в складі команди, що викликає переривання. Така складна, на перший погляд, організація переривань дозволяє програмістові легко міняти програми обробки переривань, розташовувати їх у будь-якій області пам'яті, робити їх будь-якого розміру і будь-якої складності. Під час виконання програми обробки переривання може надійти новий запит на переривання. У цьому випадку він обробляється точно так само, як описано, але основною програмою вважається перервана програма обробки попереднього переривання. Це називається багаторазовим вкладенням переривань. Механізм стека дозволяє без проблем обслуговувати це багаторазове вкладення, тому що першим зі стека витягає той код, що був збережений останнім, тобто повернення з обробки даного переривання відбувається в програму обробки попереднього переривання. Відзначимо, що в більш складних випадках у таблиці векторів переривань можуть перебувати не адреси початку програм обробки переривань, а так звані дескриптори (описувачі) переривань. Але кінцевим результатом обробки цього дескриптора однаково буде адреса початку програми обробки переривань. Нарешті, ще одна спеціальна область пам'яті мікропроцесорної системи - це пам'ять пристроїв, підключених до системної шини. Таке зустрічається нечасто, але іноді воно дуже зручне. Тобто процесор одержує можливість звертатися до внутрішньої пам'яті пристроїв вводу/виводу або якихось ще підключених до системної шини пристроїв, як до своєї власної системної пам'яті. Звичайне вікно в просторі пам'яті, що виділяється для цього, не занадто велике. Всі інші частини простору пам'яті, як правило, мають універсальне призначення. У них можуть розташовуватися як дані, так і програми (звичайно, у випадку одношинної архітектури). Іноді цей простір пам'яті використовується як єдине ціле, без усяких границь. А іноді простір пам'яті ділиться на сегменти із програмно змінюваною адресою початку сегмента і із установленим розміром сегмента. Обидва підходи мають свої плюси і мінуси. Наприклад, використання сегментів дозволяє захистити область програм або даних, але зате границі сегментів можуть утрудняти розміщення більших програм і масивів даних. На закінчення зупинимося на проблемі розподілу адрес пам'яті і адрес пристроїв вводу/виводу. Існує два основних підходи до розв’язання цієї проблеми: - виділення в загальному адресному просторі системи спеціальної області адрес для пристроїв вводу/виводу; - повний розподіл адресних просторів пам'яті і пристроїв вводу/виводу. Перший підхід гарний тим, що при звертанні до пристроїв вводу/виводу процесор може використовувати ті ж команди, які служать для взаємодії з пам'яттю. Але адресний простір пам'яті повинен бути зменшений на величину адресного простору пристроїв вводу/виводу. Наприклад, при 16-розрядній шині адреси всього може бути 64К адрес. З них 56К адрес виділяється під адресний простір пам'яті, а 8К адрес - під адресний простір пристроїв вводу/виводу. Перевага другого підходу полягає в тому, що пам'ять займає весь адресний простір мікропроцесорної системи. Для спілкування із пристроями вводу/виводу застосовуються спеціальні команди і спеціальні строби обміну на магістралі. Саме так зроблено, наприклад, у персональних комп'ютерах. Але можливості взаємодії із пристроями вводу/виводу в цьому випадку істотно обмежені в порівнянні з можливостями спілкування з пам'яттю. 2.4.3. Функції пристроїв вводу/виводу Пристрою вводу/виводу обмінюються інформацією з магістраллю за тими ж принципами, що і пам'ять. Найбільш істотна відмінність із погляду організації обміну полягає в тому, що модуль пам'яті має в адресному просторі системи багато адрес (до декількох десятків мільйонів), а пристрій вводу/виводу звичайно має небагато адрес (звичайно до десяти), а іноді і усього одну адреса. Але модулі пам'яті системи обмінюються інформацією тільки з магістраллю, із процесором, а пристрої вводу/виводу взаємодіють ще і із зовнішніми пристроями, цифровими або аналоговими. Тому розмаїтість пристроїв вводу/виводу незмірно більша, ніж модулів пам'яті. Часто використовуються ще і інші назви для пристроїв вводу/виводу: пристрої спряження, контролери, карти розширення, інтерфейсні модулі і т.д. Об’єднують всі пристрої вводу/виводу загальні принципи обміну з магістраллю і, відповідно, загальні принципи організації вузлів, які здійснюють спряження з магістраллю. Спрощена структура пристрою вводу/виводу (точніше, його інтерфейсної частини) наведена на рис. 2.21. Як і у випадку модуля пам'яті, вона обов'язково містить схему селектора адреси, схему керування для обробки стробів обміну і буфери даних. Найпростіші пристрої вводу/виводу видають на зовнішній пристрій код даних у паралельному форматі і приймають із зовнішнього пристрою код даних у паралельному форматі. Такі пристрої вводу/виводу часто називають паралельними портами вводу/виводу. Вони найбільш універсальні, тобто задовольняють потреби спряження з більшим числом зовнішніх пристроїв, тому їх часто вводять до складу мікропроцесорної системи як стандартні пристрої. Паралельні порти звичайно є в складі мікроконтролерів. Саме через паралельні порти мікроконтролер зв'язується із зовнішнім миром. Вхідний порт (порт вводу) у найпростішому випадку являє собою паралельний регістр, у який процесор може записувати інформацію. Вихідний порт (порт виводу) звичайно є односпрямованим буфером, через який процесор може читати інформацію від зовнішнього пристрою. Саме такі порти показані для прикладу на рис. 2.21. Порт може бути і двонаправленим (вхідним/вихідним). У цьому випадку процесор пише інформацію в зовнішній пристрій і читає інформацію із зовнішнього пристрою по тому самому адресі в адресному просторі системи. Вхідні і вихідні лінії для зв'язку із зовнішнім пристроєм при цьому можуть бути об'єднані порозрядно, утворюючи двохнаправлені лінії.
Рис. 2.21. Структура найпростішого пристрою вводу/виводу. При звертанні з боку магістралі селектор адреси розпізнає адресу, приписана даному пристрою вводу/виводу. Схема керування видає внутрішні строби обміну у відповідь на магістральні строби обміну. Вхідний буфер даних забезпечує електричне узгодження шини даних із цим пристроєм (буфер може і бути відсутнім). Дані із шини даних записуються в регістр по сигналу С і видаються на зовнішній пристрій. Вихідний буфер даних передає вхідні дані із зовнішнього пристрою на шину дані магістралі в циклі читання з порту. Складніші пристрої вводу/виводу (пристрої спряження) мають у своєму складі внутрішню буферну оперативну пам'ять і навіть можуть мати мікроконтролер, на який покладене виконання функцій обміну із зовнішнім пристроєм. Кожному пристрою вводу/виводу відводиться своя адреса в адресному просторі мікропроцесорної системи. Дублювання адрес повинне бути виключене, за цим повинні стежити розроблювач і користувач мікропроцесорної системи. Пристрої вводу/виводу крім програмного обміну можуть також підтримувати режим обміну по перериваннях. У цьому випадку вони перетворять сигнал запиту на переривання від зовнішнього пристрою на сигнал запиту переривання, необхідний для даної магістралі (або в послідовність сигналів при векторному перериванні). Якщо потрібно використовувати режим ПДП, пристрій вводу/виводу повинен видати сигнал запиту ПДП на магістраль і забезпечити роботу в циклах ПДП, прийнятих для даної магістралі. У складі мікропроцесорних систем, як правило, виділяються три спеціальні групи пристроїв вводу/виводу: - пристрої інтерфейсу користувача (вводу інформації користувачем і виводу інформації для користувача); - пристрої вводу/виводу для тривалого зберігання інформації; - таймерні пристрої. До пристроїв вводу для інтерфейсу користувача відносяться контролери клавіатури, тумблерів, окремих кнопок, миші, трекболи, джойстика і т.д. До пристроїв виводу для інтерфейсу користувача відносяться контролери світлодіодних індикаторів, табло, рідиннокристалічних, плазменних і електронно-променевих екранів і т.д. У найпростіших випадках керуючих контролерів або мікроконтролерів ці засоби можуть бути відсутнімі. У складних мікропроцесорних системах вони є обов'язково. Роль зовнішнього пристрою в цьому випадку грає людина. Пристрої вводу/виводу для тривалого зберігання інформації забезпечують спряження мікропроцесорної системи з дисководами (компакт-дисків або магнітних дисків), а також з накопичувачами на магнітній стрічці. Застосування таких пристроїв істотно збільшує можливості мікропроцесорної системи відносно зберігання виконуваних програм і нагромадження масивів даних. У найпростіших контролерах ці пристрої відсутні. Таймерні пристрої відрізняються від інших пристроїв вводу/виводу тим, що вони можуть не мати зовнішніх виводів для підключення до зовнішніх пристроїв. Ці пристрої призначені для того, щоб мікропроцесорна система могла витримувати задані часові інтервали, стежити за реальним часом, рахувати імпульси і т.д. В основі будь-якого таймера лежить кварцовий тактовий генератор і багаторозрядні двійкові лічильники, які можуть перезапускати один одного. Процесор може записувати в таймер коефіцієнти ділення тактової частоти, кількість відлічуваних імпульсів, задавати режим роботи лічильників таймера, а читає процесор вихідні коди лічильників. У принципі виконати практично всі функції таймера можна і програмним шляхом, тому іноді таймери в системі відсутні. Але включення в систему таймера дозволяє вирішувати більше складні завдання і будувати більше ефективні алгоритми. Ще один важливий клас пристроїв вводу/виводу - це пристрої для підключення до інформаційних мереж (локальних і глобальних). Ці пристрої поширені не так широко, як пристрої трьох перерахованих раніше груп, але їхнє значення з кожним роком стає усе більше. Зараз засоби зв'язку з інформаційними мережами вводяться іноді навіть у прості контролери. Іноді пристрої вводу/виводу забезпечують спряження із зовнішніми пристроями за допомогою аналогових сигналів. Це буває дуже зручно, тому до складу деяких мікроконтролерів навіть вводять внутрішні ЦАП і АЦП.
Розділ 3. Функціонування процесора 3.4. Швидкодія процесора Швидкодія процесора залежить від множини факторів, що утрудняє порівняння швидкодії навіть різних процесорів усередині одного сімейства, не говорячи вже про процесори різних фірм і різного призначення. Найважливіші фактори, що впливають на швидкодію процесора. 1. Насамперед, швидкодія залежить від тактової частоти процесора. Всі операції усередині процесора виконуються синхронно, тактуютmся єдиним тактовим сигналом. Однак треба враховувати, що різні процесори виконують однакові команди за різну кількість тактів, причому кількість тактів, затрачуваних на команду, може змінюватися від одного такту до десятків або навіть сотень. У деяких процесорах за рахунок розпаралелення мікрооперацій на команду витрачається навіть менше одного такту. Кількість тактів, затрачуваних на виконання команди, залежить від складності цієї команди і від методів адресації операндів. Наприклад, швидше всього (за менше число тактів) виконуються команди пересилання даних між внутрішніми регістрами процесора. Повільніше всього (за велику кількість тактів) виконуються складні арифметичні команди із плаваючою комою, операнди яким зберігаються в пам'яті. Спочатку для кількісної оцінки продуктивності процесорів застосовувалася одиниця виміру MIPS (Mega Instruction Per Second), що відповідала кількості мільйонів виконуваних інструкцій (команд) за секунду. Природно, виготовлювачі мікропроцесорів намагалися орієнтуватися на найшвидші команди. Зрозуміло, що подібний показник не занадто вдалий. Для виміру продуктивності при виконанні обчислень із плаваючої коми (крапкою) трохи пізніше була запропонована одиниця FLOPS (Floating point Operations Per Second), але вона по визначенню вузькоспеціальна, тому що в деяких системах операції із плаваючої коми просто не використовуються. Час виконання команд - важливий, але далеко не єдиний фактор, що визначає швидкодія. Велике значення має також структура системи команд процесора. Наприклад, деяким процесорам для виконання якоїсь операції знадобиться одна команда, а іншим процесорам - кілька команд. Якісь процесори мають систему команд, що дозволяє швидко вирішувати завдання одного типу, а якісь - завдання іншого типу. Важливі і методи адресації, дозволені в даному процесорі, і наявність сегментування пам'яті, і способи взаємодії процесора із пристроями вводу/виводу і т.д. Істотно впливає на швидкодію системи в цілому і те, як процесор "спілкується" з пам'яттю команд і пам'яттю даних, чи застосовується сполучення вибірки команд із пам'яті з виконанням раніше обраних команд. Швидкодія системи в цілому визначається також і розрядністю процесора. При високій складності розв'язуваних задач швидкодія системи залежить і від загального обсягу системної пам'яті. Адже якщо системної пам'яті мало, системі доводиться зберігати дані в зовнішній пам'яті (наприклад, на магнітному диску), а це дуже сильно (на кілька порядків) сповільнює роботу. Так що розрядність шини адреси процесора теж важливий. Тому кількісні показники продуктивності процесорів дуже умовні, вони лише побічно характеризують швидкодію системи на базі цього процесора. Проте, деякі виробники пропонують кількісні показники для своїх процесорів, які характеризують час виконання спеціально складених тестових програм, що містять всілякі команди в тих або інших співвідношеннях. Так, для порівняння продуктивності 32-розрядних процесорів фірма Intel, що робить процесори для персональних комп'ютерів, в 1992 році запропонувала свою одиницю виміру iCOMP Index (Intel COmparative Microprocessor Performance). Для обчислення цього показника використовується суміш 16- і 32-бітних цілочисельних команд, команд із плаваючою крапкою, команд обробки графіки і відео. У якості базового взятий процесор i486 SX-25, чий індекс прийнятий рівним 100. При цьому треба враховувати, що виміри проводяться в складі системи, настроєної на максимальну швидкодію саме даних процесорів, і тільки самою фірмою Intel. Цінність цих показників і всіх їм подібних не надто велика. Для конкретного комп'ютера і різних процесорів величина показника може надати цілком об'єктивні дані, що дозволяють оцінити, наприклад, доцільність заміни процесора на могутніший. Точна оцінка швидкодії процесора можлива тільки в складі конкретної системи при рішенні певного завдання. Але всі перераховані тут фактори можна і потрібно враховувати при виборі процесора. А кількісні показники допомагають зробити вибір. Розділ 4. Організація мікроконтролерів Лекція: Процесорне ядро і пам'ять мікроконтролерів 4.1. Класифікація і структура мікроконтролерів Всі ці прилади можна умовно розділити на три основних класи: - 8-розрядні МК для вбудованих додатків; - 16- і 32-розрядні МК; - цифрові сигнальні процесори (DSP). Найпоширенішим представником сімейства МК є 8-розрядні прилади, широко використовувані в промисловості, побутовій і комп'ютерній техніці. Вони пройшли у своєму розвитку шлях від найпростіших приладів з відносно слаборозвиненою периферією до сучасних багатофункціональних контролерів, що забезпечують реалізацію складних алгоритмів керування в реальному масштабі часу. Причиною життєздатності 8-розрядних МК є використання їх для керування реальними об'єктами, де застосовуються, в основному, алгоритми з перевагою логічних операцій, швидкість обробки яких практично не залежить від розрядності процесора. Росту популярності 8-розрядних МК сприяє постійне розширення номенклатури виробів, що випускаються такими відомими фірмами, як Motorola, Microchip, Intel, Zilog, Atmel і багатьма іншими. Сучасні 8-розрядні МК мають відмітні ознаки: - модульна організація, при якій на базі одного процесорного ядра (центрального процесора) проектується ряд (лінійка) МК, що розрізняються обсягом і типом пам'яті програм, обсягом пам'яті даних, набором периферійних модулів, частотою синхронізації; - використання закритої архітектури МК, що характеризується відсутністю ліній магістралей адреси і даних на виводах корпуса МК. Таким чином, МК являє собою закінчену систему обробки даних, нарощування можливостей якої з використанням паралельних магістралей адреси і даних не передбачається; - використання типових функціональних периферійних модулів (таймери, процесори подій, контролери послідовних інтерфейсів, аналого-цифрові перетворювачі і ін.), що мають незначні відмінності в алгоритмах роботи в МК різних виробників; - розширення кількості режимів роботи периферійних модулів, які задаються в процесі ініціалізації регістрів спеціальних функцій МК. При модульному принципі побудови всі МК одного сімейства містять процесорне ядро, однакове для всіх МК даного сімейства, і змінюваний функціональний блок, що відрізняє МК різних моделей. Структура модульного МК наведена на рис. 4.1. Процесорне ядро містить: - центральний процесор; - внутрішню контролерну магістраль (ВКМ) у складі шин адреси, даних і керування; схему синхронізації МК; - схему керування режимами роботи МК, включаючи підтримку режимів зниженого енергоспоживання, початкового запуску (скидання) і т.д. Змінюваний функціональний блок містить у собі модулі пам'яті різного типу і об’єму, порти вводу/виводу, модулі тактових генераторів (Г), таймери. У відносно простих МК модуль обробки переривань входить до складу процесорного ядра. У більше складних МК він являє собою окремий модуль із розвиненими можливостями. До складу змінюваного функціонального блоку можуть входити і такі додаткові модулі як компаратори напруги, аналого-цифрові перетворювачі (АЦП) і інші. Кожний модуль проектується для роботи в складі МК із урахуванням протоколу ВКМ. Даний підхід дозволяє створювати різноманітні за структурою МК у межах одного сімейства.
Рис. 4.1. Модульна організація МК. 4.2. Процесорне ядро мікроконтролера 4.2.1. Структура процесорного ядра МК Основними характеристиками, що визначають продуктивність процесорного ядра МК, є: - набір регістрів для зберігання проміжних даних; - система команд процесора; - способи адресації операндів у просторі пам'яті; - організація процесів вибірки і виконання команди. З погляду системи команд і способів адресації операндів процесорне ядро сучасних 8-розрядних МК реалізує один із двох принципів побудови процесорів: - процесори з CISC-архітектурою, що реалізують так звану повну систему команд (Complicated Instruction Set Computer); - процесори з RISC-архітектурою, що реалізують скорочену систему команд (Reduced Instruction Set Computer). CISC-процесори виконують великий набір команд із розвиненими можливостями адресації, даючи розроблювачеві можливість вибрати найбільш підходящу команду для виконання необхідної операції. У застосуванні до 8-розрядних МК процесор з CISC-архітектурою може мати однобайтовий, двобайтовий і трьохбайтовий (рідко четирьохбайтовий) формат команд. При цьому система команд, як правило, неортогональна, тобто не всі команди можуть використовувати будь-який зі способів адресації стосовно до кожного з регістрів процесора. Вибірка команди на виконання здійснюється побайтно протягом декількох циклів роботи МК. Час виконання команди може становити від 1 до 12 циклів. До МК із CISC-архітектурою ставляться МК фірми Intel з ядром MCS-51, які підтримуються в цей час цілим рядом виробників, МК сімейств НС05, НС08 і НС11 фірми Motorola і ряд інших. У процесорах з RISC-архітектурою набір команд, що виконуються, скорочений до мінімуму. Для реалізації більше складних операцій доводиться комбінувати команди. При цьому всі команди мають формат фіксованої довжини (наприклад, 12, 14 або 16 біт), вибірка команди з пам'яті і її виконання здійснюється за один цикл (такт) синхронізації. Система команд RISC-процесора припускає можливість рівноправного використання всіх регістрів процесора. Це забезпечує додаткову гнучкість при виконанні ряду операцій. ДО МК із RISC-Процесором ставляться МК AVR фірми Atmel, МК PIC16 і PIC17 фірми Microchip і інші. На перший погляд, МК із RISC-процесором повинні мати вищу продуктивність у порівнянні з CISC МК при одній і тій же тактовій частоті внутрішньої магістралі. Однак на практиці питання про продуктивність більше складне і неоднозначне. По-перше, оцінка продуктивності МК за часом виконання команд різних систем (RISC і CISC) не зовсім коректна. Звичайно продуктивність МП і МК прийнято оцінювати числом операцій пересилання " регістр-регістр", які можуть бути виконані протягом однієї секунди. У МК із CISC-процесором час виконання операції " регістр-регістр" є від 1 до 3 циклів, що, здавалося б, уступає продуктивності МК із RISC-процесором. Однак прагнення до скорочення формату команд при збереженні ортогональності системи команд RISC-процесора приводить до змушеного обмеження числа доступних в одній команді регістрів. Так, наприклад, системою команд МК PIC16 передбачена можливість пересилання результату операції тільки в один із двох регістрів - регістр-джерело операнда f або робочий регістр W. Таким чином, операція пересилання вмісту одного з доступних регістрів в іншій (не джерело операнда і не робочий) вимагає використання двох команд. Така необхідність часто виникає при пересиланні вмісту одного з регістрів загального призначення (РОН) в один з портів МК. У той же час, у системі команд більшості CISC-процесорів присутні команди пересилання вмісту РОН в один з портів вводу/виводу. Тобто більше складна система команд іноді дозволяє реалізувати більше ефективний спосіб виконання операції. По-друге, оцінка продуктивності МК по швидкості пересилання " регістр-регістр" не враховує особливостей конкретного реалізованого алгоритму керування. Так, при розробці швидкодіючих пристроїв автоматизованого керування основну увагу варто приділяти часу виконання операцій множення і ділення при реалізації рівнянь різних передатних функцій. А при реалізації пульта дистанційного керування побутовою технікою варто оцінювати час виконання логічних функцій, які використовуються при опитуванні клавіатури і генерації послідовної кодової посилки керування. Тому в критичних ситуаціях, що вимагають високої швидкодії, варто оцінювати продуктивність на множині тих операцій, які переважно використовуються в алгоритмі керування і мають обмеження за часом виконання. По-третє, необхідно ще враховувати, що зазначені в довідкових даних на МК частоти синхронізації звичайно відповідають частоті кварцового резонатора, що підключається, у той час як тривалість циклу центрального процесора визначається частотою обміну по ВКМ. Співвідношення цих частот індивідуально для кожного МК і повинне бути прийняте в розрахунок при порівнянні продуктивності різних моделей контролерів. З погляду організації процесів вибірки і виконання команди в сучасних 8-розрядних МК застосовується одна із двох уже згадуваних архітектур МПС: фон-неймановська (принстонська) або гарвардська. Основною особливістю фон-неймановськоъ архітектури є використання загальної пам'яті для зберігання програм і даних, як показано на рис.4.2.
Рис. 4.2. Структура МПС із фон-неймановською архітектурою. Основна перевага архітектури фон-Неймана - спрощення пристрою МПС, тому що реалізується звертання тільки до однієї загальної пам'яті. Крім того, використання єдиної області пам'яті дозволяло оперативно перерозподіляти ресурси між областями програм і даних, що істотно підвищувало гнучкість МПС із погляду розроблювача програмного забезпечення. Розміщення стека в загальній пам'яті полегшувало доступ до його вмісту. Невипадково тому фон-неймановська архітектура стала основною архітектурою універсальних комп'ютерів, включаючи персональні комп'ютери. Основною особливістю гарвардської архітектури є використання роздільних адресних просторів для зберігання команд і даних, як показано на рис. 4.3.
Рис. 4.3. Структура МПС із гарвардською архітектурою. Справа в тому, що, судячи з досвіду використання МПС для керування різними об'єктами, для реалізації більшості алгоритмів керування такі переваги фон-неймановської архітектури як гнучкість і універсальність не мають великого значення. Аналіз реальних програм керування показав, що необхідний обсяг пам'яті даних МК, використовуваний для зберігання проміжних результатів, як правило, на порядок менше необхідного обсягу пам'яті програм. У цих умовах використання єдиного адресного простору приводило до збільшення формату команд за рахунок збільшення числа розрядів для адресації операндів. Застосування окремої невеликої по обсязі пам'яті даних сприяло скороченню довжини команд і прискоренню пошуку інформації в пам'яті даних. Крім того, гарвардська архітектура забезпечує потенційно більше високу швидкість виконання програми в порівнянні з фон-неймановською за рахунок можливості реалізації паралельних операцій. Вибірка наступної команди може відбуватися одночасно з виконанням попередньої, і немає необхідності зупиняти процесор на час вибірки команди. Цей метод реалізації операцій дозволяє забезпечувати виконання різних команд за однакове число тактів, що дає можливість більш просто визначити час виконання циклів і критичних ділянок програми. Більшість виробників сучасних 8-розрядних МК використовують гарвардську архітектуру. Однак гарвардська архітектура є недостатньо гнучкою для реалізації деяких програмних процедур. Тому порівняння МК, виконаних за різними архітектурами, варто проводити стосовно до конкретного додатка. 4.2.2. Система команд процесора МК Так само, як і в будь-якій мікропроцесорній системі, набір команд процесора МК містить чотири основні групи команд: - команди пересилання даних; - арифметичні команди; - логічні команди; команди переходів. Для реалізації можливості незалежного керування розрядами портів (регістрів) у більшості сучасних МК передбачена також група команд бітового керування (булевий або бітовий процесор). Наявність команд бітового процесора дозволяє істотно скоротити обсяг коду керуючих програм і час їхнього виконання. У ряді МК виділяють також групу команд керування ресурсами контролера, використовувану для настроювання режимів роботи портів вводу/виводу, керування таймером і т.п. У більшості сучасних МК внутрішніх ресурсів контролера відображаються на пам'ять даних, тому для цілей керування ресурсами використовуються команди пересилання даних. Система команд МК у порівнянні із системою команд універсального МП має, як правило, менш розвинені групи арифметичних і логічних команд, зате могутніші групи команд пересилання даних і керування. Ця особливість зв'язана зі сферою застосування МК, що вимагає, насамперед, контролю навколишнього оточення і формування керуючих впливів. 4.2.3. Схема синхронізації МК Схема синхронізації МК забезпечує формування сигналів синхронізації, необхідних для виконання командних циклів центрального процесора, а також обміну інформацією із внутрішньої магістралі. Залежно від виконання центрального процесора командний цикл може містити в собі від одного до декількох (4 - 6) тактів синхронізації. Схема синхронізації формує також мітки часу, необхідні для роботи таймерів МК. До складу схеми синхронізації входять дільники частоти, які формують необхідні послідовності синхросигналов. 4.3. Пам'ять програм і даних МК У МК використовується три основних види пам'яті. Пам'ять програм є постійною пам'яттю (ПЗП), призначену для зберігання програмного коду (команд) і констант. Її вміст у ході виконання програми не змінюється. Пам'ять даних (ОЗП) призначена для зберігання змінних у процесі виконання програми. Регістри МК - цей вид пам'яті містить у собі внутрішні регістри процесора і регістри, які служать для керування периферійними пристроями (регістри спеціальних функцій). 4.3.1. Пам'ять програм Основною властивістю пам'яті програм є її енергонезалежність, тобто можливість зберігання програми при відсутності живлення. З погляду користувачів МК варто розрізняти наступні типи енергонезалежної пам'яті програм: ПЗП масочного типу - mask-ROM, ПЗП, програмовані користувачем, з ультрафіолетовим стиранням - EPROM (Erasable Programmable ROM), ПЗП, однократно програмувальні користувачем, - OTPROM ( One-Time Programmable ROM), ПЗП, програмувальні користувачем, з електричним стиранням - EEPROM (Electrically Erasable Programmable ROM), Flash-ПЗП. Функціонально Flash-пам'ять мало відрізняється від EEPROM. Основне розходження - в способі стирання записаної інформації. У пам'яті EEPROM стирання виробляється окремо для кожної комірки, а в Flash стирати можна тільки цілими блоками. 4.3.2. Пам'ять даних Пам'ять даних МК виконується, як правило, на основі статичного ОЗП. Термін "статичне" означає, що вміст комірок ОЗП зберігається при зниженні тактової частоти МК до як завгодно малих значень (з метою зниження енергоспоживання). Більшість МК мають такий параметр, як "напруга зберігання інформації" - USTANDBY. При зниженні напруги живлення нижче мінімально припустимого рівня UDDMIN, але вище рівня USTANDBY робота програми МК виконуватися не буде, але інформація в ОЗП зберігається. При відновленні напруги живлення можна буде скинути МК і продовжити виконання програми без втрати даних. Рівень напруги зберігання становить звичайно близько 1 В, що дозволяє якщо буде потреба перевести МК на живлення від автономного джерела (батареї) і зберегти в цьому режимі дані ОЗП. Обсяг пам'яті даних МК, як правило, невеликий і становить звичайно десятки і сотні байт. Це обставина необхідно враховувати при розробці програм для МК. Так, при програмуванні МК константи, якщо можливо, не зберігаються як змінні, а заносяться в ПЗП програм. 4.3.3. Регістри МК Як і всі МПС, МК мають набір регістрів, які використовуються для керування його ресурсами. У число цих регістрів входять звичайно регістри процесора (акумулятор, регістри стану, індексні регістри), регістри керування (регістри керування перериваннями, таймером), регістри, що забезпечують ввід/вивід даних (регістри даних портів, регістри керування паралельним, послідовним або аналоговим вводом/виводом). Звертання до цих регістрів може проводитись по-різному. У МК із RISC-процесором всі регістри (часто і акумулятор) розташовуються по адресах, що задаються явно. Це забезпечує більше високу гнучкість при роботі процесора. Одним з важливих питань є розміщення регістрів в адресному просторі МК. У деяких МК всі регістри і пам'ять даних розташовуються в одному адресному просторі. Це означає, що пам'ять даних сполучена з регістрами. Такий підхід називається "відображенням ресурсів МК на пам'ять". В інших МК адресний простір пристроїв вводу/виводу відділено від загального простору пам'яті. Окремий простір вводу/виводу дає деяка перевага процесорам з гарвардською архітектурою, забезпечуючи можливість зчитувати команду під час звертання до регістра вводу/виводу. 4.3.4. Стек МК У мікроконтролерах ОЗП даних використовується також для організації виклику підпрограм і обробки переривань. При цих операціях вміст програмного лічильника і основних регістрів (акумулятор, регістр стану і інші) зберігається і потім відновлюється при поверненні до основної програми. У фон-неймановській архітектурі єдина область пам'яті використовується, у тому числі, і для реалізації стека. При цьому знижується продуктивність пристрою, тому що одночасний доступ до різних видів пам'яті неможливий. Зокрема, при виконанні команди виклику підпрограми наступна команда вибирається після того, як у стек буде поміщений вміст програмного лічильника. У гарвардській архітектурі стекові операції виробляються в спеціально виділеній для цієї мети пам'яті. Це означає, що при виконанні програми виклику підпрограм процесор з гарвардською архітектурою робить кілька дій одночасно. Необхідно пам'ятати, що МК обох архітектур мають обмежену ємність пам'яті для зберігання даних. Якщо в процесорі є окремий стек і об’єм записаних у нього даних перевищує його ємність, то відбувається циклічна зміна вмісту вказівника стека, і він починає посилатися на раніше заповнений комірку стека. Це означає, що після занадто великої кількості викликів підпрограм у стеці виявиться неправильна адреса повернення. Якщо МК використовує загальну область пам'яті для розміщення даних і стека, то існує небезпека, що при переповненні стека відбудеться запис в область даних або буде зроблена спроба запису даних, що завантажуються в стек, в область ПЗП. 4.3.5. Зовнішня пам'ять Якщо МК містить спеціальні апаратні засоби для підключення зовнішньої пам'яті, то ця операція виробляється штатним способом (як для МП). Другий, більше універсальний, спосіб полягає в тому, щоб використовувати порти вводу/виводу для підключення зовнішньої пам'яті і реалізувати звертання до пам'яті програмними засобами. Такий спосіб дозволяє задіяти прості пристрої вводу/виводу без реалізації складних шинних інтерфейсів, однак приводить до зниження швидкодії системи при звертанні до зовнішньої пам'яті. 7. Лекція: Організація зв'язку мікроконтролера із зовнішнім середовищем і часом 4.4. Порти вводу/виводу Кожний МК має деяка кількість ліній вводу/виводу, які об'єднані в багаторозрядні (частіше 8-розрядні) паралельні порти вводу/виводу. В пам'яті МК кожному порту вводу/виводу відповідає своя адреса регістра даних. Звертання до регістра даних порту вводу/виводу виробляється тими ж командами, що і звертання до пам'яті даних. Крім того, у багатьох МК окремі розряди портів можуть бути опитані або встановлені командами бітового процесора. Залежно від реалізованих функцій розрізняють наступні типи паралельних портів: - односпрямовані порти, призначені тільки для вводу або тільки для виводу інформації; - двонаправлені порти, напрямок передачі яких (вводу або вивід) визначається в процесі ініціалізації МК; - порти з альтернативною функцією (мультиплексовані порти). Окремі лінії цих портів використовуються спільно з вбудованими периферійними пристроями МК, такими як таймери, АЦП, контролери послідовних інтерфейсів; - порти із програмно керованою схемотехнікою вхідного/вихідного буфера. Порти виконують роль пристроїв тимчасового узгодження функціонування МК і об'єкта керування, які в загальному випадку працюють асинхронно. Розрізняють три типи алгоритмів обміну інформацією між МК і зовнішнім пристроєм через паралельні порти вводу/виводу: - режим простого програмного вводу/виводу; - режим вводу/виводу з стробуванням; - режим вводу/виводу з повним набором сигналів підтвердження обміну. Типова схема двонаправленого порту вводу/виводу МК наведена на рис. 4.4.
Рис. 4.4. Типова схема двонаправленого порту вводу/виводу МК. Тригер керування дозволяє вивід даних на зовнішній вивід. В сучасних МК, як правило, забезпечується індивідуальний доступ до тригерів даних і керування, що дозволяє використовувати кожну лінію незалежно в режимі вводу або виводу. Необхідно звернути особливу увагу на те, що при введенні даних зчитується значення сигналу, що надходить на зовнішній вивід, а не вміст тригера даних. Якщо до зовнішнього виводу МК підключені виходи інших пристроїв, то вони можуть установити свій рівень вихідного сигналу, що і буде зчитаний замість очікуваного значення тригера даних. Іншим розповсюдженим варіантом схемотехнічної організації порту вводу/виводу є вивід з "відкритим джерелом" ("квазідвонаправленим"). Така організація виводу дозволяє створювати шини з об'єднанням пристроїв за схемою "монтажне І". 4.5. Таймери і процесори подій Більшість задач керування, які реалізуються за допомогою МК, вимагають виконання їх у реальному часі. Під цим розуміється здатність системи одержати інформацію про стан керованого об'єкта, виконати необхідні розрахункові процедури і видати керуючі впливи протягом інтервалу часу, достатнього для бажаної зміни стану об'єкта. Покладати функції формування керування в реальному масштабі часу тільки на центральний процесор неефективно, тому що це займає ресурси, необхідні для розрахункових процедур. Тому в більшості сучасних МК використовується апаратна підтримка роботи в реальному часі з використанням таймера (таймерів). Модулі таймерів служать для прийому інформації про час настання тих або інших подій від зовнішніх датчиків подій, а також для формування керуючих впливів у часі. Модуль таймера 8-розрядного МК являє собою 8-ми або 16-розрядний лічильник зі схемою керування. Схемотехнікою МК звичайно передбачається можливість використання таймера в режимі лічильника зовнішніх подій, тому його часто називають таймером/лічильником. Структура типового 16-розрядного таймера/лічильника в складі МК наведена на рис. 4.5.
Рис. 4.5. Структура модуля таймера/лічильника. У пам'яті МК 16-розрядний лічильник відображається двома регістрами: TH - старший байт лічильника, TL - молодший байт. Регістри доступні для читання і для запису. Напрямок рахунку - тільки прямий, тобто при надходженні вхідних імпульсів вміст лічильника інкрементується. Залежно від настроювання лічильник може використовувати одне із джерел вхідних сигналів: - імпульсну послідовність із виходу керованого дільника частоти fBUS; - сигнали зовнішніх подій, що надходять на вхід TOCKI контролера. У першому випадку говорять, що лічильник працює в режимі таймера, у другому - у режимі лічильника подій. При переповненні лічильника встановлюється в "одиницю" тригер переповнення TF, що генерує запит на переривання, якщо переривання від таймера дозволені. Пуск і останов таймера можуть здійснюватися тільки під управлінням програми. Програмним способом можна також установити старший і молодший біти лічильника в довільний стан або прочитати поточний код лічильника. Розглянутий "класичний" модуль таймера/лічильника широко застосовується в різних моделях щодо простих МК. Він може використовуватися для виміру часових інтервалів і формування послідовності імпульсів. Основними недоліками "класичного" таймера/лічильника є: - втрати часу на виконання команд пуску і останова таймера, що приводять до появи помилки при вимірі часових інтервалів і обмежуючу мінімальну тривалість вимірюваних інтервалів часу одиницями мс; - складності при формуванні часових інтервалів (міток часу), відмінних від періоду повного коефіцієнта рахунку, рівного (Kділ/fBUS) · 216; - неможливість одночасного обслуговування (вимірювання або формування імпульсного сигналу) відразу декількох каналів. Перші із двох перерахованих недоліків були усунуті в удосконаленому модулі таймера/лічильника, використовуваному в МК сімейства MCS-51 (Intel). Додаткова логіка лічильного входу дозволяє тактовим імпульсам надходити на вхід лічильника, якщо рівень сигналу на одній з ліній вводу дорівнює "1". Таке рішення підвищує точність вимірювання часових інтервалів, тому що пуск і останов таймера виробляється апаратно. Також в удосконаленому таймері реалізований режим перезавантаження лічильника довільним кодом у момент переповнення. Це дозволяє формувати часові послідовності з періодом, відмінним від періоду повного коефіцієнта обчислення. Однак ці вдосконалення не усувають головного недоліку модуля "класичного" таймера - одноканального режиму роботи. Удосконалювання підсистеми реального часу МК ведеться по наступних напрямках: - збільшення числа модулів таймерів/лічильників. Цей шлях характерний для фірм, що випускають МК зі структурою MCS-51, а також для МК компаній Mitsubishi і Hitachi; - модифікація структури модуля таймера/лічильника, при якій збільшення числа каналів досягається не за рахунок збільшення числа лічильників, а за рахунок введення додаткових апаратних засобів вхідного захоплення (input capture - IC) і вихідного порівняння (output compare - OC). Такий підхід використовується, зокрема, у МК компанії Motorola. Принцип дії каналу вхідного захвата таймера/лічильника наведений на рис. 4.6.
Рис. 4.6. Структурна схема каналу вхідного захвата таймера. Схема детектора події "спостерігає" за рівнем напруги на одному із входів МК. Найчастіше це одна з ліній порту вводу/виводу. При зміні рівня логічного сигналу з "0" на "1" і навпаки виробляється строб запису, і поточний стан лічильника таймера записується в 16-розрядний регістр вхідного захвата. Описана дія в мікропроцесорній техніці називають подією захоплення. Передбачено можливість вибору типу сигналу на вході, і це сприймається як подія: - позитивний (передній) фронт сигналу; - негативний (задній) фронт сигналу; - будь-яка зміна логічного рівня сигналу. Вибір типу події захвата встановлюється в процесі ініціалізації таймера і може неодноразово змінюватися в ході виконання програми. Кожна подія захвата приводить до установки в "1" тригера вхідного захвата і появі на його виході прапора (ознаки) вхідного захвата ICF. Стан тригера вхідного захвата може бути лічене програмно, а якщо переривання по події захвата дозволені - формується запит на переривання INT IC. Використання режиму вхідного захвата дозволяє виключити помилки вимірювання вхідного інтервалу часу, зв'язані з часом переходу до підпрограми обробки переривання, тому що копіювання поточного стану лічильника здійснюється апаратними, а не програмними засобами. Однак час переходу на підпрограму обробки переривання накладає обмеження на тривалість вимірюваного інтервалу часу, тому що передбачається, що друга подія захвата відбудеться пізніше, ніж код першої події буде зчитаний МК. Структура апаратних засобів каналу вихідного порівняння наведена на рис. 4.7. Цифровий компаратор безупинно порівнює поточний код лічильника таймера з кодом, що записаний в 16-розрядному регістрі вихідного порівняння. У момент рівності кодів на одному з виходів МК (Pxj на рис. 4.7) встановлюється заданий рівень логічного сигналу. Звичайно передбачено три типи зміни сигналу на виході Pxj у момент події вихідного порівняння: - установка високого логічного рівня; - установка низького логічного рівня; - інвертування сигналу на виході. При настанні події порівняння встановлюються в "1" тригер вихідного порівняння і відповідний йому ознака вихідного порівняння OCF. Аналогічно режиму вхідного захвата стан тригера вихідного порівняння може бути лічене програмно, а якщо переривання по події порівняння дозволені - формується запит на переривання INT OC. Режим вихідного порівняння призначений, насамперед, для формування часових інтервалів заданої тривалості. Тривалість сформованого часового інтервалу визначається тільки різницею кодів, що завантажуються послідовно в регістр вихідного порівняння, і не залежить від програмного забезпечення МК. Час, необхідний для запису нового значення коду в регістр каналу порівняння, обмежує мінімальну тривалість формованого часового інтервалу.
Рис. 4.7. Структурна схема каналу вихідного порівняння таймера. Модулі вдосконаленого таймера використовуються в складі МК у різних модифікаціях. При цьому число каналів вхідного захвату і вихідного порівняння в модулі може бути різним. Так, у МК сімейства HC05 фірми Motorola типовими рішеннями є модулі 1IC+1OC або 2IC+2OC, а модуль таймера в складі МК тільки один. В ряді модулів канали можуть бути довільно налаштовані на функцію вхідного захвата або вихідного порівняння за допомогою ініціалізації. Лічильник модуля вдосконаленого таймера може не мати функції програмного останова. У цьому випадку стан лічильника не можна синхронізувати з яким-небудь моментом роботи МК, і такий лічильник характеризується як що вільно рахуючий (free counter). Апаратні засоби вдосконаленого таймера дозволяють вирішити багато задач керування в реальному часі. Однак у міру росту складності алгоритмів керування чітко проявляються обмеження модулів удосконаленого таймера, а саме: - недостатнє число каналів захвата і порівняння, що належать одному лічильнику часової бази. Це не дозволяє сформувати синхронізовані між собою багатоканальні імпульсні послідовності; - однозначно певна конфігурація каналу (або захват або порівняння) часто не задовольняє потреби розв'язуваного задачі; - формування сигналів по методу широтно-імпульсної модуляції (ШИМ) вимагає програмної підтримки, що знижує максимально допустиму частоту вихідного сигналу. Тому наступним етапом розвитку модулів підсистеми реального часу МК стали модулі процесорів подій. Уперше модулі процесорів подій були використані компанією Intel у МК сімейства 8x51Fx. Цей модуль одержав назву програмувального обчислювального масиву (Programmable Counter Array - PCA). РСА забезпечує ширші можливості роботи в реальному масштабі часу і у меншому ступені витрачає ресурси центрального процесора, ніж стандартний і вдосконалений таймери/лічильники. До переваг РСА також можна віднести більш просте програмування і вищу точність. Приміром, РСА може забезпечити кращий часову здатність, ніж таймери 0, 1 і 2 МК сімейства MCS-51, тому що лічильник РСА здатний працювати з тактовою частотою, утроє більшої, ніж у цих таймерів. РСА також може вирішувати багато задач, виконання яких з використанням таймерів вимагає додаткових апаратних витрат (наприклад, визначення фазового зсуву між імпульсами або генерація ШІМ-сигналу). РСА складається з 16-бітного таймера-лічильника і п'яти 16-бітних модулів порівняння-засувки (защелки), як показано на рис. 4.8. Таймер-лічильник РСА використовується як базовий таймер для функціонування всіх п'яти модулів порівняння-засувки. Вхід таймера-лічильника РСА може бути запрограмований на сигнали від наступних джерел: - вихід дільника на 12 тактового генератора МК; - вихід дільника на 4 тактового генератори МК; - сигнал переповнення таймера 0; - зовнішній вхідний сигнал на виводі ЕСІ (P1.2).
Рис. 4.8. Структура процесора подій МК сімейства Intel 8x51Fx. Кожний з модулів порівняння-засувки може бути запрограмований для роботи в таких режимах: - защелка по фронту і/або спаду імпульсу на вході CEXi; - програмованого таймера; - високошвидкісного виходу; - широтно-імпульсного модулятора. Модуль 4 може бути ще запрограмованим як сторожовий таймер. Режим защелкивания по імпульсі на вході МК еквівалентний режиму вхідного захвата (IC) удосконаленого таймера. Режими програмувального таймера і високошвидкісного виходу близькі по своїх функціональних можливостях до режиму вихідного порівняння (OC). У режимі ШІМ на відповідному виводі МК формується послідовність імпульсів з періодом, рівним періоду базового таймера/лічильника PCA. Значення 8-розрядного коду, записане в молодший байт регістра-засувки відповідного модуля задає шпаруватість формованого сигналу. При зміні коду від 0 до 255 шпаруватість міняється від 100 % до 0,4 %. Режим ШИМ дуже простий з погляду програмного обслуговування. Якщо зміни шпаруватості не передбачається, то досить один раз занести відповідний код у регістр даних модуля, проініціалізувати режим ШІМ, і імпульсна послідовність буде відтворюватися із заданими параметрами без втручання програми. При роботі модуля порівняння-засувки в режимі засувки, програмованого таймера або високошвидкісного виходу модуль може сформувати сигнал переривання. Сигнали від всіх п'яти модулів порівняння-засувки і сигнал переповнення таймера РСА розділяють один вектор переривання. Іншими словами, якщо переривання дозволені, то і сигнал переповнення таймера PCA і сигнал від кожного з модулів викликають ту саму підпрограму переривань, що повинна сама ідентифікувати джерело, що викликало неї. Для роботи із зовнішніми пристроями таймер-лічильник РСА і модулі порівняння-засувки використовують виводи P1 порту МК. Якщо який-небудь вивід порту не використовується при роботі РСА, або РСА не задіяний, порт може застосовуватися стандартним чином. Реалізований в 8x51FX PCA виявився настільки вдалим, що архітектура даних МК стала промисловим стандартом де-факто, а сам PCA багаторазово відтворювався в різних модифікаціях мікроконтролерів різних фірм. Тенденція розвитку підсистеми реального часу сучасних МК знаходить своє відбиття в збільшенні числа каналів процесорів подій і розширенні їхніх функціональних можливостей. 4.6. Модуль переривань МК Обробка переривань у МК відбувається відповідно до загальних принципів обробки переривань у МПС. Модуль переривань приймає запити переривання і організує перехід до виконання певної програми, що перериває. Запити переривання можуть надходити як від зовнішніх джерел, так і від джерел, розташованих у різних внутрішніх модулях МК. Як входи для прийому запитів від зовнішніх джерел найчастіше використовуються виводи паралельних портів вводу/виводу, для яких ця функція є альтернативною. Джерелами запитів зовнішніх переривань також можуть бути будь-які зміни зовнішніх сигналів на деяких спеціально виділених лініях портів вводу/виводу. Джерелами внутрішніх запитів переривань можуть служити такі події: - переповнення таймерів/лічильників; - сигнали від каналів вхідного захвата і вихідного порівняння таймерів/лічильників або від процесора подій; - готовність пам'яті EEPROM; - сигнали переривання від додаткових модулів МК, включаючи завершення передачі або прийому інформації з одному з послідовних портів і інші. Будь-який запит переривання надходить на обробку, якщо переривання в МК дозволені і дозволене переривання по даному запиту. Адреса, що завантажується в програмний лічильник при переході до обробки переривання, називається "вектор переривання". Залежно від організації модуля переривань конкретного МК різні джерела переривань можуть мати різні вектори або використовувати деякі з них спільно. Використання різними перериваннями одного вектора звичайно не викликає проблем при розробці програмного забезпечення, тому що апаратна частина МК фіксована, а контролер найчастіше виконує одну-єдину програму. Питання про пріоритети при одночасному надходженні декількох запитів на переривання вирішується в різних МК по-різному. Є МК із однорівневою системою пріоритетів (всі запити рівноцінні), багаторівневою системою з фіксованими пріоритетами і багаторівневою програмувальною системою пріоритетів. Окремо необхідно описати апаратні переривання, пов'язані із включенням живлення, подачею сигналу "скидання" і переповненням сторожового таймера. Вони мають немаскований характер і найчастіше розділяють один загальний вектор переривання. Це цілком логічно, оскільки результатом кожного з подій є початкове скидання МК. 8. Лекція: Допоміжні апаратні засоби мікроконтролера 4.7. Мінімізація енергоспоживання в системах на основі МК Малий рівень енергоспоживання є найчастіше визначальним фактором при виборі способу реалізації цифрової керуючої системи. Сучасні МК надають користувачеві більші можливості в плані економії енергоспоживання і мають, як правило, що випливають основні режими роботи: - активний режим (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 Гц (часовий кварцовий резонатор). 4.8. Тактові генератори МК Сучасні МК містять вбудовані тактові генератори, які вимагають мінімального числа зовнішніх часозадаючих елементів. На практиці використовуються три основних способи визначення тактової частоти генератора: за допомогою кварцового резонатора; керамічного резонатора; зовнішньої RC-ланки. Типова схема підключення кварцового чи керамічного резонатора наведена на рис. 4.9а.
Рис. 4.9. Тактування з використанням кварцового або керамічного резонаторів (а) і з використанням RC-ланки (б). Кварцовий або керамічний резонатор Q підключається до виводів XTAL1 і XTAL2, які звичайно являють собою вхід і вихід інвертую чого підсилювача. Номінали конденсаторів C1 і C2 визначаються виробником МК для конкретної частоти резонатора. Іноді потрібно включити резистор порядку декількох МОм між виводами XTAL1 і XTAL2 для стабільної роботи генератора. Використання кварцового резонатора дозволяє забезпечити високу точність і стабільність тактової частоти (розкид частот кварцового резонатора звичайно становить менш 0,01%). Такий рівень точності потрібно для забезпечення точного ходу годинника реального часу або організації інтерфейсу з іншими пристроями. Основними недоліками кварцового резонатора є його низька механічна міцність (висока крихкість) і відносно висока вартість. При менш твердих вимогах до стабільності тактової частоти можливе використання більше стійких до ударного навантаження керамічних резонаторів. Багато керамічних резонаторів мають вбудовані конденсатори, що дозволяє зменшити кількість зовнішніх елементів, що підключаються, із трьох до одного. Керамічні резонатори мають розкид частот порядку декількох десятих часток відсотка (звичайно близько 0,5 %). Найдешевшим способом задання тактової частоти МК є використання зовнішньої RС-ланки, як наведено на рис. 4.9б. Зовнішня RC-ланка не забезпечує високої точності завдання тактової частоти (розкид частот може доходити до десятків відсотків). Це неприйнятно для багатьох додатків, де потрібен точний підрахунок часу. Однак є маса практичних завдань, де точність завдання тактової частоти не має великого значення. Залежність тактової частоти МК від номіналів RC-ланки залежить від конкретної реалізації внутрішнього генератора і приводиться в посібнику із застосування контролера. Деякі сучасні МК містять вбудовані RC або кільцеві генератори, які дозволяють контролеру працювати без зовнішніх ланцюгів синхронізації. Робота внутрішнього генератора звичайно дозволяється шляхом програмування відповідного біта регістра конфігурації МК. У більшості моделей МК частота часозадаючого елемента (резонатора або RC-ланки) і частота тактування fBUS жорстко зв'язані коефіцієнтом розподілу вбудованого дільника частоти. Тому зміна частоти програмним шляхом не представляється можливим. Однак ряд останніх сімейств МК (наприклад, HC08 фірми Motorola) мають у своєму складі схему тактування, що базується на принципі синтезатора частоти з контуром фазового автопідстроювання (PLL - phase loop lock). Така схема працює як множник частоти і дозволяє задавати тактову частоту за допомогою низькочастотного кварцового резонатора, що знижує рівень електромагнітного випромінювання МК. Коефіцієнти ділення контуру PLL можуть бути змінені програмними шляхом, що дозволяє знизити тактову частоту (і, відповідно, споживану потужність) у проміжки часу, коли висока швидкодія не потрібно. У деяких МК сімейства AVR фірми Atmel тактова частота контролера, що задається внутрішньою RC-ланкою, також може змінюватися програмними засобами. 4.9. Апаратні засоби забезпечення надійної роботи МК Прикладна програма, записана в пам’ять програм МК, повинна забезпечувати його надійну роботу при будь-яких комбінаціях вхідних сигналів. Однак у результаті електромагнітних перешкод, коливань напруги живлення і інших зовнішніх факторів передбачений розроблювачем хід виконання програми може бути порушений. З метою забезпечення надійного запуску, контролю роботи МК і відновлення працездатності системи під час відсутності оператора всі сучасні МК забезпечуються апаратними засобами забезпечення надійної роботи. До них ставляться: - схема формування сигналу скидання МК; - модуль моніторингу напруги живлення; - сторожовий таймер. 4.9.1. Схема формування сигналу скидання МК При включенні напруги живлення МК повинен почати виконувати записану в пам'яті програму роботи. На етапі наростання напруги живлення МК примусово переводиться в початковий стан, що називають станом скидання. При цьому встановлюються у вихідний стан внутрішні магістралі МК, сигнали керування і регістри спеціальних функцій. Останні визначають початковий стан периферійних модулів МК, що найчастіше за замовчуванням неактивно. З метою забезпечення надійного запуску від будь-яких джерел живлення з різною динамікою наростання напруги більшість сучасних МК містять убудований детектор напруги живлення (схема Power-On-Reset - POR), що формує сигнал скидання при наростанні напруги живлення. Зокрема, що входить до складу МК сімейства PIC16 таймер установлення живлення (PWRT) починає відлік часу після того, як напруга живлення перетне рівень близько 1,2...1,8 В. Після закінчення витримки близько 72 мс вважається, що напруга досягла номіналу. Відразу після виходу зі стану скидання МК виконує такі дії: - запускає генератор синхронізації МК. Для стабілізації частоти тактування внутрішніми засобами формується затримка часу; - зчитує енергонезалежні регістри конфігурації у відповідні регістри ОЗП (при необхідності); - завантажує в лічильник команд адресу початку робочої програми; - робить вибірку першої програми з пам'яті програм і приступає до виконання програми. Адреса комірки пам'яті, у якій зберігається код першої виконуваної команди називають вектором початкового запуску або вектором скидання. У деяких МК цю адресу однозначно визначено і наведено у технічному описі. Про такі МК говорять, що вони мають фіксований вектор скидання. В інших МК вектор скидання може бути довільно визначений користувачем. На етапі програмування МК необхідний вектор початкового запуску записується в комірки з фіксованими адресами, і при виході МК зі скидання автоматично завантажується в лічильник команд. Про таких МК говорять, що вони мають завантажується вектор, що, скидання. Завантажуваний вектор скидання мають всі 8-розрядні МК фірми Motorola, виконані за структурою з єдиним адресним простором команд і даних. Для переводу МК у стан скидання при встановлююючій напрузі живлення досить подати сигнал високого або низького рівня (у відповідності зі специфікацією МК) на вхід скидання (RESET). Звичайно для формування сигналу скидання при включенні напруги живлення і натисканні кнопки скидання використовують RC-ланку. Типові схеми формування сигналу скидання наведені на рис. 4.10. Кнопка Кн призначена для "ручного" скидання МК при налагодженні. Діод VD перешкоджає попаданню на вхід RESET від’ємної напруги при вимиканні живлення. Номінали R і C визначають затримку часу, необхідну для завершення всіх перехідних процесів при скиданні (вказуються в технічному описі на МК). Тригер Шмітта на вході допускає подачу сигналу скидання з ненормованою тривалістю фронту. При відсутності тригера Шмітта на вході доводиться використовувати спеціальну зовнішню схему формувача. У сучасних МК лінія RESET звичайно є двонаправленою і має низький активний рівень. При натисканні кнопки "скидання" або включенні живлення буфер лінії встановлюється в режим вводу і реалізує так зване зовнішнє скидання. МК може перейти в стан скидання також по сигналах пристроїв контролю стану, які є в складі контролера. У цьому випадку говорять, що МК перебуває в стані внутрішнього скидання. При цьому буфер лінії RESET установлюється в стан виводу з низьким логічним рівнем на виході. Даний сигнал може бути використаний для установки в початковий стан периферійних ІС.
Рис. 4.10. Типові схеми формування сигналу зовнішнього скидання для МК із високим активним рівнем сигналу скидання (а) і низьким активним рівнем сигналу скидання (б). Порядок виходу МК зі станів зовнішнього і внутрішнього скидання в цілому однаковий. 4.9.2. Блок детектування пониженої напруги живлення У реальних умовах експлуатації може скластися така ситуація, при якій напруга живлення МК опуститься нижче мінімально допустимого, але не досягне порога відпускання схеми POR. У цих умовах МК може "зависнути". При відновленні напруги живлення до номінального значення МК залишиться непрацездатним. Для відновлення працездатності системи після "просідання" напругу живлення МК необхідно знову скинути. Для цього в сучасних МК реалізований додатковий блок детектування пониженої напруги живлення. Такий модуль використовується в МК сімейства HC08 фірми Motorola, аналогічний модуль є в складі сімейства PIC17 фірми Microchip. Розглянутий модуль генерує сигнал внутрішнього скидання при зниженні напруги живлення до рівня трохи нижче мінімально допустимого. Рівень спрацьовування блоку детектування пониженої напруги живлення значно перевищує напругу збереження даних в ОЗП МК. Подія скидання по сигналі блоку пониженої напруги живлення відзначається спеціальним бітом в одному з регістрів МК. Отже, програмно аналізуючи цей біт після скидання МК, можна встановити, що дані цілі, і продовжити виконання програми. 4.9.3. Сторожовий таймер Якщо, незважаючи на всі вжиті заходи, МК все-таки "завис" , то на випадок виходу із цього стану всі сучасні контролери мають убудований модуль сторожового таймера. Принцип дії сторожового таймера наведений на рис. 4.11.
Рис. 4.11. Принцип дії сторожового таймера. Основою сторожового таймера є багаторозрядний лічильник. При скиданні МК лічильник обнуляється. Після переходу МК в активний режим роботи значення лічильника починає збільшуватися незалежно від виконуваної програми. При досягненні лічильником максимального коду генерується сигнал внутрішнього скидання, і МК починає виконувати робочу програму спочатку. Для виключення скидання по переповненню сторожового таймера робоча програма МК повинна періодично скидати лічильник. Скидання лічильника сторожового таймера здійснюється шляхом виконання спеціальної команди (наприклад, CLRWDT) або за допомогою запису деякого зазначеного коду в один з регістрів спеціальних функцій. Тоді при нормальному, передбаченому розроблювачем, порядку виконання робочої програми переповнення лічильника сторожового таймера не відбувається, і він не робить впливи на роботу МК. Однак, якщо виконання робочої програми було порушено, наприклад, внаслідок "зависання", те велика ймовірність того, що лічильник не буде скинутий вчасно. Тоді відбудеться скидання по переповненню сторожового таймера, і нормальний хід виконання робочої програми буде відновлений. Модулі сторожових таймерів конкретних МК можуть мати різні особливості: - у ряді МК вектори зовнішнього скидання і скидання по переповненню сторожового таймера збігаються. Це не дозволяє виявити причину скидання програмним шляхом і утрудняє написання робочої програми. Більш високорівневі МК мають або різні вектори скидання, або відзначають подію скидання по переповненню сторожового таймера встановкою спеціального біта в одному з регістрів спеціальних функцій; - у деяких МК при переході в один з режимів пониженого енергоспоживання, коли робоча програма не виконується, автоматично припиняється робота сторожового таймера. В інших МК сторожовий таймер має незалежний тактовий генератор, що продовжує функціонувати і у режимі очікування. У цьому випадку необхідно періодично виводити МК зі стану очікування для скидання сторожового таймера. В PIC-контролерах фірми Microchip вироблення таких скидань може бути заборонена шляхом запису нуля в спеціальний біт конфігурації WDTE. Використання сторожового таймера істотно підвищує здатність до самовідновлення системи на основі МК. 4.10. Додаткові модулі МК Описані вище модулі становлять так званий базовий комплект МК і входять до складу будь-якого сучасного контролера. Очевидна необхідність включення до складу МК додаткових модулів, склад і можливості яких визначаються конкретним розв'язуваним завданням. Серед таких додаткових модулів треба, насамперед, відзначити: - модулі послідовного вводу/виводу даних; - модулі аналогового вводу/виводу. Модулі послідовного вводу/виводу Завдання, які вирішуються засобами модуля контролера послідовного вводу/виводу, можна розділити на три основні групи: - зв'язок вбудованої мікроконтролерної системи із системою керування верхнього рівня, наприклад, з ПЕОМ. Найчастіше для цієї мети використовуються інтерфейси 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). Кожний із цих інтерфейсів має досить складні протоколи обміну. 4.10.2. Модулі аналогового вводу/виводу Необхідність прийому і формування аналогових сигналів вимагає наявності в МК модулів аналогового вводу/виводу. Найпростішим пристроєм аналогового вводу в МК є вбудований компаратор напруги. Компаратор порівнює вхідну аналогову напругу з опорним потенціалом VREF і встановлює на виході логічну "1", якщо вхідна напруга більше опорного. Компаратори зручніше за все використовувати для контролю певного значення вхідної напруги, наприклад, у термостатах. У комбінації із зовнішнім генератором лінійно змінюючої напруги, вбудований компаратор дозволяє реалізувати на МК інтегруючий аналого-цифровий перетворювач (АЦП). Проте більш широкі можливості для роботи з аналоговими сигналами дає АЦП, вбудований у МК. Найчастіше він реалізується у вигляді модуля багатоканального АЦП, призначеного для вводу в МК аналогових сигналів з датчиків фізичних величин і перетворення цих сигналів у двійковий код. Структурна схема типового модуля АЦП наведена на рис. 4.12.
Рис. 4.12. Структура модуля АЦП. Багатоканальний аналоговий комутатор К служить для підключення одного із джерел аналогових сигналів (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. Момент завершення кожного циклу перетворення відзначається установкою тригера готовності даних. Якщо переривання від модуля АЦП дозволені, то генерується запит на переривання. Як правило, читання регістра результату скидає тригер готовності. ЦАП в складі МК є рідкістю. Функція ЦАП реалізується засобами модуля програмованого таймера в режимі ШІМ. На одному з виводів МК формується високочастотна імпульсна послідовність із регульованою тривалістю імпульсу. Отриманий сигнал згладжується фільтром нижніх частот на операційному підсилювачі. Роздільна здатність такого ЦАП визначається дискретністю регулювання коефіцієнта заповнення в режимі ШІМ.
9. Лекція: Апаратні засоби мікроконтролерів серії PIC 5.1. Основні особливості мікроконтролерів серії PIC 5.1.1. Склад і призначення сімейств PIC-контролерів Мікроконтролери сімейств PIC (Peripheral Interface Controller) компанії Microchip об’єднують всі передові технології мікроконтролерів: електрично програмовані користувачем ППЗП, мінімальне енергоспоживання, високу продуктивність, добре розвинену RISC-архітектуру, функціональну закінченість і мінімальні розміри. Висока швидкість виконання команд в PIC-контролерах досягається за рахунок використання двохшинної гарвардської архітектури. Всі ресурси мікроконтролера, такі як порти вводу/виводу, комірки пам'яті і таймер, є фізично реалізованими апаратними регістрами. Мікроконтролери PIC містять RISC-процесор із симетричною системою команд, що дозволяє виконувати операції з будь-яким регістром, використовуючи довільний метод адресації. Користувач може зберігати результат операції в самому регістрі-акумуляторі або в другому регістрі, використовуваному для операції. У цей час компанія Microchip випускає п'ять основних сімейств 8-розрядних RISC-Мікроконтролерів, сумісних знизу нагору по програмному коді: - PIC12CXXX - сімейство мікроконтролерів, що випускаються в мініатюрному 8-вивідному виконанні. Ці мікроконтролери випускаються як з 12-розрядною (33 команди), так і з 14-розрядною (35 команд) системою команд. Містять вбудований тактовий генератор, таймер/лічильник, сторожовий таймер, схему керування перериваннями. У складі сімейства є мікроконтролери з вбудованим 8-розрядним чотирьохканальними АЦП. Здатні працювати при напрузі живлення до 2,5 В; - PIC16C5X - базове сімейство мікроконтролерів з 12-розрядними командами (33 команди), що випускається в 18-, 20- і 28-вивідних корпусах. Являють собою прості недорогі мікроконтролери з мінімальною периферією. Здатність працювати при малій напрузі живлення (до 2 В) робить їх зручними для застосування в переносних конструкціях. До складу сімейства входять мікроконтролери підгрупи PIC16HV5XX, здатні працювати безпосередньо від батареї в діапазоні живлячих напруг до 15 В; - PIC16CXXX - сімейство мікроконтролерів середнього рівня з 14-розрядними командами (35 команд). Найбільш численне сімейство, що поєднує мікроконтролери з різноманітними периферійними пристроями, у число яких входять аналогові компаратори, аналогово-цифрові перетворювачі, контролери послідовних інтерфейсів SPI, USART і I2C, таймери-лічильники, модулі захвата/порівняння, широтно-імпульсні модулятори, сторожові таймери, супервізорні схеми і так далі; - PIC17CXXX - сімейство високопродуктивних мікроконтролерів з розширеною системою команд 16-розрядного формату (58 команд), що працюють на частоті до 33 Мгц, з обсягом пам'яті програм до 16 Кслів. Крім великої периферії, 16-рівневого апаратного стека і векторна система переривань, майже всі мікроконтролери цього сімейства мають вбудований апаратний перемножувач 8х8, що виконує операцію множення за один машинний цикл. Є одними із самих швидкодіючих у класі 8-розрядних мікроконтролерів; - PIC18CXXX - сімейство високопродуктивних мікроконтролерів з розширеною системою команд 16-розрядного формату (75 команд) і вбудованим 10-розрядним АЦП, що працюють на частоті до 40 Мгц. Містять 31-рівневий апаратний стек, вбудовану пам'ять команд до 32 Кслвв і здатні адресувати до 4 Кбайт пам'яті даних і до 2 Мбайт зовнішньої пам'яті програм. Розширене RISC-ядро мікроконтролерів даного сімейства оптимізовано під використання нового Сі-компілятора. Більшість PIC-контролерів випускаються з однократно програмованою пам'яттю програм (OПП), з можливістю внутрісхемного програмування або масочним ПЗП. Для цілей налагодження пропонуються більш дорогі версії з ультрафіолетовим стиранням і Flash-пам'яттю. Повний список модифікацій, що випускаються, PIC-контролерів включає порядку п'ятисот найменувань. Тому продукція компанії перекриває майже весь діапазон застосувань 8-розрядних мікроконтролерів. Із програмних засобів налагодження найбільш відомі і доступні різні версії асемблерів, а також інтегроване програмне середовище MPLAB. Російські виробники програматорів і апаратних відлагоджувальних засобів також приділяють увагу PIC-контролерам. 5.1.2. Мікроконтролери сімейств PIC16CXXX і PIC17CXXX Основним призначенням мікроконтролерів сімейств PIC16 і PIC17, як виходить з абревіатури PIC (Peripheral Interface Controller), є виконання інтерфейсних функцій. Цим пояснюються особливості їхньої архітектури: - RISC-система команд, що характеризується малим набором одноадресних інструкцій (33, 35 або 58), кожна з яких має довжину в одне слово (12, 14 або 16 біт) і більшість виконується за один машинний цикл. У системі команд відсутні складні арифметичні команди (множення, ділення), гранично скорочений набір умовних переходів; - висока швидкість виконання команд: при тактовій частоті 20 МГц час машинного циклу становить 200 нс (швидкодію дорівнює 5 млн. операцій/сек); - наявність потужних драйверів (до 25 мА) на лініях портів вводу/виводу, що дозволяє підключати безпосередньо до них досить потужне навантаження, наприклад, светлодіоди; - низька споживана потужність; - орієнтація на цінову нішу гранично низької вартості, що визначає використання дешевих корпусів з малою кількістю виводів (8, 14, 18, 28), відмова від зовнішніх шин адреси і даних (крім PIC17C4X), використання спрощеного механізму переривань і апаратного (програмно недоступного) стека. 5.1.3. Особливості архітектури мікроконтролерів сімейства PIC16CXXX Мікроконтролери сімейства PIC16CXXX, виконані за технологією HCMOS являють собою 8-розрядні мікроконтролери на основі RISC-процесора, виконані по гарвардській архітектурі. Мають убудоване ПЗП команд обсягом від 0,5 до 4 Кслів (розрядність слова команд дорівнює 12 - 14 біт). Пам'ять даних PIC-контролерів організована у вигляді регістрового файлу обсягом 32 - 128 байт, у якому від 7 до 16 регістрів відведено для керування системою і обміну даними із зовнішніми пристроями. Одним з основних достоїнств цих пристроїв є дуже широкий діапазон напруг живлення (2 – 6 В). Струм споживання на частоті 32768 Гц становить менш 15 мкА, на частоті 4 МГц – 1 – 2 мА, на частоті 20 МГц 5 – 7 мА і у режимі мікроспоживання (режим SLEEP) – 1 – 2 мкА. Випускаються модифікації для роботи в трьох температурних діапазонах: від 0 до +70°С, від -40 до +85°С и від -40 до +125°С. Кожний з контролерів містить універсальні (від 1 до 3) і сторожовий таймери, а також надійну вбудовану систему скидання при включенні живлення. Частота внутрішнього тактового генератора задається або кварцовим резонатором, або RC-ланкою у діапазоні 0 - 25 Мгц. PIC-Контролери мають від 12 до 33 ліній цифрового вводу-виводу, причому кожна з них може бути незалежно настроєна на вводу або вивід. У пристрій PIC16C64 входить широтно-імпульсний модулятор, за допомогою якого можна реалізувати ЦАП з 16 розрядів. Тут є і послідовний двонаправлений синхронно-асинхронний порт, що забезпечує можливість організації шини I2C. Прилади PIC16C71 і PIC16C74 містять вбудований багатоканальний 8-розрядний АЦП. Крім пам'яті програм в PIC передбачено кілька індивідуально перепалювальних перемичоктрохи, за допомогою яких можна на етапі програмування кристала вибрати тип тактового генератора, відключити сторожовий таймер або систему скидання, включити захист пам'яті програм від копіювання, а також записати серійний номер кристала (16 біт). Із програмної точки зору PIC-Контролер являє собою 8-розрядний RISC-Процесор з гарвардською архітектурою. Число команд невелике - від 33 до 35. Всі команди мають однакову довжину і, крім команд розгалуження, виконуються за чотири періоди тактової частоти (у відмінність, наприклад, від 12 періодів для i87C51). Підтримуються безпосередній, непрямий і відносний методи адресації, можна ефективно управляти окремими бітами в межах усього регістрового файлу. Стік реалізований апаратно. Його максимальна глибина становить два або вісім рівнів залежно від типу контролера. Майже у всіх мікросхемах PIC є система переривань, джерелами яких можуть бути таймер і зовнішні сигнали. Система команд практично симетрична і, як наслідок, легка в освоєнні. Застосування PIC-Контролерів доцільно в нескладних приладах з обмеженим струмом споживання (автономні пристрої, прилади з живленням від телефонної лінії і т.п.). Завдяки малій кількості компонентів, використовуваних при побудові таких приладів, їхні розміри зменшуються, а надійність збільшується. Типовим представником мікроконтролерів сімейства PIC16CXXX є мікроконтролери підгрупи PIC16F8X. 5.2. Мікроконтролери підгрупи PIC16F8X 5.2.1. Основні характеристики Мікроконтролери підгрупи PIC16F8X ставляться до сімейства 8-розрядних КМОП мікроконтролерів групи PIC16CXXX, для яких характерні низька вартість, повністю статична Кмоп-Технологія і висока продуктивність. До складу підгрупи входять МК PIC16F83, PIC16CR83, PIC16F84 і PIC16CR84. Основні характеристики МК підгрупи PIC16F8X наведені в табл. 5.1. Всі мікроконтролери підгрупи PIC16F8X використовують гарвардську архітектуру з RISC-Процесором, що володіє наступними основними особливостями: використовуються тільки 35 простих команд; всі команди виконуються за один цикл (400 нс при частоті 10 Мгц), крім команд переходу, які вимагають 2 цикли; робоча частота 0 Гц ... 10 Мгц; роздільні шини даних (8 біт) і команд (14 біт); 512 х 14 або 1024 х 14 пам'ять програм, виконана на ПЗП або электрически перепрограмувальної Flash- пам'яті; 15 восьмиразрядных регістрів спеціальних функцій (SFR); восьмиуровневый апаратний стік; пряма, непряма і відносна адресація даних і команд; 36 або 68 восьмиразрядных регістрів загального призначення (GPR) або ОЗП; чотири джерела переривання: зовнішній вхід RB0/INT; переповнення таймера TMR0; зміна сигналів на лініях порту B; завершення запису даних на згадку EEPROM; 64 x 8 электрически перепрограмувальна EEPROM пам'ять даних з можливістю виконання 1000000 циклів стирання/запису; збереження даних в EEPROM протягом як мінімум 40 років. Таблиця 5.1. Основні характеристики МК підгрупи PIC16F8X.Параметр PIC16F83 PIC16CR83 PIC16F84 PIC16CR84 Максимальна частота, МГц 10 10 10 10 Flash-Пам'ять програм, слів 512 - 1K - ПЗП програм, слів - 512 - 1K Пам'ять даних, байт 36 36 68 68 Пам'ять даних у РПЗУ (EEPROM), байт 64 64 64 64 Таймери TMR0 TMR0 TMR0 TMR0 Число джерел переривань 4 4 4 4 Число ліній вводу/виводу 13 13 13 13 Діапазон напруг живлення, В 2,0 – 6,0 2,0 – 6,0 2,0 – 6,0 2,0 – 6,0 Число виводів і тип корпуса 18 DIP, SOIC 18 DIP, SOIC 18 DIP, SOIC 18 DIP, SOIC Мікроконтролери підгрупи PIC16F8X мають розвинені можливості вводу/виводу: 13 ліній вводу-виводу з індивідуальною установкою напрямку обміну; високий що втікає/ струм, щовипливає, достатній для керування светодиодами: максимальний струм, що втікає, - 25 мА; максимальний струм, що випливає, - 20 мА; 8-бітний таймер/лічильник TMR0 з 8-бітним програмувальним попереднім дільником. Спеціалізовані микроконтроллерные функції включають наступні можливості: автоматичне скидання при включенні ( Power-on-Reset); таймер включення при скиданні ( Power-up Timer); таймер запуску генератора (Oscillator Start-up Timer); сторожовий (Watchdog) таймер WDT із власним убудованим генератором, що забезпечує підвищену надійність; EEPROM біт таємності для захисту коду; економічний режим SLEEP; обирані користувачем біти для установки режиму порушення убудованого генератора; послідовний убудований пристрій програмування Flash/EEPROM пам'яті програм і даних з використанням тільки двох виводів. КМОП технологія забезпечує МК підгрупи PIC16F8X додаткові переваги: статичний принцип роботи; широкий діапазон напруг живлення: 2,0...6,0 У; низьке енергоспоживання: менш 2 мА при 5У и 4Мгц; порядку 15 мкА при 2У и 32Кгц; менш 1 мкА для SLEEP-Режиму при 2В. Мікроконтролери підгрупи PIC16F8X розрізняються між собою тільки обсягом ОЗП даних, а також обсягом і типом пам'яті програм. Наявність у складі підгрупи МК із Flash-Пам'яттю програм полегшує створення і налагодження прототипів промислових зразків виробів. 5.2.2. Особливості архітектури Спрощена структурна схема МК підгрупи PIC16F8X наведена на мал. 5.1.
Рис. 5.1. Структурна схема МК підгрупи PIC16F8X. Архітектура заснована на концепції роздільних шин і областей пам'яті для даних і для команд (гарвардська архітектура). Шина даних і пам'ять даних (ОЗП) - мають ширину 8 біт, а програмна шина і програмна пам'ять (ПЗП) мають ширину 14 біт. Така концепція забезпечує просту, але потужну систему команд, розроблену так, що бітові, байтовые і регістрові операції працюють із високою швидкістю і з перекриттям за часом вибірок команд і циклів виконання. 14-бітова ширина програмної пам'яті забезпечує вибірку 14-бітової команди в один цикл. Двоступінчастий конвеєр забезпечує одночасну вибірку і виконання команди. Всі команди виконуються за один цикл, крім команд переходів. Мікроконтролери PIC16F83 і PIC16CR83 адресують 512х14 пам'яті програм, а PIC16F84 і PIC16CR84 - 1Кх14 пам'яті програм. Вся пам'ять програм є внутрішньою. Мікроконтролер може прямо або побічно звертатися до регістрів або пам'яті даних. Всі регістри спеціальних функцій, включаючи лічильник команд, відображаються на пам'ять даних. Ортогональна (симетрична) система команд дозволяє виконувати будь-яку команду над будь-яким регістром з використанням довільного методу адресації. Ортогональна архітектура і відсутність спеціальних виключень робить програмування МК групи PIC16F8X простим і ефективним. Призначення виводів МК підгрупи PIC16F8X наведене в табл. 5.2. Таблиця 5.2. Призначення виводів МК підгрупи PIC16F8X.Позначення Тип Буфер Опис OSC1/CLKIN I ТШ/КМОП1) Вхід кристала генератора, RC-Ланцюжки або вхід зовнішнього тактового сигналу OSC2/CLKOUT O - Вихід кристала генератора. В RC-Режимі - вихід 1/4 частоти OSC1 /MCLR I/P ТШ Сигнал скидання/вхід програмуючої напруги. Скидання низьким рівнем. RA0 I/O ТТЛ PORTA - двунаправленный порт вводу/виводу RA4/T0CKI може бути обраний як тактовий вхід таймера/лічильника TMR0. Вихід з відкритим стоком. RA1 I/O ТТЛ RA2 I/O ТТЛ RA3 I/O ТТЛ RA4 I/O ТШ /T0CKI RB0/INT I/O ТТЛ/ТШ2) PORTB – двунаправленный порт вводу/виводу. Може бути запрограмований у режимі внутрішніх активних навантажень на лінію живлення по всіх виводах. Вивід RB0/INT може бути обраний як зовнішній вхід переривання. Виводи RB4...RB7 можуть бути програмно настроєні як входи переривання по зміні стану на кожному із входів. При програмуванні МК RB6 використовується як тактовий, а RB7 як вхід/вихід даних. RB1 I/O ТТЛ RB2 I/O ТТЛ RB3 I/O ТТЛ RB4 I/O ТТЛ RB5 I/O ТТЛ RB6 I/O ТТЛ/ТШ3) RB7 I/O ТТЛ/ТШ4) Таблиця 5.2. Призначення виводів МК підгрупи PIC16F8X (продовження).Позначення Тип Буфер Опис Vdd P - Позитивна напруга живлення Vss P - Загальне проведення (земля) У таблиці використані наступні позначення: I - вхід; O - вихід; I/O - вхід/вихід; P - живлення; - - не використовується; ТТЛ - ТТЛ вхід; ТШ - вхід тригера Шмитта. Мікроконтролер містить 8-розрядне АЛП і робітник регістр W. АЛП є арифметичним модулем загального призначення і виконує арифметичні і логічні функції над умістом робочого регістра і кожного з регістрів контролера. АЛП може виконувати операції додавання, вирахування, зрушення і логічні операції. Якщо не зазначене інше, то арифметичні операції виконуються в додатковому двійковому коді. Залежно від результату операції, АЛП може змінювати значення біт регістра STATUS: C (Carry), DC (Digit carry) і Z (Zero). 5.2.3. Схема тактирования і цикл виконання команди Вхідна тактова частота, що надходить із виводу OSC1/CLKIN, ділиться усередині на чотири, і з її формуються чотири циклічні не тактові послідовності, що перекриваються, Q1, Q2, Q3 і Q4. Лічильник команд збільшується в такті Q1, команда зчитується з пам'яті програми і защелкивается в регістрі команд у такті Q4. Команда декодируется і виконується протягом наступного циклу в тактах Q1...Q4. Схема тактирования і виконання команди зображена на мал. 5.2. Цикл виконання команди складається із чотирьох тактів: Q1...Q4. Вибірка команди і її виконання сполучені за часом таким чином, що вибірка команди займає один цикл, а виконання - наступний цикл. Ефективний час виконання команди становить один цикл. Якщо команда змінює лічильник команд (наприклад, команда GOTO), то для її виконання буде потрібно два цикли, як показано на мал. 5.3.
Рис. 5.2. Схема тактирования і виконання команди.
Рис. 5.3. Вибірка команд. Цикл вибірки починається зі збільшення лічильника команд у такті Q1. У циклі виконання команди обрана команда защелкивается в регістр команд у такті Q1. Протягом тактів Q2, Q3 і Q4 відбувається декодування і виконання команди. У такті Q2 зчитується пам'ять даних (читання операнда), а запис відбувається в такті Q4. Далі » 5.2.4. Організація пам'яті програм і стека Лічильник команд у МК PIC16F8Х має ширину 13 біт і здатний адресувати 8Кх14біт обсягу програмної пам'яті. Однак фізично на кристалах PIC16F83 і PIC16CR83 є тільки 512х14 пам'яті (адреси 0000 h-01FFh), а в МК PIC16F84 і PIC16CR84 - 1Кх14 пам'яті (адреси 0000 h-03FFh). Звертання до адрес вище 1FFh (3FFh) фактично є адресація в тих же перші 512 адрес (перші 1До адрес). Організація пам'яті програм і стека наведена на мал. 5.4. У пам'яті програм є виділені адреси. Вектор скидання перебуває за адресою 0000h, вектор переривання - за адресою 0004h. Звичайно за адресою 0004h розташовується підпрограма ідентифікації і обробки переривань, а за адресою 0000h - команда переходу на мітку, розташовану за підпрограмою обробки переривань.
Рис. 5.4. Організація пам'яті програм і стека. 5.2.5. Організація пам'яті даних Пам'ять даних МК розбита на дві області. Перші 12 адрес - це область регістрів спеціальних функцій (SFR), а друга - область регістрів загального призначення (GPR). Область SFR управляє роботою приладу. Обидві області розбиті у свою чергу на банки 0 і 1. Банк 0 вибирається обнулінням біта RP0 регістра статусу (STATUS). Установка біта RP0 в одиницю вибирає банк 1. Кожний банк має довжина 128 байт. Однак для PIC16F83 і PIC16CR83 пам'ять даних існує тільки до адреси 02Fh, а для PIC16F84 і PIC16CR84 - до адреси 04Fh. На мал. 5.5 зображена організація пам'яті даних.
Рис. 5.5. Організація пам'яті даних. Деякі регістри спеціального призначення продублированы в обох банках, а деякі розташовані в банку 1 окремо. Регістри з адресами 0 Ch-4Fh можуть використовуватися як регістри загального призначення, які являють собою статичне ОЗП. Адреси регістрів загального призначення банку 1 відображаються на банк 0. Отже, коли встановлений банк 1, то звертання до адрес 8 Ch-CFh фактично адресує банк 0. У регістрі статусу крім біта RP0 є ще біт RB1, що дозволяє звертатися до чотирьох сторінок (банкам) майбутніх модифікацій цього кристала. До осередків ОЗП можна адресуватися прямо, використовуючи абсолютну адресу кожного регістра, або побічно, через регістр покажчик FSR. Непряма адресація використовує поточне значення розрядів RP1:RP0 для доступу до банок. Це ставиться і до EEPROM пам'яті даних. В обох випадках можна адресувати до 512 регістрів. 5.2.6. Регістри спеціального призначення Регістр статусу (STATUS) містить ознаки операції (арифметичні прапори) АЛП, стан контролера при скиданні і біти вибору сторінок для пам'яті даних. Призначення біт регістра наведений у табл. 5.3. Таблиця 5.3. Призначення біт регістра STATUS (адреса 03h, 83h).R/ W-0 R/ W-0 R/ W-0 R-1 R-1 R/ W-x R/ W-x R/ W-x IRP RP1 RP0 /TO /PD Z DC C Біт 7 Біт 6 Біт 5 Біт 4 Біт 3 Біт 2 Біт 1 Біт 0 Біт 7: IRP: біт вибору сторінки банку даних (використовується при непрямій адресації) 0 = банк 0,1 (00h - FFh) 1 = банк 2,3 (100h - 1FFh) Біт IRP не використовується в МК підгрупи PIC16F8X Біти 6-5: RP1:RP0: біти вибору сторінки банку даних (використовуються при прямої адресації) 00 = банк 0 (00h - 7Fh) 01 = банк 1 (80h - FFh) 10 = банк 2 (100h - 17Fh) 11 = банк 3 (180h - 1FFh) У МК підгрупи PIC16F8X використовується тільки біт RP0 Біт 4: /TO: біт спрацьовування сторожового таймера 1 = після включення живлення, а також командами CLRWDT і SLEEP 0 = по завершенні витримки сторожового таймера Біт 3: /PD: біт зниження споживаної потужності 1 = після включення живлення, а також командою CLRWDT 0 = по команді SLEEP Біт 2: Z: біт нульового результату 1 = результат арифметичної або логічної операції нульовий 0 = результат арифметичної або логічної операції ненульовий Біт 1: DC: біт десяткового переносу/заема (для команд ADDWF і ADDLW) 1 = має місце перенос із 4-го розряди 0 = немає переносу з 4-го розряди Біт 0: C: біт переносу/заема (для команд ADDWF і ADDLW) 1 = має місце перенос із самого старшого розряду 0 = немає переносу із самого старшого розряду Примітка: вирахування здійснюється шляхом додатка додаткового коду другого операнда. При виконанні команд зрушення цей біт завантажується з молодшого або старшого розряду джерела, що зрушується. Тут і далі: R - читається бит, що; W - записуваний біт; S - установлюваний біт; U - невикористовуваний біт (читається як "0"); -n = 0 або 1 - значення біта після скидання. Регістр статусу доступний для будь-якої команди так само, як будь-який інший регістр. Однак якщо регістр STATUS є регістром призначення для команди, що впливає на біти Z, DC або C, те запис у ці три біти забороняється. Крім того, біти /TO і /PD установлюються апаратно і не можуть бути записані в статус програмно. Це варто мати на увазі при виконанні команди з використанням регістра статусу. Наприклад, команда CLRF STATUS обнулит всі біти, крім битов /TO і /PD, а потім установить біт Z=1. Після виконання цієї команди регістр статусу може і не мати нульового значення (через битов /TO і /PD) STATUS=000uu1uu, де u - незмінний стан. Тому рекомендується для зміни регістра статусу використовувати тільки команди бітової установки BCF, BSF, MOVWF, які не змінюють інші біти статусу. Вплив всіх команд на біти статусу розглядається в розділі "Опис системи команд". Регістр конфігурації (OPTION) є доступним по читанню і запису регістром, що містить керуючі біти для конфігурації попереднього дільника (предільника), зовнішніх переривань, таймера, а також резисторів " pull-up" на виводах PORTB. Призначення біт регістра наведений у табл. 5.4. Таблиця 5.4. Призначення біт регістра OPTION (адреса 81h).R/ W-1 R/ W-1 R/ W-1 R/ W-1 R/ W-1 R/ W-1 R/ W-1 R/ W-1 /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 Біт 7 Біт 6 Біт 5 Біт 4 Біт 3 Біт 2 Біт 1 Біт 0 Біт 7: /RBPU: біт установки резисторів " pull-up" на виводах PORTB 0 = резистори " pull-up" підключені 1 = резистори " pull-up" відключені Біт 6: INTEDG: біт вибору переходу сигналу переривання 0 = переривання по спаду сигналу на виводі RB0/INT 1 = переривання по фронті сигналу на виводі RB0/INT Біт 5: T0CS: біт вибору джерела сигналу таймера TMR0 0 = внутрішній тактовий сигнал (CLKOUT) 1 = перехід на виводі RA4/T0CKI Біт 4: T0SE: біт вибору переходу джерела сигналу для TMR0 0 = збільшення по фронті сигналу на виводі RA4/T0CKI 1 = збільшення по спаду сигналу на виводі RA4/T0CKI Біт 3: PSA: біт призначення предільника 0 = предделитель підключений до TMR0 1 = предделитель підключений до сторожового таймера WDT Біти 2-0: PS2:PS0: біти вибору коефіцієнта розподілу предільника Значення біт Швидкість TMR0 Швидкість WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 У тому випадку, коли предделитель обслуговує сторожовий таймер WDT, таймеру TMR0 призначається коефіцієнт попереднього розподілу 1:1. Регістр умов переривання (INTCON) є доступним по читанню і запису регістром, що містить біти доступу для всіх джерел переривань. Призначення біт регістра наведений у табл. 5.5. Таблиця 5.5. Призначення біт регістра INTCON (адреси 0Bh, 8Bh).R/ W-0 R/ W-0 R/ W-0 R/ W-0 R/ W-0 R/ W-0 R/ W-0 R/ W-x GIE EEIE T0IE INTE RBIE T0IF INTF RBIF Біт 7 Біт 6 Біт 5 Біт 4 Біт 3 Біт 2 Біт 1 Біт 0 Біт 7: GIE: біт дозволу всіх переривань 0 = заборонені всі переривання 1 = дозволені всі незамасковані переривання Біт 6: EEIE: біт дозволу переривання запису в EEPROM 0 = заборонені переривання запису в EEPROM 1 = дозволені переривання запису в EEPROM Біт 5: T0IE: біт дозволу переривання по переповненню TMR0 0 = заборонені переривання від TMR0 1 = дозволені переривання від TMR0 Біт 4: INTE: біт дозволу переривань по входу RB0/INT 0 = заборонені переривання по входу RB0/INT 1 = дозволені переривання по входу RB0/INT Біт 3: RBIE: біт дозволу переривань по зміні PORTB 0 = заборонені переривання по зміні PORTB 1 = дозволені переривання по зміні PORTB Біт 2: T0IF: біт запиту переривання по переповненню TMR0 0 = переривання по переповненню TMR0 відсутній 1 = переривання по переповненню TMR0 має місце Біт 1: INTF: біт запиту переривання по входу RB0/INT 0 = переривання по входу RB0/INT відсутній 1 = переривання по входу RB0/INT має місце Біт 0: RBTF: біт запиту переривання по зміні PORTB 0 = на жодному із входів RB7:RB4 стан не змінився 1 = хоча б на одному із входів RB7:RB4 змінився стан Біт дозволу всіх переривань GIE скидається автоматично при наступних обставинах: по включенню живлення; по зовнішньому сигналі /MCLR при нормальній роботі; по зовнішньому сигналі /MCLR у режимі SLEEP; по закінченню затримки таймера WDT при нормальній роботі; по закінченню затримки таймера WDT у режимі SLEEP. Переривання INT може вивести процесор з режиму SLEEP, якщо перед входом у цей режим біт INTE був установлений в одиницю. Стан біта GIE також визначає: чи буде процесор переходити на підпрограму переривання після виходу з режиму SLEEP. Скидання битов - запитів переривань - повинен здійснюватися відповідною програмою обробки. Далі » 5.2.7. Лічильник команд Лічильник команд PCL і PCLATH має розрядність 13 біт. Молодший байт лічильника (PCL) доступний для читання і запису і перебуває в регістрі 02h. Старший байт лічильника команд не може бути прямо записаний або лічений і береться з регістра PCLATH (PC latch high), адреса якого 0Ah. Уміст PCLATH передається в старший байт лічильника команд, коли він завантажується новим значенням. Залежно від того, чи завантажується в лічильник команд нове значення під час виконання команд CALL, GOTO, або в молодший байт лічильника команд (PCL) виробляється запис, - старші біти лічильника команд завантажуються з PCLATH різними способами, як показано на мал. 5.6.
Рис. 5.6. Завантаження старших біт лічильника команд. Команди CALL і GOTO оперують 11-розрядним адресним діапазоном, достатнім для зсуву в межах сторінки програмної пам'яті обсягом 2До слів. Для МК підгрупи PIC16F8X цього вистачає. З метою забезпечення можливості розширення пам'яті команд для майбутніх моделей МК передбачене завантаження двох старших біт лічильника команд із регістра PCLATH<4:3>. При використанні команд CALL і GOTO користувач повинен переконатися в тім, що ці сторінкові біти запрограмовані для виходу на потрібну сторінку. При виконанні команди CALL або виконанні переривання весь 13-бітний лічильник команд міститься в стек, тому для повернення з підпрограми не потрібні маніпуляції з розрядами PCLATH<4:3>. Мікроконтролери підгрупи PIC16F8X ігнорують значення біт PCLATH<4:3>, які використовуються для звертання до сторінок 1, 2 і 3 програмної пам'яті. Однак застосовувати біти PCLATH<4:3> як осередки пам'яті загального призначення не рекомендується, тому що це може вплинути на сумісність із майбутніми поколіннями виробів. Можливість виконувати арифметичні операції безпосередньо над лічильником команд дозволяє дуже швидко і ефективно здійснювати табличні перетворення в PIC-Контролерах. Мікроконтролери підгрупи PIC16F8X мають восьмиуровневый апаратний стік шириною 13 біт (див. мал. 5.4). Область стека не належить ні до програмної області, ні до області даних, а покажчик стека користувачеві недоступний. Поточне значення лічильника команд посилає в стек, коли виконується команда CALL або виробляється обробка переривання. При виконанні процедури повернення з підпрограми (команди RETLW, RETFIE або RETURN) уміст лічильника команд відновлюється зі стека. Регістр PCLATH при операціях зі стеком не змінюється. Стік працює як циклічний буфер. Отже, після того як стік був завантажений 8 разів, дев'яте завантаження перепише значення першої. Десяте завантаження перепише другу і т.д. Якщо стік був вивантажений 9 разів, лічильник команд стає таким же, як після першого вивантаження. Ознак положення стека в контролері не передбачено, тому користувач повинен самостійно стежити за рівнем вкладення підпрограм. 5.2.8. Пряма і непряма адресації Коли виробляється пряма 9-бітна адресація, молодший 7 біт беруться як пряма адреса з коду операції, а два біти покажчика сторінок (RP1, RP0) з регістра статусу, як показано на мал. 5.7.
Рис. 5.7. Методи адресації даних. Ознакою непрямої адресації є звертання до регістра INDF. Будь-яка команда, що використовує INDF (адресу 00h) як регістр фактично звертається до покажчика, що зберігається в FSR (адреса 04h). Читання непрямим образом самого регістра INDF дасть результат 00h. Запис у регістр INDF непрямим образом буде виглядати як NOP, але біти статусу можуть бути змінені. Необхідний 9-бітна адреса формується об'єднанням умісту 8-бітного FSR регістра і біта IRP з регістра статусу (див. мал. 5.7). Зверніть увагу, що деякі регістри спеціальних функцій розташовуються в банку 1. Щоб адресуватися до них, потрібно додатково встановити в одиницю біт RP0 у регістрі статусу. 5.2.9. Порти вводу/виводу Контролери підгрупи PIC16F8X мають два порти: PORTA (5 біт) і PORTB (8 біт) з побітовим індивідуальним настроюванням на вводу або на вивід. Порт A (PORTA) являє собою 5-бітовий фіксатор, що відповідає виводам контролера RA<4:0>. Лінія RA4 має вхід тригера Шмитта і вихід з відкритим стоком. Всі інші лінії порту мають ТТЛ вхідні рівні і КМОП вихідні буферы. Адреса регістра порту А - 05h. Кожної лінії порту поставлений у відповідність біт напрямку передачі даних, що зберігається в керуючому регістрі TRISA, розташованому за адресою 85h. Якщо біт керуючого TRISA регістра має значення 1, то відповідна лінія буде встановлюватися на вводу. Нуль перемикає лінію на вивід і одночасно виводить на неї вміст відповідного регістра-фіксатора порту. При включенні живлення всі лінії порту за замовчуванням настроєні на вводу. На мал. 5.8 дана схема ліній RA<3:0> порту A.
Рис. 5.8. Схема ліній RA <3:0 порту А. Виводи порту мають захисні діоди до Vdd і Vss Операція читання порту А зчитує стан виводів порту, у той час як запис у нього змінює стан тригерів порту. Всі операції з портом є операціями типу " читання-модифікація-запис". Тому запис у порт припускає, що стан виводів порту спочатку зчитується, потім модифікується і записується в тригер-фіксатор. Вивід RA4 мультиплексирован з тактовим входом таймера TMR0. Схема лінії RA4 порти А наведений на мал. 5.9. Порт В (PORTB) - це двунаправленный 8-бітовий порт, що відповідає виводам RB<7:0> контролера і розташований за адресою 06h. Стосовний до порту В керуючий регістр TRISB розташований на першій сторінці регістрів за адресою 86h. Якщо біт керуючого TRISB регістра має значення 1, то відповідна лінія буде встановлюватися на вводу. Нуль перемикає лінію на вивід і одночасно виводить на неї вміст відповідного регістра засувки. При включенні живлення всі лінії порту за замовчуванням настроєні на вводу.
Рис. 5.9. Схема лінії RA4 порти А. Вивід порту має захисний діод тільки до Vss. У кожної ніжки порту В є невелике активне навантаження (близько 100мкА) на лінію живлення ( pull-up). Вона автоматично відключається, якщо ця ніжка запрограмована як вивід. Більше того, керуючий біт /RBPU регістра OPTION<7> може відключити (при RBPU=1) всі навантаження. Скидання при включенні живлення також відключає всі навантаження. Чотири лінії порту В (RB<7:4>) можуть викликати переривання при зміні значення сигналу на кожній з них. Якщо ці лінії настроєні на вводу, то вони опрашиваются і защелкиваются в циклі читання Q1. Нова величина вхідного сигналу рівняється зі старої в кожному командному циклі. При розбіжності значення сигналу на ніжці і у фіксаторі генерується високий рівень. Виходи детекторів "розбіжностей" RB4, RB5, RB6, RB7 поєднуються по АБО і генерують переривання RBIF (запам'ятовується в регістрі INTCON<0>). Будь-яка лінія, настроєна як вивід, у цьому порівнянні не бере участь. Переривання може вивести кристал з режиму SLEEP. У підпрограмі обробки переривання варто скинути запит переривання одним з наступних способів: прочитати (або записати в) порт В. Це завершить стан порівняння; обнулить біт RBIF регістра INTCON<0>. При цьому необхідно мати на увазі, що умова "розбіжності" буде продовжувати встановлювати ознака RBIF. Тільки читання порту В може усунути "розбіжність" і дозволить обнулить біт RBIF. Переривання по розбіжності і програмно встановлювані внутрішні активні навантаження на цих чотирьох лініях можуть забезпечити простий інтерфейс, наприклад, із клавіатурою, з виходом з режиму SLEEP по натисканню клавіш. Схеми ліній порту B наведені на мал. 5.10 і 5.11.
Рис. 5.10. Схема ліній RB <7:4 порти B. Виводи порту мають захисні діоди до Vdd і Vss.
Рис. 5.11. Схема ліній RB <3:0 порту B. Виводи порту мають захисні діоди до Vdd і Vss При організації двунаправленных портів необхідно враховувати особливості організації вводу/виводу даних МК. Будь-яка команда, що здійснює запис, виконує її усередині як " читання-модифікація-запис". Наприклад, команди BCF і BSF зчитують порт цілком, модифікують один біт і виводять результат назад. Тут необхідна обережність. Зокрема, команда BSF PORTB, 5 (установити в одиницю біт 5 порту B) спочатку зчитує всі реальні значення сигналів, що є присутнім у цей момент на виводах порту. Потім виконуються дії над битому 5, і нове значення байта цілком записується у вихідні фіксатори. Якщо інший біт регістра PORTB використовується в якості двунаправленного вводу/виводу (скажемо, біт 0), і в цей момент він визначений як вхідний, то вхідний сигнал на цьому виводі буде лічений і записаний назад у вихідний тригер-фіксатор цього ж виводу, стираючи попередній стан. Доти, поки ця ніжка залишається в режимі вводу, ніяких проблем не виникає. Однак якщо пізніше лінія 0 перемкнеться в режим виводу, її стан буде невизначеним. На ніжку, що працює в режимі виводу, не повинні навантажуватися зовнішні джерела струмів ("монтажне И", "монтажне АБО"). Більші результуючі струми можуть ушкодити кристал. Необхідно витримувати певну послідовність звертання до портів вводу/виводу. Запис у порт виводу відбувається наприкінці командного циклу. Але при читанні дані повинні бути стабільні на початку командного циклу. Будьте уважні в операціях читання, що випливають відразу за записом у той же порт. Тут треба враховувати инерционность установлення напруги на виводах. Може знадобитися програмна затримка, щоб напруга на ніжці (яке залежить від навантаження) встигло стабілізуватися до початку виконання наступної команди читання. Далі » 5.2.10. Модуль таймера і регістр таймера Структура модуля таймера/лічильника TIMER0 і його взаємозв'язок з регістрами TMR0 і OPTION показані на мал. 5.12. TIMER0 є програмувальним модулем і містить наступні компоненти: 8-розрядний таймер/лічильник TMR0 з можливістю читання і запису як регістр; 8-розрядний програмно керований попередній дільник (предделитель); мультиплексор вхідного сигналу для вибору внутрішнього або зовнішнього тактового сигналу; схему вибору фронту зовнішнього тактового сигналу; формувач запиту переривання по переповненню регістра TMR0 з FFh до 00h. Режим таймера вибирається шляхом скидання в нуль біта T0CS регістра OPTION <5>. У режимі таймера TMR0 инкрементируется кожний командний цикл (без предільника). Після запису інформації в TMR0 инкрементирование його почнеться після двох командних циклів. Це відбувається з усіма командами, які роблять запис або читання-модифікацію-запис TMR0 (наприклад, MOVF TMR0, CLRF TMR0). Уникнути цього можна за допомогою запису в TMR0 скоректованого значення. Якщо TMR0 потрібно перевірити на рівність нулю без останова рахунку, варто використовувати інструкцію MOVF TMR0,W. Режим лічильника вибирається шляхом установки в одиницю біта T0CS регістра OPTION<5>. У цьому режимі регістр TMR0 буде инкрементироваться або наростаючої, або спадаючим фронтом на виводі RA4/T0CKI від зовнішніх подій. Напрямок фронту визначається керуючої битому T0SE у регістрі OPTION<4>. При T0SE = 0 буде обраний наростаючий фронт. Предделитель може використовуватися або разом з TMR0, або зі сторожовим (Watchdog) таймером. Варіант підключення дільника контролюється битому PSA регістра OPTION<3>. При PSA=0 дільник буде приєднаний до TMR0. Уміст дільника програмі недоступно. Коефіцієнт розподілу предільника програмується бітами PS2...PS0 регістра OPTION<2:0>.
Рис. 5.12. Структурна схема таймера/лічильника TMR0. Переривання по TMR0 виробляється тоді, коли відбувається переповнення регістра таймера/лічильника при переході від FFh до 00h. Тоді встановлюється біт запиту T0IF у регістрі INTCON<2>. Дане переривання можна замаскувати битому T0IE у регістрі INTCON<5>. Біт запиту T0IF повинен бути скинутий програмно при обробці переривання. Переривання по TMR0 не може вивести процесор з режиму SLEEP тому, що таймер у цьому режимі не функціонує. При PSA=1 дільник буде приєднаний до сторожового таймера як постделитель (дільник на виході). Можливі варіанти використання предільника показані на мал. 5.13. При використанні предільника разом з TMR0, всі команди, що змінюють уміст TMR0, обнуляют предделитель. Якщо предделитель використовується разом з WDT, команда CLRWDT обнуляет уміст предільника разом з WDT. При використанні модуля TIMER0 у режимі лічильника зовнішніх подій необхідно враховувати те, що зовнішній тактовий сигнал синхронізується внутрішньою частотою Fosc. Це приводить до появи затримки в часі фактичного инкрементирования вмісту TMR0. Синхронізація відбувається по закінченні 2-го і 4-го тактів роботи МК, тому, якщо предделитель не використовується, то для фіксації вхідної події необхідно, щоб тривалості високого і низького станів сигналу на вході RA4/T0CKI були б не менш 2 періодів тактової частоти Tosc плюс деяка затримка ( ~ 20 нс). Якщо модуль TIMER0 використовується разом із предільником, то частота вхідного сигналу ділиться асинхронним лічильником так, що сигнал на виході предільника стає симетричним. При цьому необхідно, щоб тривалості високого і низького рівнів сигналу на вході RA4/T0CKI були б не менш 10 нс. Синхронізація сигналу відбувається на виході предільника, тому існує невелика затримка між фронтом зовнішнього сигналу і часом фактичного инкремента таймера/лічильника. Ця затримка перебуває в діапазоні від 3 до 7 періодів коливань тактового генератора. Таким чином, вимір інтервалу між подіями буде виконано з точністю ±4 · Tosc.
Рис. 5.13. Структура і можливі варіанти використання предільника. 5.2.11. Пам'ять даних у РПЗУ (EEPROM) Мікроконтролери підгрупи PIC6F8X мають енергонезалежну пам'ять даних 64х8 EEPROM біт, що допускає запис і читання під час нормальної роботи (у всьому діапазоні живлячих напруг). Ця пам'ять не належить області регістрової пам'яті ОЗП. Доступ до неї здійснюється за допомогою непрямої адресації через регістри спеціальних функцій: EEDATA <08h>, що містить 8-бітові дані для читання/запису і EEADR <09h>, що включає адреса осередку, до якого йде обіг. Для керування процесом читання/запису використовуються два регістри: EECON1 <88h> і EECON2 <89h>. При записі байта автоматично стирається попереднє значення, і записуються нові дані (стирання перед записом). Всі ці операції робить убудований автомат запису EEPROM. Уміст осередків цієї пам'яті при вимиканні живлення зберігається. Регістр EEADR може адресувати до 256 байт даних EEPROM. У МК підгрупи PIC6F8X використовуються тільки перші 64 байта, адресуемые шістьома молодшими бітами EEADR<5:0>. Однак старші два біти також декодируются. Тому ці два біти повинні бути встановлені в '0', щоб адреса потрапила в доступні 64 біта адресного простору. Призначення біт регістра EECON1 наведене в табл. 5.6. Таблиця 5.6. Призначення біт регістра EECON1 (адреси 88h).U U U R/ W-0 R/ W-x R/ W-0 R/ S-0 R/ S-x - - - EEIF WRERR WREN WR RD Біт 7 Біт 6 Біт 5 Біт 4 Біт 3 Біт 2 Біт 1 Біт 0 Біти 7:5 не використовуються (читаються як '0') Біт 4: EEIF: біт запиту переривання по записі в EEPROM 0 = операція запису не завершена або не починалася 1 = операція запису завершена (повинен бути скинутий програмно) Біт 3: WRERR: біт ознаки помилки запису в EEPROM 0 = операція запису завершена 1 = операція запису перервана передчасно (скиданням по /MCLR або скиданням від WDT) Біт 2: WREN: біт дозволу запису в EEPROM 0 = заборонений запис в EEPROM 1 = дозволені цикли запису Біт 1: WR: біт керування записом 0 = цикл запису даних в EEPROM завершений 1 = ініціює цикл запису (скидається апаратно по завершенні запису. Біт WR може бути тільки встановлений (але не скинутий) програмно) Біт 0: RD: біт керування читанням 0 = читання даних EEPROM не ініційоване 1 = ініціює читання даних EEPROM (читання займає один цикл. Біт RD скидається апаратно. Біт RD може бути тільки встановлений (але не скинутий) програмно) Регістр EECON2 не є фізичним регістром. Він використовується винятково при організації запису даних в EEPROM. Читання регістра EECON2 дає нулі. При зчитуванні даних з пам'яті EEPROM необхідно записати потрібну адресу в EEADR регістр і потім установити біт RD EECON1<0> в одиницю. Дані з'являться в наступному командному циклі в регістрі EEDATA і можуть бути прочитані. Дані в регістрі EEDATA фіксуються. При записі на згадку EEPROM необхідно спочатку записати адреса в EEADR-Регістр і дані в EEDATA-Регістр. Потім варто виконати спеціальну послідовність команд, що робить безпосередній запис: movlw 55h movwf EECON2 movlw AAh movwf EECON2 bsf EECON1,WR;установити WR біт, почати запис Під час виконання цієї ділянки програми всі переривання повинні бути заборонені, для точного виконання тимчасової діаграми. Час запису - приблизно 10 мс. Фактичний час запису може змінюватися залежно від напруги, температури і індивідуальних властивостей кристала. Наприкінці запису біт WR автоматично обнуляется, а прапор завершення запису EEIF, він же запит на переривання, установлюється. Для запобігання випадкових записів на згадку даних передбачений спеціальний біт WREN у регістрі EECON1. Рекомендується тримати біт WREN виключеним, крім тих випадків, коли потрібно обновити пам'ять даних. Більше того, кодові сегменти, які встановлюють біт WREN, і ті, які виконують запис, варто зберігати на різних адресах, щоб уникнути випадкового виконання їх обох при збої програми. 5.2.12. Організація переривань МК підгрупи PIC16F8X мають чотири джерела переривань: зовнішнє переривання з виводу RB0/INT; переривання від переповнення лічильника/таймера TMR0; переривання від зміни сигналів на лініях порту RB<7:4>; переривання по закінченні запису даних в EEPROM. Всі переривання мають той самий вектор/адреса - 0004h. Однак у керуючому регістрі переривань INTCON відповідним бітом-ознакою записується, від якого саме джерела надійшов запит переривання. Виключення становить переривання по завершенні запису в EEPROM, ознака якого перебуває в регістрі EECON1. Біт загального дозволу/заборони переривання GIE (INTCON <7>) дозволяє (якщо = 1) все индивидуально незамасковані переривання або забороняє їх (якщо = 0). Кожне переривання окремо може бути додатково дозволено/заборонено установкою/скиданням відповідного біта в регістрі INTCON. Біт GIE при скиданні обнуляется. Коли починає оброблятися переривання, біт GIE обнуляется, щоб заборонити подальші переривання, адреса повернення посилає в стек, а в програмний лічильник завантажується адреса 0004h. Час реакції на переривання для зовнішніх подій, таких як переривання від ніжки INT або порту B, становить приблизно п'ять циклів. Це на один цикл менше, ніж для внутрішніх подій, таких як переривання по переповненню від таймера TMR0. Час реакції завжди однакове. У підпрограмі обробки переривання джерело переривання може бути визначений по відповідному біті в регістрі ознак. Цей прапор-ознака повинен бути програмно скинутий усередині підпрограми. Ознаки запитів переривань не залежать від відповідних що маскують битов і біта загального маскирования GIE. Команда повернення з переривання RETFIE завершує підпрограму, що перериває, і встановлює біт GIE, щоб знову дозволити переривання. Логіка переривань контролера зображена на мал. 5.14.
Рис. 5.14. Логіка переривань мікроконтролера. Зовнішнє переривання на ніжці RB0/INT здійснюється по фронті: або по наростаючий (якщо в регістрі OPTION біт INTEDG=1), або по спадаючий (якщо INTEDG=0). Коли фронт виявляється на ніжці INT, біт запиту INTF установлюється в одиницю (INTCON <1>). Це переривання може бути замасковано скиданням керуючого біта INTE у нуль (INTCON <4>). Біт запиту INTF необхідно очистити програмою, що перериває, перед тим, як знову дозволити це переривання. Переривання INT може вивести процесор з режиму SLEEP, якщо перед входом у цей режим біт INTE був установлений в одиницю. Стан біта GIE також визначає, чи буде процесор переходити на підпрограму переривання після виходу з режиму SLEEP. Переповнення лічильника TMR0 (FFh->00h) установлює в одиницю біт запиту T0IF (INTCON<2>). Це переривання може бути дозволено/заборонено установкою/скиданням біта маски T0IE (INTCON<5>). Скидання запиту T0IF - справа програми обробки. Будь-яка зміна сигналу на одному із чотирьох входів порту RB<7:4> установлює в одиницю біт RBIF (INTCON<0>). Це переривання може бути дозволено/заборонено установкою/скиданням біта маски RBIE (INTCON<3>). Скидання запиту RBIF - справа програми обробки. Ознака запиту переривання по завершенні запису в EEPROM, EEIF (EECON1<4>) установлюється в одиницю по закінченні автоматичного запису даних в EEPROM. Це переривання може бути замасковано скиданням біта EEIE (INTCON<6>). Скидання запиту EEIF - справа програми обробки. ПРОПУСК
Тема. Проектування пристроїв на мікроконтролерах Лекція: Особливості розробки цифрових пристроїв на основі мікроконтролерів 6.1. Розробка мікропроцесорної системи на основі мікроконтролера 6.1.1. Основні етапи розробки МПС на основі МК використовуються найчастіше як вбудовані системи для рішення задач керування деяким об'єктом. Важливою особливістю даного застосування є робота в реальному часі, тобто забезпечення реакції на зовнішні події протягом певного часового інтервалу. Такі пристрої одержали назву контролерів. Технологія проектування контролерів на базі МК повністю відповідає принципу нерозривного проектування і налагодження апаратних і програмних засобів, прийнятому в мікропроцесорній техніці. Це означає, що перед розроблювачем такого роду МПС стоїть завдання реалізації повного циклу проектування, починаючи від розробки алгоритму функціонування і закінчуючи комплексними випробуваннями в складі виробу, а, можливо, і супроводом при виробництві. Сформована до теперішнього часу методологія проектування контролерів може бути представлена так, як наведено на рис. 6.1. У технічному завданні формулюються вимоги до контролера з погляду реалізації певної функції керування. Технічне завдання містить у собі набір вимог, що визначає, що користувач хоче від контролера і що розроблювальний прилад повинен робити. Технічне завдання може мати вигляд текстового опису, не вільного в загальному випадку від внутрішніх протиріч.
Рис. 6.1. Основні етапи розробки контролера. На підставі вимог користувача складається функціональна специфікація, що визначає функції, виконувані контролером для користувача після завершення проектування, уточнюючи тим самим, наскільки пристрій відповідає пропонованим вимогам. Вона містить у собі опису форматів даних, як на вході, так і на виході, а також зовнішні умови, що управляють діями контролера. Функціональна специфікація і вимоги користувача є критеріями оцінки функціонування контролера після завершення проектування. Може знадобитися проведення декількох ітерацій, що включають обговорення вимог і функціональної специфікації з потенційними користувачами контролера, і відповідну корекцію вимог і специфікації. Вимоги до типу використовуваного МК формулюються на даному етапі найчастіше в неявному виді. Етап розробки алгоритму керування є найбільш відповідальним, оскільки помилки даного етапу звичайно виявляються тільки при випробуваннях закінченого виробу і приводять до необхідності дорогої переробки всього пристрою. Розробка алгоритму звичайно зводиться до вибору одного з декількох можливих варіантів алгоритмів, що відрізняються співвідношенням обсягу програмного забезпечення і апаратних засобів. При цьому необхідно виходити з того, що максимальне використання апаратних засобів спрощує розробку і забезпечує високу швидкодію контролера в цілому, але супроводжується, як правило, збільшенням вартості і споживаної потужності. Зв'язано це з тим, що збільшення частки апаратних засобів досягається або шляхом вибору більш складного МК, або шляхом використання спеціалізованих інтерфейсних схем. І те, і інше приводить до росту вартості і енергоспоживання. Збільшення питомої ваги програмного забезпечення дозволяє скоротити число елементів контролера і вартість апаратних засобів, але це приводить до зниження швидкодії, збільшенню необхідного обсягу внутрішньої пам'яті МК, збільшенню строків розробки і налагодження програмного забезпечення. Критерієм вибору тут і далі є можливість максимальної реалізації заданих функцій програмними засобами при мінімальних апаратних витратах і за умови забезпечення заданих показників швидкодії і надійності в повному діапазоні умов експлуатації. Часто визначальними вимогами є можливість захисту інформації (програмного коду) контролера, необхідність забезпечення максимальної тривалості роботи в автономному режимі і інші. У результаті виконання цього етапу остаточно формулюються вимоги до параметрів використовуваного МК. При виборі типу МК враховуються такі основні характеристики: - розрядність; - швидкодія; - набір команд і способів адресації; - вимоги до джерела живлення і споживана потужність у різних режимах; - обсяг ПЗП програм і ОЗП даних; - можливості розширення пам'яті програм і даних; - наявність і можливості периферійних пристроїв, включаючи засоби підтримки роботи в реальному часі (таймери, процесори подій і т.п.); - можливість перепрограмування в складі пристрою; - наявність і надійність засобів захисту внутрішньої інформації; - можливість поставки в різних варіантах конструктивного виконання; - вартість у різних варіантах виконання; - наявність повної документації; - наявність і доступність ефективних засобів програмування і налагодження МК; - кількість і доступність каналів поставки, можливість заміни виробами інших фірм. Список цей не є вичерпном, оскільки специфіка проектованого пристрою може перенести акцент вимог на інші параметри МК. Визначальними можуть виявитися, наприклад, вимоги до точності внутрішнього компаратора напруг або наявність великої кількості вихідних каналів ШІМ. Номенклатура, що випускаються в даний час МК обчислюється тисячами типів виробів різних фірм. Сучасна стратегія модульного проектування забезпечує споживача розмаїтістю моделей МК із тим самим процесорним ядром. Така структурна розмаїтість відкриває перед розроблювачем можливість вибору оптимального МК, що не має функціональної надлишковості, що мінімізує вартість комплектуючих елементів. Однак для реалізації на практиці можливості вибору оптимального МК необхідне досить глибоке пророблення алгоритму керування, оцінка обсягу виконуваної програми і кількості ліній сполучення з об'єктом на етапі вибору МК. Допущені на даному етапі прорахунки можуть згодом привести до необхідності зміни моделі МК і повторного розведення друкованої плати макета контролера. У таких умовах доцільно виконувати попереднє моделювання основних елементів прикладної програми з використанням програмно-логічної моделі обраного МК. При відсутності МК, що забезпечує необхідні по ТЗ характеристики проектованого контролера, необхідне повернення до етапу розробки алгоритму керування і перегляд обраного співвідношення між обсягом програмного забезпечення і апаратних засобів. Відсутність підходящого МК найчастіше означає, що для реалізації необхідного обсягу обчислень (алгоритмів керування) за відведений час потрібна додаткова апаратна підтримка. Негативний результат пошуку МК із необхідними характеристиками може бути зв'язаний також з необхідністю обслуговування великої кількості об'єктів керування. У цьому випадку можливе використання зовнішніх схем обрамлення МК. На етапі розробки структури контролера остаточно визначається склад наявних і таких, що необхідно розробити апаратних модулів, протоколи обміну між модулями, типи з’єднувачів. Виконується попереднє пророблення конструкції контролера. У частині програмного забезпечення визначаються склад і зв'язки програмних модулів, мова програмування. На цьому ж етапі здійснюється вибір засобів проектування і налагодження. Можливість перерозподілу функцій між апаратними і програмними засобами на даному етапі існує, але вона обмежена характеристиками вже обраного МК. При цьому необхідно мати на увазі, що сучасні МК випускаються, як правило, серіями (сімействами) контролерів, сумісних програмно і конструктивно, але вони розрізняються по своїх можливостях (обсяг пам'яті, набір периферійних пристроїв і т.д.). Це дає можливість вибору структури контролера з метою пошуку найбільш оптимального варіанта реалізації. Не можна не згадати тут про нову ідеологію розробки пристроїв на базі МК, запропонованою фірмою "Scenix". Вона заснована на використанні високошвидкісних RISC-мікроконтролерів серії SX з тактовою частотою до 100 Мгц. Ці МК мають мінімальний набір вбудованої периферії, а всі складніші периферійні модулі емулюються програмними засобами. Такі модулі програмного забезпечення називаються "віртуальними периферійними пристроями", вони забезпечують зменшення числа елементів контролера, часу розробки, збільшують гнучкість виконання. На даний час розроблені цілі бібліотеки віртуальних пристроїв, що містять налагоджені програмні модулі таких пристроїв як модулі ШІМ і ФАПЧ, послідовні інтерфейси, генератори і вимірювачі частоти, контролери переривань та інші. 6.1.2. Розробка і налагодження апаратних засобів Після розробки структури апаратних і програмних засобів подальша робота над контролером може бути розпаралелена. Розробка апаратних засобів містить у собі розробку загальної принципової схеми, розведення топології плат, монтаж макета і його автономне налагодження. Час виконання цих етапів залежить від наявного набору апробованих функціонально-топологічних модулів, досвіду і кваліфікації розроблювача. На етапі вводу принципової схеми і розробки топології використовуються, як правило, розповсюджені системи проектування типу "ACCEL EDA" або "OrCad". Автономне налагодження апаратури на основі МК із відкритою архітектурою допускає контроль стану багаторозрядних магістралей адреси і даних з метою перевірки правильності звертання до зовнішніх ресурсів пам'яті і периферійних пристроїв. Закрита архітектура МК припускає реалізацію більшості функцій розроблювального пристрою внутрішніми засобами мікроконтролера. Тому розроблювальний контролер буде мати малу кількість периферійних ІС, а обмін з ними буде йти переважно по послідовних інтерфейсах. Тут на перший план вийдуть питання узгодження по навантажувальній здатності паралельних портів МК і налагодження алгоритмів обміну по послідовних каналах. 6.1.3. Розробка і налагодження програмного забезпечення Зміст етапів розробки програмного забезпечення, його трансляції і налагодження на моделях істотно залежить від використовуваних системних засобів. У цей час ресурси 8-розрядних МК достатні для підтримки програмування на мовах високого рівня. Це дозволяє використовувати всі переваги структурного програмування, розробляти програмне забезпечення з використанням роздільно трансльованих модулів. Одночасно продовжують широко використовуватися мови низького рівня типу асемблера, особливо при необхідності забезпечення контрольованих інтервалів часу. Завдання попередньої обробки даних часто вимагають використання обчислень із плаваючою крапкою, трансцендентних функцій. У даний час самим потужним засобом розробки програмного забезпечення для МК є інтегровані середовища розробки, що мають у своєму составі менеджер проектів, текстовий редактор і симулятор, а також допускають підключення компіляторів мов високого рівня типу Паскаль або Си. При цьому необхідно мати на увазі, що архітектура багатьох 8-розрядних МК внаслідок малої кількості ресурсів, сторінкового розподілу пам'яті, незручної індексної адресації і деяких інших архітектурних обмежень не забезпечує компіляторові можливості генерувати ефективний код. Для обходу цих обмежень розроблювачі ряду компіляторів змушені були перекладати на користувача турботу про оптимізацію коду програми. Для перевірки і налагодження програмного забезпечення використовуються так звані програмні симулятори, що надають користувачеві можливість виконувати розроблену програму на програмно-логічній моделі МК. Програмні симулятори поширюються, як правило, безкоштовно і сконфігурировані відразу на декілька МК одного сімейства. Вибір конкретного типу МК серед моделей сімейства забезпечує відповідна опція меню конфігурації симулятора. При цьому моделюється робота ЦП, всіх портів вводу/виводу, переривань і іншої периферії. Карта пам'яті модельованого МК завантажується в симулятор автоматично, налагодження ведеться в символьних позначеннях регістрів. Завантаживши програму в симулятор, користувач має можливість запускати її в покроковому або безперервному режимах, задавати умовні або безумовні точки останова, контролювати і вільно модифікувати вміст комірок пам'яті і регістрів симульованого МК. 6.1.4. Методи і засоби спільного налагодження апаратних і програмних засобів Етап спільного налагодження апаратних і програмних засобів у реальному масштабі часу є самим трудомістким і вимагає використання інструментальних засобів налагодження. До числа основних інструментальних засобів налагодження відносяться: - внутрісхемні емулятори; - плати розвитку (оціночні плати); - монітори налагодження; - емулятори ПЗП. Внутрісхемний емулятор - програмно-апаратний засіб, здатний замінити емульований МК у реальній схемі. Стикування внутрісхемного емулятора з відлагоджувальною системою проводиться за допомогою кабелю зі спеціальноою емуляційною головкою, що вставляється замість МК в відлагоджувальну систему. Якщо МК не можна видалити з відлагоджувальної системи, то використання емулятора можливо, тільки якщо цей мікроконтролер має режим відлагодження, при якому всі його виводи перебувають у третьому стані. У цьому випадку для підключення емулятора використовують спеціальний адаптер-кліпсу, що підключається безпосередньо до виводів емульованого МК. Внутрісхемний емулятор - це найбільш потужний і універсальний відлагоджувальний засіб, що робить процес функціонування відлагоджуваного контролера прозорим, тобто легко контрольованим, довільно керованим і модифікованим. Плати розвитку, або, як прийнято їх називати в закордонній літературі, оціночні плати (Evaluation Boards), є свого роду конструкторами для макетування електронних пристроїв. Звичайно це друкована плата із встановленим на ній МК і всієї необхідною йому стандартною периферією. На цій платі також встановлюють схеми зв'язку із зовнішнім комп'ютером. Як правило, там же є вільне поле для монтажу прикладних схем користувача. Іноді передбачена вже готове розведення для установки додаткових пристроїв, що рекомендуються фірмою, наприклад, ПЗП, ОЗП, РКІ-дисплей, клавіатура, АЦП і ін. Крім навчальних або макетних цілей, такі дороблені користувачем плати можна використовувати як одноплатні контролери, що вбудовуються в малосерійну продукцію. Для більшої зручності плати розвитку комплектуються ще і найпростішим засобом налагодження на базі монітора налагодження. Використовуються два типи моніторів налагодження: один для МК, що мають зовнішню шину, а другий - для МК, що не мають зовнішньої шини. У першому випадку відлагоджуваний монітор поставляється у вигляді мікросхеми ПЗП, що вставляється в спеціальну розетку на платі розвитку. Плата також має ОЗП для програм користувача і канал зв'язку із зовнішнім комп'ютером або терміналом. У другому випадку плата розвитку має вбудовані схеми програмування внутрішнього ПЗП МК, які управляються від зовнішнього комп'ютера. При цьому програма монітора просто заноситься в ПЗП МК разом із прикладними кодами користувача. Прикладна програма повинна бути спеціально підготовлена: у потрібні місця необхідно вставити виклики відлагоджуваних підпрограм монітора. Потім здійснюється пробний прогін. Щоб внести в програму виправлення, користувачеві треба стерти ПЗП і зробити повторний запис. Готову прикладну програму одержують із налагодженої шляхом видалення всіх викликів моніторних функцій і самого монітора налагодження. Можливості налагодження, надавані комплектом "плата розвитку плюс монітор", не настільки універсальні, як можливості внутрісхемного емулятора, та і деяка частина ресурсів МК у процесі налагодження відбирається для роботи монітора. Проте, наявність набору готових програмно-апаратних засобів, що дозволяють без втрати часу приступитися до монтажу і налагодження проектованої системи, у багатьох випадках є вирішальним чинником. Емулятор ПЗП - програмно-апаратний засіб, що дозволяє заміщати ПЗП на відлагоджуваній платі, і підставляє замість нього ОЗП, у яке може бути завантажена програма з комп'ютера через один зі стандартних каналів зв'язку. Цей пристрій дозволяє користувачеві уникнути багаторазових циклів перепрограмування ПЗП. Емулятор ПЗП потрібний тільки для МК, які можуть звертатися до зовнішньої пам'яті програм. Цей пристрій порівнянний по складності і за вартістю із платами розвитку і має одну велику дперевагу: універсальність. Емулятор ПЗП може працювати з будь-якими типами МК. Емульована пам'ять доступна для перегляду і модифікації, але контроль над внутрішніми керуючими регістрами МК був донедавна неможливий. Останнім часом з'явилися моделі інтелектуальних емуляторів ПЗП, які дозволяють "заглядати" усередину МК на платі користувача. Інтелектуальні емулятори являють собою гібрид зі звичайного емулятора ПЗП, монітора налагодження і схем швидкого перемикання шини з однієї на іншу. Це створює ефект, як якби монітор налагодження був установлений на платі користувача і при цьому він не займає в МК ніяких апаратних ресурсів, крім невеликої зони програмних кроків, приблизно 4К. Етап спільного налагодження апаратних і програмних засобів у реальному масштабі часу завершується, коли апаратура і програмне забезпечення спільно забезпечують виконання всіх кроків алгоритму роботи системи. Наприкінці етапу налагоджена програма заноситься за допомогою програматора в енергонезалежну пам'ять МК, і перевіряється робота контролера без емулятора. При цьому використовуються лабораторні джерела живлення. Частина зовнішніх джерел сигналів може моделюватися. Етап інтеграції розробленого контролера у виріб полягає в повторенні робіт зі спільного налагодження апаратури і керуючої програми, але при роботі в складі виробу, живленні від штатного джерела і з інформацією від штатних джерел сигналів і датчиків. Склад і обсяг випробувань розробленого і виготовленого контролера залежить від умов його експлуатації і визначається відповідними нормативними документами. Проведення випробувань таких функціонально складних виробів, як сучасні контролери, може зажадати розробки спеціалізованих засобів контролю стану виробу під час випробувань.
12. Лекція: Розробка програмного забезпечення для PIC-Мікроконтролерів Сторінки: 1 | 2 | 3 | 4 | 5 | питання | » для печатки і PDA Якщо Ви помітили помилку - повідомите нас або виділите її і натисніть Ctrl+Enter Включити коментарі || Допомога У цій лекції розповідається про основні етапи проектування і розробки цифрових пристроїв і систем на основі мікроконтролерів, а також приводиться огляд методів спільного налагодження апаратних і програмних засобів.
6.2. Розробка програмного забезпечення для PIC-Мікроконтролерів Розробка програмного забезпечення є центральним моментом загального процесу проектування. Центр ваги функціональних властивостей сучасних цифрових систем перебуває саме в програмних засобах. Основним інструментом для професійної розробки програм є асемблер, що припускає деталізацію на рівні команд МК. Тільки асемблер дозволяє максимально використовувати ресурси кристала. Для мікроконтролерів PIC випущена велика кількість різних засобів розробки. У даній главі мова йтиме про засоби, надаваних фірмою Microchip, які досить ефективні і широко використовуються на практиці. 6.2.1. Асемблер MPASM Асемблер MPASM являє собою інтегроване програмне середовище для розробки програмних кодів PIC мікроконтролерів всіх сімейств. Випускається фірмою Microchip у двох варіантах: для роботи під DOS і для роботи під Windows 95/98/NT. Асемблер MPASM може використовуватися як самостійно, так і в складі інтегрованого середовища розробки MPLAB. Він включає кілька програм: властиво MPASM, MPLINK і MPLIB, причому кожна з них має власний інтерфейс. Програма MPASM може використовуватися для двох цілей: генерації що виконується (абсолютного) коду, призначеного для запису в МК за допомогою программатора; генерації переміщуваного об'єктного коду, що потім буде пов'язаний з іншими ассемблированными або компилированными модулями. Код, що виконується, є для MPASM вихідним кодом за замовчуванням. При цьому всі змінні джерела повинні бути явно описані в тексті програми або у файлі, що підключається за допомогою директиви INCLUDE <filename>. Якщо при ассемблировании не виявляється помилок, то генерується вихідний .hex-файл, що може бути завантажений у МК за допомогою программатора. При використанні асемблера MPASM у режимі генерації переміщуваного об'єктного коду формуються об'єктні модулі, які можуть бути згодом об'єднані з іншими модулями за допомогою компоновщика MPLINK. Програма-Компоновщик MPLINK перетворить переміщувані об'єктні коди в бінарний код, що виконується, прив'язаний до абсолютних адрес МК. Бібліотечна утиліта MPLIB дозволяє для зручності роботи згрупувати переміщувані об'єкти в один файл або бібліотеку. Ці бібліотеки можуть бути зв'язані компоновщиком MPLINK у файл вихідного об'єктного коду асемблера MPASM. Програми MPASM і MPLINK доступні через оболонку MPASM, тоді як MPLIB доступна тільки зі свого командного рядка. Вихідним файлом для асемблера MPASM за замовчуванням є файл із розширенням .ASM. Текст вихідного файлу повинен відповідати вимогам синтаксису, наведеним далі. Асемблер MPASM може бути викликаний командним рядком MPASM [/<Option>[ /<Option>...]] <file_name> де /<Option> означає вибір режиму роботи асемблера в командному рядку; <file_name> - ім'я файлу на ассемблирование. Режими роботи асемблера, обрані за замовчуванням, наведені в табл. 6.1. Таблиця 6.1. Режими роботи асемблера за замовчуванням.Вибір Значення за замовчуванням Опис ? N/A Викликати допомога a INHX8M Генерувати абсолютний .COD і hex вихід безпосередньо з асемблера: c On Вибрати/заборонити випадок чутливості e On Вибрати/заборонити файл помилок h N/A Відобразити панель допомоги MPASM l On Вибрати/заборонити файл лістингу, генерований з макроасемблера. m On Викликати/заборонити макророзширення o N/A Установити шлях для об'єктних файлів /o<path>\object.file p None Установити тип процесора: /p<processor_type>; q Off Дозволити/Заборонити схований режим (заборонити вивід на екран) r Hex Визначає тип числа за замовчуванням: /r<radix> w 0 Визначає рівень діагностичних повідомлень у файлі лістингу /w<level>, де <level> може бути: 0 - повідомляти всі, 1 - повідомляти про попередження і помилки, 2 - повідомляти тільки про помилки. x Off Дозволити/заборонити перехресні посилання у файлі лістингу. Тут і далі використовуються наступні угоди по використанню символів: [ ] - для аргументів на вибір; < > - для виділення спеціальних ключів <TAB>, <ESC> або додаткового вибору; | - для взаємовиключних аргументів (вибір АБО); рядкові символи - для позначення типу даних. Вибір за замовчуванням, наведений у табл. 6.1, може бути змінений командним рядком: /<option> дозволяє вибір; /<option>+ дозволяє вибір; /<option> - забороняє вибір. Вихідний ассемблерный файл створюється з використанням будь-якого ASCII текстового редактора. Кожна лінія вихідного файлу може містити до чотирьох типів інформації: мітки (labels) мнемоніка (mnemonics) операнды (operands) коментар (comments) Порядок і положення кожного типу має значення. Мітка повинна починатися в колонку номер один. Мнемоніка може починатися в колонку два або далі. Операнды йдуть за мнемонікою. Коментар може випливати за операндом, мнемонікою або міткою або може починатися в будь-якому стовпці, якщо в якості першого не порожнього символу використовується * або ;. Максимальна довжина рядка 255 символів. Один або кілька пробілів повинні відокремлювати мітку і мнемоніку або мнемоніку і операнд(ы). Операнды можуть відділятися комі. Наприклад: List p=16C54, r=HEX ORG 0x1FF ;Вектор скидання GOTO START ;Повернення на початок ORG 0x000 ;Адреса початку виконання ;програми START MOVLW 0x0A ;Виконання програми ;PIC МК MOVLW 0x0B ;Виконувати завжди GOTO START END Мітки У поле мітки розміщається символічне ім'я комірки пам'яті, у якій зберігається відзначений операнд. Всі мітки повинні починатися в колонку 1. За ними може випливати двокрапка (:), пробіл, табуляція або кінець рядка. Коментар може також починатися в колонку 1, якщо використовується одне з позначень коментарю. Мітка може починатися із символу або нижнього тирі (_) і містити буквені символи, числа, нижні тире і знак питання. Довжина мітки може бути до 32 символів. Мнемоніки Мнемоніки являють собою мнемонічні позначення команди, які безпосередньо транслюються в машинний код. Мнемоніки ассемблерных інструкцій, директиви асемблера і макровиклики повинні починатися, принаймні, у колонку 2. Якщо є мітка на тій же лінії, вона повинна бути відділена від цієї мітки двокрапкою або одним або більше пробілами або табуляцією. Операнды У цьому полі визначаються операнды (або операнд), що беруть участь в операції. Операнды повинні бути відділені від мнемоніки одним або більше пробілами або табуляцією. Операнды відділяються друг від друга комами. Якщо операція вимагає фіксованого номера (числа) або операндов, то все на лінії після операндов ігнорується. Коментарі дозволяються наприкінці лінії. Якщо мнемоніки дозволяють використовувати різне число операндов, кінець списку операндов визначається кінцем рядка або коментарем. Вираження використовуються в поле операнда і можуть містити константи, символи або будь-які комбінації констант і символів, розділених арифметичними операторами. Перед кожною константою або символом може стояти + або -, що вказує на позитивне або негативне вираження. В асемблері MPASM використовуються наступні формати виражень: текстовий рядок; числові константи і Radix; арифметичні оператори і пріоритети; High / Low оператори. Текстовий рядок - це послідовність будь-яких припустимих ASCII символів (у десятковому діапазоні від 0 до 127), укладена в подвійні лапки. Рядок може мати будь-яку довжину в межах 132 колонок. При відсутності обмеження рядка вона вважається до кінця лінії. Якщо рядок використовується як буквений операнд, вона повинна мати довжину в один символ, інакше буде помилка. Числова константа являє собою число, виражене в деякій системі числення. Перед константою може стояти + або -. Проміжні величини в константах розглядаються як 32-розрядні цілі без знака. MPASM підтримує наступні системи числення (подання значень або Radix): шестнадцатиричную, десяткову, восьмиричную, двійкову і символьну. За замовчуванням приймається шестнадцатиричная система. Табл. 6.2 представляє різні системи числення. Оператори - це арифметичні символи, подібні + і -, які використовуються при формуванні виражень. Кожний оператор має свій пріоритет. У загальному випадку пріоритет установлюється ліворуч праворуч, а вираження в дужках оцінюються першими. У табл. 6.3 наведені позначення, описи і приклади застосування основних операторів MPASM. Таблиця 6.2. Системи числення (Radix).Тип Синтаксис Приклад Десяткова D'<цифри>' або .<цифри> D'100' або .100 16-ричная H'<цифри>' або 0x<цифри> H'9f' або 0x9f Восьмиричная O'<цифри>' O'777' Двійкова B'<цифри>' B'00111001' Символьна '<символ>' або A'<символ>' "C" або A'' Таблиця 6.3. Основні арифметичні оператори MPASMОператор Опис Приклад $ Поточний лічильник команд goto $ + 3 ( ліва дужка 1 + ( d * 4 ) ) права дужка ( lenght + 1 ) * 255 ! операція "НЕ" (логічна інверсія) if ! ( a - b ) ~ доповнення flags = ~ flags - інверсія (двійкове доповнення) – 1 * lenght High виділити старший байт слова movlw high llasid Low виділити молодший байт слова movlw low (llasid + .251) upper виділити найбільший байт слова movlw upper (llasid + .251) * Множення a = c * b / Розподіл a = b / c % Модуль lenght = totall % 16 + Додавання Tot_len = lenght * 8 + 1 - Вирахування Entry_Son = ( Tot – 1 ) / 8 << зрушення вліво Val = flags << 1 >> зрушення вправо Val = flags >> 1 >= більше або дорівнює if ent >= num > більше if ent > num < менше if ent < num <= менше або дорівнює if ent <= num == дорівнює if ent == num != не дорівнює if ent != num & поразрядное "И" flags = flags & err_bit ^ поразрядное " ЩОВИКЛЮЧАЄ АБО" flags = flags ^ err_bit | поразрядное "АБО" flags = flags | err_bit && логічне "И" if (len == 512)&&( b == c ) || логічне "АБО" if (len == 512 ) || ( b == c ) = установити рівним... entry_index = 0 ++ збільшити на 1 (инкремент) i ++ — зменшити на 1 (декремент) i — Оператори high, low і upper використовуються для одержання одного байта із многобайтного значення, що відповідає мітці. Застосовуються для керування розрахунком крапок динамічного переходу при читанні таблиць і запису програм. Оператори инкремента і декремента можуть застосовуватися до змінного тільки як єдиний оператор у рядку. Вони не можуть бути убудованим фрагментом більше складного вираження. Далі » Поле коментарю може використовуватися програмістом для текстового або символьного пояснення логічної організації програми. Поле коментарю повністю ігнорується асемблером, тому в ньому можна застосовувати будь-які символи. Коментарі, які використовуються в рядку самі по собі, повинні починатися із символу коментарю (* або ;). Коментарі наприкінці рядка повинні бути відділені від залишку рядка одним або більше пробілами або табуляцією. Розширення файлів, використовувані MPASM і утилітами Існує ряд розширень файлів, застосовуваних за замовчуванням MPASM і зв'язаними утилітами. Призначення таких розширень наведені в табл. 6.4. Таблиця 6.4. Используемые за замовчуванням призначення розширень файлів.Розширення Призначення .ASM Вхідний файл асемблера для MPASM <source_name>.ASM .OBJ Вихідний файл переміщуваного об'єктного коду з MPASM <source_name>.OBJ .LST Вихідний файл лістингу, генерируемый асемблером MPASM або MPLINK: <source_name>.LST .ERR Вихідний файл помилок з MPASM: <source_name>.ERR .MAP Вихідний файл розподілу пам'яті з MPASM: <source_name>.MAP .HEX Вихідний файл об'єктного коду в шестнадцатиричном поданні з MPASM: <source_name>.HEX .HXL/.HXH Вихідний файл об'єктного коду в шестнадцатиричном поданні c роздільним поданням молодших і старших байт: <source_name>.HXL, <source_name>.HXH .LIB Бібліотечний файл, створений MPLIB і прив'язаний компоновщиком MPLINK: <source_name>.LIB .LNK Вихідний файл компоновщика: <source_name>.LNK .COD Вихідний символьний файл або файл отладчика. Формуються MPASM або MPLINK: <source_name>.COD Лістинг являє собою текстовий файл у форматі ASCII, що містить машинні коди, сгенерированные відповідно до кожної ассемблерной командою, директивою асемблера або макрокомандою вихідного файлу. Файл лістингу містить: ім'я продукту і версії, дату і час, номер сторінки вгорі кожної сторінки. До складу лістингу входять також таблиця символів і карта використання пам'яті. У таблиці символів перераховуються всі символи, які є в програмі, і де вони визначені. Карта використання пам'яті дає графічне подання про витрату пам'яті МК. Директиви мови Директиви мови - це ассемблерные команди, які зустрічаються у вихідному коді, але не транслюються прямо у виконуються коды, що. Вони використовуються асемблером при трактуванні мнемоніки вхідного файлу, розміщенні даних і формуванні файлу лістингу. Існує чотири основних типи директив в MPASM: директиви даних; директиви лістингу; керуючі директиви; макро-директиви. Директиви даних управляють розподілом пам'яті і забезпечують доступ до символічних позначень даних. Директиви лістингу управляють лістингом файлу MPASM і форматом. Вони визначають специфікацію заголовків, генерацію сторінок і інші функції керування лістингом. Директиви керування дозволяють зробити секціонування звичайного ассемблерного коду. Макро-Директиви управляють виконанням і розподілом даних у межах визначень макротіла. Нижче приводиться опис деяких директив асемблера MPASM, використовуваних у даному навчальному посібнику. CODE - початок секції об'єктного коду Синтаксис: [<label>] code [ROM address>] Використовується при генерації об'єктних модулів. Повідомляє початок секції програмного коду. Якщо <label> не зазначена, секція буде названа code. Стартова адреса встановлюється рівним зазначеному значенню або нулю, якщо адреса не була зазначена. Приклад: RESET code H'01FF' goto START #DEFINE - визначити мітку заміни тексту Синтаксис: #define <name> [<string>] Директива задає рядок <string>, що заміщає мітку <name> щораз, коли та буде зустрічатися у вихідному тексті. Символи, які визначені директивою #DEFINE, не можуть бути переглянуті симулятором. Використовуйте замість цієї директиви EQU. Приклад
#define length 20 #define control 0x19,7 #define position (X,Y,Z) ( y-y-(2 * Z +X)). test_label dw position(1, length, 512) bsf control ; установити в 1 біт 7 в f19 END - кінець програмного блоку Синтаксис: end Визначає кінець програми. Після зупинки програми таблиця символів скидається у файл лістингу. Приклад: start ;виконується код ; end ; кінець програми EQU - визначити ассемблерную константу Синтаксис: <label> equ <expr> Тут <expr> - це правильне MPASM вираження. Значення вираження привласнюється мітці <label>. Приклад: four equ 4 ; привласнює чисельне значення ; мітці four INCLUDE - включити додатковий файл джерела Синтаксис: include <<include_file>> include "<include_file>" Обумовлений файл зчитується як джерело коду. По закінченні файлу, що включається, буде тривати ассемблирование исходника. Допускається до шести рівнів вкладеності. <include_file> може бути укладений у лапки або кутові дужки. Якщо зазначено повний шлях до файлу, то пошук буде відбуватися тільки цим шляхом. У противному випадку порядок пошуку наступний: поточний робітник каталог, каталог, у якому перебуває исходник, каталог MPASM. Приклад: include "c:\sys\sysdefs.inc" ; system defs include <addmain.asm> ; register defs LIST - установити параметри лістингу Синтаксис:
list [<list_option>, , <list_option>] Директива <list> дозволяє вивід лістингу, якщо він до цього був заборонений. Крім того, один з параметрів лістингу може бути змінений для керування процесом ассемблирования відповідно до табл. 6.5. Таблиця 6.5. Параметри, використовувані директивою list.Параметр Значення за замовчуванням Опис C=nnn 80 Кількість символів у рядку n=nnn 59 Кількість рядків на сторінці t=ON|OFF OFF Укорочувати рядки лістингу p=<type> None Установити тип процесора: PIC16C54, PIC16C84, PIC16F84, PIC17C42 і ін. r=<radix> HEX Установити систему числення за замовчуванням: hex, dec, oct. w=<level> 0 Установити рівень повідомлень діагностики у файлі лістингу: 0 - виводити всі повідомлення; 1 - виводити попередження і помилки; 2 - виводити тільки помилки. x=ON|OFF OFF Включити або виключити макророзширення. NOLIST - виключити вихід лістингу Синтаксис: NOLIST ORG - установити початкова адреса програми Синтаксис: <label> org <expr> Установлює початкова адреса програми для наступного коду відповідно до адреси в <expr>. MPASM виводить переміщуваний об'єктний код, а MPLINK розмістить код по певній адресі. Якщо мітка <label> визначена, то їй буде привласнена величина <expr>. За замовчуванням початкова адреса має нульове значення. Директива може не використовуватися, якщо створюється об'єктний модуль. Приклад: int_1 org 0x20; Перехід по векторі 20 int_2 org int_1+0x10; Перехід по векторі 30 PROCESSOR - установити тип процесора Синтаксис: processor <processor_type> Установлює тип використовуваного процесора <processor_type>: [16C54 | 16C55 | 16C56 | 16C57 | 16C71 | 16C84 | 16F84 | 17C42]. Загальні процесорні сімейства можуть бути обрані як:[16C5X | 16CXX | 17CXX] Для підтримки сумісності з новими виробами вибирається максимум доступної пам'яті. SET - визначити ассемблерную змінну Синтаксис: <label> set <expr> Директива SET функціонально еквівалентна директиві EQU, за винятком того, що величина, обумовлена SET, може бути змінена директивою SET. Приклад: area set 0 width set 0x12 length set 0x14 area set length * width length set length + 1 TITLE - Визначити програмний заголовок Синтаксис: title "<title_text>" Ця директива встановлює текст, що використовується у верхній лінії сторінки лістингу. <title_text> - це друкована ASCII послідовність, укладена в подвійні дужки. Вона може бути до 60 символів довжиною. Приклад title "operational code, rev 5.0" Далі » 6.2.2. Компоновщик MPLINK Абсолютний (непереміщуваний) код програми генерується безпосередньо при ассемблировании і розташовується в програмній пам'яті в порядку проходження операторів програми. Оператори переходу на мітку відразу ж заміняються відповідним кодом переходу на адресу мітки. При генерації переміщуваного коду кожна секція програмного коду повинна випереджатися директивою CODE. Остаточне розміщення програмних кодів, розміщення фізичних адрес переходів виконує компоновщик MPLINK. Компоновщик MPLINK виконує наступні завдання: розподіляє коди і дані, тобто визначає, у якій частині програмної пам'яті будуть розміщені коди і у яку область ОЗП будуть поміщені змінні; розподіляє адреси, тобто привласнює посиланням на зовнішні об'єкти в об'єктному файлі конкретні фізичні адреси; генерує виконується код, що, тобто видає файл у форматі .hex, що може бути записаний на згадку МК; відслідковує конфлікти адрес, тобто гарантує, що програма або дані не будуть розміщатися в просторі адрес, що уже зайнято; надає символьну інформацію для налагодження. Для більше докладного вивчення роботи компоновщика варто звернутися до спеціальної літератури. 6.2.3. Менеджер бібліотек MPLIB Менеджер бібліотек дозволяє створювати і модифікувати файли бібліотек. Бібліотечний файл є колекцією об'єктних модулів, які розміщені в одному файлі. MPLIB використовує об'єктні модулі з ім'ям типу "filename.o" формату COFF (Common Object File Format). Використання бібліотечних файлів спрощує компонування програми, робить її більше структурованої і полегшує її модифікацію. 6.2.4. Симулятор MPSIM Симулятор MPSIM являє собою симулятор подій, призначений для налагодження програмного забезпечення PIC-Контролерів. MPSIM моделює всі функції контролера, включаючи всі режими скидання, функції таймера/лічильника, роботу сторожового таймера, режими SLEEP і Power-down, роботу портів вводу/виводу. MPSIM запускається з командного рядка DOS, конфігурується користувачем і безпосередньо застосовує вихідні дані асемблера MPASM. Перед використанням симулятора необхідно отассемблировать вихідний файл <file_name>.asm і одержати файл об'єктного коду у форматі INHX8M, створюваний MPASM за замовчуванням:
MPASM <file_name>.asm <RETURN> Щоб запустити симулятор, необхідно набрати в командному рядку MPSIM<RETURN>. Вид екрана, одержуваного при запуску MPSIM, показаний на мал. 6.2. Екран розділений на три частини, або вікна. У верхнім вікні показаний поточний стан моделювання, включаючи моделируемую програму, тип МК, число виконаних командних циклів і витрачене на них час. Середнє вікно використовується для виводу вмісту регістрів користувача. Набір регістрів і формат виведених на екран даних визначаються файлом MPSIM.INI, що далі буде описаний докладніше. Нижнє вікно містить запрошення на вводу команд, а також поточні операції і результат їхнього виконання. При запуску симулятор MPSIM починає шукати командний файл MPSIM.INI. Цей текстової файл створюється користувачем і використовується для завдання всіх задіяних у програмі параметрів.
Рис. 6.2. Вид робочого вікна симулятора MPSIM. Один із прикладів файлу MPSIM.INI наведений нижче. ; MPSIM file for user4 P84 ;використання МК сімейства PIC16C84 SR X ;подання даних в 16-ричном форматі ZR ;скидання регістрів МК у нуль ZT ;скидання таймера в нуль RE ;скидання часу виконання команди і лічильника циклів V W,X,2 ;вивід регістра W в hex форматі на два знакоместа AD F1,X,2 ;вивід на екран регістра TMR0 в hex форматі на два знакоместа AD F2,X,3 ;вивід на екран регістра PCL в hex форматі на три знакоместа AD F3,B,8 ;вивід на екран регістра STATUS в bin форматі на вісім знакомест AD IOA,X,2 ;вивід на екран регістра TRISA в hex форматі на два знакоместа AD F5,X,2 ;вивід на екран регістра порту A в hex форматі на два знакоместа SC 1 ;установка тактової частоти 1 Мгц RS ;скидання МК LO user4 Приклад 12.1. Приклад файлу MPSIM.INI (html, txt) У представленому файлі зазначений: тип мікроконтролера, система числення даних за замовчуванням, регістри, уміст яких виводиться на екран, спосіб подання даних, робітники параметри. Будь-яка команда, що виконується MPSIM, може бути задана у файлі MPSIM.INI, що визначає початковий стан програми. При роботі MPSIM створює файл MPSIM.JRN, у якому зберігаються всі відомості про натискання клавіш у процесі роботи. У файлі MPSIM.INI допускається вводити коментарі, які даються після знака ";", але не допускається використання порожніх рядків. Основні команди, застосовувані в симуляторе MPSIM, наведені в табл. 6.6. Коли ці команди вводяться в сеансі роботи з MPSIM, вони заносяться у файл MPSIM.JRN, що використовується при створенні розширеного файлу MPSIM.INI. Даний файл можна задіяти для виявлення помилок і забезпечення нормального виконання програми після виправлення коду. Таблиця 6.6. Основні команди симулятора MPSIM.Команда Параметр Коментарі AB - Переривання поточної сесії AD Reg[, Radix[, Digits]] Вивід умісту регістра на екран у зазначеному форматі і заданій системі числення X, B або D B [addr] Установка крапки останова по поточній або зазначеній адресі C [#break] Продовження виконання програми із пропуском зазначеної кількості наступних крапок останова DB - Вивід на екран всіх активних крапок останова DI [addr1[,addr2]] Вивід на екран фрагмента пам'яті програм DR - Вивід умісту всіх регістрів DW [E|D] Дозвіл/заборона функціонування сторожового таймера E [addr] Виконання програми з поточні або зазначеного адреси F Reg Вивід на екран умісту регістра і можливість його редагування користувачем GE filename Одержання і виконання командного файлу. Це спосіб завантаження командного файлу .INI GO - Запуск МК і початок виконання програми IP [time|step] Вводу вхідних впливів у відповідності зі значенням параметра step у файлі Stimulus LO filename Завантаження в MPSIM файлів .HEX і .COD M addr Вивід на екран умісту пам'яті програм, починаючи з адреси "addr" і можливість його редагування. Вводу "Q" завершує команду. P device Вибір типу моделируемого МК Q - Вихід з MPSIM і запис команд у файл .JRN RE - Скидання часу виконання і лічильника циклів RS - Скидання моделируемого МК SE pin|port Вивід на екран стану зазначеного виводу або порту і можливість його зміни SR O|X|D Установка системи числення за замовчуванням SS [addr] Покрокове виконання, починаючи із зазначеної адреси. При відсутності адреси - виконання йде з поточного місця ST filename Завантаження файлу стимуляції W Відображення стану регістра W з можливістю його модифікації ZM addr1,addr2 Очищення пам'яті програм з адреси addr1 по addr2 ZR - Скидання всіх регістрів МК ZT - Скидання таймера/лічильника МК Для моделювання зовнішніх тестових подій (впливів) на моделируемый МК використовуються файли стимуляції з розширенням .STI. Ці файли використовуються MPSIM для того, щоб забезпечити подачу однократних і повторюваних вхідних сигналів у процесі виконання програми. При цьому можна спостерігати на екрані, як МК реагує на сигнали. Як приклад нижче наведений файл для тестування програми, що виконує опитування стану лінії 1 порту A. ! test1.STI STEP RA1 1 1 !Установка на вході RA1 стану "1" 200 0 !Надходження на вхід RA1 сигналу "0" 1000 1 !Перехід сигналу на вході RA1 в "1" 1200 0 !Повторна подача нульового сигналу Файл впливу складається з безлічі станів, для яких задається параметр STEP, що визначає число циклів, протягом яких підтримується зазначений стан. Він дозволяє одночасно подавати сигнали на різні виводи МК. У файлі впливу можна вказати будь-який вивід МК, у тому числі і вивід скидання (_MCLR). Для позначення коментарів використовується знак !. Далі » 6.3. Практика програмування PIC-Мікроконтролерів 6.3.1. Опис лабораторного макета Для того щоб написати перші навчальні програми і перевірити їхнє функціонування, бажано мати відносно нескладний макет, що містить найпоширеніші периферійні пристрої. Схема подібного макета, використовуваного при виконанні лабораторних робіт студентами, наведена на мал. 6.3. Макет харчується від джерела стабілізованої напруги +5У. Тактова частота МК задається RC-Ланцюгом і становить близько 2 Мгц. До лінії RA0 порту А підключений біполярний транзистор у ключовому режимі, навантажений на динамік ВА1. Звучання динаміка забезпечується подачею на вихід RA0 сигналу, що змінюється, у звуковому діапазоні. До лінії RA1 порту А підключений светодиод VD2, що світиться при високій напрузі на виході. Тумблери SA1 і SA2, а також кнопки SB1 і SB2 підключені, відповідно, до ліній RA2 і RA3 порти А, а також до лінії RA4 порти А и лінії RB0 порту В. Вихідний стан кнопок - розімкнуте, що забезпечує подачу на відповідні входи МК високого рівня сигналу. Лінії RB1 - RB7 порту B обслуговують семисегментный індикатор HL1 із загальним анодом. Тому світіння сегмента індикатора забезпечується при низькому рівні сигналу на відповідному виході порту B. Макет також містить засобу програмування і зв'язку з комп'ютером, які на схемі не показані.
Рис. 6.3. Схема лабораторного макета. 6.3.2. Ініціалізація мікроконтролера макета Перш ніж переходити до створення найпростіших користувальницьких програм, необхідно описати використовувані надалі змінні і настроїти МК на роботу з обраним макетом. Із цією метою ми напишемо і докладно розглянемо лістинг вихідної програми init.asm, до складу якої будуть включатися всі інші програми користувача. ;****************************************************** ;*лістинг вихідної програми ;****************************************************** LIST P=16C84, R=HEX ;директива, що визначає тип ;процесора і систему числення ;за замовчуванням ;****************************************************** ;*опис використовуваних змінних і призначення адрес ;*осередків для зберігання змінних користувача ;****************************************************** ; INTCON EQU 0x0B ; OPTION EQU 0x81 ; TMR0 EQU 0x01 ; INTF EQU 1 ; T0IF EQU 5 PCL EQU 0x02 STATUS EQU 0x03 RP0 EQU 5 PORTA EQU 0x05 PORTB EQU 0x06 TRISA EQU 0x05 TRISB EQU 0x06 W EQU 0 F EQU 1 TEMPA EQU 0x0C TEMPB EQU 0x0D COUNT1 EQU 0x0E COUNT2 EQU 0x0F COUNT3 EQU 0x10 ;****************************************************** ;*визначення міток заміни тексту ;****************************************************** #DEFINE Z STATUS,2 ;біт нульового результату #DEFINE BA1 PORTA,0 ;динамік BA1 #DEFINE VD2 PORTA,1 ;светодиод VD2 #DEFINE SA1 PORTA,2 ;тумблер SA1 #DEFINE SA2 PORTA,3 ;тумблер SA2 #DEFINE SB1 PORTA,4 ;кнопка SB1 #DEFINE SB2 PORTB,0 ;кнопка SB2 #DEFINE HL1_A PORTB,1 ; індикатор-сегмент A #DEFINE HL1_B PORTB,2 ; індикатор-сегмент B #DEFINE HL1_C PORTB,3 ; індикатор-сегмент C #DEFINE HL1_D PORTB,4 ; індикатор-сегмент D #DEFINE HL1_E PORTB,5 ; індикатор-сегмент D #DEFINE HL1_F PORTB,6 ; індикатор-сегмент E #DEFINE HL1_G PORTB,7 ; індикатор-сегмент F ;****************************************************** ;*виконується программа ;****************************************************** ORG 0x000 ;установка початкової адреси по ;скиданню GOTO BEGIN ;перехід на початок програми ORG 0x005 ;установка початкової адреси ;розміщення програми BEGIN CALL INIT_PORTS ;виклик підпрограми ;ініціалізації портів МК ;***************************************************** ;*програма користувача ; ;***************************************************** ; INIT_PORTS ;підпрограма ініціалізації ;портів MOVLW 0xFF ;установка ліній портів MOVWF PORTA ;A і B в одиничне MOVWF PORTB ;стан BSF STATUS,RP0 ;перехід на банк 1 MOVLW 0x1C ;настроювання ліній RA0 і MOVWF TRISA ;RA1 порту A на вивід - ;інших - на вводу MOVLW 0x01 ;настроювання лінії RB0 MOVWF TRISB ;порту B на вводу - ;інших - на вивід BCF STATUS,RP0 ;повернення в банк 0 RETURN ;повернення з підпрограми ; END ;кінець програми Лістинг 12.1. Програма init.asm (html, txt) Розглянемо роботу цієї програми. Спочатку вона вказує асемблеру тип використовуваного МК і систему числення за замовчуванням. Идущие далі ассемблерные директиви EQU визначають ассемблерные константи, використовувані в цій і наступній програмах. Вони дозволяють використовувати в тексті програми більше зручні мнемонічні мітки, прив'язані до структури конкретного МК, замість коректних, але більше складних ассемблерных виражень. Покажчики TEMPA, TEMPB, COUNT1 і COUNT2 призначають адреси комірок пам'яті для зберігання проміжних даних (поточних станів, змінних циклів і т.п.). Ассемблерные директиви #define задають рядок, що заміщає відповідну мітку, щораз, коли та буде зустрічатися у вихідному тексті. У нашім випадку ці директиви дозволяють використовувати символічні імена, прив'язані до схеми макета, замість фізичних адрес відповідних розрядів портів і регістрів. При цьому необхідно мати на увазі, що символи, які визначені директивою #DEFINE, не можуть бути переглянуті симулятором. Тому для перегляду необхідно використовувати фізичні адреси портів і регістрів. Директива ORG 0x00 установлює стартову адресу програмного коду рівним 0, тобто відповідному початковому стану лічильника команд МК після скидання. Команда GOTO BEGIN разом з ассемблерной директивою ORG 0x005 і міткою BEGIN забезпечують перехід на адресу пам'яті програм 0x005, починаючи з якого і розміщається основна частина програми. Це необхідно для того, щоб обійти адреса 0x004, використовуваний як вектор переривання, і тим самим зарезервувати його для можливих майбутніх застосувань. Потім за допомогою команди CALL INIT_PORTS виробляється виклик підпрограми ініціалізації портів. Спочатку підпрограма ініціалізації встановлює у високе (одиничне) стан вихідні тригери даних. Ця операція рекомендується розроблювачем МК для того, щоб виключити невизначеність у станах регістрів портів. Потім командою BSF STATUS,RP0 виробляється перемикання на банк 1 пам'яті даних, де розташовані регістри керування напрямком передачі інформації TRISA і TRISB. За допомогою команд MOVLW 0x1C і MOVWF TRISA лінії RA0 і RA1 порту A настроюються на вивід, а інші - на вводу. Команди MOVLW 0x01 і MOVWF TRISB набудовують лінію RB0 порту B на вводу, а інші - на вивід. За допомогою команди BCF STATUS,RP0 виробляється повернення в банк 0, де розташовуються необхідні для роботи програми регістри і порти. Оскільки в процесі роботи з макетом перенастроювання портів не виробляється, і уведених змінних досить для роботи всіх розглянутих навчальних завдань, вони будуть далі розглядатися включеними за замовчуванням до складу вихідної програми init.asm. При написанні навчальних завдань буде по можливості використовуватися метод структурного програмування, при якому прикладна програма будується з деякого набору програмних модулів, кожний з яких реалізує певну процедуру обробки даних. При цьому кожний із програмних модулів має тільки одну крапку входу і одну крапку виходу. Уведені один раз програмні модулі можуть використовуватися під своїм ім'ям в інших прикладних програмах. Далі » 6.3.3. Програмування навчальних завдань Почнемо програмування навчальних завдань із написання програми, що зчитує стан кнопки SB1 і виводить його на светодиодный індикатор VD2 так, що не натиснутому стану кнопки (високому рівню сигналу на вході RA4) відповідає світний стан светодиода, і навпаки. ;основна програма LOOP CLRWDT ;скидання сторожового таймера CALL GET_RA ;виклик підпрограми GET_RA CALL SB1_VD2 ;виклик підпрограми SB1_VD2 GOTO LOOP ;перехід до мітки LOOP для ;повторення процесу ; GET_RA ;підпрограма читання стану ;порту A MOVF PORTA,W ;читання стану порту A в W MOVWF TEMPA ;пересилання W в TEMPA RETURN ;повернення з підпрограми ; SB1_VD2 ;підпрограма виводу на светодиод ;VD2 стану кнопки SB1 (розряду 4 ;регістра TEMPA) BTFSS TEMPA,4 ;пропустити команду, якщо ;TEMPA,4=1 (кнопка не натиснута) GOTO P0 ;перейти на P0 BSF VD2 ;запалити светодиод VD2 P0 BTFSC TEMPA,4 ;пропустити команду, якщо ;TEMPA,4=0 (кнопка натиснута) GOTO P1 ;перейти на P1 BCF VD2 ;погасити светодиод P1 RETURN ; Лістинг 12.2. (html, txt) Основна програма містить замкнутий цикл LOOP - GOTO LOOP, необхідний для періодичного повторення циклу контролю стану кнопки і виводу його на індикатор. Команда CLRWDT виключає вплив можливого скидання по переповненню сторожового таймера на роботу програми. Дві наступні команди здійснюють виклик підпрограм GET_RA і SB1_VD2. Перша з них (GET_RA) спочатку зчитує поточний стан порту A, що міститься в робочий регістр W. Оскільки робочий регістр може знадобитися при виконанні інших команд, його стан записується в регістр TEMPA, використовуваний тут для тимчасового зберігання стану порту A. Таким чином, після повернення з підпрограми GET_RA у розряді 4 регістри TEMPA утримується інформація про стан кнопки SB1: "1" - не натиснута, "0" - натиснута. Підпрограма SB1_VD2 аналізує стан розряду 4 регістри TEMPA і, залежно від його, запалює або гасить светодиод. У системі команд МК PIC16F84 немає команд умовного переходу, тому для організації перевірки тої або іншої умови використовуються команди, що дозволяють пропустити виконання наступної команди програми, залежно від стану певного біта в заданому регістрі (BTFSS і BTFSC). Зокрема, команда BTFSS TEMP,4 пропускає виконання команди GOTO P0, якщо TEMP,4 = 1 (кнопка не натиснута). Тим самим реалізується команда BSF VD2, що запалює светодиод VD2. Потім аналізується умову TEMP,4 = 0 (кнопка натиснута) і, якщо воно має місце, светодиод гаситься. Можлива більше проста реалізація заданого алгоритму, оскільки натиснутий стан кнопки виключає не натиснуте (і навпаки), але представлений варіант більше наочний. Розглянемо більше складний варіант програми, що передбачає запалювання светодиода VD2 тільки при наступному стані тумблерів і кнопок макета: SA1 = 1, SA2 = 1, SB1 = 1 і SB2 = 0. ;основна програма LOOP CLRWDT ;скидання сторожового таймера CALL GET_RA ;виклик підпрограми GET_RA CALL GET_RB ;виклик підпрограми GET_RB CALL ZAG_1110 ;виклик підпрограми ZAG_1110 GOTO LOOP ;перехід до мітки LOOP для ;повторення процесу ; GET_RB ;підпрограма читання стану ;порту B MOVF PORTB,W ;читання стану порту B в W MOVWF TEMPB ;пересилання W в TEMPB RETURN ; ZAG_1110 ;запалює светодиод VD2 тільки при ;наступному стані тумблерів і ;кнопок макета: ;SA1 = SA2 = SB1 = 1 і SB2 = 0 BTFSS TEMPA,2 ;пропустити команду, якщо GOTO P0 ;TEMPA,2=1 BTFSS TEMPA,3 ;пропустити команду, якщо GOTO P0 ;TEMPA,3=1 BTFSS TEMPA,4 ;пропустити команду, якщо GOTO P0 ;TEMPA,4=1 BTFSC TEMPB,0 ;пропустити команду, якщо GOTO P0 ;TEMPB,0=0 BSF VD2 ;запалити светодиод VD2 GOTO P1 P0 BCF VD2 ;погасити светодиод VD2 P1 RETURN ; INCLUDE GET_RA.ASM ; Лістинг 12.3. (html, txt) Підпрограми GET_RA і GET_RB поміщають у регістри TEMPA і TEMPB поточні стани портів A і B, відповідно. Підпрограма ZAG_1110 аналізує стани розрядів 2,3 і 4 регістри TEMPA і розряду 0 регістра TEMPB, і за умови TEMPA,2,3,4 = 1,1,1 і TEMPB,0 = 0, запалює светодиод VD2. При невиконанні хоча б однієї із цих умов светодиод гаситься. Використання директиви INCLUDE GET_PORTA.ASM дозволяє включати вже налагоджені модулі підпрограм у поточну програму. Для того щоб цією можливістю можна було скористатися, необхідно зберігати налагоджені модулі у вигляді окремих ассемблерных файлів. Спробуємо тепер використовувати семисегментный індикатор для контролю стану тумблерів макета. Спочатку напишемо програму, що виводить на індикатор HL семисегментное зображення будь-якого двійкового числа від 0b до 1111b у шестнадцатиричном поданні. ;основна програма LOOP CLRWDT ;скидання сторожового таймера MOVLW 0x0A ;пересилання константи 0A в W CALL SEV_SEG ;виклик підпрограми SEVEN_SEG MOVWF PORTB ;пересилання W в PORTB GOTO LOOP ;перехід до мітки LOOP для ;повторення процесу ; SEV_SEG ;підпрограма обслуговування ;семисегментного індикатора ANDLW 0x0F ;маскирование 4-х молодших розрядів ;W і обнуління 4-х старших ADDWF PCL,F ;додавання W з PCL і пересилання ;результату в PCL RETLW 0x80 ;повернення з підпрограми з 80 в W RETLW 0x2 ;повернення з підпрограми з F2 в W RETLW 0x48 ;повернення з підпрограми з 48 в W RETLW 0x60 ;повернення з підпрограми з 60 в W RETLW 0x32 ;повернення з підпрограми з 32 в W RETLW 0x25 ;повернення з підпрограми з 25 в W RETLW 0x04 ;повернення з підпрограми з 04 в W RETLW 0x0 ;повернення з підпрограми з F0 в W RETLW 0x00 ;повернення з підпрограми з 00 в W RETLW 0x20 ;повернення з підпрограми з 20 в W RETLW 0x10 ;повернення з підпрограми з 10 в W RETLW 0x06 ;повернення з підпрограми з 06 в W RETLW 0x8C ;повернення з підпрограми з 8C в W RETLW 0x42 ;повернення з підпрограми з 42 в W RETLW 0x0C ;повернення з підпрограми з 0C в W RETLW 0x1C ;повернення з підпрограми з 1C в W ; Лістинг 12.4. (html, txt) Програма починає свою роботу з пересилання константи 0x0A у робочий регістр W. Потім виробляється виклик підпрограми обслуговування семисегментного індикатора SEV_SEG. Робота підпрограми SEV_SEG починається з маскирования 4-х молодших розрядів W і обнуління 4-х старших. Тим самим з аналізу виключаються старші розряди переданого з робочого регістра W числа. Потім маскований уміст регістра W додається до поточного стану молодшого байта лічильника команд PCL, і результат міститься в PCL. Таким чином, виробляється додатковий зсув лічильника команд на величину, що була передана в робочому регістрі. Наприклад, якщо було W=0, то вміст лічильника команд не зміниться, і буде виконана наступна команда RETLW 0x80, що викличе повернення з підпрограми із записом 0x80 = B'1000000' у регістр W. Якщо, як було в при веденной програмі, W=0A, то до вмісту PCL буде додане число 0x0A, і відбудеться додатковий зсув на 10 кроків. У результаті буде виконана команда RETLW 0x10, що викличе повернення з підпрограми із записом 0x10 = B'0001000' у регістр W. Після повернення з підпрограми виробляється пересилання W в PORTB і відображення його стану на семисегментном індикаторі HL. Зокрема, якщо W = 0, то при виводі 1000000b на порт B семисегментный індикатор покаже 0, а при W = A покаже A.Таким чином, може бути відображене будь-яке 4-розрядне двійкове число. Метод прямого керування лічильником команд, використаний у підпрограмі SEV_SEG, може застосовуватися для реалізації табличної конвертації чисел. При цьому необхідно мати на увазі, що даний метод не дозволяє конвертувати більше 256 значень в одній таблиці. Крім того, програма табличної конвертації повинна цілком розташовуватися усередині 256-байтного блоку щоб уникнути переповнення молодшого байта лічильника команд. Використовуючи підпрограму SEV_SEG, напишемо тепер програму, що читає стани тумблерів SA1 і SA2 і виводить на індикатор відповідне число. ;основна програма LOOP CLRWDT ;скидання сторожового таймера CALL GET_RA ;виклик підпрограми GET_RA RRF TEMPA,F ;зрушення вправо на один розряд ;через перенос RRF TEMPA,W ;зрушення вправо на один розряд ;через перенос ANDLW 0x03 ;маска на два молодших розряди CALL SEV_SEG ;виклик підпрограми SEVEN_SEG MOVWF PORTB ;пересилання W в PORTB GOTO LOOP ;перехід до мітки LOOP для ;повторення процесу ; INCLUDE GET_RA.ASM INCLUDE SEV_SEG.ASM ; Лістинг 12.5. (html, txt) Підпрограма GET_RA поміщає в регістр TEMPA поточний стан порту A. Таким чином, у розрядах 2 і 3 регістри TEMPA зберігається поточний стан тумблерів SA1 і SA2. Для того щоб біти стану тумблерів зайняли позиції 0 і 1 регістра TEMPA, виробляється два зрушення вправо через перенос, причому результат другого зрушення міститься в регістр W. Потім накладається маска на два молодших розряди робочого регістра і виробляється виклик підпрограми SEV_SEG. Після виходу з підпрограми результат подається на порт B і відображається на індикаторі. Розглянемо тепер програми, що працюють у реальному масштабі часу, тобто сигнали, що видають, певної тривалості і частоти проходження, або враховуючі тимчасові параметри вхідних сигналів. Основним елементом таких програм є підпрограма формування тимчасової затримки. Розглянемо один з можливих варіантів такої підпрограми з використанням програмних методів формування затримки, тобто без застосування убудованого таймера. ;основна програма MOVLW 0x ;пересилання константи H'' в W CALL DELAY ;виклик підпрограми DELAY ; DELAY ;підпрограма формування ;затримки часу MOVWF COUNT1 ;завантаження W у регістр COUNT1 LOOPD DECFSZ COUNT1,F ;декремент COUNT1 GOTO LOOPD ;повторення циклу H'' раз RETURN ;повернення з підпрограми ; Лістинг 12.6. (html, txt) Основна програма робить виклик підпрограми DELAY з деякою константою L у робочому регістрі W, що визначає число внутрішніх циклів підпрограми. Підпрограма DELAY починає свою роботу із завантаження вмісту робочого регістра в регістр користувача COUNT1. Команда DECFSZ COUNT1,F зменшує на одиницю вміст регістра COUNT1 і перевіряє його на рівність нулю. Нульовий стан регістра COUNT1 приводить до виходу із циклу і поверненню з підпрограми. Для виконання кожного внутрішнього циклу потрібно три машинних цикли МК (1 цикл на виконання команди DECFSZ при ненульовому результаті і 2 цикли на кожну команду GOTO). Вихід з підпрограми DELAY зажадає 4-х циклів (2 цикли на виконання команди DECFSZ при нульовому результаті і 2 цикли на RETURN). Якщо додати до цьому ще 4 цикли, необхідних для завантаження константи в робочий регістр , виклику підпрограми і завантаження регістра користувача COUNT1, то загальний час виконання підпрограми DELAY (затримка) складе TD = 4 + 3*(L - 1) + 4 = 5 + 3*L циклів, де L - константа, передана через робочий регістр у підпрограму DELAY. При тактовій частоті fosc = 2Мгц час циклу дорівнює tц = 2 мкс, тому при завантаженні L = H'00' = .0 максимальний формований інтервал часу складе 1,55 мс. Такий результат пов'язаний з тим, що команда DECFSZ спочатку декрементирует уміст регістра (H'00' - 1 = H'FF'), а потім уже аналізує результат. Мінімальний формований інтервал часу складе за тих самих умов 5 циклів або 10 мкс. Для одержання такого інтервалу необхідно перед викликом підпрограми DELAY завантажити в робочий регістр число 0x01. Для розширення верхньої границі формованих тимчасових інтервалів, а також з метою підвищення зручності роботи з підпрограмою, можна додати в цикл LOOPD одну або кілька додаткових команд, у якості яких найчастіше використовується команда NOP. Для приклада розглянемо підпрограму формування затримки часу DELAY_C ; DELAY_C ;підпрограма формування ;затримки часу (варіант C) MOVWF MOVWF COUNT1 ;завантаження W у регістр COUNT1 LOOPD NOP ;порожня команда DECFSZ COUNT1,F ;декремент COUNT1 GOTO LOOPD ;повторення циклу H'' раз RETURN ;повернення з підпрограми ; Лістинг 12.7. (html, txt) Загальний час виконання підпрограми DELAY_C, включаючи її виклик, складе TD = 4 + 4*(L - 1) + 4 = 4 + 4*L циклів. При тактовій частоті fosc = 2Мгц і завантаженню константи L = H'9' = .249 формований інтервал часу складе рівно 2 мс. Зменшення константи на одиницю зменшує формований часовий інтервал на 8 мкс. Зокрема, при L = .124 утвориться затримка в 1 мс. Для формування більших затримок часу, що лежать у діапазоні часток і одиниць секунд, такий підхід незручний. У цьому випадку використовуються вкладені цикли, як показано в наступному прикладі. ;основна програма MOVLW 0x ;пересилання константи H'' в W CALL DELAY_D ;виклик підпрограми DELAY_D ; DELAY_D ;підпрограма формування ;великої затримки часу (варіант D) MOVWF COUNT2 ;завантаження W у регістр COUNT2 CLRF COUNT1 ;скидання вмісту регістра COUNT1 LOOPD DECFSZ COUNT1,F ;декремент COUNT1 GOTO LOOPD ;повторення циклу 256 разів CLRWDT ;скидання сторожового таймера DECFSZ COUNT2,F ;декремент COUNT2 GOTO LOOPD ;повторення циклу H'' раз RETURN ;повернення з підпрограми ; Лістинг 12.8. (html, txt) Час виконання внутрішнього циклу підпрограми DELAY_D становить 3*256 + 4 машинних циклів МК, тому загальна затримка складе TD = 5 + (3*256 + 4)*L циклів. При тактовій частоті fosc = 2Мгц час циклу дорівнює tц = 2 мкс, тому при завантаженні L = H'00' = .0 максимальний формований інтервал часу складе близько 0,4 с. Оскільки формований інтервал часу досить великий, у зовнішній цикл включена команда скидання сторожового таймера. Інтервал часу 0,4 з не зовсім зручний для одержання затримок часу, кратних секунді, тому розглянемо ще один варіант підпрограми формування більших затримок часу з додатковою командою NOP у внутрішньому циклі. ; DELAY_E ;підпрограма формування ;великої затримки часу (варіант E) MOVWF COUNT2 ;завантаження W у регістр COUNT2 CLRF COUNT1 ;скидання вмісту регістра COUNT1 LOOPD NOP ;порожня команда DECFSZ COUNT1,F ;декремент COUNT1 GOTO LOOPD ;повторення циклу 256 разів CLRWDT ;скидання сторожового таймера DECFSZ COUNT2,F ;декремент COUNT2 GOTO LOOPD ;повторення циклу H'' раз RETURN ;повернення з підпрограми ; Лістинг 12.9. (html, txt) Час виконання внутрішнього циклу підпрограми DELAY_E становить 4*256 + 4 машинних циклів МК, тому загальна затримка складе TD = 5 + (4*256 + 4)*L циклів. При тактовій частоті fosc = 2Мгц і при завантаженні L = H'3' = .243 формований інтервал часу складе близько 0,5 із при погрішності не більше 0,2%. Якщо необхідно більше високу точність, можна вставити необхідну кількість порожніх операцій у зовнішній цикл формування затримки. Розглянемо далі кілька програм з використанням підпрограм формування затримки часу. Почнемо з написання програми, що подає звуковий сигнал на динамік BA1 при натисканні на кнопку SB1. Динамік буде звучати тільки в тому випадку, якщо на вихід RA0 буде поданий періодично, що змінюється сигнал. Для того щоб звук був добре чутний, його частота повинна перебувати поблизу максимуму чутності людського вуха. Виберемо частоту звучання рівної 1 Кгц, що відповідає періоду проходження імпульсів сигналу 1 мс. ;основна програма LOOP CLRWDT ;скидання сторожового таймера CALL GET_RA ;виклик підпрограми GET_PORTA CALL SB1_BA1 ;виклик підпрограми SB1_BA1 GOTO LOOP ;перехід до мітки LOOP для ;повторення процесу ; SB1_BA1 ;підпрограма подачі звуку на ;динамік BA1 при натисканні на кнопку ;SB1 BTFSC TEMPA,4 ;пропустити команду, якщо ;TEMPA,4=0 (кнопка натиснута) GOTO B0 ;перейти на B0 BSF BA1 ;подача високого рівня на RA0 MOVLW 0x3E ;пересилання константи ;H'3E' = .62 в W CALL DELAY_C ;виклик підпрограми DELAY_C BCF BA1 ;подача низького рівня на RA0 MOVLW 0x3E ;пересилання константи ;H'3E' = .62 в W CALL DELAY_C ;виклик підпрограми DELAY_C B0 RETURN ; INCLUDE GET_RA.ASM INCLUDE DELAY_C.ASM ; Лістинг 12.10. (html, txt) Як і раніше, підпрограма GET_RA зчитує поточний стан порту A, що потім передається в регістр TEMPA. Підпрограма SB1_BA1 аналізує стан розряду 4 регістри TEMPA і, залежно від результату, озвучує динамік BA1 чи ні. Необхідна витримка лінії RA0 в одиничному і нульовому станах забезпечується підпрограмою DELAY_C з параметром L = H'3E' = .62. Це відповідає часу затримки близько 0,5 мс, що і дає в результаті необхідну частоту проходження сигналу 1 Кгц. Розглянемо далі програму, що змушує мигати светодиод VD2 при натисканні на кнопку SB1. Для того щоб миготіння були добре видні, виберемо їхню частоту рівної 1 Гц. ;основна програма LOOP CLRWDT ;скидання сторожового таймера CALL GET_RA ;виклик підпрограми GET_RA CALL SB1_VD2M ;виклик підпрограми ;SB1_VD2M GOTO LOOP ;перехід до мітки LOOP для ;повторення процесу ; SB1_VD2M ;підпрограма миготіння светодиода ;VD2 при натисканні на кнопку SB1 BTFSC TEMPA,4 ;пропустити команду, якщо ;TEMPA,4=0 (кнопка натиснута) GOTO V0 ;перейти на V0 BSF VD2 ;запалити светодиод VD2 MOVLW 0x3 ;пересилання константи ;H'3' = .243 в W CALL DELAY_E ;виклик підпрограми DELAY_E BCF VD2 ;погасити светодиод MOVLW 0x3 ;пересилання константи ;H'3' = .243 в W CALL DELAY_E ;виклик підпрограми DELAY_E V0 BTFSS TEMPA,4 ;пропустити команду, якщо ;TEMPA,4=1 (кнопка не натиснута) GOTO V1 ;перейти на V1 BCF VD2 ;погасити светодиод V1 RETURN ; INCLUDE GET_RA.ASM INCLUDE DELAY_E.ASM ; Лістинг 12.11. (html, txt) Програма працює майже так само, як і попередня. Перша відмінність полягає в тім, що светодиод примусово гаситься при не натиснутій кнопці. Друга відмінність полягає у величині інтервалу часу, що становить тут 0,5 з і формується підпрограмою DELAY_E. Підпрограми формування затримки часу можуть бути також корисні при роботі з такими зовнішніми джерелами сигналів, як тумблери, кнопки, перемикачі і т.п. Справа в тому, що всі механічні комутатори мають одна негативна властивість, відоме як "дребезг" контактів, що обумовлено механічними коливаннями контактів при їхньому замиканні і розмиканні. Тривалість коливань становить звичайно трохи миллисекунд, протягом яких на вхід МК може надходити пачка імпульсів замість ідеального перепаду. Апаратні способи боротьби з "дребезгом" контактів засновані на використанні RS-Тригерів, одновібраторів або тригерів Шмитта. У пристроях на основі МК придушення "дребезга" контактів звичайно здійснюється програмними способами, які засновані на повторному зчитуванні стану лінії порту через певний час. Як приклад розглянемо "бездребезговый" варіант підпрограми читання стану порту A. ; GET_RAD ;підпрограма читання стану ;порту A у регістр TEMPA ;із придушенням "деренчання" DD MOVF PORTA,W ;читання стану порту A в W ANDLW 0x1C ;накладення маски b'00011100' ;на невикористовувані біти W MOVWF TEMPA ;пересилання W в TEMPA CLRWDT ;скидання сторожового таймера WDT MOVLW 0x0A ;пересилання константи ;H'0A' = .10 в W CALL DELAY_E ;виклик підпрограми DELAY_E MOVF PORTA,W ;читання стану порту A в W ANDLW 0x1C ;накладення на W маски b'00011100' SUBWF TEMPA,W ;вирахування W з TEMPA BTFSS Z ;пропустити команду, якщо результат ;нульовий GOTO DD ;перейти на мітку DD RETURN ; INCLUDE DELAY_E.ASM ; Лістинг 12.12. (html, txt) Суть роботи підпрограми полягає в повторному читанні стану порту A через деякий час після попередні і порівнянні його з колишнім значенням. Константа H'0A' = .10, що пересилається в регістр W перед викликом підпрограми DELAY_E, забезпечує значення затримки часу близько 20 мс - цього, як правило, досить для завершення перехідних процесів при перемиканні механічних комутаторів. Маскирование невикористовуваних розрядів порту підвищує надійність роботи підпрограми. Скидання сторожового таймера перед викликом підпрограми затримки потрібний для виключення скидання МК між двома процедурами опитування порту A. Розглянемо тепер роботу програми, що використовує деякі з розроблених раніше підпрограм. Нехай метою роботи програми є підрахунок числа натискань на кнопку SB1 з виводом результату на семисегментный індикатор у шестнадцатиричном коді. ;основна програма CLRF COUNT3 ;скидання лічильника натискань LOOP CLRWDT ;скидання сторожового таймера CALL GET_RAD ;виклик підпрограми GET_RAD BTFSC TEMPA,4 ;перевірка натискання SB1 GOTO LOOP ;якщо не натиснута - повернення ;на мітку LOOP INCF COUNT3,F ;инкремент лічильники MOVF COUNT3,W ;пересилання вмісту ;лічильника в робочий регістр CALL SEV_SEG ;виклик підпрограми SEV_SEG MOVWF PORTB ;пересилання W в PORTB TEST CALL GET_RAD ;виклик підпрограми GET_RAD BTFSS TEMPA,4 ;перевірка натискання SB1 GOTO TEST ;якщо ще натиснута - повернення ;на мітку TEST GOTO LOOP ;повернення на мітку LOOP ; INCLUDE GET_RAD.ASM INCLUDE SEV_SEG.ASM ; Лістинг 12.13. (html, txt) Наведені в главі програми не охоплюють і малої частки можливостей, які надає навіть такий простий макет, як зображений на мал. 6.3. Однак їхнє освоєння, сподіваюся, буде корисним для починаючих користувачів PIC-Контролерів. Глава 7. Організація персонального комп'ютера 13. Лекція: Архітектура і процесори персональних комп'ютерів Сторінки: 1 | 2 | 3 | 4 | питання | » для печатки і PDA Якщо Ви помітили помилку - повідомите нас або виділите її і натисніть Ctrl+Enter Включити коментарі || Допомога У цій лекції розповідається про особливості архітектури персональних комп'ютерів сімейства IBM PC, про процесори, застосовуваних у персональних комп'ютерах, про їхні функції, характеристики, етапах їхньої еволюції.
Як ми вже відзначали, персональний комп'ютер являє собою найбільш розвитий вид мікропроцесорних систем. На основі персональних комп'ютерів можна будувати самі складні контрольно-вимірювальні, керуючі, обчислювальні і інформаційні системи. Наявні в персональному комп'ютері апаратні і програмні засоби роблять його універсальним інструментом для самих різних завдань. У випадку обчислювальних і інформаційних систем персональний комп'ютер не має потреби в підключенні нестандартної апаратури, усе зводиться до підбора або написання необхідного програмного забезпечення. У випадку ж контрольно-вимірювальних і керуючих систем персональний комп'ютер оснащується набором інструментів для сполучення із зовнішніми пристроями і відповідними програмними засобами. У багатьох випадках будувати систему на основі персонального комп'ютера виявляється набагато простіше, швидше і навіть дешевше, ніж проектувати її з нуля на базі якогось мікропроцесора, мікропроцесорного комплекту або мікроконтролера. Звичайно, у більшості випадків система на основі персонального комп'ютера виявляється сильно надлишкової, це плата за універсальність. Але в той же час той самий комп'ютер може вирішувати найрізноманітніші завдання. Наприклад, у системі керування технологічними процесами або науковими установками він може математично моделювати процеси, що відбуваються, видавати в реальному часі керуючі сигнали, приймати в реальному часі відповідні сигнали, накопичувати інформацію, обробляти її, обмінюватися інформацією з іншими комп'ютерами і т.д. Розвитий інтерфейс користувача (відеомонітор, полноразмерная клавіатура, миша) роблять роботу з персональним комп'ютером комфортної і ефективної. А вартість персональних комп'ютерів внаслідок великого обсягу випуску постійно знижується. Тому їхнє використання не тільки зручно, але і економічно вигідно. Але щоб грамотно і повноцінно використовувати персональний комп'ютер у складі будь-яких систем, треба мати подання про його архітектуру, про основні принципи побудови, про пристрої, що входять у його состав, нарешті, про зовнішні інтерфейси. 7.1. Архітектура персонального комп'ютера Персональний комп'ютер типу IBM PC має досить традиційну архітектуру мікропроцесорної системи і містить всі звичайні функціональні вузли: процесор, постійну і оперативну пам'ять, пристрої вводу/виводу, системну шину, джерело живлення (мал.7.1). Основні особливості архітектури персональних комп'ютерів зводяться до принципів компонування апаратури, а також до обраного набору системних апаратних засобів.
Рис. 7.1. Архітектура персонального комп'ютера типу IBM PC. Функції основних вузлів комп'ютера наступні: Центральний процесор - це мікропроцесор з усіма необхідними допоміжними мікросхемами, включаючи зовнішню кеш-пам'ять і контролер системної шини. (Про кеш-пам'ять докладніше буде розказано в наступних розділах). У більшості випадків саме центральний процесор здійснює обмін по системній шині. Оперативна пам'ять може займати майже все адресуемое простір пам'яті процесора. Однак найчастіше її обсяг набагато менше. У сучасних персональних комп'ютерах стандартний обсяг системної пам'яті становить, як правило, від 64 до 512 Мбайт. Оперативна пам'ять комп'ютера виконується на мікросхемах динамічної пам'яті і тому вимагає регенерації. Постійна пам'ять (ROM BIOS - Base Input/Output System) має невеликий обсяг (до 64 Кбайт), містить програму початкового запуску, опис конфігурації системи, а також драйвери (програми нижнього рівня) для взаємодії із системними пристроями. Контролер переривань перетворить апаратні переривання системної магістралі в апаратні переривання процесора і задає адреси векторів переривання. Всі режими функціонування контролера переривань задаються програмно процесором перед початком роботи. Контролер прямого доступу до пам'яті приймає запит на ПДП із системної магістралі, передає його процесору, а після надання процесором магістралі робить пересилання даних між пам'яттю і пристроєм вводу/виводу. Всі режими функціонування контролера ПДП задаються програмно процесором перед початком роботи. Використання убудованих у комп'ютер контролерів переривань і ПДП дозволяє істотно спростити апаратуру застосовуваних плат розширення. Контролер регенерації здійснює періодичне відновлення інформації в динамічній оперативній пам'яті шляхом проведення по шині спеціальних циклів регенерації. На час циклів регенерації він стає хазяїном (задатчиком) шини. Перестановщик байтів даних допомагає робити обмін даними між 16-розрядним і 8-розрядним пристроями, пересилати цілі слова або окремі байти. Годинники реального часу і таймер-лічильник - це пристрою для внутрішнього контролю часу і дати, а також для програмної витримки тимчасових інтервалів, програмного завдання частоти і т.д. Системні пристрої вводу/виводу - це ті пристрої, які необхідні для роботи комп'ютера і взаємодії зі стандартними зовнішніми пристроями по паралельному і послідовному інтерфейсах. Вони можуть бути виконані на материнській платі, а можуть розташовуватися на платах розширення. Плати розширення встановлюються в слоты (рознімання) системної магістралі і можуть містити оперативну пам'ять і пристрої вводу/виводу. Вони можуть обмінюватися даними з іншими пристроями на шині в режимі програмного обміну, у режимі переривань і в режимі ПДП. Передбачена також можливість захвата шини, тобто повного відключення від шини всіх системних пристроїв на якийсь час. Важлива особливість подібної архітектури - її відкритість, тобто можливість включення в комп'ютер додаткових пристроїв, причому як системних пристроїв, так і різноманітних плат розширення. Відкритість припускає також можливість простого вбудовування програм користувача на будь-якому рівні програмного забезпечення комп'ютера. Перший комп'ютер сімейства, що одержав широке поширення, IBM PC XT, був виконаний на базі оригінальної системної магістралі PC XT-Bus. Надалі (починаючи з IBM PC AT) вона була дороблена до магістралі, що стала стандартної і одержала назву ISA (Industry Standard Architecture). Донедавна ISA залишалася основою комп'ютера. Однак, починаючи з появи процесорів i486 (в 1989 році), вона перестала задовольняти вимогам продуктивності, і її стали дублювати більше швидкими шинами: VLB (VESA Local Bus) і PCI (Peripheral Component Interconnect bus) або заміняти сумісної з ISA магістраллю EISA (Enhanced ISA). Поступово шина PCI витиснула конкурентів і стала фактичним стандартом, а починаючи з 1999 року в нових комп'ютерах рекомендується повністю відмовлятися від магістралі ISA, залишаючи тільки PCI. Правда, при цьому доводиться відмовлятися від застосування плат розширення, розроблених за довгі роки для підключення до магістралі ISA. Інший напрямок удосконалювання архітектури персонального комп'ютера пов'язане з максимальним прискоренням обміну інформацією із системною пам'яттю. Саме із системної пам'яті комп'ютер читає всі виконувати^ся команды, що, і в системній же пам'яті він зберігає дані. Тобто найбільше обігів процесор робить саме до пам'яті. Прискорення обміну з пам'яттю приводить до істотного прискорення роботи всієї системи в цілому. Але при використанні для обміну з пам'яттю системної магістралі доводиться враховувати швидкісні обмеження магістралі. Системна магістраль повинна забезпечувати сполучення з більшим числом пристроїв, тому вона повинна мати досить більшу довжину; вона вимагає застосування вхідних і вихідних буферів для узгодження з лініями магістралі. Цикли обміну по системній магістралі складні, і прискорювати їх не можна. У результаті істотного прискорення обміну процесора з пам'яттю по магістралі домогтися неможливо. Розроблювачами був запропонований наступний підхід. Системна пам'ять підключається не до системної магістралі, а до спеціальної високошвидкісної шини, що перебуває "ближче" до процесора, не потребуючих складних буферів і більших відстаней. У такому випадку обмін з пам'яттю йде з максимально можливої для даного процесора швидкістю, і системна магістраль не сповільнює його. Особливо актуальним це стає з ростом швидкодії процесора (зараз тактові частоти процесорів персональних комп'ютерів досягають 1-3 Ггц). Таким чином, структура персонального комп'ютера з одношинної, що застосовувалася тільки в перших комп'ютерах, стає трехшинной (мал. 7.2).
Рис. 7.2. Організація зв'язків у випадку трехшинной структури. Призначення шин наступне: до локальної шини підключаються центральний процесор і кеш-пам'ять (швидка буферна пам'ять); до шини пам'яті підключається оперативна і постійна пам'ять комп'ютера, а також контролер системної шини; до системної шини (магістралі) підключаються всі інші пристрої комп'ютера. Всі три шини мають адресні лінії, лінії дані і керуючі сигнали. Але состав і призначення ліній цих шин не збігаються між собою, хоча вони і виконують однакові функції. З погляду процесора, системна шина (магістраль) у системі всього одна, по ній він одержує дані і команди і передає дані як на згадку, так і в пристрої вводу/виводу. Тимчасові затримки між системною пам'яттю і процесором у цьому випадку мінімальні, тому що локальна шина і шина пам'яті з'єднані тільки найпростішими швидкодіючими буферами. Ще менше затримки між процесором і кеш-пам'яттю, що підключається безпосередньо до локальної шини процесора і, що служить для прискорення обміну процесора із системною пам'яттю. Якщо в комп'ютері застосовуються дві системні шини, наприклад, ISA і PCI, то кожна з них має свій власний контролер шини, і працюють вони паралельно, не впливаючи один на одного. Тоді виходить уже четырехшинная, а іноді і пятишинная структура. Приклад такої структури комп'ютера наведений на мал. 7.3.
Рис. 7.3. Приклад многошинной структури. У найпоширеніших настільних комп'ютерах класу Desk-top як конструктивна основа використовується системна або материнська плата (motherboard), на якій розташовуються всі основні системні вузли комп'ютера, а також кілька рознімань (слотов) системної шини для підключення дочірніх плат - плат розширення (интерфейсных модулів, контролерів, адаптерів). Як правило, сучасні системні плати допускають заміну процесора, вибір його тактової частоти, заміну і нарощування оперативної пам'яті, вибір режимів роботи інших вузлів. На системній платі зараз звичайно розташовуються також основні засоби зовнішнього інтерфейсу, що служать для приєднання як убудованих пристроїв (наприклад, дискових носіїв), так і зовнішніх пристроїв комп'ютера (наприклад, клавіатури, миші, принтера, сканера, модему). Для підключення відеомонітора, як правило, використовується спеціальна плата розширення (контролер дисплея), що вставляється в один зі слотов. Це дозволяє заміняти її могутнішої при необхідності установки нового монітора. Відзначимо, що для получающих все більше широке поширення портативних персональних комп'ютерів класу ноутбуків (notebook) застосовуються трохи інші конструктивні рішення. Зокрема, у них відсутні слоты розширення системної шини, а практично всі вузли комп'ютера виконуються на одній платі. Але ми в основному будемо говорити про комп'ютери типу desktop (настільних), тому що саме вони найбільш пристосовані для побудови складних систем, допускають досить просту модернізацію (upgrade) і настроювання на конкретні потреби користувача. Далі » 14. Лекція: Пристрою, що входять до складу персонального комп'ютера Сторінки: 1 | 2 | 3 | питання | » для печатки і PDA Якщо Ви помітили помилку - повідомите нас або виділите її і натисніть Ctrl+Enter Включити коментарі || Допомога У цій лекції розглядаються основні пристрої, що входять до складу персонального комп'ютера, їхньої функції, принципи їхньої організації, принципи обміну інформацією з ними.
7.3. Пам'ять персонального комп'ютера Як і в будь-який іншій мікропроцесорній системі, пам'ять персонального комп'ютера складається із двох частин: оперативної пам'яті і постійної пам'яті. Обидві частини розташовані в адресному просторі пам'яті, до обох комп'ютер може звертатися однаковим образом. Обидві пам'яті допускають звертання до окремих байтів, 16-розрядним словам (имеющим парні адреси), до 32-розрядних подвійних слів (имеющим адреси, кратні чотирьом) і до 64-розрядних учетверенным словам (имеющим адреси, кратні восьми). Розходження тільки в тім, що оперативну пам'ять використовують для тимчасового зберігання програм і даних, а в постійній пам'яті зберігаються програми початкового запуску, початкового самотестування комп'ютера, а також набір програм вводу/виводу нижнього рівня, тобто те, що не повинне губитися при вимиканні живлення комп'ютера. Обсяг оперативної пам'яті набагато більше, ніж постійної пам'яті. 7.3.1. Оперативна пам'ять Оперативна пам'ять займає значну частину адресного простору комп'ютера. Її встановлений обсяг і швидкодію впливають на швидкодію персонального комп'ютера в цілому (часом навіть більше, ніж швидкість процесора). Надійність її роботи багато в чому визначає надійність усього комп'ютера. Тому всіма розроблювачами їй приділяється велика увага. Всі персональні комп'ютери використовують оперативну пам'ять динамічного типу (DRAM - Dynamic Random Access Memory), основною перевагою якої перед статичною оперативною пам'яттю (SRAM - Static RAM) є низька ціна. Це пов'язане з тим, що якщо елемент статичної пам'яті (тригер) вимагає 4-6 транзисторів, то елемент динамічної пам'яті - це інтегральний конденсатор, для обслуговування якого потрібно 1-2 транзистора. Звідси ж випливають два основних недоліки динамічної пам'яті: вона вимагає регенерації (тобто постійного поновлення заряду на конденсаторі, що розряджається) і має в кілька разів менша швидкодія в порівнянні зі статичною пам'яттю. До того ж під час регенерації динамічна пам'ять недоступна для обміну, що також знижує швидкодію комп'ютера. Відзначимо, що зараз звичайно застосовують убудовану регенерацію, що не вимагає зовнішнього обслуговування, але знов-таки займає час. Перехід на повністю статичну пам'ять занадто сильно підвищив би вартість комп'ютера в цілому (до того ж необхідний обсяг оперативної пам'яті комп'ютера все збільшується), тому статичну пам'ять застосовують тільки в самих "вузьких" місцях, там, де без високої швидкості не обійтися, наприклад, для кеш-пам'яті. Що стосується динамічної пам'яті, той її розвиток іде по шляху зниження часу доступу завдяки структурним і технологічним удосконаленням. Наприклад, друге покоління динамічної пам'яті EDO RAM (Extended Data Output RAM) мало швидкодію приблизно на 20-25% вище, ніж у звичайної пам'яті. Це досягається за рахунок того, що наступне звертання до пам'яті можливо ще до завершення попереднього обігу. Третє покоління динамічної пам'яті - SDRAM (Synchronous DRAM) - ще на стільки ж швидше (робоча частота в цей час досягає 133 Мгц). Ще більш швидкодіюча пам'ять - DDR SDRAM (частота до 400 Мгц) і пам'ять RDRAM (частота до 1 Ггц і навіть вище). Для спрощення установки оперативної пам'яті в комп'ютер її виконують у вигляді невеликих модулів - друкованих плат з ножовим (друкованим) розніманням, на які встановлені мікросхеми пам'яті (SIMM - Single In-Line Memory Module). Ці модулі встановлюються в спеціальні SIMM-Рознімання на материнській платі, що дозволяє користувачеві легко міняти обсяг пам'яті комп'ютера, з огляду на при цьому необхідний рівень швидкодії, складність розв'язуваних завдань і свої фінансові можливості. Широко застосовуються 72-контактні SIMM-Модулі різного обсягу. Відзначимо, що не рекомендується одночасно використовувати кілька модулів з різною швидкодією: у деяких комп'ютерах це приводить до збоїв. У сучасних комп'ютерах на базі процесорів Pentium застосовуються також модулі DIMM (Dual In-Line Memory Module - модуль пам'яті із двосторонніми друкованими виводами), що мають 64 біта даних. Модулі пам'яті іноді підтримують перевірку вмісту пам'яті на парність. Для цього до 8 биток даних кожної адреси пам'яті додається дев'ятий біт парності. Він записується при кожному записі інформації у відповідний байт пам'яті і перевіряється при читанні інформації з відповідного байта пам'яті. Якщо виявляється невідповідність біта парності байту інформації, то виробляється сигнал, що викликає немаскируемое переривання NMI. Весь адресний простір пам'яті комп'ютера розділяється на кілька областей, що зв'язано, у першу чергу, з необхідністю забезпечення сумісності з першими комп'ютерами сімейства. У комп'ютері IBM PC XT на процесорі i8088 процесор міг адресувати 1 Мбайт пам'яті (20 адресних розрядів). Але всі програмні і апаратні засоби будувалися виходячи із припущення, що доступний адресний простір - тільки молодші 640 Кбайт (тоді це здавалося цілком достатнім). Дана область пам'яті одержала назву стандартної пам'яті (Conventional memory). Саме в межах цих 640 Кбайт (адреси 0...9FFFF) працює операційна система MS DOS і всі її прикладні програми. Перші 1024 байта (адреси 0...3FF) зберігають таблицю векторів переривання (Interrupt Vectors) обсягом 256 подвійних слів, формовану на етапі початкового завантаження. Однак якщо процесор працює в захищеному режимі, таблиця векторів може розташовуватися в будь-якому іншому місці пам'яті. Адреси 400...4FF приділяються під область змінних BIOS (BIOS Data Area). Докладніше про BIOS буде розказано в наступному розділі. Адреси 500...9FFFF містять у собі область операційної системи DOS (DOS Area) і пам'ять користувача (User RAM). Залишилися від 1 Мбайта пам'яті 384 Кбайта (адреси A0000...FFFFF), зарезервовані під інші системні потреби, називаються UMA (Upper Memory Area) - область верхньої пам'яті або UMB (Upper Memory Blocks) - блоки верхньої пам'яті або High DOS Memory. Простір відеопам'яті (адреси A0000...BFFFF) містить області для зберігання текстової і графічної інформації відеоадаптера. Простір пам'яті з адресами E0000...FFFFF відведено під системну постійну пам'ять комп'ютера ROM BIOS. У цій же області виділене вікно розміром в 64 Кбайта (page frame) з адресами D0000...DFFFF, через яке програми могли одержувати доступ до додаткового (відображуваної) пам'яті (Expanded memory) обсягом до 32 Мбайт, залишаючись у межах того ж 1 Мбайта адресуемой пам'яті. Це досягається шляхом почергового відображення чотирьох сторінок по 16 Кбайт із додаткової пам'яті у виділене вікно. При цьому положення сторінок у додатковій пам'яті можна змінювати програмним шляхом. Зрозуміло, що працювати з додатковою пам'яттю менш зручно, чим з основний, тому що в кожний момент комп'ютер "бачить" тільки вікно в 64 Кбайт. Тому зараз вона застосовується досить рідко. У цей час область пам'яті з адресами C0000...DFFFF частіше використовується для оперативної і постійної пам'яті, що входить до складу різних адаптерів і плат розширення комп'ютера. У результаті логічна організація адресного простору в межах 1 Мбайт вийшла досить складної (мал. 7.10). І таку ж організацію повинні підтримувати всі персональні комп'ютери сімейства IBM PC для забезпечення сумісності з попередніми моделями.
Рис. 7.10. Розподіл адресного простору пам'яті. При подальшому розширенні адресуемого простору пам'яті в наступних моделях комп'ютерів вся пам'ять обсягом понад 1 Мбайт одержала назву розширеної пам'яті (Extended memory). Для доступу до неї мікропроцесор повинен переходити з реального режиму в захищений і назад. Загальний обсяг пам'яті персонального комп'ютера (верхня границя розширеної пам'яті) може доходити до 16 Мбайт (24 розряду адреси) або до 4 Гбайт (32 розряди адреси). Особливого згадування заслуговує так звана тіньова пам'ять (Shadow RAM), що представляє собою частина оперативної пам'яті, у яку при запуску комп'ютера листується зміст постійної пам'яті, і заменяющая цю постійну пам'ять на час роботи комп'ютера. Необхідність даної процедури викликана тим, що навіть порівняно повільна динамічна оперативна пам'ять виявляється все-таки швидше, ніж постійна пам'ять. Постійна пам'ять часто помітно стримує швидкодію комп'ютера. Тому було запропоновано виділяти частина оперативної пам'яті для виконання обов'язків як системної постійної пам'яті ROM BIOS, так і постійної пам'яті, що входить до складу додаткових адаптерів, які підключаються до комп'ютера. Переписування інформації звичайно передбачено в програмі початкового пуску. У зв'язку з особливостями роботи динамічної пам'яті для скорочення часу доступу до неї застосовуються спеціальні режими роботи оперативної пам'яті: режим розшарування (интерливинг) і сторінковий режим. Використання режиму интерливинга припускає не зовсім звичайна розбивка пам'яті на банки (частини). Якщо при звичайній розбивці ( послідовної адресації) адреси наступного банку починаються після закінчення адрес попереднього, то при интерливинге адреси банків чергуються. Тобто, наприклад, після першої адреси першого банку треба перша адреса другого банку, потім друга адреса першого банку і друга адреса другого банку і т.д. Виходить, що в одному банку парні слова, а в іншому - непарні. Таких банків, що чергуються, може бути не тільки два, а чотири, вісім, шістнадцять. Обсяги банків при цьому повинні бути однаковими. У результаті такого підходу з'являється можливість починати звертання до наступного слова ще до закінчення процесу доступу до попереднього. Сторінковий режим припускає посторінкову роботу мікросхем пам'яті, коли вибір сторінки виробляється один раз на всю сторінку, а вибір осередку усередині сторінки може відбуватися набагато швидше. Для підтримки обох режимів застосовуються спеціальні технологічні рішення. Тут же відзначимо, що при заміні пам'яті комп'ютера або при установці додаткових банків пам'яті треба строго додержуватися рекомендацій виготовлювачів системних плат, тому що порядок заповнення банків може бути далеко не очевидний. 7.3.2. Постійна пам'ять Системна постійна пам'ять (ПЗП) займає порівняно невеликий обсяг (звичайно 64 Кбайта). Однак її значення для комп'ютера дуже велико. Сама її назва ROM BIOS (ROM Basic Input/Output System) - базова система вводу/виводу - говорить про те, що в ній перебуває функціонально повний набір програм нижнього рівня для керування пристроями вводу/виводу. Тому навіть до завантаження в оперативну пам'ять програм, що виконуються, з диска комп'ютер має можливість обслуговувати клавіатуру, дисплей, подавати звукові сигнали, спілкуватися з дисками і т.д. Важливо відзначити, що більшість сучасних відеоадаптерів, а також контролерів накопичувачів мають власну систему BIOS, що доповнює або навіть заміняє системну BIOS під час основної роботи. Виклик програм BIOS здійснюється через програмні або апаратні переривання, для чого BIOS формує відповідну таблицю векторів переривань. Але цим функції постійної пам'яті не обмежуються. У принципі, під пам'ять ROM BIOS відведено 128 Кбайт адресного простору пам'яті. У перших комп'ютерах (IBM PC XT) вона займала всього 8 Кбайт, зараз звичайно займає 64 Кбайт. Якщо ж потрібно використовувати системну постійну пам'ять більшого обсягу, то вона по черзі відображається на вікно системної пам'яті розміром 64 Кбайт (адреси F0000...FFFFF). Це зв'язано із прагненням заощадити простір верхньої пам'яті для інших цілей. При старті комп'ютера після включення живлення, натискання кнопки на передній панелі RESET або після програмного перезапуску починає виконуватися програма початкового запуску, що також зберігається в постійній пам'яті (початкова адреса FFFF0) . Ця програма містить у собі: програму самотестування комп'ютера (POST - Power On Self Test); програму початкового завантаження операційної системи з відповідного дискового накопичувача комп'ютера; програму завдання поточних параметрів комп'ютера (Setup). Крім програми початкового запуску ROM BIOS також обслуговує апаратні переривання від системних пристроїв (таймера, клавіатури, дисків), а також відпрацьовує базові програмні звертання до системних пристроїв. Відзначимо, що останнім часом ROM BIOS виконується не на мікросхемах властиво постійної пам'яті, а на мікросхемах, що допускають багаторазовий перезапис інформації користувачем EPROM (Erasable Programmable ROM) з електричним перезаписом - типу флэш (flash), що дозволяє більш гнучко набудовувати комп'ютер. Користувач може легко модернізувати BIOS свого комп'ютера за допомогою програми перезапису флэш-памяти. При використанні ж мікросхем ПЗП з ультрафіолетовим стиранням для цього були потрібні спеціальний программатор і пристрій, що стирає (ультрафіолетова лампа). Програма самотестування POST дозволяє робити найпростішу діагностику основних вузлів комп'ютера, включаючи визначення повного обсягу встановленої оперативної пам'яті. Інформація про її результати виводиться трьома способами: повідомленнями на дисплеї (найбільше наочно і зрозуміло користувачеві); звуковими сигналами (що дуже корисно при непрацездатному дисплеї); видачею кодів у певний порт вводу/виводу, звичайно це порт із адресою 080 (на цьому засновані всі діагностичні прилади). Повідомлення на дисплеї можуть прямо називати виявлену несправність або несправний блок або ж видавати спеціальний код помилки, по якому згодом у прикладеній документації можна знайти причину несправності комп'ютера. Таблиця 7.2. Звукові сигнали POST BIOS.Звукові сигнали Несправність 1 короткий Усе в порядку 2 коротких Помилка монітора Немає сигналів Джерело живлення, системна плата Безперервний сигнал Джерело живлення, системна плата Повторювані короткі сигнали Джерело живлення, системна плата 1 довгий, 1 короткий Системна плата 1 довгий, 2 коротких Адаптер дисплея (MDA, CGA) 1 довгий, 3 коротких Адаптер дисплея (EGA) Звукові сигнали не відрізняються особливою розмаїтістю, але, проте, дозволяють виявити і ідентифікувати основні помилки. Для приклада в табл. 7.2 наведені звукові сигнали про помилки, використовувані BIOS компанії IBM (для BIOS інших фірм сигнали можуть бути іншими). Використання спеціальних діагностичних приладів особливо ефективно: за деякими оцінками, з їхньою допомогою можна виявити до 95% несправностей. Однак їх застосовують тільки спеціальні співробітники сервісних служб. Починаючи з комп'ютерів на процесорі 80286 (IBM PC AT) постійна пам'ять ROM BIOS обов'язково доповнюється невеликою енергонезалежною оперативною пам'яттю CMOS RAM, що виконана на мікросхемах зі зниженим енергоспоживанням з технологією КМОП (CMOS) і при вимиканні живлення комп'ютера подпитывается від батарейки або акумулятора (ця пам'ять, як правило, входить до складу інших мікросхем). В CMOS-Пам'яті зберігається інформація про поточні показання годин (даті і часу), про значення часу для будильника, про конфігурацію комп'ютера: пріоритеті завантаження з різних накопичувачів, кількості пам'яті, типах накопичувачів, режимах енергоспоживання, про тип дисплея, про установки клавіатури і т.д. CMOS RAM відрізняється від постійної пам'яті тим, що записана в неї інформація легко міняється програмним шляхом. Задавати всі параметри комп'ютера, що зберігаються в CMOS RAM, дозволяє програма BIOS Setup, викликати яку можна шляхом натискання призначених клавіш під час процедури початкового завантаження комп'ютера (інформація про це завжди виводиться на екран). У сучасних комп'ютерах дана програма пропонує досить зручний і наочний інтерфейс користувача зі звичними меню. Опис роботи з BIOS Setup будь-якого комп'ютера обов'язково поставляється разом з ним. Іноді за допомогою цієї програми вдається значно підвищити швидкодія комп'ютера завдяки вибору оптимальних (або навіть граничних) для даної конфігурації параметрів: частоти системної шини, кількості тактів затримки при обміні із системною пам'яттю і кеш-пам'яттю. Програма Setup дозволяє також дозволити або заборонити використання тіньової (Shadow) пам'яті як для системного BIOS, так і для BIOS використовуваних адаптерів (по окремих сегментах пам'яті). При використанні тіньової пам'яті в обрану область оперативної пам'яті копіюється вміст BIOS ROM, ця область визначається як доступна тільки для читання, і виробляється переадресація пам'яті. Тобто при будь-яких обігах по адресах ROM читання даних буде вироблятися з відповідних адрес Shadow RAM, а постійна пам'ять уже не використовується. Такий підхід може істотно (іноді в 4 - 5 разів) прискорити вибірку команд для програм обміну з відеоадаптером і з дисковими накопичувачами. У програмі Setup завжди передбачена можливість установки параметрів комп'ютера за замовчуванням (Default Setting). Це особливо зручно у випадку розряду або ушкодження батареї або акумулятора. У нових комп'ютерах, що підтримують режим економії споживаної електроенергії, можна також задавати перехід комп'ютера в режими Doze (сплячий), Standby (очікування або резервний) і Suspend (припинення роботи) при відсутності звертань до вузлів комп'ютера протягом заданого часу. Режими перераховані в порядку зниження споживання електроенергії. Комп'ютери (а також їхні системні плати), де застосовуються такі режими, називаються іноді "зеленими". Далі » 7.4. Системні пристрої Крім мікропроцесора і системної пам'яті на системній (материнської) платі розташовуються і інші важливі модулі, що забезпечують працездатність комп'ютера: контролери переривань і прямого доступу, тактовий генератор, системний таймер, буферні мікросхеми, контролер шини і т.д. У перших комп'ютерах сімейства всі ці функції виконували окремі спеціалізовані мікросхеми порівняно низького ступеня інтеграції. У сучасних комп'ютерах застосовуються надвеликі інтегральні схеми, які, проте, забезпечують повну програмну і апаратну сумісність із попередніми моделями. Ці мікросхеми називаються набором мікросхем або chipset (чипсет). Переваги такого підходу - chipset займає менше місця на платі, менша споживана потужність, значно більша надійність. Комп'ютери, виконані на системних платах з chipset відомих фірм, мають кращу репутацію. У більшість наборів мікросхем входить так званий периферійний контролер, що включає два контролери переривань, два контролери прямого доступу до пам'яті, таймер, годинники реального часу, а також CMOS-Пам'ять. 7.4.1. Тактовий генератор Системний тактовий генератор генерує сигнали синхронізації для роботи мікропроцесора, всіх контролерів і системної шини. Для забезпечення високої стабільності тактових частот і їхньої незалежності від температури застосовуються кварцові резонатори, тобто кристали кварцу, що мають высокостабильную частоту власних коливань. Як правило, до складу системної плати входить кілька кварцових резонаторів, кожний з яких забезпечує свій тактовий сигнал. Тактову частоту процесора можна вибирати шляхом установки перемичок на системній платі. Це дозволяє користувачеві модернізувати комп'ютер шляхом заміни процесора на інший, розрахований на більше високу тактову частоту. Іноді вдається змусити процесор працювати на більше високій тактовій частоті, чим та, на яку він розрахований, але тут потрібно дотримувати обережності, тому що підвищення частоти веде не тільки до збільшення споживаної потужності і перегріву мікросхеми, але і до помилок і збоїв у роботі, причому проявляющихся тільки в окремих режимах, наприклад, у многозадачном. У комп'ютерах на базі процесорів 486 і Pentium застосовується розподіл опорної тактової частоти для синхронізації системної шини і внутрішнє множення частоти в процесорах. Наприклад, у процесорі 486DX 2-66 використовується множення на дві тактові частоти 33,3 Мгц, а в процесорах сімейства Pentium застосовується множення на 2,5 (при опорній частоті 60 Мгц частота процесора 150 Мгц) або на 3 (при опорній частоті 66,6 Мгц частота процесора 200 Мгц). У загальному випадку в комп'ютері існують наступні тактові частоти: Host Bus Clock (CLK2IN) - це опорна частота (зовнішня частота шини процесора). Саме з її можуть виходити інші частоти і саме вона задається перемичками (джамперами); CPU Clock (Core Speed) - це внутрішня частота процесора, на якій працює його обчислювальне ядро. Може збігатися з Host Bus Clock або виходити з її множенням на 1,5, 2, 2,5, 3, 4. Множення повинне бути передбачене в конструкції процесора. ISA Bus Clock (ATCLK, BBUSCLK) - це тактова частота системної шини ISA (сигнал SYSCLK). По стандарті вона повинна бути близька до 8 Мгц, але в BIOS Setup є можливість вибрати її через коефіцієнт розподілу частоти Host Bus Clock. Іноді комп'ютер залишається працездатним і при частоті шини ISA близько 20 Мгц, але звичайно плати розширення ISA розробляються з розрахунку на 8 Мгц, і при більших частотах вони перестають працювати. Не слід розраховувати, що комп'ютер стане вдвічі швидше при подвоєнні цієї частоти. Для каналів прямого доступу до пам'яті на системній платі використовується ще один тактовий сигнал SCLK, частота якого, як правило, становить половину від ISA Bus Clock. PCI Bus Clock - це тактова частота системної шини PCI, що по стандарті повинна бути 25 - 33,3 Мгц. Її звичайно одержують розподілом частоти Host Bus Clock на потрібний коефіцієнт. У комп'ютерах передбачається можливість її збільшення до 75 або навіть 83 Мгц, але з міркувань надійності роботи рекомендується дотримуватися стандартних значень. VLB Bus Clock - це частота локальної шини VLB, обумовлена аналогічно PCI Bus Clock. 7.4.2. Контролер переривань Контролери радіальних переривань у перших комп'ютерах виконувалися на мікросхемах i8259, кожна з яких мала 8 входів запиту переривань. В IBM PC AT застосовувалося дві таких мікросхеми, у результаті чого кількість входів запитів переривань збільшилася до 15. Режими роботи контролерів переривань визначаються процесором шляхом запису відповідних керуючих кодів по адресах у просторі пристроїв вводу/виводу. Про цикли обміну по перериваннях уже говорилося в розділі 2.2.2. При надходженні запиту переривання на один із входів IRQ і задоволенні цього запиту контролер переривань виробляє вихідний сигнал запиту переривання, що надходить на процесор. У відповідь на це процесор запитує контролер про те, переривання з якою адресою вектора необхідно обслужити. Усього переривань може бути 256 (від 00 до FF). Номер переривання, отриманий від контролера, процесор множить на 4 і одержує, таким чином, адреса пам'яті, де зберігається адреса початку програми обробки переривань (вектор переривання). Присвоювання кожному з каналів IRQ свого номера процесор здійснює на етапі ініціалізації контролера. Контролер переривань може виконувати наступний набір операцій: маскирование запитів на переривання, тобто тимчасова заборона реакції на них; установка пріоритетів запитів по різних входах, тобто дозвіл конфліктів при одночасному приході декількох запитів на переривання; робота як основний контролер (Master) або підлеглого (Slave). Для маскирования переривань використовується внутрішній регістр контролера, програмно доступний процесору як по записі, так і по читанню. Замаскований може бути кожний запит (по кожнійій з ліній IRQ), шляхом установки відповідного біта маскирования в записуваному в контролер керуючому байте. Схема пріоритетів переривань може бути задана процесором програмним шляхом. У базовому варіанті всі пріоритети фіксовані (тобто IRQ0 має вищий пріоритет, а IRQ7 - нижчий). Але в принципі вищий рівень пріоритету задається для кожного із входів запитів, можна також установити циклічне перемикання пріоритетів (останній обслужений запит одержує нижчий пріоритет), забезпечуючи тим самим всім запитам рівні пріоритети. Якщо під час обробки переривання з меншим рівнем пріоритету приходить більше пріоритетний запит, то процесор переходить на програму обробки більше пріоритетного запиту, а після її виконання вертається до програми обробки менш пріоритетного запиту. Відзначимо, що немаскируемое переривання NMI має пріоритет вище будь-якого іншого апаратного переривання. Завершивши виконання програми обробки переривання, процесору необхідно за допомогою спеціальної команди сповістити про це контролеру переривань, щоб дозволити йому подальшу роботу, зокрема, знову обробляти той же самий запит. Контролер 8259 передбачає можливість вибору способу розпізнавання запиту на переривання - по фронті сигналу IRQ і за рівнем цього сигналу. В архітектурі комп'ютера типу PC використовується запит по фронті. При каскадировании контролерів основному контролеру треба вказати, до якому з його входів підключений підлеглий контролер, а підлеглому контролеру необхідно вказати, до якого входу основного контролера підключений його вихідний сигнал запиту. Всі операції початкового настроювання контролерів переривань виконує BIOS, і користувачеві потрібно прибігати до програмування цих контролерів тільки при необхідності зміни режимів обслуговування переривань або при написанні власної програми обробки апаратних переривань. 7.4.3. Контролер прямого доступу до пам'яті Контролер прямого доступу до пам'яті має більше складну структуру в порівнянні з контролером переривань, що пов'язане з його більше складними функціями. На час ПДП контролер ПДП стає задатчиком (активним пристроєм) системної шини, виставляючи всі основні сигнали шини самостійно. Однак всі режими роботи контролера ПДП, всі його параметри встановлюються процесором на етапі ініціалізації контролера. Зокрема, процесор визначає тип розв'язуваного завдання, задає початкова адреса переданого або прийнятого масиву даних, а також розмір цього масиву. У персональному комп'ютері застосовується два четырехканальных контролери ПДП типу i8237, що забезпечують 7 каналів ПДП (один канал задіяний під каскадирование контролерів по тім же принципі, що і контролери переривань). Крім властиво контролерів ПДП у підсистему ПДП входять також програмно доступні регістр старшого байта адреси і регістри сторінок ПДП. Про цикли обміну в режимі ПДП уже говорилося в розділі 2.2.3. Одержавши сигнал запиту ПДП по одній з ліній DRQ, контролер формує запит процесору на захвата шини і, одержавши дозвіл від процесора, повідомляє про надання ПДП пристрою, що запросив прямий доступ, по відповідній лінії DACK. Після цього виробляється цикл ПДП, пересылающий дані із пристрою вводу/виводу на згадку або навпаки. При цьому сам контролер ПДП формує тільки 16 молодших розрядів адреси пам'яті, а вісім старших розрядів утримуються в регістрі сторінок. Свій власний регістр сторінок відповідає кожному з каналів ПДП. Передача даних у випадку ПДП можлива по одному з наступних режимів: Режим одиночної (поцикловой) передачі. У цьому випадку за час надання ПДП виконується тільки один цикл передачі даних, і для наступної передачі треба знову ж запросити ПДП. Однак адреса пам'яті, з яким здійснюється обмін, автоматично міняється після кожного циклу. Цей режим дозволяє процесору вставляти свої цикли обміну після кожного циклу ПДП. Режим передачі блоку (режим блокової передачі). У цьому режимі за один раз передається цілий блок даних певної довжини (до 64 Кбайт). Режим забезпечує більше високу швидкість передачі в порівнянні з режимом одиночної передачі, але може на тривалий час захопити системну шину, не допускаючи до її керування процесор. Режим передачі на вимогу. Цей режим дозволяє продовжувати ПДП доти, поки пристрій, що запросив ПДП, не вичерпає весь обсяг даних. Каскадний режим дозволяє поєднувати контролери для збільшення кількості каналів ПДП. У принципі, можливий режим передачі в режимі ПДП із пам'яті на згадку, але в комп'ютері він не використовується. Як і у випадку контролера переривань, можливі дві схеми пріоритетів каналів ПДП, обирані програмно, - фіксований і циклічний. Вихідна схема - фіксовані пріоритети, причому нульовий канал має максимальний пріоритет, а сьомий - мінімальний. Під час обслуговування будь-якого запиту ПДП інші запити не можуть втрутитися, але після завершення обслуговування даного запиту буде обслуговуватися запит з найбільшим пріоритетом. Як і у випадку контролера переривань, можливо програмне маскирование кожного каналу ПДП. Перед початком роботи кожному з каналів контролера процесор повинен указати режим, у якому він буде працювати, базова адреса пам'яті, з якого почнеться обмін, кількість переданих байтів або слів, напрямок запису на згадку або читання з пам'яті (від старших адрес до молодшого або навпаки). Можливий режим автоинициализации, при якому після закінчення пересилання всього масиву даних контролер автоматично відновлює всі параметри, і для цього не потрібне втручання процесора. Передбачена також можливість програмного запиту ПДП, що обслуговується так само, як і апаратний запит. 7.4.4. Системний таймер і годинники реального часу Як системний таймер комп'ютера використовується мікросхема трехканального 16-розрядного таймера i8254 або її аналог. Таймер призначений для одержання програмно керованих тимчасових затримок і генерації сигналів заданої частоти. Таймер дозволяє підвищити ефективність програмування процесів керування і синхронізації зовнішніх пристроїв, особливо в реальному часі. Таймер містить три незалежних канали (0, 1 і 2), кожний з яких може бути, у принципі, запрограмований на роботу в одному із шести режимів рахунку: переривання термінального рахунку; програмувальний генератор одиночного імпульсу; генератор імпульсів заданої частоти; генератор прямокутних імпульсів типу "меандр"; програмно формований строб; апаратно формований строб. На кожний канал можуть подаватися вхідні синхросигналы. З кожного каналу можна одержувати сигнал із частотою, рівній вхідній частоті, діленої на довільне 16-розрядне число. У комп'ютері на всі входи надходять синхросигналы частотою 1,19 Мгц. Всі канали таймера в комп'ютері мають спеціальне призначення, тому особливої волі у виборі режиму роботи або перепризначенні функцій у користувача немає. Вихід каналу 0 пов'язаний із сигналом запиту переривання IRQ0 і забезпечує переривання для лічильника реального часу (використовується режим роботи 3). Користувачеві не рекомендується перепрограмувати цей канал. При старті комп'ютера канал програмується так, щоб видавати імпульси приблизно 18,2 рази в секунду. По цьому перериванню програмно збільшується стан лічильника реального часу. Користувач може читати стан даного лічильника зі спеціально виділеної комірки пам'яті і застосовувати його для затримок у своїх програмах. Вихід каналу 1 генерує сигнал запиту регенерації динамічної пам'яті (режим роботи 2). Використання цього каналу не по призначенню може привести до втрати вмісту оперативної пам'яті. Вихід каналу 2 генерує тональний сигнал для убудованого динаміка комп'ютера (режим роботи 3). Однак дозвіл цього тонального сигналу виробляється установкою виділених розрядів (0 і 1) програмно доступного паралельного порту контролера периферійних пристроїв. Один розряд (0) дозволяє роботу каналу, інший розряд (1) пропускає вихідний сигнал на динамік. Таким чином, користувач комп'ютера може задіяти тільки канал 2. Найчастіше його застосовують для генерації звуків заданої частоти і тривалості. Крім того, вихідний сигнал даного каналу програмно доступний по читанню з одного з розрядів паралельного порту. Це дозволяє, запрограмувавши таймер відповідним чином, витримувати потрібні тимчасові інтервали. Для цього варто програмно дозволити генерацію (при відключеному динаміку), а потім програмно опитувати вихідний сигнал таймера і ухвалювати рішення щодо зміни його рівня. Підсистема годин реального часу в перших комп'ютерах виконувалася на мікросхемі контролера MC146818 фірми Motorola. Цей контролер містить 64 байта СMOS-Пам'яті, з яких перші 14 байт використовуються для годин реального часу, а інші 50 байт зберігають інформацію про конфігурацію системи. Для вхідного тактового сигналу контролера застосовується спеціальний "вартовий" кварцовий генератор із частотою 32 768 кГц, що дозволяє за допомогою розподілу частоти одержати імпульси із частотою 1 Гц. Контролер уважає секунди, мінути, годинники, дні тижня, місяці і роки. Причому працює він навіть при відключенні живлення комп'ютера, подпитываясь від батареї або акумулятора. Це дозволяє зберігати інформацію про поточний час постійно. Крім лічильника поточного часу, контролер має у своєму составі будильник. Будильник може формувати переривання (IRQ8) із програмно заданою періодичністю. Стану всіх лічильників (секунд, мінут, годин і т.д.) програмно доступні як по читанню, так і по записі, що дозволяє встановлювати потрібний час і стежити за ним. Далі7.5. Засобу інтерфейсу користувача Для зв'язку комп'ютера з користувачем (тобто організації інтерфейсу користувача) застосовуються відеоадаптер, керуючий відеомонітором, клавіатура і графічний маніпулятор типу "миша" (mouse), touch pad або stick pointer. Відеоадаптер являє собою пристрій сполучення комп'ютера з відеомонітором і найчастіше виконується у вигляді спеціальної плати розширення, що вставляється в системну шину або локальну шину комп'ютера. При цьому зображення, формоване на екрані монітора, зберігається у відеопам'яті, що входить до складу відеоадаптера. Відеопам'ять являє собою оперативну пам'ять, що, хоча і не є, по суті, системною пам'яттю, розглядається процесором як частина системної пам'яті з адресами A0000 - BFFFF (усього 128 Кбайт). Тобто із цією пам'яттю процесор може взаємодіяти як із системною оперативною пам'яттю: писати інформацію в будь-який осередок і читати інформацію з будь-якого осередку. Але одночасно ця ж пам'ять постійно сканується (тобто послідовно опрашивается) самим відеоадаптером для формування растрового зображення на екрані монітора. Тобто доступ до цієї пам'яті мають як процесор, так і відеоадаптер. Швидкість обміну з відеопам'яттю - досить важливий параметр, він впливає на зручність роботи з комп'ютером і часто визначає коло завдань, що може їм виконуватися. Тому для відеопам'яті використовують самі швидкодіючі мікросхеми. Крім того, застосовують спеціальні архітектурні рішення, що дозволяють полегшити поділ доступу до пам'яті з боку процесора і відеоадаптера. Наприклад, у випадку двухпортовой пам'яті VRAM - Video RAM, до кожного її осередку одночасно можуть одержати доступ (із записом або читанням) як процесор, так і сам адаптер. Відзначимо, що в старих відеоадаптерах для зниження перекручувань зображення на екрані під час перезапису вмісту пам'яті використовувалося звертання до пам'яті з боку центрального процесора тільки в періоди кадрового і рядкового гасящего імпульсів (коли електронний промінь монітора гаситься при переході до наступного рядка екрана або до наступного кадру). Всі сучасні відеоадаптери можуть працювати у двох основних режимах: текстовому (символьному, алфавітно-цифровому) і графічному. У текстовому режимі відеопам'ять має початкова адреса B8000, а в графічному - А0000. У текстовому режимі на екран можна виводити тільки окремі символи, причому тільки в певні позиції на екрані. При цьому у відеопам'яті зберігаються винятково коди виведених символів ( 8-розрядні) і коди атрибутів символів ( 8-розрядні). Тобто кожної символьної позиції на екрані відповідає два байти пам'яті. До атрибутів символу ставляться яскравість, колір, мерехтіння як символу, так і його тла. Для перетворення вмісту пам'яті у відеосигнал крапкового зображення застосовується так званий знакогенератор. Він може являти собою ПЗП, у якому записане порядкове растрове зображення кожного символу. При цьому чим більше крапок растра приділяється під зображення символу, тим він якісніше, але тем більше місця займає на екрані. Переваги текстового режиму - це простота керування екраном і малий обсяг необхідної пам'яті. Прикладом його використання є програма початкового запуску BIOS. У графічному режимі у відеопам'яті зберігається опис кожної крапки на екрані монітора. Кожній крапці відповідає трохи біт пам'яті (використовується ряд: 1, 4, 8, 16, 24 біт на одну крапку). При цьому, відповідно, кожна крапка може мати 2n станів, де n - кількість битов, а під станом розуміється колір і яскравість крапки. При одному біті крапка може бути білої або чорної, при 4 бітах вона може мати 16 квітів, при 8 бітах - 256, при 16 бітах - 65 536, а при 24 бітах - 16 777 216 квітів і відтінків. Тут же відзначимо, що загальна кількість крапок на екрані в сучасних комп'ютерах вибирається з ряду 640 (по горизонталі) x 480 (по вертикалі), 800x600, 1024x768, 1280x1024, 1600x1200. Звідси неважко розрахувати необхідний для повного екрана обсяг відеопам'яті. Так, наприклад, при дозволі 800x600 крапок і при 256 квітах (8 біт або 1 байт) потрібно 800x600x1 = 480 000 байт пам'яті. При дозволі 1024x768 і 65 536 квітів (2 байти) потрібно 1024x768x2 = 1 572 864 байти. Однак обсяг відеопам'яті вибирається з наступного ряду: 256 Кбайт, 512 Кбайт, 1 Мбайт, 2 Мбайт, 4 Мбайт, 8 Мбайт, 16 Мбайт. У табл. 7.3 наведені необхідні обсяги відеопам'яті для різних режимів роботи відеоадаптера. Таблиця 7.3. Необхідні обсяги відеопам'яті.Дозвіл і кількість квітів Кількість біт на крапку Обсяг відеопам'яті 800 x 600, 16 квітів 4 256 Кбайт 800 x 600, 256 квітів 8 512 Кбайт 800 x 600, 64 До квітів 16 1 Мбайт 800 x 600, 16 М квітів 24 2 Мбайт 1024 x 768, 16 квітів 4 512 Кбайт 1024 x 768, 256 квітів 8 1 Мбайт 1024 x 768, 64 До квітів 16 2 Мбайт 1024 x 768, 16 М квітів 24 4 Мбайт 1280 x 1024, 16 квітів 4 1 Мбайт 1280 x 1024, 256 квітів 8 2 Мбайт 1280 x 1024, 64 До квітів 16 4 Мбайт 1280 x 1024, 16 М квітів 24 4 Мбайт Зрозуміло, що для повного відновлення такого великого обсягу пам'яті потрібне значний час навіть при швидкій відеопам'яті і швидкому процесорі. У ролі обмежуючого фактора буде виступати темп обміну по системній шині. Тому саме відеоадаптери першими стали розміщати на локальній шині VLB або на шині PCI, а пізніше - на виділеній шині AGP. Інший напрямок прискорення формування зображення - удосконалювання принципів обміну з комп'ютером. Перші відеоадаптери були розраховані на те, щоб всі маніпуляції із зображенням проводив сам центральний процесор комп'ютера. Принципово інший підхід - використання графічного співпроцесора. При цьому центральний процесор тільки дає команди на формування зображення, а співпроцесор, розташований на платі відеоадаптера, сам уже виконує всю обробку, розрахунки і формування об'єктів на екрані, що дає велике збільшення швидкості формування зображень. Проміжний варіант - це застосування так званих графічних прискорювачів, тобто вузлів, що виконують найбільш трудомісткі операції по формуванню зображень, але центральний процесор при цьому не звільняється повністю від керування відеопам'яттю. У цей час найпоширеніші два стандарти дисплеїв: SVGA (Super VGA), що підтримує максимальний дозвіл 1024х768 крапок (стандартним уважається 800х600 крапок) в 16- і 256-кольорових режимах при максимальному обсязі відеопам'яті 4 Мбайт. Крім того, передбачене використання двухпортовой пам'яті і 16-розрядної шини даних і ряд інших нововведень. XGA і XGA-2 (eXtended Graphics Array) - ці стандарти запропоновані в 1990 і 1992 р.г. компанією IBM. Основним режимом уважається дозвіл 1024х768 крапок при 256 квітах (XGA) або при 64 До квітах ( XGA-2). Відмінна риса - використання швидкодіючого графічного співпроцесора і наявність можливості управляти системною шиною, що дозволяє виконувати відеооперації без участі центрального процесора. Так само, як і в SVGA, використовується двухпортовая оперативна пам'ять, причому вона розташовується в адресному просторі комп'ютера в останніх адресах повної 4-гигабайтной області, на які звичайно ніхто не претендує. В XGA-2, на відміну від XGA, використовується тільки прогресивна (суцільна, non-interlaced, NI), а не чересстрочная (interlaced) розгорнення зображення на екрані монітора, що забезпечує малі мерехтіння. Обидва стандарти підтримують повну сумісність із SVGA. UVGA (Ultra VGA) - основним дозволом уважається 1280х1024 крапок. UXGA - дозвіл 1600х1200 крапок, XVGA - 1280х768 крапок. Для підключення до комп'ютера клавіатури застосовується спеціальний інтерфейс із послідовною передачею інформації. Це дозволяє використовувати для приєднання клавіатури всього два двунаправленных проведення (лінія даних і тактовий сигнал). Обмін інформацією йде 11-бітовими посилками, що включають 8 розрядів даних і службову інформацію (тобто стартовий біт, біт парності і стоповий біт). У комп'ютері IBM PC XT для підключення клавіатури використовувалася мікросхема PPI (Programmable Peripheral Interface) i8255, а в PC AT - мікросхема UPI (Universal Peripheral Interface) i8042. Принцип роботи клавіатури досить простий. Він зводиться до постійного сканування (послідовному опитуванню) всіх клавіш (звичайно застосовується 101-клавішна клавіатура) і до пересилання в комп'ютер номера натиснутої клавіші ( 8-бітного скэн-коду), причому як при її натисканні, так і при відпусканні. При відпусканні клавіші її скэн-код випереджається посилкою коду F0. Якщо клавіша втримується тривалий час, то через заданий інтервал посилки її скэн-кодів повторюються із заданою частотою. Якщо одночасно натискається більше однієї клавіші, то повторюється посилка коду тільки останньої з натиснутих клавіш. При одержанні скэн-коду контролером 8042 він формує сигнал запиту апаратного переривання IRQ1. Це приводить до виклику програми обробки натискання клавіші, що перебуває в BIOS. Службові клавіші (Shift, Сtrl, Alt) і перемикаючі клавіші (Caps Lock, Insert, Num Lock) обробляються спеціальним образом, а у випадку натискання символьних клавіш їх скэн-коди перетворяться в коди відповідних символів і містяться в буфер клавіатури. Буфер клавіатури - це 16-байтная область пам'яті, організована за принципом FIFO "перший увійшов - перший вийшов", у якій зберігаються коди натиснутих клавіш доти, поки їх зможе обробити програма. Сучасні клавіатури персональних комп'ютерів мають 101 або 102 клавіші. Є "розширені" моделі з кількістю клавіш до 122 і "усічені" моделі з кількістю клавіш близько 90, застосовувані в портативних комп'ютерах типу ноутбук. Починаючи з комп'ютера PC AT, клавіатура може не тільки передавати інформацію, але і приймати неї. Ця можливість використовується для пересилання в клавіатуру команд, що встановлюють режими її роботи (наприклад, швидкість повтору вводу символів при утримуваній клавіші або тимчасовій затримці перед повтором). Комп'ютерна миша, що служить для керування курсором, підключається до комп'ютера через стандартний послідовний інтерфейс RS-232C (про нього докладніше - в окремій главі). Для передачі комп'ютеру інформації про переміщення миші використовується 3-байтовый формат. Два байти при цьому містять інформацію про переміщення миші по вертикалі і по горизонталі, а один байт - про стан кнопок миші. Передача ведеться тільки в одному напрямку (від миші до комп'ютера) зі швидкістю 1200 біт/с. Переміщення виміряється в спеціальних одиницях cpi (counts per inch), рівних приблизно 0,005 дюйма (0,13 мм). Варто відзначити, що миша, як правило, харчується від системного блоку комп'ютера, для чого задіяні невикористовувані сигнальні лінії рознімання інтерфейсу RS-232C, тому що властиво напруги живлення на рознімання не виведені. Саме тому миша приєднується до комп'ютера четырехпроводным кабелем, хоча для інформації вистачило б і двухпроводного. Докладніше про інтерфейс RS-232C у наступній главі. Зараз використовується також підключення миші через інтерфейс PS/2, схожий на RS-232C, але не сумісний з ним ні электрически, ні конструктивно. Альтернатива миші - це маніпулятори Stick Pointer і Touch Pad, які не мають механічних частин, що рухаються. Спочатку вони застосовувалися тільки в ноутбуках, але потім їх стали розміщати і на клавіатурах звичайних настільних комп'ютерів. Stick Pointer являє собою невеликий важілець, розташований між клавішами. Тиск на нього в різні сторони викликає переміщення курсору на екрані. При цьому сам важілець залишається нерухливим. Touch Pad являє собою невелику площадку, розташовану поруч із клавішами, по якій необхідно рухати пальцем або ручкою, причому рух пальця викликає таке ж переміщення курсору на екрані. З погляду комп'ютера ці маніпулятори нічим не відрізняються від миші, вони використовують той же інтерфейс. Ігровий адаптер джойстик підключається до комп'ютера через власний спеціальний інтерфейс. Для зв'язку із джойстиком не потрібно ніяких переривань. Використовується тільки одна адреса вводу/виводу. 7.6. Зовнішня пам'ять Зовнішня пам'ять комп'ютера являє собою дискові накопители інформації - убудований накопичувач на жорсткому диску (вінчестер) і накопичувач на змінних гнучких дисках (дискетах). В обох випадках магнітні диски зберігають інформацію у вигляді намагнічених концентричних доріжок (циліндрів) на магнітному покритті, розбитих на сектори. Диск у накопичувачі постійно обертається, а запис і читання інформації виробляються переміщуваними уздовж радіуса диска магнітними головками. Завдяки постійному прогресу технології виробництва накопичувачів, розвитку технології магнітних покриттів і магнітних головок, ємність вінчестерів підвищилася до декількох десятків гігабайт, а ємність дискет - до сотень мегабайт (правда, стандартним поки вважається обсяг дискети 1,44 Мбайт). Докладний опис роботи дисководів і принципів зберігання інформації на магнітних дисках зажадало б занадто багато місця, до того ж воно не має прямого відношення до теми даної книги, тому ми тут приведемо тільки деякі особливості організації обміну інформацією. Важливий параметр будь-якого дисководу - це його швидкодія, що визначається, з одного боку, досяжною швидкістю запису/читання інформації, а з іншого боку - часом позиціонування (тобто установки в потрібне положення) магнітної головки дисководу. Немаловажне і швидкодія інтерфейсу, що здійснює зв'язок комп'ютера з накопичувачем, а також застосовувані способи організації обміну інформацією. У цей час найпоширеніші два стандартних інтерфейси для вінчестерів: IDE (Integrated Drive Electronics) - інтерфейс для дискових накопичувачів, офіційна назва - ATA (AT Attachment). Саме цей інтерфейс застосовується в якості основного в персональних комп'ютерах. Швидкість обміну може досягати 133 Мбайт/с. SCSI (Small Computer System Interface) - малий комп'ютерний системний інтерфейс. У принципі, він використовується і для підключення інших пристроїв (наприклад, сканерів), але основне його застосування - для дисководів. Як правило, даний інтерфейс споконвічно включається в структуру тільки деяких серверів, а для його реалізації в персональних комп'ютерах необхідна додаткова плата розширення (до речі, досить дорога). Швидкість обміну може досягати 320 Мбайт/с. Порівняння цих двох інтерфейсів (SCSI і IDE) показує, що в однокористувальницьких автономних системах набагато ефективніше застосовувати IDE, а в багатокористувальницькі і многозадачных системах вигідніше стає SCSI. Варто також відзначити, що установка SCSI складніше і дорожче, ніж IDE. Крім того, при використанні вінчестера з інтерфейсом SCSI як мережний диск можуть виникнути проблеми. Перевагою SCSI є більша кількість максимальна підключених дисководів і можливість одночасного виконання ними подаваних команд. А що стосується швидкості обміну, то вона в основному визначається не пропускною здатністю інтерфейсу, а іншими параметрами, зокрема швидкістю використовуваної системної шини. Тому точно сказати, дисковід з яким інтерфейсом буде працювати швидше, у загальному випадку неможливо. До того ж у випадку IDE реальна швидкість дуже сильно залежить від схемотехнических рішень, використаних виготовлювачем дисководів. Для прискорення обміну з дисками широко застосовується кэширование, принцип якого близький до принципу кэширования оперативної пам'яті. Точно так само кэширование диска дозволяє за рахунок використання більше швидкої електронної пам'яті, чим дискова пам'ять, істотно збільшити середню швидкість обміну з диском. Тут принципово важливі кілька моментів: у більшості випадків кожне наступне звертання до диска буде звертанням до наступного один по одному блоку інформації на диску; для позиціонування головки потрібне помітний час (порядку миллисекунды); шуканий сектор на диску може не виявитися під головкою після її установки, і буде потрібно чекати на нього приходу. Все це приводить до того, що виявляється набагато вигідніше містити в оперативній пам'яті (дискової кеш-пам'яті) копію частини диска і звертатися на диск тільки в тому випадку, якщо потрібної інформації немає в кеш-пам'яті. Для обміну з кеш-пам'яттю, як і у випадку оперативної пам'яті, використовуються методи Write Through (WT) і Write Back (WB). Тому що вінчестер - це блочно-блочно-орієнтований пристрій (розмір блоку дорівнює 512 байт), те дані передаються в кэш блоками. При заповненні кеш-пам'яті в неї листуються не тільки необхідні в цей момент блоки, але і наступні за ними (метод "читання вперед", Read Ahead), подальше звертання до яких найбільше ймовірно. Особливо ефективно кэширование при оптимізації жорсткого диска (його дефрагментации), коли кожний файл розташований у групі секторів, що випливають один за одним. Як і у випадку кэширования пам'яті, при кэшировании диска використовується механізм LRU, що дозволяє обновляти ті блоки, до яких довше всього не було обігів. Кеш-пам'ять диска звичайно розташовується на платі спеціального кэш-контролера дисководу, і її обсяг може досягати 16 Мбайт. Для сполучення з комп'ютером дисководу для гнучких дисків ( флоппи-дисків, дискет) традиційно застосовується спеціальний інтерфейс SA-400, розроблений на початку 70-х років. Контролер приєднується до дисководу 34-провідним кабелем, причому до одного контролера звичайно приєднується до двох дисководів (теоретично їх може бути чотири). На кожному накопичувачі, як правило, є чотири перемички DS0 -DS3 (Drive Select) для вибору номера даного дисководу. Дані по інтерфейсі передаються в послідовному коді в обох напрямках (по різним проводам). Швидкість передачі даних для дискет ємністю 1,44 Мбайт становить 500 Кбит/с. Як і контролер жорстких дисків, контролер гнучких дисків у сучасних комп'ютерах установлений на системній платі (для старих моделей комп'ютерів випускалися спеціальні плати розширення). У нових комп'ютерах став стандартним дисковід на оптичних компакт-дисках ( CD-ROM). На цих дисках інформація зберігається у вигляді зон з різними ступенями відбиття світла від поверхні диска. Замість безлічі концентричних доріжок на поверхні диска (як у магнітного диска, вінчестера), у випадку компакт-диску застосовується всього одна спіральна доріжка. Для читання інформації застосовується мініатюрний лазер. Диски мають діаметр 5 дюймів і стандартний обсяг 780 Мбайт. Швидкість обміну інформацією з компакт-дисками зараз становить від 2,4 Мбайт/з (для дисководів зі швидкістю 16х) до 3,6 Мбайт/з (для дисководів зі швидкістю 52х). Використовуються інтерфейси IDE і SCSI. На компакт-диск записуються не тільки дані, але і звук, а також зображення. Існують компакт-диски з можливістю однократного запису або навіть багаторазового перезапису інформації з комп'ютера. Можливо, дисководи, що підтримують такі диски, незабаром увійдуть у стандартну комплектацію персонального комп'ютера. Правда, швидкість запису інформації на компакт-диски звичайно істотно нижче швидкості читання інформації. Перейти до питань » Глава 8. Інтерфейси персонального комп'ютера 15. Лекція: Системна магістраль ISA Сторінки: 1 | 2 | 3 | питання | » для печатки і PDA Якщо Ви помітили помилку - повідомите нас або виділите її і натисніть Ctrl+Enter Включити коментарі || Допомога У цій лекції розповідається про характеристики системної магістралі ISA, про призначення сигналів і протоколи обміну інформацією на магістралі, а також про принципи розподілу ресурсів ПК.
Відразу ж обмовимося, що під інтерфейсами персонального комп'ютера в цьому випадку маються на увазі тільки зовнішні інтерфейси, тобто засобу сполучення із зовнішніми стосовно комп'ютера в цілому пристроями. При цьому зовнішні пристрої можуть бути як стандартними (наприклад, принтер або модем), так і нестандартними (наприклад, вимірювальні і керуючі модулі, прилади, установки). У цей час комп'ютери можуть мати безліч зовнішніх інтерфейсів. Найпоширенішийо наступні: системна шина (магістраль) ISA; шина PCI; шина AGP; шина PC Cards (стара назва PCMCIA) - звичайно тільки в ноутбуках; паралельний порт (принтерний, LPT-Порт) Centronics; послідовний порт ( COM-Порт) RS-232C; послідовний порт USB (Universal Serial Bus); послідовний інфрачервоний порт IrDA. Крім того, комп'ютери можуть мати рознімання для підключення зовнішнього монітора, клавіатури, миші. Деякі комп'ютери мають убудовані модеми і мережні адаптери, тоді вони розташовують, відповідно, телефонними і мережним зовнішніми інтерфейсами. Підключення стандартних зовнішніх пристроїв звичайно не викликає ніяких проблем: треба тільки приєднати пристрій до комп'ютера відповідним стандартним кабелем і (можливо) установити на комп'ютер програмний драйвер. Знати особливості зовнішніх інтерфейсів користувачеві в цьому випадку не обов'язково. У випадку інфрачервоного порту не потрібний навіть кабель. Набагато складніше ситуація, коли до комп'ютера потрібно приєднати нестандартний зовнішній пристрій. У цьому випадку необхідно доскональне знання особливостей використовуваних інтерфейсів і вміння ефективно з ними працювати. Обмежений обсяг книги не дозволяє повністю розглянути дане питання, тому ми зупинимося тільки на загальному описі деяких зовнішніх інтерфейсів комп'ютера. Найчастіше для підключення нестандартних зовнішніх пристроїв використовуються системна магістраль ISA, паралельний інтерфейс Centronics (LPT) і послідовний інтерфейс RS-232C (COM). 8.1. Системна магістраль ISA Системна шина (магістраль) ISA була розроблена спеціально для персональних комп'ютерів типу IBM PC AT і є фактичним стандартом. У той же час, відсутність офіційного міжнародного статусу магістралі ISA (вона не затверджена як стандарт жодним міжнародним комітетом зі стандартизації) приводить до того, що багато виробників допускають деякі відхилення від фірмового стандарту. ISA з'явилася розширенням магістралі комп'ютерів IBM PC і IBM PC XT. У ній була збільшена кількість розрядів адреси і даних, збільшене число ліній апаратних переривань і каналів ПДП, а також підвищена тактова частота. До 62-контактного рознімання колишньої магістралі був доданий 36-контактне нове рознімання. Проте, сумісність була збережена, і плати, призначені для IBM PC XT, годяться і для IBM PC AT. Характерна відмінність ISA полягає в тому, що її тактовий сигнал не збігається з тактовим сигналом процесора, як це було в IBM PC XT, тому швидкість обміну по ній не пропорційна тактовій частоті процесора. Магістраль ISA ставиться до немультиплексированным (тобто имеющим роздільні шини адреси і даних) 16-розрядним системним магістралям середньої швидкодії. Обмін здійснюється 8-мі або 16-ти розрядними даними. На магістралі реалізований роздільний доступ до пам'яті комп'ютера і до пристроїв вводу/виводу (для цього є спеціальні сигнали). Максимальний обсяг адресуемой пам'яті становить 16 Мбайт (24 адресні лінії). Максимальний адресний простір для пристроїв вводу/виводу - 64 Кбайт (16 адресних ліній), хоча практично всі випускати^ся платы, що, розширення використовують тільки 10 молодших адресних ліній (1 Кбайт). Магістраль підтримує регенерацію динамічної пам'яті, радіальні переривання і прямій доступ до пам'яті. Допускається також захват магістралі. Рознімання магістралі ISA розділений на дві частини, що дозволяє зменшувати розміри 8-розрядних плат розширення, а також використовувати плати, розроблені для комп'ютерів IBM PC XT. Зовнішній вигляд плат розширення показаний на мал. 8.1. Призначення контактів рознімань представлене в табл. 8.1 і 8.2. На магістралі присутні чотири напруги живлення: +5 У, -5 У, +12 У и -12 У, які можуть використовуватися платами розширення. Рис. 8.1. Нумерація контактів рознімання ISA (для IBM PC XT - тільки А1 ... А31 і В1 ... В31). У ролі задатчика (Master) магістралі можуть виступати процесор, контролер ПДП, контролер регенерації або інший пристрій. Виконавцями (Slave) можуть бути системні пристрої комп'ютера, підключені до ISA, або плати (карти) розширення. Найпоширеніше конструктивне виконання магістралі - рознімання (слоты), всі однойменні контакти яких паралельно з'єднані між собою, тобто всі рознімання абсолютно рівноправні. У слоты встановлюються плати розширення, які оснащені интерфейсными розніманнями магістралі, виконаними друкованими провідниками на краю плати. Кількість настановних місць для плат розширення залежить від типу корпуса комп'ютера і становить звичайно від 2 до 8 і навіть більше. У таблицях 8.1 і 8.2 знак мінус перед назвою сигналу говорить про те, що активному (робітникові) рівню сигналу відповідає низький рівень напруги на відповідній лінії магістралі. На лініях адреси і даних логічному нулю відповідає низький рівень напруги, а одиниці - високий (тобто логіка позитивна). Таблиця 8.1. Призначення контактів рознімання магістралі ISA (продовження в Табл. 8.2).Контакт Ланцюг Контакт Ланцюг A1 -I/O CH CK B1 GND A2 SD7 B2 RESET DRV A3 SD6 B3 +5 У A4 SD5 B4 IRQ9 (IRQ2) A5 SD4 B5 –5 У A6 SD3 B6 DRQ2 A7 SD2 B7 –12 B A8 SD1 B8 0WS A9 SD0 B9 +12 B A10 I/O CH RDY B10 GND A11 AEN B11 -SMEMW A12 SA19 B12 -SMEMR A13 SA18 B13 -IOW A14 SA17 B14 -IOR A15 SA16 B15 -DACK3 A16 SA15 B16 DRQ3 A17 SA14 B17 -DACK1 A18 SA13 B18 DRQ1 A19 SA12 B19 -REFRESH A20 SA11 B20 SYSCLK A21 SA10 B21 IRQ7 A22 SA9 B22 IRQ6 A23 SA8 B23 IRQ5 A24 SA7 B24 IRQ4 A25 SA6 B25 IRQ3 A26 SA5 B26 -DACK2 A27 SA4 B27 T/C A28 SA3 B28 BALE A29 SA2 B29 +5 B A30 SA1 B30 OSC A31 SA0 B31 GND Таблиця 8.2. Призначення контактів рознімання магістралі ISA (початок у Табл. 8.1).Контакт Ланцюг Контакт Ланцюг C1 -SBHE D1 -MEM CS16 C2 LA23 D2 -I/O CS16 C3 LA22 D3 IRQ10 C4 LA21 D4 IRQ11 C5 LA20 D5 IRQ12 C6 LA19 D6 IRQ15 C7 LA18 D7 IRQ14 C8 LA17 D8 -DACK0 C9 -MEMR D9 DRQ0 C10 -MEMW D10 -DACK5 C11 SD8 D11 DRQ5 C12 SD9 D12 -DACK6 C13 SD10 D13 DRQ6 C14 SD11 D14 -DACK7 C15 SD12 D15 DRQ7 C16 SD13 D16 +5 B C17 SD14 D17 -MASTER C18 SD15 D18 GND 8.1.1. Призначення сигналів ISA Коротенько про сигнали ISA уже говорилося в розділі 2.2. Розглянемо призначення основних, найбільше часто використовуваних сигналів магістралі ISA докладніше. SA0...SA19 - фиксируемые адресні розряди (вони дійсні протягом усього циклу обміну). 16-розрядним словам відповідають парні адреси (SA0=0). LA17...LA23 - нефиксируемые адресні розряди. Використовуються для адресації пам'яті. Дійсні тільки на початку циклу обміну (в адресній фазі). BALE - сигнал стробирования адресних розрядів (дійсності адреси відповідає негативний фронт сигналу). Основне призначення - фіксація нефіксованих адресних розрядів у регістрі-засувці. -SBHE - сигнал типу циклу передачі даних ( 8-мі або 16-розрядний цикл). Активний при передачі старшого байта. SD0...SD15 - розряди даних. По лініях SD0...SD7 передається молодший байт, по лініях SD8...SD15 - старший байт. -SMEMR, -MEMR - стробы читання даних з пам'яті. Сигнал -SMEMR виробляється тільки при звертанні до адрес, що не перевищують FFFFF ( щоперебуває в межах молодшого 1 Мбайта), а сигнал -MEMR - при обігу до всіх адрес пам'яті. -SMEMW, -MEMW - стробы запису даних на згадку. Сигнал -SMEMW виробляється тільки при звертанні до адрес, що не перевищують FFFFF ( щоперебуває в межах молодшого 1 Мбайта), сигнал -MEMW - при обігу до всіх адрес пам'яті. -IOR - строб читання даних із пристроїв вводу/виводу. При активному сигналі адресуемое пристрій вводу/виводу повинне видати свої дані на шину даних. -IOW - строб запису даних у пристрої вводу/виводу. По цьому сигналі адресуемое пристрій вводу/виводу повинне прийняти дані із шини даних. -MEM CS16 - сигнал виставляється пам'яттю для повідомлення задатчику про те, що вона має 16-розрядну організацію. Виробляється у відповідь на розпізнавання адреси пам'яті. -I/O CS16 - сигнал виставляється пристроєм вводу/виводу для повідомлення задатчику про те, що воно має 16-розрядну організацію, і необхідний 16-розрядний цикл обміну. Виробляється у відповідь на розпізнавання своєї адреси. I/O CH RDY - сигнал знімається (робиться низьким) виконавцем (пристроєм вводу/виводу або пам'яттю) по передньому фронті сигналів -IOR і -IOW у випадку, якщо він не встигає виконати потрібну операцію в темпі задатчика. Тобто цей сигнал використовується для асинхронного обміну по магістралі. -I/O CH CK - сигнал виробляється будь-яким виконавцем (пристроєм вводу/виводу або пам'яттю) для інформування задатчика про фатальну помилку, наприклад, про помилку парності при доступі до пам'яті. -0WS - сигнал виставляється виконавцем для інформування задатчика про необхідність проведення циклу обміну без вставки такту очікування. -REFRESH - сигнал регенерації, виставляється контролером регенерації для інформування всіх пристроїв на магістралі про виконання циклів регенерації динамічної пам'яті комп'ютера. RESET DRV - сигнал скидання в початковий стан всіх пристроїв на магістралі. Виробляється центральним процесором при включенні або збої живлення, а також при натисканні на кнопку скидання RESET комп'ютера. SYSCLK - сигнал системного тактового генератора, тактовий сигнал магістралі. У більшості комп'ютерів його частота дорівнює 8 Мгц незалежно від тактової частоти процесора. OSC - не синхронізований з SYSCLK сигнал кварцового генератора із частотою 14,31818 Мгц. IRQ - сигнали запиту радіальних переривань. Запитом є позитивний перехід на відповідній лінії IRQ. DRQ - сигнали запиту ПДП. -DACK - сигнали надання ПДП. AEN - сигнал вибору пристрою, що запросив ПДП. Відключає всі інші пристрої, що не беруть участь у даному циклі ПДП. 8.1.2. Цикли обміну по ISA Про цикли обміну по магістралі ISA уже згадувалося в розділі 2.2. Тут ми розглянемо їх трохи докладніше, на рівні, достатньому для практичного використання. У режимі програмного обміну інформацією на магістралі ISA виконується чотири типи циклів: цикл запису на згадку; цикл читання з пам'яті; цикл запису в пристрій вводу/виводу; цикл читання із пристрою вводу/виводу. Цикли обміну з пам'яттю і із пристроями вводу/виводу розрізняються між собою використовуваними стробами записи і читання, а також тимчасовими затримками між сигналами. Цикл обміну із пристроями вводу/виводу починається з виставляння задатчиком коду адреси на лініях SA0...SA15 і сигналу -SBHE, що визначає розрядність інформації. Найчастіше використовуються тільки 10 молодших ліній SA0...SA9, тому що більшість розроблених раніше плат розширення задіють тільки їх. У відповідь на одержання адреси виконавець, що розпізнав свою адресу, повинен сформувати сигнал -I/O CS16 у випадку, якщо обмін повинен бути 16-розрядним. Далі треба властиво команда читання або запису. При циклі читання задатчик виставляє сигнал -IOR, у відповідь на який виконавець повинен видати дані на шину даних. Ці дані повинні бути зняті виконавцем після закінчення сигналу -IOR. У циклі запису задатчик виставляє записувані дані і супроводжує їх стробом запису -IOW. Виконавець повинен прийняти ці дані (для гарантії - по задньому фронті сигналу -IOW). На мал. 8.2 наведені тимчасові діаграми циклів обміну із пристроями вводу/виводу. Для простоти на одному малюнку показаний як цикл запису, так і цикл читання, хоча виробляються вони, звичайно, у різний час. Рис. 8.2. Тимчасові діаграми циклів програмного обміну із пристроями вводу/виводу (всі інтервали в наносекундах). Якщо виконавець не встигає виконати команду в темпі магістралі, він може призупинити на ціле число періодів Т сигналу SYSCLK завершення циклу читання або записи за рахунок зняття (перекладу в низький рівень) сигналу I/O CH RDY (так званий подовжений цикл). Це виробляється у відповідь на одержання переднього фронту сигналу -IOR або -IOW. Сигнал I/O CH RDY може втримуватися низьким не більше 15,6 мкс, у противному випадку процесор переходить у режим обробки немаскируемого переривання NMI. Розроблювачеві ISA-Пристроїв необхідно, насамперед, звертати увагу на ті тимчасові інтервали, які пов'язані зі швидкодією апаратури цих пристроїв. Наприклад, на обробку адреси селектору адреси приділяється не більше 91 нс, а буфер даних у циклі читання повинен видавати дані на магістраль не більш ніж за 110 нс. При циклах програмного обміну з пам'яттю використовуються ті ж самі сигнали, тільки замість строба читання -IOR застосовуються стробы читання -MEMR і -SMEMR, а замість строба запису -IOW - стробы запису -MEMW і -SMEMW. Для визначення байтового або словного формату даних застосовується сигнал -MEM CS16. Для асинхронного режиму обміну (подовженого циклу) тут також використовується сигнал I/O CH RDY. Відзначимо, що пам'ять повинна обробляти всі адресні розряди магістралі, включаючи і LA17...LA23. На мал. 8.3 показана тимчасова діаграма обміну з пам'яттю, причому тут зазначені тільки тимчасові інтервали, що відрізняються від аналогічних інтервалів на мал. 8.2. Для простоти на одному малюнку показаний як цикл запису на згадку, так і цикл читання з пам'яті. Рис. 8.3. Тимчасові діаграми циклів програмного обміну з пам'яттю (всі інтервали в наносекундах). У випадку циклів прямого доступу до пам'яті (ПДП) використовується інший протокол обміну. Тому що магістраль ISA має роздільні стробы читання і записи для пристроїв вводу/виводу і для пам'яті, пересилання даних у режимі ПДП виробляються за один машинний цикл. Тобто якщо дані треба переслати із пристрою вводу/виводу на згадку, то одночасно виробляється читання даних із пристрою вводу/виводу (по сигналі -IOR) і їхній запис на згадку (по сигналі -MEMW). Аналогічно здійснюється пересилання даних з пам'яті в пристрій вводу/виводу (по сигналах -MEMR і -IOW). Цикл ПДП (мал. 8.4) починається із запиту ПДП від виконавця, що бажає зробити обмін, за допомогою одного із сигналів DRQ. Після звільнення магістралі поточним задатчиком (наприклад, процесором) контролер ПДП через час t формує відповідний сигнал -DACK, що говорить про надання ПДП запросившему його. Рис. 8.4. Тимчасова діаграма циклів прямого доступу до пам'яті (всі інтервали в наносекундах). Потім контролер ПДП виробляє адреса комірки пам'яті, з якого буде вироблятися обмін у поточному циклі, і сигнал AEN, що говорить пристрою вводу/виводу про те, що до нього йде обіг у режимі ПДП. Після цього виставляється строб читання (-IOR або -MEMR), у відповідь на який джерело переданих даних виставляє свою інформацію на шину даних, і строб запису (-MEMW або -IOW), по якому дані записуються в приймач даних. Тут так само, як і у звичайному циклі, можливий асинхронний обмін (подовжений цикл) з використанням сигналу I/O CH RDY. Для простоти на одному малюнку показано два цикли: передачі з пам'яті в пристрій вводу/виводу і передачі із пристрою вводу/виводу на згадку. Тимчасові інтервали цих двох циклів трохи розрізняються. При апаратних перериваннях протокол обміну зовсім простій, тому що переривання використовуються радіальні. Виконавець, що бажає ініціювати переривання, виставляє свій запит (позитивний перехід на одній з ліній IRQ) на магістраль. Контролер переривань, одержавши цей запит, перетворить його в запит переривань процесора. Процесор, закінчивши виконання поточної команди, переходить на адресу початку програми обробки даного переривання, що однозначно визначається по номері використовуваного сигналу IRQ. Після обробки переривання процесор вертається до основної програми. Для проведення регенерації динамічної пам'яті комп'ютера використовуються спеціальні цикли регенерації (мал. 8.5). Рис. 8.5. Тимчасові діаграми циклів регенерації на ISA (всі інтервали зазначені в наносекундах). Такі цикли виконує контролер регенерації, що повинен для цього одержувати керування магістраллю кожні 15 мікросекунд. Під час циклу регенерації виробляється читання однієї з 256 комірок пам'яті (для адресації при цьому використовуються тільки вісім молодших розрядів адреси SA0...SA7). Інформація, що читається, ніде не застосовується, тобто це цикл псевдочтения. Проведення 256 циклів регенерації, тобто псевдочтение з 256 послідовних адрес пам'яті, забезпечує повне відновлення інформації в пам'яті і її безперервне збереження. Якщо з якихось причин цикл регенерації пам'яті не виробляється вчасно, можлива втрата інформації. Цикл регенерації містить у собі виставляння сигналу -REFRESH, сигналів коду адреси SA0...SA7 і строба читання з пам'яті -MEMR. Якщо буде потреба може використовуватися сигнал I/O CH RDY, що забезпечує асинхронний обмін. При включенні живлення, а також при натисканні кнопки RESET на передній панелі комп'ютера на магістралі виробляється сигнал RESET DRV, що використовується всіма пристроями, підключеними до магістралі для скидання у вихідний стан і відключення від магістралі. Захват магістралі стороннім задатчиком, у принципі, передбачена стандартом, використовується на практиці досить рідко, тому що жадає від пристрою, що захопив магістраль, повного керування нею, включаючи і підтримку періодичної регенерації пам'яті. Електричні характеристики магістралі висувають тверді вимоги до всім підключати^ся устройствам, що, по величині вхідних і вихідних струмів, а також по споживаній потужності. У противному випадку можливий вихід з ладу всього комп'ютера в цілому. Стандарт визначає, що вихідний струм будь-якого джерела магістральних сигналів не повинен бути менше 24 мА, а вхідний струм будь-якого приймача магістральних сигналів не повинен перевищувати 0,8 мА. Крім того, порушення в роботі комп'ютера може викликати недотримання тимчасових обмежень, що накладаються використовуваними протоколами обміну у всіх розглянутих циклах. 8.1.3. Розподіл ресурсів комп'ютера Крім архітектури апаратних засобів і параметрів системної шини специфіка будь-якого комп'ютера визначається прийнятим стандартним розподілом всіх його ресурсів. Дотримувати правил, установлені цим розподілом, повинні і програмісти (як системні, так і що займаються розробкою прикладних програм), і розроблювачі додаткового встаткування, і навіть ті користувачі, які просто хочуть установити в комп'ютер нову плату розширення. У випадку найменшого порушення цих правил можливі як непередбачені збої в роботі комп'ютера, неможливість його початкового завантаження, так і повний вихід комп'ютера з ладу. Під розподілом ресурсів у цьому випадку розуміється: розподіл адресного простору системної пам'яті, відведення окремих областей пам'яті під особливі цілі; розподіл адресного простору пристроїв вводу/виводу, у тому числі для системних засобів комп'ютера; розподіл каналів запиту переривань, у тому числі для системних пристроїв; розподіл каналів запиту прямого доступу до пам'яті. Зрозуміло, що якщо програміст захоче використовувати ті адреси пам'яті, які відведені для системних потреб (наприклад, для пам'яті дисплея або системних таблиць), те працездатність комп'ютера порушиться. Якщо виконувана програма спробує записати яку-небудь інформацію з тих адресам системної пам'яті, які стандартом відведені під постійну пам'ять (ROM), то записувана інформація буде просто загублена, і програма працювати не буде. Якщо писати інформацію з тих адресам пам'яті, які відведені під відеопам'ять, то буде спотворюватися зображення на екрані відеомонітора. Якщо плата, що вставляється в комп'ютер, розширення використовує неправильні (зайнятими іншими пристроями) адреси в адресному просторі пам'яті, то її робота буде неможлива, і не виключений навіть вихід з ладу апаратури комп'ютера (тому що при циклах читання з адрес, що перекриваються, пам'яті два пристрої будуть виставляти свої дані на шину одночасно, що може стати причиною вигоряння буферних мікросхем). Якщо розроблювач плати розширення із пристроєм вводу/виводу або користувач, що підключає нову плату розширення, установлять адресу свого пристрою так, що він буде збігатися з адресою системного пристрою або адресою іншої плати розширення, то можливі конфлікти при звертанні до даного пристрою. При цьому в циклі запису інформація буде записуватися не в одне, а у два або більше пристрої, а в циклі читання на шину даних будуть одночасно виставляти свої дані не одне, а кілька пристроїв. Тобто в циклі запису можливе порушення встановлених режимів роботи системних пристроїв (наприклад, контролера переривань або контролера ПДП) або неправильна робота нової плати розширення, а в циклі читання - навіть вихід з ладу одного із пристроїв, що виставляють свої дані на магістраль одночасно. Якщо при підключенні до комп'ютера нової плати розширення встановити для неї неправильний канал запиту переривання, це може привести до того, що дане переривання просте не буде обслуговуватися. Може також перестати обслуговуватися переривання від системного пристрою, з яким конфликтует нова плата. У найгіршому разі це може викликати вихід з ладу нової плати розширення або ж системного пристрою. Точно так само при неправильному виборі номера каналу запиту прямого доступу до пам'яті може перестати обслуговуватися запит ПДП системного пристрою, а може вийти з ладу системний пристрій або нова плата розширення. Тобто дотримання правил стандартного розподілу ресурсів комп'ютера - це не чиясь примха, а життєва необхідність. Правда, останнім часом одержала поширення технологія, що знімає дані проблеми, автоматичного розподілу ресурсів Plug-and-Play (Pn, P&P), що можна перевести як "Вставляй і працюй". При цьому користувачеві досить просто підключити свою плату до комп'ютера, а всі операції по розподілі ресурсів комп'ютер виконає самостійно, і будь-які конфлікти будуть автоматично усунуті. Але для цього необхідно обов'язкове виконання двох умов. По-перше, технологію Pn повинен підтримувати даний комп'ютер і його програмне забезпечення. По-друге, цю технологію повинне підтримувати пристрій, що підключається до комп'ютера. Визначити це досить просто: якщо на платі є переставляються перемычки, що, або механічні перемикачі для завдання параметрів плати (адрес портів вводу/виводу, номера використовуваного переривання, базової адреси пам'яті, номера каналу ПДП), те можна сміло затверджувати, що вибір конфігурації, облік стандартного розподілу ресурсів комп'ютера лягає на користувача. Комп'ютер тут не помічник. Звичайно ж, перед установкою в комп'ютер нових плат розширення варто уважно прочитати інструкцію і точно випливати їй. Докладніше про роботу режиму Pn буде розказано нижче. А тепер розглянемо прийняте в персональних комп'ютерах стандартний розподіл ресурсів. Про стандартний розподіл пам'яті вже говорилося в попередній главі. Ледве докладніше розподіл адрес пам'яті описане в табл. 8.3. З таблиці видно, що для пам'яті, що входить до складу пристроїв вводу/виводу, приділяється зона всього лише в 92 Кбайта (адреси З8000...DFFFF). У цьому просторі може розташовуватися як оперативна пам'ять, так і постійна пам'ять пристроїв вводу/виводу. Іноді пам'ять пристроїв вводу/виводу захоплює також і зону адрес ІЗ0000...З7FFF. Таблиця 8.3. Розподіл адрес пам'яті (адреси дані в шестнадцатеричном коді).Адреси пам'яті Призначення 000000...0003FF Таблиця векторів переривань 000000...09FFFF Пам'ять DOS і користувальницьких програм 0А0000...0АFFFF Пам'ять дисплея EGA або VGA 0B0000...0B7FFF Пам'ять монохромного дисплея MDA 0B8000...0BFFFF Пам'ять дисплея CGA 0C0000...0C3FFF ПЗП BIOS для EGA/VGA 0C8000...0DFFFF Пам'ять пристроїв вводу/виводу 0E0000...0EFFFF Резерв ПЗП ВIOS на материнській платі 0F0000...0FFFFF ПЗП BIOS на материнській платі Важливо пам'ятати, що крім цього розподілу, загального для будь-яких програмних і апаратних засобів, існують ще і розподілу пам'яті, специфічні для кожної операційної системи. Їх також необхідно враховувати щоб уникнути відмови при виконанні системних програм. Відзначимо, що в сучасних комп'ютерах, звичайно ж, не використовуються давно застарілі дисплеї стандартів CGA або MDA. Однак у тому випадку, якщо потрібна універсальність програмного забезпечення, треба враховувати і те, що його можуть спробувати запустити на комп'ютерах з подібними дисплеями. Стандартний розподіл адрес в адресному просторі пристроїв вводу/виводу персонального комп'ютера наведене в табл. 8.4. Як ми вже відзначали, стандарт допускає адресацію 64До пристроїв вводу/виводу (тобто можна використовувати 16 розрядів адреси). Однак переважна більшість плат розширення для спрощення апаратури використовує тільки 10 молодших розрядів, що відповідає всього 1ДО (або 1024) адрес (від 000 до 3FF у шестнадцатеричном коді). При цьому 16-розрядні порти вводу/виводу мають парні адреси, тобто їх може бути всього 512. Таблиця 8.4. Розподіл адрес пристроїв вводу/виводу.Адреси Призначення 000...01F Контролер ПДП 1 020...03F Контролер переривань 1 040...05F Програмувальний таймер 060...06F Контролер клавіатури 070...07F Годинники реального часу 080...09F Регістр сторінки ПДП 0A0...0BF Контролер переривань 2 0С0...0DF Контролер ПДП 2 0F0...0FF Математичний співпроцесор 170...177 Накопичувач на жорсткому диску (другий) 1F0...1F7 Накопичувач на жорсткому диску (перший) 200...207 Ігровий порт (джойстик) 278...27F Паралельний порт LPT2 2С0...2DF Адаптер EGA 2 2F8...2FF Послідовний порт COM2 300...31F Прототипные плати 320...32F Накопичувач на жорсткому диску XT 360...36F Резервні адреси 370...377 Накопичувач на гнучкому диску (другий) 378...37F Паралельний порт LPT1 380...38F Контролер бисинхронного обміну SDLC2 3A0...3AF Контролер бисинхронного обміну SDLC1 3B0...3DF Адаптер VGA 3B0...3BF Адаптер дисплея MDA і принтера 3C0...3CF Адаптер EGA 1 3D0...3DF Адаптер СGA 3F0...3F7 Накопичувач на гнучкому диску (перший) 3F8...3FF Послідовний порт COM1 Як видно з таблиці, значна частина можливих адрес уже зайнята системними пристроями, вільних адрес не так багато. Резервні адреси - це ті, які зарезервовані під подальше розширення системи. У табл. 8.5 представлене стандартний розподіл номерів апаратних переривань і відповідних їм номерів у таблиці векторів переривань (INT). Як видно з таблиці, більшість входів IRQ зайняті системними ресурсами комп'ютера. Вільні (зарезервовані) тільки чотири канали: 10, 11, 12, 15, причому вони перебувають на 16-розрядній частині рознімання магістралі ISA. Правда, іноді в комп'ютерах застосовується тільки один паралельний порт або (набагато рідше) тільки один послідовний порт, і тоді вільними виявляються ще IRQ3 і IRQ5. Сигнали IRQ0...IRQ2, IRQ8 і IRQ13 задіяні на системній платі і недоступні платам розширення. Таблиця 8.5. Розподіл каналів апаратних переривань.Номер переривання IRQ INT Призначення 0 08 Програмувальний таймер 1 09 Контролер клавіатури 2 0A Каскадирование другі контролери 8 70 Годинники реального часу (тільки АТ) 9 71 Програмно переадресовано на IRQ2 10 72 Резерв 11 73 Резерв 12 74 Резерв 13 75 Математичний співпроцесор 14 76 Контролер жорсткого диска 15 77 Резерв 3 0B Послідовний порт COM2 4 0C Послідовний порт COM1 5 0D Паралельний порт LPT2 6 0E Контролер гнучкого диска 7 0F Паралельний порт LPT1 У комп'ютері використовуються два 8-розрядних контролери переривань. Сигнали IRQ0...IRQ7 ставляться до першого з них, а IRQ8...IRQ15 - до другого. Для каскадирования другого контролера переривань задіяний вхід IRQ2 (мал. 8.6). У зв'язку із цим запити переривання мають наступні пріоритети обслуговування в порядку зростання: IRQ7, IRQ6, IRQ5, IRQ4, IRQ3, IRQ15, IRQ14, IRQ12, IRQ11, IRQ10, IRQ9. Така схема включення зложилася історично, тому що в комп'ютері IBM PC XT використовувався тільки один 8-канальний контролер переривань, а при переході на IBM PC AT до нього був доданий другий контролер для подвоєння кількості каналів запитів переривань. У сучасних комп'ютерах обидва контролери переривань разом з іншими контролерами можуть входити до складу однієї і тої ж мікросхеми, але сумісність розподілу переривань як і раніше забезпечується.
Рис. 8.6. Включення двох контролерів переривань. Стандартний розподіл каналів запиту прямого доступу до пам'яті представлене в табл. 8.6. Як і у випадку з контролерами переривань, тут застосовується два контролери, причому один з них каскадируется через іншої. На кожній лінії DRQ повинен бути один вихід ISA-Пристрою. Канали, що відповідають першому контролеру ПДП (сигнали DRQ0...DRQ3), призначені тільки для 8-бітного обміну, а відповідному другому контролеру (DRQ5...DRQ7) - для 16-бітного. Канал DRQ4 використовується для каскадирования двох контролерів ПДП і тому недоступно користувачам. Сигнал запиту DRQ0 має найвищий пріоритет, сигнал DRQ7 - найнижчий. В IBM PC XT канал DRQ0 використовувався для регенерації динамічної пам'яті. Кожний канал ПДП може передавати дані в межах 16-мегабайтного адресного простору блоками довжиною до 64 Кбайт (канали 0, 1, 2, 3) або до 128 Кбайт (канали 5, 6, 7). Таблиця 8.6. Стандартний розподіл каналів прямого доступу до пам'яті.Номер каналу ПДП Призначення 0 Резервний 1 Контролер бисинхронного обміну SDLC 2 Накопичувач на гнучкому диску 3 Резервний 4 Каскадирование перші контролери 5 Резервний 6 Резервний 7 Резервний Природно, звичайному користувачеві запам'ятати всю цю інформацію про розподіл ресурсів досить складно, до того ж при найменшій помилці можливі неприємності. Саме із цих міркувань фірмами Compaq Computer, Intel, Microsoft і Phoenix Technologies в 1993 році була запропонована технологія Plug-and-Play (Pn), що покладає всі турботи про конфігурацію комп'ютера на сам комп'ютер. Користувач при цьому може навіть нічого не знати про адресний простір, переривання і канали прямого доступу, він просто підключає плату, і вона відразу ж починає працювати правильно. Правда, при цьому все компоненти комп'ютера (базова система вводу/виводу BIOS, операційна система, прикладне програмне забезпечення, що підключаються пристрої) повинні підтримувати режим Pn. Зрештою, технологія Pn повинна працювати на всіх використовуваних інтерфейсах комп'ютера: ISA, PCI, VLB, IDE, RS-232C і т.д. Найбільше ж пристосована для цього системна шина PCI, що має спеціально передбачені засоби, що ще більше збільшує її шанси стати єдиним стандартом системної шини. При включенні комп'ютера з Pn його програма початкового запуску BIOS визначає пристрою, які необхідні в процесі завантаження. Потім BIOS запитує в кожного із цих пристроїв його унікальний номер (ідентифікатор), що зберігається в пам'яті Pn-Пристрою. Після цього BIOS дозволяє всі конфлікти між пристроями. При цьому пристрою, які не потрібні для завантаження комп'ютера, не обслуговуються. Після завантаження операційної системи вступає в дію спеціальний програмний драйвер - менеджер конфігурації (configuration manager), що за допомогою драйверів-нумераторів шин (bus enumerators) визначає пристрою, що вимагають системних ресурсів. Якщо підключений пристрій не підтримує Pn і не може видати інформацію про себе, то така інформація повинна бути закладена у формовану вручну базу даних. Вся зібрана інформація про поточну конфігурацію зберігається в оперативній пам'яті, в області hardware tree. Цю інформацію надалі використовує програма-арбітр ресурсів (resource arbitrator) при розподілі системних ресурсів між пристроями. Після цього менеджер конфігурації через нумератори шин повідомляє Pn-Пристроям про те, які ресурси комп'ютера їм привласнені, і дана інформація надалі зберігається в програмно доступних регістрах (або flash-EPROM) цих пристроїв. На цьому робота Pn по розподілі ресурсів закінчується, і далі комп'ютер функціонує як звичайно, звертаючись до всіх пристроїв стандартним образом. Відзначимо також, що в деяких комп'ютерах передбачена можливість так званого "гарячого підключення" зовнішніх пристроїв (тобто без вимикання живлення комп'ютера). Режим Pn повинен підтримувати і цю можливість, розподіляючи ресурси не тільки при початковому завантаженні, але і у міру підключення нових пристроїв. Перейти до питань » 8.4. Інші інтерфейси комп'ютера Інтерфейс шини PCI (Peripheral Component Interconnect bus) став широко застосовуватися з появою процесорів Pentium. Шина PCI дає комп'ютеру можливість найбільше швидко спілкуватися із зовнішнім миром, тому що вона істотно перевершує по швидкодії шину ISA. Запропонована на початку як локальна шина для доповнення до основної магістралі, PCI, проте, має всі достоїнства універсальної системної магістралі. Шина PCI має два варіанти: 32-розрядний (у ньому використовується 124-контактне рознімання) і 64-розрядний ( 188-контактне рознімання). При цьому гарантується як пряма, так і зворотна сумісність 32- і 64-розрядних пристроїв. Найчастіше застосовується 32-розрядний варіант PCI. Тактова частота PCI становить 33 Мгц (однак допускається і частота 66 Мгц). Максимальна теоретично можлива швидкість обміну при тактовій частоті 33 Мгц досягає 132 або 264 Мбайт/із для 32 і 64 розрядів даних, відповідно, що в 20 разів перевищує пропускну здатність ISA. Передбачено можливість включення плат з напругою живлення як 5 У, так і 3,3 У (у роздільні рознімання). На магістралі передбачений арбітраж, тобто можливість почергового захвата шини декількома задатчиками, з дозволом конфліктів між ними. Передбачено високошвидкісний обмін по магістралі без участі процесора. Можлива автоконфигурация, тобто автоматичний розподіл ресурсів між включеними платами (за принципом Pn). Кожне із пристроїв шини може захопити її і провести необхідний обмін. Шина PCI являє собою відкритий непатентований стандарт, що підтримують всі основні виробники персональних комп'ютерів і периферійних контролерів. Зараз вона розглядається як основа для таких розповсюджених комп'ютерних платформ, як DOS/Windows, Macintosh і UNIX. Провідні виробники мікросхем уже випускають спеціальні комплекти мікросхем для її підтримки. Незалежність від типу процесора обіцяє шині PCI велике майбутнє. Зараз вона посідає друге місце по популярності після ISA. Більшим недоліком шини PCI у порівнянні з ISA є обмежена кількість пристроїв на шині (не більше чотирьох), для більшої кількості пристроїв необхідне застосування мостів PCI-PCI. Тому що в комп'ютері одним з PCI-Пристроїв є контролер шини (тобто центральний процесор), для підключення карт розширення залишається всього три рознімання (слота). Один з PCI-Слотов, як правило, використовується для підключення контролера дисплея, інший найчастіше застосовується для включення контролера локальної мережі. Тому, незважаючи на потенційно більші можливості PCI, у комп'ютері для додаткових карт розширення залишається всього один слот. До того ж треба врахувати, що розробка і налагодження PCI-Пристроїв набагато складніше, ніж ISA-Пристроїв, а більша швидкодія PCI у порівнянні з ISA потрібно далеко не для всіх завдань. Тому про повне витиснення шини ISA поки що мова не йде. Шина PCI ставиться до мультиплексированным шин, вона має повністю мультиплексированную шину адреси/даних. При цьому адреса може бути 32 розрядним або 64-розрядним (він передається по 32-розрядній шині за два такти, спочатку молодші розряди, потім старші) Точно так само і дані можуть передаватися як 32-розрядні, так і 64-розрядні (за два такти при 32-розрядній шині). В 64-розрядній версії PCI шина адреси/даних має 64 розряду. Основний режим обміну по шині - синхронний, тактируемый позитивними фронтами тактового сигналу шини, але можливий і асинхронний обмін (як і у випадку ISA). У цикл обміну (або транзакцію) входить фаза адреси (на початку) тривалістю один такт і фаза даних тривалістю в один або кілька тактів. Основні сигнали шини PCI наступні: AD0...AD31 - шина адреси/даних. Адреса передається на початку циклу, потім - дані; -C/BE0...-C/BE3 (Command/Byte Enable) - чотири лінії, які у фазі адреси визначають один з 16 можливих типів циклу передачі даних (табл. 8.9), а у фазі даних визначають дійсність байтів даних; -FRAME - строб адреси, активний під час передачі даних; -IRDY (Initiator Ready) - готовність задатчика (ініціатора обміну) до обміну даними; -TRDY (Target Ready) - готовність виконавця (цільового пристрою) до обміну даними; -DEVSEL (Device Select) - підтвердження впізнання адреси від виконавця; -STOP - запит на останов поточного циклу від виконавця до задатчика; -RST - скидання всіх пристроїв; CLK - тактовий сигнал шини; PAR - біт парності для ліній AD0...AD31 і C/BE0... C/BE3; -PERR - сигнал помилки парності; -REQ0...-REQ3 - запит від PCI-Пристроїв на захвата шини; -GNT0...-GNT3 - надання шини PCI-Пристроям; -REQ64 - запит на 64-бітний обмін; -ASK64 - підтвердження 64-розрядного обміну; -INTRA, -INTRB, -INTRC, -INTRD - лінії запитів переривань; IDSEL - вибір пристрою-виконавця в циклах запису і читання конфігурації. Таблиця 8.9. Типи циклів обміну PCI.Сигнали З/ВЕ Команда 0000 Підтвердження переривання 0001 Спеціальний цикл 0010 Читання порту вводу/виводу 0011 Запис у порт вводу/виводу 0100…0101 Зарезервовано 0110 Читання з пам'яті 0111 Запис на згадку 1000…1001 Зарезервовано 1010 Читання конфігурації 1011 Запис конфігурації 1100 Множинне читання пам'яті 1101 Подвійний цикл адреси 1110 Читання рядка пам'яті 1111 Запис на згадку і перевірку Операція конфігурування (цикли запису і читання конфігурації) служить для автоматичного розподілу ресурсів комп'ютера при включенні живлення. У цих циклах для вибору (адресації) конфигурируемого пристрою-виконавця застосовується спеціальний сигнал IDSEL, переданий у фазі адреси. Кожному PCI-Пристрою відповідає 256-байтная область конфігурації, де перебуває інформація як про самий пристрій, так і про виділені йому ресурсах. Область конфігурації не ставиться ні до адресного простору пам'яті, ні до адресного простору пристроїв вводу/виводу. Комп'ютер розподіляє ресурси між пристроями відповідно до їх особливостей, потребами і обмеженнями. При синхронному обміні (мал. 8.11) на початку циклу (адресна фаза) по шині AD передається код адреси, а по лініях C/BE - код типу циклу (команда). Дійсність адреси визначається сигналом -FRAME (по позитивному фронті CLK після початку сигналу -FRAME). Після впізнання адреси виконавець виставляє сигнал підтвердження вибірки -DEVSEL, після чого починається фаза даних. Тобто можна сказати, що адреса передається асинхронно. У фазі даних по шині даних передаються слова даних, тактируемые позитивними фронтами сигналу CLK. Сигнали готовності -IRDY і -TRDY виставляються на початку фази даних і залишаються активними до закінчення циклу. По лініях -C/BE у фазі даних передаються сигнали дозволу байтів (тобто визначається формат переданих даних). Перед останнім тактом передачі даних задатчик знімає сигнал -FRAME, після чого знімаються сигнали -IRDY, -TRDY і -DEVSEL.
Рис. 8.11. Синхронний обмін по шині PCI. При асинхронному обміні по шині PCI (мал. 8.12) фаза адреси здійснюється як у попередньому випадку, а у фазі даних як задатчик, так і виконавець можуть припиняти обмін зняттям своїх сигналів готовності (відповідно, -IRDY і -TRDY). Цикл обміну (транзакція) при цьому подовжується за рахунок введення додаткових тактів очікування. Сигнали -FRAME і -DEVSEL виробляються аналогічно випадку синхронного обміну.
Рис. 8.12. Асинхронний обмін по шині PCI. І на закінчення кілька слів ще про дв зовнішні інтерфейси комп'ютера. Стандарт інтерфейсу PCMCIA (Personal Computer Memory Card International Association) або PC-card був запропонований в 1990 році для портативних комп'ютерів (notebook) і використовується для підключення до них різних зовнішніх пристроїв: модулів пам'яті (у тому числі флэш-пам'яті), модемів і факс-модемів, мережних контролерів, додаткових накопичувачів і т.д. PC-card-Адаптери відрізняються дуже малими габаритами (зі звичайну кредитну картку) і досить високої, у порівнянні з іншими аналогічними пристроями, вартістю. Зараз уже випускаються PC-card-Адаптери для звичайних (настільних) комп'ютерів. Якщо перша версія PС-card була призначена тільки для модулів пам'яті, то друга (1991 рік) дозволяла включати пристрою вводу/виводу і підтримувала дві напруги живлення (5 У и 3,3 У). Останні розробки підтримують режим Pn. Для підключення PCMCIA-Карт використовується 68-контактне рознімання. Розрядність переданих даних - 16, кількість розрядів адреси - 26, що дозволяє адресувати до 64 Мбайт пам'яті. Тактова частота шини - до 33 Мгц. Стандарт визначає три різних довжини контактів рознімання для забезпечення правильної послідовності подачі напруги живлення при підключенні і відключенні карти під час роботи комп'ютера. Комп'ютер має звичайно 2-3 слота (рознімання) для PC-card. Стандарт передбачає автоматичний розподіл ресурсів комп'ютера для пристроїв PC-card (режим Pn). Послідовний інтерфейс USB (Universal Serial Bus) спеціально розроблявся для простого підключення периферійних пристроїв. Шина USB являє собою 4-провідну лінію зв'язку із пропускною здатністю 1,5 Мбайт/з (12 Мбит/с). До неї можна підключати до 127 пристроїв за деревоподібною схемою з використанням одного або декількох розподільних пристроїв. Довжина сполучного кабелю між окремими пристроями USB може досягати 5 метрів. У шині USB реалізована підтримка режиму Pn і можливість "гарячого" підключення (без вимикання живлення). У даному стандарті вже випускаються модеми, клавіатури, миші, сканери, цифрові фотокамери і т.д. Важливо, що в шині передбачена подача на підключаються устройства, що, живлячої напруги (у послідовному інтерфейсі RS-232C, наприклад, цього немає). Перейти до питань »
Мнемоніка Функція команди AAA ASCII- корекція результату додавання AAD ASCII- корекція перед розподілом AAM ASCII- корекція результату множення AAS ASCII- корекція результату вирахування ADC Додавання з переносом ADD Додавання AND Конъюнкция (функція И) ARPL Корекція забороненого рівня привілеїв BOUND Перевірка границь масиву BSF Пряме сканування битов BSR Зворотне сканування битов BSWAP Перестановка байтів BT Перевірка біта BTC Перевірка і інверсія біта BTR Перевірка і скидання біта BTS Перевірка і установка біта CALL Виклик підпрограми CBW Перетворення байта в слово CDO Перетворення подвійного слова в четверное CLC Скидання прапора переносу CLD Скидання прапора напрямку CLI Скидання прапора переривання CLTS Скидання прапора перемикання завдання CMC Інвертування прапора переносу CMP Порівняння операндов CMPXCHG Порівняння операндов і обмін CMPS Порівняння символів рядка CWD Перетворення слова в подвійне слово DAA Десяткова корекція результату додавання DAS Десяткова корекція результату вирахування DEC Декремент операнда DIV Беззнаковий розподіл ENTER Звертання до процедури HLT Останов IDIV Знаковий розподіл IMUL Знакове множення IN Вводу операнда з порту INC Инкремент операнда INS Вводу символу рядка INT Переривання INTO Переривання при переповненні IRET Повернення з переривання INVD Анулювання рядка кеш-пам'яті INVLPG Анулювання покажчика входу в таблицю сторінок JECXZ Умовний перехід по (ECX)=0 JMP Безумовний перехід JB (JBNAF) Перехід, якщо нижче JBE (JNA) Перехід, якщо нижче або дорівнює JE (JZ) Перехід, якщо дорівнює JL (JNGE) Перехід, якщо менше JLE (JNG) Перехід, якщо менше або дорівнює JLNE (JG) Перехід, якщо більше JNB (JAE) Перехід, якщо не нижче JNBE (JA) Перехід, якщо вище JNE (JNZ) Перехід, якщо не дорівнює JNL (JGE) Перехід, якщо не менше JNO Перехід, якщо немає переповнення JNP (JPO) Перехід, якщо непарність JNS Перехід, якщо позитивний знак JO Перехід, якщо переповнення JP (JPE) Перехід, якщо парність JS Перехід, якщо негативний знак LAHF Завантаження ознак у регістр AH LAR Завантаження прав доступу LDS Завантаження селектора в регістр DS LES Завантаження селектора в регістр ES LFS Завантаження селектора в регістр FS LGS Завантаження селектора в регістр GS LSS Завантаження селектора в регістр SS LEA Завантаження ефективної адреси в регістр LEAVE Вихід із процедури LGDT Завантаження регістра таблиці глобальних дескрипторів LIDT Завантаження регістра таблиці дескрипторів переривань LLDT Завантаження регістра таблиці локальних дескрипторів LMSW Завантаження слова стану машини (MSW) LOCK Префікс захвата шини LODS Завантаження символу рядка LOOP Реалізація циклу LOOPE (LOOPZ) Зациклити, якщо дорівнює (якщо нуль) LOOPNE (LOOPNZ) Зациклити, якщо не дорівнює (якщо не нуль) LTR Завантаження регістра завдання MOV Пересилання даних MOVS Пересилання символу рядка MOVSX Пересилання з розширенням знака MOVZX Пересилання з розширенням нулями MUL Беззнакове множення NEG Зміна знака NOP Відсутність операції NOT Логічна інверсія (операція НЕ) OR Диз'юнкція (операція АБО) OUT Вивід операнда в порт OUTS Вивід символу рядка POP Читання операнда зі стека POPA Читання зі стека вмісту всіх регістрів POPF Читання зі стека вмісту регістра прапорів PUSH Запис операнда в стек PUSHA Запис у стек умісту всіх регістрів PUSHF Запис у стек умісту регістра прапорів RCL Циклічне зрушення вліво RCR Циклічне зрушення вправо REP Префікс повторення операції з рядками символів REPE (REPZ) Повторення при збігу REPNE (REPNZ) Повторення при розбіжності RET Повернення з підпрограми ROL Циклічне зрушення вліво через перенос ROR Циклічне зрушення вправо через перенос SAHF Запис умісту AH у регістр прапорів SAL (SHL) Арифметичне зрушення вліво SAR Арифметичне зрушення вправо SBB Вирахування із заемом SCAS Сканування рядків символів SETусл. Умовна установка байта (16 умов - див. команди умовних переходів JB:JS) SGDT Запис умісту регістра GDT SHR Логічне зрушення вправо SHLD Двухоперандный зрушення вліво SHRD Двухоперандный зрушення вправо SIDT Запис умісту регістра IDT SLDT Запис умісту регістра LDT SMSW Запис слова стану машини STC Установка прапора переносу STD Установка прапора напрямку STI Установка прапора переривань STOS Запис символів у рядок SUB Вирахування TEST Логічне порівняння операндов VERR Перевірка доступності сегмента при читанні VERW Перевірка доступності сегмента при записі WAIT Очікування XADD Обмін операндами і додавання XCHG Обмін XLAT Перетворення кодів XOR Що Виключає АБО Команди, виконувані блоком обробки чисел із плаваючою крапкою FABS Одержання абсолютного значення FADD Додавання речовинних чисел FADDP Додавання речовинних чисел із читанням зі стека FBLD Завантаження двоїчно-десяткового числа FBSTP Запис на згадку двоїчно-десяткового числа із читанням зі стека FCHS Зміна знака числа FCLEX Скидання прапорів у регістрі стану SR FCOM Порівняння речовинних чисел FCOMP Порівняння речовинних чисел із читанням зі стека FCOMPP Порівняння речовинних чисел з подвійним читанням зі стека FCOS Обчислення косинуса FDECSTP Декремент умісту покажчика стека FDIV Розподіл речовинних чисел FDIVP Розподіл речовинних чисел із читанням зі стека FDIVR Зворотний розподіл речовинних чисел FDIVRP Зворотний розподіл речовинних чисел із читанням зі стека FFREE Звільнення регістра ST FIADD Додавання цілих чисел FICOM Порівняння цілих чисел FICOMP Порівняння цілих чисел із читанням зі стека FIDIV Розподіл цілих чисел FIDIVR Зворотний розподіл цілих чисел FILD Завантаження цілого числа FIMUL Множення цілих чисел FINCSTP Декремент умісту покажчика стека FINIT Ініціалізація FPU FIST Запис на згадку цілого числа FISTP Запис на згадку цілого числа із читанням зі стека FISUB Вирахування цілих чисел FISUBR Зворотне вирахування цілих чисел FLD Завантаження речовинного числа FLD1 Завантаження одиниці FLDCW Завантаження керуючого числа FLDENV Завантаження вмісту допоміжних регістрів FLDL2E Завантаження log2e FLDL2T Завантаження log210 FLDLG2 Завантаження lg2 FLDLN2 Завантаження ln2 FLDPL Завантаження числа Пі FLDZ Завантаження нуля FMUL Множення речовинних чисел FMULP Множення речовинних чисел із читанням зі стека FNOP Відсутність операції FPREM Знаходження часткового залишку розподілу FPREM1 Знаходження часткового залишку в стандарті IEEE-475 FPATAN Обчислення часткового арктангенса FPTAN Обчислення часткового тангенса FRNDINT Округлення до цілого значення FRSTOR Завантаження вмісту допоміжних регістрів і арифметичного стека FSAVE Запис на згадку вмісту допоміжних регістрів і арифметичного стека FSCALE Масштабування (зміна порядку числа) FSIN Обчислення синуса FSINCOS Обчислення синуса і косинуса FSQRT Обчислення квадратного кореня FST Запис на згадку речовинного числа FSTCW Передача слова стану на згадку FCTENV Запис на згадку вмісту допоміжних регістрів FSTP Запис на згадку речовинного числа із читанням зі стека FSTSW Передача слова стану на згадку FSTSWAX Передача слова стану в регістр AX FSUB Вирахування речовинних чисел FSUBP Вирахування речовинних чисел із читанням зі стека FSUBR Зворотне вирахування речовинних чисел FSUBRP Зворотне вирахування речовинних чисел із читанням зі стека FTST Порівняння з нулем FUCOM Порівняння неупорядкованих чисел FUCOMP Порівняння неупорядкованих чисел із читанням зі стека FUCOMPP Порівняння неупорядкованих чисел з подвійним читанням зі стека FXAM Аналіз речовинного числа FXCH Обмін даними між регістрами стека FXTRACT Обчислення мантиси і порядку F2XM1 Обчислення функції (2 x-1) FYL2X Обчислення функції ylogx FYL2XP1 Обчислення функції ylog (x+1) FWAIT Очікування готовності FPU Додаткові матеріали: Система команд мікроконтролерів сімейства MCS-51 (фірми Intel, Atmel, Analog Devices) для печатки і PDA Якщо Ви помітили помилку - повідомите нас або виділите її і натисніть Ctrl+Enter Включити коментарі || Допомога
Мнемоніка Функція команди ADD Додавання з акумулятором ADDC Додавання з урахуванням переносу SUBB Вирахування з акумулятора INC Инкремент DEC Декремент MUL Множення DIV Розподіл DA Двоїчно-десяткова корекція акумулятора ANL Логічне И ORL Логічне АБО XRL Що Виключає АБО CLR Очищення акумулятора або біта CPL Інверсія акумулятора або біта RL Зрушення акумулятора вліво RLC Зрушення акумулятора вліво через перенос RR Зрушення акумулятора вправо RRC Зрушення акумулятора вправо через перенос SWAP Перестановка тетрад акумулятора MOV Пересилання MOVC Пересилання зв'язаного байта в акумулятор MOVX Пересилання байта із зовнішньої пам'яті або в зовнішню пам'ять PUSH Збереження в стеці POP Добування зі стека XCH Обмін інформацією XCHD Обмін молодшими тетрадами між коміркою пам'яті і акумулятором SETB Установка біта JC Перехід, якщо є перенос JNC Перехід, якщо немає переносу JB Перехід, якщо біт установлений JNB Перехід, якщо біт не встановлений JBC Перехід, якщо біт установлений, і очищення цього біта ACALL Короткий перехід до підпрограми з поверненням LCALL Довгий перехід до підпрограми з поверненням RET Повернення з підпрограми RETI Повернення з переривання AJMP Короткий перехід без вороття LJMP Довгий перехід без вороття SJMP Короткий перехід зі зсувом JMP Перехід щодо покажчика даних JZ Перехід, якщо акумулятор дорівнює нулю JNZ Перехід, якщо акумулятор не дорівнює нулю CJNE Перехід, якщо не дорівнює DJNZ Декремент і перехід, якщо не дорівнює нулю NOP Немає операції Додаткові матеріали: Словник термінів і скорочень для печатки і PDA Якщо Ви помітили помилку - повідомите нас або виділите її і натисніть Ctrl+Enter Включити коментарі || Допомога
2S ( 2-States Output) - вихід із двома активними станами, 2С, стандартний вихід ТТЛ. 3S ( 3-States Output) - вихід із трьома станами, 3С. Abort - аварійне завершення; тип переривання. AND - логічна функція И. ALU (Arithmetic and Logic Unit) - АЛП, арифметико-логічний пристрій. APIC (Advanced Peripheral Interrupt Controller) - удосконалений контролер переривань. ASCII (American Standard Code for Information Interchange) - стандартний американський код обміну символьною інформацією. BCD ( Binary-Coded Decimal) - десятковий^-десятковий-двоїчно-десятковий код. Bin - двійкова система числення. BIOS (Basic Input/Output System) - базова система вводу/виводу (у комп'ютері). BIST (Built In Self Test) - убудоване самотестування. Buffer - буфер. Burst Mode - режим пакетної передачі інформації з магістралі (одна адреса на весь пакет даних). Bus - шина, магістраль. Cache - кеш-пам'ять. CAS ( Column-Address Select) - сигнал вибору адреси стовпця (у мікросхемах динамічної пам'яті). Centronics - стандартний 8-розрядний паралельний інтерфейс. Chip - мікросхема, чип. Chipset - набір мікросхем контролерів для організації комп'ютера, чипсет. CISC (Complete Instruction Set Computer) - комп'ютер (або процесор) з повним набором команд. Clear - очищення, скидання в нуль. Clock, CLK - тактовий, тактирующий сигнал. CMOS (Complementary Metal-Oxide-Semiconductor) - комплементарна МОП технологія (КМОП). COM Port (COMmunication Port) - послідовний порт, що підтримує інтерфейс RS-232C. Core Speed - внутрішня частота процесора, на якій працює його обчислювальне ядро. CPU (Central Processor Unit) - центральний процесор. CRC - циклічна контрольна сума, а також метод, що використовує таку суму. DC (Direct Current) - постійний струм. Desktop - настільний персональний комп'ютер. DIMM (Dual In-Line Memory Module) - модуль пам'яті із двостороннім розташуванням виводів. DMA (Direct Memory Access) - прямій доступ до пам'яті. DOS (Disk Operating System) - дискова операційна система, ДОС. DRAM (Dynamic RAM) - динамічна оперативна пам'ять. Driver - вихідний буфер, драйвер. DSP (Digital Signal Processor) - цифровий сигнальний процесор. EDA (Electronic Design Automation) - система автоматизації проектування. EEPROM (Electrically Erasable Programmable ROM) - ПЗП з електричним стиранням і можливістю подальшого програмування. EISA (Enhanced ISA) - розширений ( 32-розрядний) варіант системної шини ISA, повністю сумісний з ISA. EMS (Expanded Memory Specification) - додаткова (відображувана) пам'ять персонального комп'ютера. EPROM (Erasable Programmable ROM) - ПЗП зі стиранням (ультрафіолетовим випромінюванням) і перезаписом інформації (РПЗУ). Fault - відмова; тип переривання. FDD (Floppy Disk Drive) - зовнішній накопичувач інформації на гнучкому диску. Female - рознімання-розетка, гніздо. FIFO (First In, First Out) - "першим увійшов - першим вийшов", один зі способів організації ОЗП з послідовним доступом. Firmware - програми, що зберігаються в енергонезалежній пам'яті мікропроцесорної системи. Flash memory - різновид постійної пам'яті з перезаписом EEPROM, що характеризується високою ємністю, малим енергоспоживанням і більшою припустимою кількістю циклів перезапису, флэш-память. FLOPS (Floating point Operations Per Second) - кількість операцій із плаваючою крапкою в секунду, одиниця виміру продуктивності процесора. GND (Ground) - загальне проведення схеми, "земля". H (High) - високий рівень сигналу, одиничний рівень при позитивній логіці. H - ознака шестнадцатеричной системи запису числа, наприклад, 2FА9h. Handshake - асинхронний режим обміну, при якому використовується сигнал підтвердження готовності виконавця. Hardware - апаратні (електронні) засобу мікропроцесорної системи. HDD (Hard Disk Drive) - зовнішній накопичувач інформації на жорсткому диску (вінчестер). Hex - шестнадцатеричная система числення. HMA (High Memory Area) - область "високої пам'яті" у персональному комп'ютері. IC (Integrated Circuit) - інтегральна мікросхема, ИС. iCOMP (Intel Comparative Microprocessor Performance) - індекс оцінки продуктивності мікропроцесорів фірми Intel. IDE (Integrated Drive Electronics) - інтерфейс комп'ютера для підключення дисководів. Idle - режим холостого ходу. IDT (Interrupt Descriptor Table) - таблиця дескрипторів переривань. Instruction - команда, інструкція. Instruction Set - система команд (процесора). INT (Interrupt) - переривання, вектор переривання. IO, I/O (Input/Output) - вводу/вивід (В/В), вхід/вихід. IOPL (Input/Output Privilege Level) - рівень привілеїв операцій вводу/виводу. IPC (Instruction Per Cycle) - кількість операцій, виконуваних процесором за один такт. IrDA ( Infra-Red Data Association) - асоціація передачі даних в інфрачервоному діапазоні, а також стандартний інтерфейс інфрачервоного обміну, запропонований їй. IRQ (Interrupt ReQuest) - запит переривання. ISA (Industry Standard Architecture) - стандартна системна шина персонального комп'ютера. Jumper - знімна перемичка, що з'єднує штирові контакти на платі, джампер. L (Low) - низький рівень сигналу, нульовий рівень при позитивній логіці. L1 Cash і L2 Cash - кеш-пам'ять першого рівня (внутрішній кэш) і другого рівня (зовнішній кэш). LCD (Liquid Crystal Display) - жидкокристаллический дисплей, індикатор. LIFO (Last In, First Out) - тип оперативної пам'яті із принципом роботи: "останній увійшов - перший вийшов". Line driver - драйвер лінії, буфер. LPT (Line Printer) - порт для підключення принтера, що працює по інтерфейсі Centronics. LRU (Least Recently Used) - довше всіх не використовуваний елемент у кеш-пам'яті. LSB (Least Significant Bit) - молодший значущий біт (у байті або слові). LVT ( Low-Voltage Technology) - низьковольтна технологія мікросхем (напруга живлення 3,3 У). Male - рознімання-качана, штекер. Master - провідний, головний пристрій, що бере участь в обміні інформацією, задатчик. MFLOPS (Mega FLOPS) - мільйон операцій із плаваючої коми в секунду (одиниця продуктивності процесора). MIPS (Mega Instructions Per Second) - мільйон операцій у секунду (одиниця продуктивності процесора). MCP (Math CoProcessor) - математичний співпроцесор. MCU (Microprogram Control Unit) - блок мікропрограмного керування. MMU (Memory Management Unit) - блок керування пам'яттю. MMX (Multi Media eXtensions) - розширення системи команд процесора для роботи з мультимедійними додатками. Motherboard - материнська системна плата, на якій розташовуються додаткові, дочірні плати. MSB (Most Significant Bit) - старший значущий біт (у байті або слові). MSW (Machine State Word) - слово стану машини. NIC (Network Interface Card) - мережна карта, адаптер локальної мережі. NMI (Non Masked Interrupt) - немаскируемое переривання. Notebook - клас портативних, "блокнотних" персональних комп'ютерів, що відрізняються малими розмірами, невеликою масою, низьким енергоспоживанням. NPU (Numeric Processor Unit) - математичний співпроцесор. NVRAM ( Non-Volatile RAM) - енергонезалежне ОЗП, що зберігає інформацію при відключенні живлення. OC ( Open-Collector Output) - вихід мікросхеми з відкритим колектором. Oct - восьмерична система числення. OEM (Original Equipment Manufacturer) - виробник устаткування. OTPROM ( One-Time Programmable ROM) - ПЗП, однократно програмувальні користувачем. OR - логічна функція АБО. Parity - парність, паритет. PC (Personal Computer) - персональний комп'ютер (звичайно IBM-Сумісний). PC (Program Counter) - лічильник команд. PC Card (PCMCIA) - стандартний високошвидкісний паралельний інтерфейс для підключення карт розширення мініатюрного формату. PCI (Peripheral Component Interconnect) - шина для периферійних компонентів (у персональному комп'ютері). Pentium - 32-розрядний процесор фірми Intel. PIC (Programmable Interruption Controller) - програмувальний контролер переривань. PIO (Programming Input/Output) - програмно кероване вводу/вивід. PLD (Programmable Logic Device) - програмувальна логічна мікросхема, ПЛИС. Plug - рознімання типу качана. Pn, P&P ( Plug-and-Play) - "вставляй і працюй" -стандарт автоматичного настроювання конфігурації комп'ютера. Pointer - покажчик. Polling - опитування прапора (біта стану) програмним шляхом. POP - добування зі стека. POST (Power On Self Test) - тест початкового включення. POST (Procedure Of Self-Testing) - процедура самотестування. Power down - режим зниженого енергоспоживання. PPI (Programmable Peripheral Interface) - програмувальний інтерфейс периферійних пристроїв. Preset - попередня установка. Processor - процесор. PROM (Programmable ROM) - програмувальне ПЗП, ППЗУ. PSW (Processor Status Word) - слово стану процесора, код у внутрішньому регістрі стану процесора. Pull-up Resistor - навантажувальний резистор, що включається між виходом мікросхеми і проведенням напруги живлення. Push - збереження в стеці. RAM (Random Access Memory) - оперативна пам'ять, ОЗП. RAS ( Row-Address Select) - сигнал вибору адреси рядка (у мікросхемах динамічної пам'яті). Receiver - приймач, вхідний буфер. Refresh - регенерація (у динамічній пам'яті). Reset - скидання в нуль. RISC (Reduced Instruction Set Computer) - комп'ютер (або процесор) зі скороченим набором команд. ROM ( Read-Only Memory) - постійна пам'ять, ПЗП. RS-232C (Reference Standard) - стандартний інтерфейс послідовної передачі даних. RTC (Real Time Clock) - годинники реального часу. Rx (Received Clock) - прийнятий синхросигнал. Rx (Received Data) - прийняті дані. SCSI (Small Computer System Interface) - інтерфейс комп'ютера для підключення зовнішніх пристроїв, у тому числі і дисководів. SDRAM (Synchronous Dynamic RAM) - синхронне динамічне ОЗП. Set - установка в одиницю. Setup - програма установки системних параметрів персонального комп'ютера. Shadow Memory - тіньова пам'ять. SIMM (Single In-Line Memory Module) - модуль пам'яті з однорядним розташуванням виводів. Slave - ведений, пасивний пристрій, що бере участь в обміні інформацією, виконавець. Slot - щілинне рознімання для підключення друкованих плат з розніманням у вигляді друкованих провідників, слот. Socket - контактуючий пристрій для установки мікросхем на плату, сокет. Software - програмні засоби мікропроцесорної системи (програми). SP (Stack Pointer) - покажчик стека. SRAM (Static RAM) - статична оперативна пам'ять. Stack - стік, стековая пам'ять. Strobe - стробирующий сигнал, строб. Terminator - оконечное пристрій, що погодить, на лінії зв'язку (звичайно - резистор). Timer - таймер, таймерний пристрій. TR (Terminate Resistor) - навантажувальний резистор для лінії зв'язку. Transceiver - приемопередатчик, трансивер, двунаправленный буфер. Transmitter - передавач, вихідний буфер. Trap - пастка; тип переривання. TTL ( Transistor-Transistor Logic) - транзисторно-транзисторна (біполярна) логіка, ТТЛ. TTLS ( Transistor-Transistor Logic Schottky) - транзисторно-транзисторна логіка Шоттки, ТТЛШ. Turbo - режим підвищеної швидкодії. Tx (Transmitted Clock) - переданий синхросигнал. Tx (Transmitted Data) - передані дані. UART (Universal Asynchronous Receiver/Transmitter) - універсальний асинхронний приемопередатчик, контролер для підтримки інтерфейсу RS-232C. UMA (Upper Memory Area) - область верхньої пам'яті. Upgrade - модернізація персонального комп'ютера шляхом заміни його окремих блоків. UPI (Universal Peripheral Interface) - універсальний периферійний інтерфейс. USB (Universal Serial Bus) - стандартний послідовний інтерфейс із високою швидкістю передачі (до 12 Мбит/с). V - напруга (Voltage), вольт (Volt). VLB (VESA Local Bus) - локальна шина персонального комп'ютера. VLSI (Very Large Scale Integration) - надвелика інтегральна схема (СБИС). Watchdog - сторожовий таймер, що служить для виводу мікропроцесорної системи зі стану зависання. WB (Write Back) - алгоритм кэширования зі зворотним записом. WT (Write Through) - алгоритм кэширования з наскрізний (прямій) записом. XMS (eXtended Memory Specification) - розширена пам'ять персонального комп'ютера. XOR - що виключає АБО. Z ( Z-state) - третє (высокоимпедансное) стан виходу мікросхеми. ZIF (Zero Insertion Force) - рознімання або сокет з нульовим зусиллям вставки. 2С - вихід із двома активними станами (нуль і одиниця), стандартний Ттл-Сумісний вихід. 3С - вихід із трьома станами (два активних: нулі і одиниця, третє - пасивне, відключене), а також сам третій стан виходу, на відміну від двох активних станів. Адаптер - пристрій сполучення. Адреса - закодований номер, що визначає, куди передається інформація або звідки вона приймається. Адресація - спосіб завдання адреси операнда. Адресний простір - сукупність всіх адрес, до яких може звертатися мікропроцесорна система. Активний рівень сигналу - рівень, що відповідає приходу, наявності сигналу, тобто виконанню цим сигналом відповідної йому функції. Акумулятор - виділений внутрішній регістр процесора, що бере участь у виконанні більшості команд. АЛП - арифметико-логічний пристрій (ALU). Апаратне забезпечення - електронна апаратура мікропроцесорної системи. Апаратне переривання - переривання, викликуване устроями-виконавцями. Арбітраж - метод визначення єдиного активного пристрою, спосіб дозволу конфліктів. Асинхронна магістраль - магістраль, у якій передбачений тільки асинхронний обмін. Асинхронний обмін - обмін по магістралі з підтвердженням готовності виконавця. Асинхронний сигнал - сигнал, не прив'язаний за часом до внутрішніх процесів схеми, не синхронізований зі схемою. Асемблер - мова програмування нижнього рівня, що використовує мнемонічні позначення машинних команд. АЦП - цифровий^-цифровий-аналого-цифровий перетворювач. Базова адреса - молодша адреса із групи адрес, приписаних якомусь пристрою або завданню. Байт - група двійкових розрядів, битов (як правило, 8 біт), що містить якийсь код. Байтовые операції - операції, вироблені над окремими байтами операндов процесорами, що мають розрядність більше 8. Біт (від англ. Binary Digit - двійкове число) - одиниця двійкової інформації, розряд двійкового коду, що приймає значення 0 і 1. Біт парності - додатковий контрольний біт, що додається до даних і збережений або переданий разом із цими даними. Буфер - пам'ять або область пам'яті, використовувана для тимчасового зберігання даних. Буфер - логічний елемент (мікросхема), використовуваний для електричного узгодження входів і виходів інших мікросхем. В/В - вводу/вивід, I/O. Вводу даних - те ж, що читання, зчитування, прийом даних. Вектор переривання - адреса початку програми обробки переривання. Векторні переривання - переривання, при яких номер переривання (адреса вектора) видається пристроєм, що запросив переривання. Качана (штекер) - частина рознімання, контакти якого входять у контакти розетки (гнізда). Віртуальна пам'ять - зовнішня пам'ять великого обсягу, що процесор за допомогою спеціальних механізмів використовує як свою власну системну пам'ять. ВКМ - внутрішня контроллерная магістраль. Зовнішні пристрої - пристрою, що підключаються до мікропроцесорної системи за допомогою пристроїв сполучення, пристроїв вводу/виводу. Тимчасова діаграма - графіки залежності від часу вхідних і вихідних сигналів цифрового пристрою в різних режимах роботи. ВУ - зовнішні пристрої. Вивід даних - те ж, що запис, передача даних. Гарвардська архітектура - архітектура мікропроцесорної системи з роздільними шинами даних і команд (двухшинная архітектура). Г (гига-) - приставка для позначення 230 = 1 073 741 824. Дані - передана в закодованому виді цифрова інформація. Двунаправленная лінія (шина) - лінія (шина), по якій сигнали можуть передаватися в обох напрямках (по черзі). Двухшинная архітектура - архітектура мікропроцесорної системи з роздільними пам'ятями даних і команд і з роздільними шинами для обміну з кожної з них. Декремент - зменшення на одиницю. Дескриптор - описатель, код, що містить інформацію про сегмент пам'яті, про вектор переривання і т.д. Джампер - знімна перемичка, установлювана на плату для перемикання режимів її роботи. Драйвер - програма нижнього рівня, що здійснює керування апаратурою. Одиничний сигнал - те ж, що позитивний сигнал. Зависання - перехід мікропроцесорної системи в непередбачений стан, зупинка роботи системи. Задатчик (master) - активний пристрій на магістралі (найчастіше - процесор), що робить обмін з виконавцем у даному циклі. Затримка - часове зрушення між вхідним і вихідним сигналами пристрою, вузла, мікросхеми. Задній фронт сигналу (спад) - перехід сигналу з активного рівня в пасивний. Запис - операція, при якій задатчик передає дані на згадку або в пристрій вводу/виводу. Запит - звертання до процесора для спеціального обслуговування (наприклад, для переривання або ПДП). Захищений режим - режим процесорів фірми Intel, починаючи з 80286, що забезпечує многозадачный режим і обсяг пам'яті понад 1 Мбайт (див. реальний режим). ЗУ - запам'ятовувальний пристрій, пам'ять. Ініціалізація - приведення в початковий стан, запуск роботи. Инкремент - збільшення на одиницю. Інструкція - те ж, що команда. Інтерфейс - угода про обмін між електронними пристроями. Містить у собі вимоги по електричному, логічному і конструктивному сполученню пристроїв. ИС - інтегральна мікросхема, ИМС (IC), чип. Виключення - різновид переривань, які виникають автоматично за певних умов у процесі роботи процесора. Виконавець (slave) - пасивний пристрій на магістралі, з яким задатчик робить обмін у даному циклі. ДО (кіло-) - приставка для позначення 210 = 1024. Канал - те ж, що системна шина, магістраль. Карта розширення - одноплатний пристрій сполучення, що підключається до магістралі персонального комп'ютера. Каскадирование - спільне включення декількох однакових пристроїв (звичайно послідовне) для поліпшення їхніх характеристик. КМОП - комплементарна технологія МОП (CMOS). Команда - код, що визначає елементарну функцію, що повинен виконати процесор. Конвеєр - пам'ять типу FIFO невеликого обсягу, що входить до складу процесора і служить для прискорення вибірки команд, що виконуються. Контролер - пристрій керування, керуючий пристрій сполучення. Кристал - те ж, що мікросхема, чип. Кеш-пам'ять - швидка буферна пам'ять, що містить копію частини основної пам'яті системи і що дозволяє прискорити обмін з повільною основною пам'яттю. Лінія - одиничний провідник системної шини. М (мега-) - приставка для позначення 220 = 1 048 576. Магістраль - системна шина мікропроцесорної системи. Маска - керуючий код, що дозволяє або забороняє окремі розряди основного коду. Маскирование переривання - тимчасова заборона переривання. МК - мікроконтролер. Монітор - програма для роботи оператора з пультом керування з метою контролю функціонування мікропроцесорної системи. Моніторинг - спостереження, контроль стану якого-небудь пристрою. МОП - напівпровідникова технологія на основі польових транзисторів типу "метал - окисел - напівпровідник" (MOS). МП - мікропроцесор. МПК - мікропроцесорний комплект мікросхем. МПС - мікропроцесорна система. Мультиплексування - передача різних сигналів по одній лінії (шині) у різні моменти часу. Мультиплексированная магістраль - магістраль із мультиплексированными (повністю або частково) шинами адреси і даних. НМД - накопичувач на магнітному диску. Немультиплексированная магістраль - магістраль, у якій шини адреси і даних не мультиплексированы. Ніжки - те ж, що виводи мікросхеми. Нульовий сигнал - те ж, що негативний сигнал. Одношинна архітектура - архітектура мікропроцесорної системи із загальною пам'яттю даних і команд і загальною шиною для обміну з пам'яттю. ОЗП - оперативний запам'ятовувальний пристрій, оперативна пам'ять (RAM). ОК - вихід з відкритим колектором. Операнд - код даних, з яким виробляється операція даною командою. ОС - операційна система. Опитування (поллинг) - постійне читання інформації із пристрою для визначення його стану. Негативна логіка - система сигналів, у якій логічній одиниці відповідає низький рівень напруги, а логічному нулю -високий. Негативний сигнал (сигнал негативної полярності, нульовий сигнал) - сигнал, активний рівень якого - логічний нуль. Тобто одиниця - це відсутність сигналу, нуль - сигнал прийшов. Негативний фронт сигналу (спад) - перехід сигналу з одиниці (з високого рівня) у нуль (у низький рівень). Пасивний рівень сигналу - рівень, у якому сигнал не виконує ніякої функції. ПДП (прямій доступ до пам'яті) - режим обміну по системній шині між пристроєм вводу/виводу і пам'яттю без участі центрального процесора. Перепад (перехід) сигналу - перемикання сигналу з нуля в одиницю або з одиниці в нуль, те ж, що фронт сигналу. Передній фронт сигналу - перехід сигналу з пасивного рівня в активний. ПЗП - постійний запам'ятовувальний пристрій, постійна пам'ять (ROM). ПК - персональний комп'ютер, PC. ПЛИС - програмувальні логічні мікросхеми, PLD. ПО - програмне забезпечення (software). Підпрограма - допоміжна програма, викликувана з основної програми або з підпрограми. Підтвердження - виробіток сигналу, що підтверджує виконання тої або іншої функції. Позитивна логіка - система сигналів, у якій логічній одиниці відповідає високий рівень напруги, а логічному нулю - низький. Позитивний сигнал (сигнал позитивної полярності, одиничний сигнал) - сигнал, активний рівень якого - логічна одиниця. Тобто нуль - це відсутність сигналу, одиниця - сигнал прийшов. Позитивний фронт сигналу (або просто фронт) - перехід сигналу з нуля (з низького рівня) в одиницю (у високий рівень). Полярність сигналу - рівень сигналу, що відповідає його активності. Позитивної полярності відповідає активний одиничний сигнал, негативної полярності - активний нульовий сигнал. Порт - пристрій сполучення мікропроцесорної системи із зовнішнім пристроєм (звичайно найпростіше). ППЗУ - програмувальне ПЗП (PROM). Переривання - тимчасовий переклад процесора на програмну обробку зовнішньої події або на виконання підпрограми. Принстонская архітектура - архітектура мікропроцесорної системи з єдиною шиною для даних і команд (одношинна архітектура). Програма - послідовність команд мікропроцесора, що виконують необхідне завдання, алгоритм. Програмне забезпечення - набір програм, виконуваних мікропроцесорною системою. Програмне переривання - програмний перехід до підпрограми, що обслуговується, як переривання. Простір пам'яті - весь обсяг системної пам'яті мікропроцесорної системи. Протокол - порядок обміну сигналами між цифровими пристроями. Радіальні переривання - переривання, при яких номер переривання (адреса вектора) визначається номером використовуваної лінії запиту переривання. Розрядність (коду, шини) - кількість двійкових розрядів коду або кількість цифрових сигналів для передачі коду по шині. Реальний режим (режим реальної адресації) - режим процесорів фірми Intel, починаючи з 80286, що забезпечує сумісність із процесором 8086 і обсяг пам'яті до 1 Мбайт (див. захищений режим). Регенерація - періодичне відновлення, відновлення інформації, записаної в динамічну пам'ять. Вимагає подачі спеціальної послідовності керуючих сигналів. Регістр процесора - внутрішня комірка пам'яті процесора, у якій зберігається керуюча інформація, адреса або дані. Регістр стану процесора - внутрішній регістр процесора, у якому зберігаються прапори (біти) слова стану процесора (ССП, PSW). Розетка (гніздо) - частина рознімання, у контакти якого входять контакти вилки (штекера). РОН - регістр загального призначення (універсальний внутрішній регістр процесора). РПЗУ - репрограммируемое ПЗП (EPROM), інформація в якому стирається ультрафіолетовим випромінюванням і може бути записана знову. Рукостискання - обмін сигналами між пристроями, що беруть участь в обміні з підтвердженням виконання операції (handshaking). СБИС - надвелика інтегральна схема (VLSI). Свопинг (підкачування) - процес тимчасового збереження на диску областей оперативної пам'яті і читання їх з диска. Сегмент - виділена частина пам'яті, що зберігає дані або команди, для адресації якої використовуються ті самі регістри процесора. Сегментний регістр - регістр, що вказує на початок того або іншого сегмента пам'яті. Селектор (дешифратор) адреси - вузол у складі пристрою-виконавця для розпізнавання адреси в циклах обміну по магістралі. Синхронізація - забезпечення погодженої в часі роботи декількох пристроїв, наприклад, по загальному тактовому сигналі. Синхронна магістраль - магістраль, у якій основний тип обміну синхронний. Синхронний обмін - обмін інформацією з магістралі в темпі задатчика без обліку швидкодії виконавця. Синхросигнал - те ж, що тактовий сигнал. Система команд - набір команд процесора, які він здатний виконати. Системна пам'ять - прямо адресуемая пам'ять мікропроцесорної системи (оперативна і постійна). СК - лічильник команд (PC). Слово (двійкове) - група біт (звичайно 16, 32 або 64 біта), що складає з декількох байт. Слот - рознімання для підключення до системної магістралі плат розширення. Сокет (Socket) - те ж, що колодка, що контактує пристрій-гніздо, у яке встановлюється мікросхема з можливістю простій її заміни. Співпроцесор - мікросхема спеціалізованого процесора, що підключається до мікросхеми основного процесора для поліпшення її характеристик. Найчастіше використовуються математичні співпроцесори, що прискорюють виконання складних арифметичних команд. Спад сигналу - те ж, що задній фронт сигналу (звичайно - негативний фронт). ССП - слово стану процесора, PSW. Стік - область пам'яті, адресація до якої побудована по магазинному принципі (LIFO) - першим читається останній записаний на згадку код. Строб (стробирующий сигнал) - керуючий сигнал, що своїм рівнем визначає момент виконання елементом або вузлом його функції. У більше загальному змісті строб - це будь-який синхронізуючий сигнал, тактовий сигнал. Лічильник команд - внутрішній регістр процесора, що визначає адреса в пам'яті, у якому перебуває поточна команда. У звичайному режимі стан лічильника команд наращивается після виконання кожної команди. Т (тера-) - приставка для позначення 240 = 1 099 511 627 776. Таймер - пристрій відліку часу. Такт - те ж, що тактовий сигнал, а також період тактового сигналу. Тактовий сигнал - керуючий сигнал, що своїм фронтом визначає момент виконання елементом або вузлом його функції. Іноді те ж, що і стробирующий сигнал. Тіньова пам'ять - частина оперативної пам'яті, використовувана для зберігання копії постійної пам'яті з метою підвищення швидкості доступу до інформації. Термінатор - оконечный согласователь лінії зв'язку. Тетрада (напівбайт, ниббл) - група із чотирьох біт, кодируемая одним символом у шестнадцатеричной системі числення. Транзакція - те ж, що цикл обміну. ТТЛ - транзисторно-транзисторна логіка і відповідна їй напівпровідникова технологія (TTL). ТТЛШ - технологія ТТЛ із діодами Шоттки (TTLS). Характеризується більше високою швидкодією при тій же споживаній потужності. УВВ - пристрій вводу/виводу. Покажчик - код, що визначає адреса операнда в пам'яті. Покажчик стека - внутрішній регістр процесора, у якому зберігається поточна адреса стека. ВУС - покажчик стека (SP). Пристрій вводу/виводу - пристрій, що здійснює сполучення мікропроцесорної системи із зовнішніми пристроями. Пристрій сполучення - пристрій для обміну інформацією між комп'ютером і зовнішніми пристроями. Фаза - частина циклу, протягом якої міняється стан якихось сигналів шини. Прапор - сигнал (біт), що відповідає якому-небудь стану пристрою, наприклад, готовності до обміну. Флэш-Пам'ять (Flash Memory) - різновид РПЗУ з електричним стиранням інформації і можливістю багаторазового перезапису. Фон-неймановская архітектура - одношинна архітектура, те ж, що принстонская архітектура. Фронт сигналу - перехід сигналу з нуля в одиницю або з одиниці в нуль, іноді в більше вузькому значенні "передній позитивний фронт". ЦАП - цифроаналоговый перетворювач. Цикл - послідовність обміну сигналами, протягом якого виконується тільки одна елементарна операція (наприклад, вводу або вивід). ЦП - центральний процесор, основний процесор мікропроцесорної системи. ЦПЭ - центральний процесорний елемент. Чип - те ж, що інтегральна мікросхема, ИМС. Чипсет - набір мікросхем, призначений для рішення якоїсь одного завдання. Читання - операція одержання задатчиком шини коду даних з пам'яті або із пристрою вводу/виводу. Читання-модифікація-Запис - операція, при якій протягом одного циклу дані читаються з якогось пристрою, перетворяться і записуються в той же самий пристрій по тій же адресі. ШИМ - широтно-імпульсна модуляція. Шина - група сигнальних ліній, об'єднаних по якому-небудь принципі. Наприклад, шиною називають сигнали, що відповідають всім розрядам якогось двійкового коду (шина даних, шина адреси). Іноді шиною називають також проведення живлення ("шина живлення") і загальне проведення ("шина землі"). Ширина - те ж, що розрядність. ЕОМ - електронна обчислювальна машина, те ж, що комп'ютер. Емуляція - моделювання, імітація роботи реального пристрою з використанням апаратних і програмних отладочных засобів. Ядро мікропроцесорної системи - основні пристрої мікропроцесорної системи: процесор, оперативна і постійна пам'ять. Осередок (пам'яті) - елемент пам'яті (однорозрядний або многоразрядный), що служить для зберігання інформаційного коду і може бути обраний за допомогою коду адреси пам'яті. Ширина — то же, что разрядность. ЭВМ — электронная вычислительная машина, то же, что компьютер. Эмуляция — моделирование, имитация работы реального устройства с использованием аппаратных и программных отладочных средств. Ядро микропроцессорной системы — основные устройства микропроцессорной системы: процессор, оперативная и постоянная память. Ячейка (памяти) — элемент памяти (одноразрядный или многоразрядный), который служит для хранения информационного кода и может быть выбран с помощью кода адреса памяти.