Генератор с состоянием ожидания
Контроллер регенерации динамического ОЗУ
Программируемые интервальные таймеры
Программируемый контроллер прерываний
Функции контроллера ПДП
На Рис. 9.2 показана структура 32-разрядного восьмиканального контроллера ПДП в составе кристалла 82380.
Рис. 9.2. Контроллер ПДП в 82386
При проектировании контроллера ставилась задача эффективной передачи произвольных комбинаций байтов, слов и двойных слов. С помощью контроллера ПДП можно адресовать полное пространство, покрываемое 32-разрядными физическими адресами, а также увеличивать и уменьшать адреса как операндов-источников, так и операндов назначения.
С помощью внутреннего вспомогательного 32-разрядного регистра можно выполнять разборку и сборку данных разной разрядности, а также организовывать обмен данными между устройствами, имеющими разную ширину тракта данных. При работе контроллера 82380 на частоте 20 МГц и при передаче данных одинаковой разрядности может быть достигнута скорость обмена между памятью и устройствами ввода-вывода 25,6 Мбайт/с.
В порядке обслуживания как программных, так и аппаратных запросов ПДП контроллер может поддерживать обмен данными следующих типов:
· порт ввода-вывода — порт ввода-вывода;
· память — память;
· порт ввода-вывода — память;
· память — порт ввода-вывода.
Семь из восьми каналов (все, за исключением канала 4) имеют доступ к аппаратным сигналам подтверждения ПДП через трехразрядную шину подтверждения ПДП (линии от EDACK0 до EDACK2).
Каждый из восьми каналов контроллера ПДП 82380 функционирует независимо один от другого и может быть запрограммирован для работы в любом из допустимых режимов. Регистры каждого канала можно разделить на три класса: регистры счетчика байтов, регистры инициатора запроса и. целевые регистры; всего в канале имеется 24 регистра состояний и команд. С помощью этих регистров определяются адреса и объем пересылаемых данных. Регистр счетчика байтов (24 разряда) содержит значение числа байтов, которые должны быть переданы. Регистр инициатора запроса (32 разряда) содержит адрес порта ввода-вывода или памяти, где находятся данные, по которым был сделан запрос контроллеру на обслуживание ПДП; целевой регистр (32 разряда) содержит адрес порта ввода-вывода или памяти, по которому будут пересылаться данные.
Для каждого канала программист может выбирать дисциплину обслуживания с циклическими или фиксированными приоритетами. Циклический приоритет предусматривает разделение шины среди нескольких периферийных устройств, тогда как дисциплина с фиксированными приоритетами основана на определенных фиксированных параметрах, связанных с аппаратными и другими особенностями. В дисциплине с фиксированными приоритетами допускается, чтобы программист присваивал любому каналу низший приоритет, что позволит без перепрограммирования командных регистров изменять или приводить в исходное состояние расписание обслуживания приоритетов.
Каналы контроллера ПДП разделены на две группы по четыре канала — нижнюю и верхнюю. Нижние (от нулевого до третьего) и верхние (от четвертого до седьмого) каналы работают так, будто два отдельных контроллера ПДП включены по каскадной схеме. Такая организация работы позволяет одной группе присваивать фиксированные приоритеты, а другой — циклические, причем в различных комбинациях. По умолчанию каналы контроллера ПДП 82380 имеют фиксированные приоритеты, при этом высшим приоритетом обладает нулевой канал, низшим — седьмой. Нижняя группа играет своеобразную роль канала 5 в верхней группе и по порядку приоритетов располагается между каналами 7 и 4.
Как уже отмечалось, программисту предоставлена возможность по своему усмотрению выбирать, какому из каналов назначить низший приоритет. С помощью специальных команд определяется канал с самым низким приоритетом в пределах какой-либо группы, при этом остальным каналам присваиваются фиксированные приоритеты в последовательном порядке. Например, если низший приоритет присвоен каналу 1 в нижней группе, то порядок каналов по приоритетам будет следующий: 2 (высший приоритет), 3, 0, 1 (низший приоритет). Как видно, каналу, порядковый номер которого следует сразу же за номером выбранного канала с низшим приоритетом (в данном случае за номером 2), устанавливается самый высокий приоритет и так далее с убыванием приоритета по мере последовательного циклического в рамках группы возрастания номеров каналов, пока не будет достигнут номер выбранного наименее приоритетного канала (в данном случае номер 1). То же относится и к верхней группе каналов. Так, если низший приоритет присвоен каналу 6, то приоритеты верхней группы составят следующий ряд: 7 (высший приоритет), 4—6 (низший приоритет). Еще раз напоминаем, что нижняя группа по приоритету располагается между каналами 4 и 7. Поэтому по данным рассмотренных выше примеров комбинация двух групп даст следующий порядок каналов: 7 (высший приоритет), [2, 3, 0, I], 4, 5, 6 (низший приоритет).
Контроллер ПДП может принимать команды программного управления приоритетами только тогда, когда группа каналов, к которой относятся эти команды, находится в режиме с фиксированными приоритетами. При переходе к дисциплине с циклическими приоритетами все текущие уровни приоритетов остаются без изменений. При возврате от дисциплины с циклическими приоритетами к дисциплине с фиксированными приоритетами для уровней приоритетов каналов с помощью команд программного управления приоритетами восстанавливаются те значения, которые были в последний раз установлены программным образом.
Для дисциплины с циклическими приоритетами любой канал после обслуживания его запроса не остается с высшим приоритетом. Этому каналу присваивается низший приоритет. Следует помнить, что номера приоритетов нижней группы (в предыдущем примере 2, 3, 0, 1) меняются циклически в пределах верхней группы приоритетов (в предыдущем примере 7, [нижняя группа], 4 – 6). Поэтому обслуживание канала из нижней группы сопровождается циклическим изменением номеров уровня приоритета как в нижней, так и в верхней группах.
Такие команды, как "сброс запроса прерывания по завершении счета", "сброс режима ведущего устройства", "очистка регистра маски" и "сброс триггера указателя байтов", активизируются в результате распознавания контроллером ПДП 82380 соответствующего адреса порта. При этом в выбранный порт должны быть записаны какие-нибудь данные.
Контроллер ПДП 82380 реализует передачу блоков данных в одном из следующих режимов: режим одиночного буфера, буферный режим с автоинициализацией и режим с цепочкой буферов. Первый режим используется обычно в тех случаях, когда к моменту начала передачи известны объем и местоположение передаваемых данных, а данные размещены в непрерывной области памяти. Для данного режима характерно, что по завершении передачи одиночного блока контроллер ПДП должен перепрограммироваться для других передач даже этого же блока. В буферном режиме с автоинициализацией, напротив, допускается неоднократная передача контроллером ПДП одного и того же блока данных без перепрограммирования канала всякий раз.
В режиме с цепочкой буферов допускается, чтобы в программе был определен список буферов, содержимое которых передается, при этом для перепрограммирования контроллера ПДП используются программы обработки прерываний. Канал для передачи содержимого нового буфера программируется до того, как закончится передача содержимого текущего буфера. В данном режиме контроллер ПДП может работать с разрывными областями памяти и передавать все данные из этих областей за один рабочий процесс ПДП.
Рассмотрение функций контроллера 82380 продолжим с помощью Рис. 9.3. Функционально программируемый контроллер прерываний идентичен своим предшествующим моделям 8259А и 82С59А, за исключением программирования векторов прерываний. В контроллере 82380 объединены ресурсы трех контроллеров типа 82(С)59А. Каскадируя пятнадцать входов запросов прерываний контроллеров 82С59А, имеющихся в распоряжении программиста, можно организовать до 120 каналов запросов внешних прерываний. Хотя контроллеры могут работать в режиме ведущего устройства, приоритет отдается каскадному режиму.
В контроллере прерываний 82380 имеются более широкие возможности по использованию механизма векторов прерываний, поскольку каждый вход запроса прерываний может отдельно программироваться. Это значит, что каждому запросу прерываний может быть предписан свой собственный вектор прерывания; кроме того, системные программы по умолчанию могут присвоить контроллеру прерываний 82380 определенный вектор. Этот вектор используется в цикле подтверждения незапрашиваемых прерываний или прерываний, вызванных ошибочным запросом, с целью предупреждения системы о ложных прерываниях. С помощью прерывания система также информируется о том, что предпринята попытка запрограммировать векторы контроллера 82380 по методу контроллера 82С59А. Эта особенность гарантирует совместимость существующих программных продуктов с программным обеспечением, написанным для 82380. К другим усовершенствованиям контроллера прерываний 82380 относится возможность каскадного подключения внешних контроллеров прерываний, а также то, что квитирование установления связи между ведущим и ведомым устройствами вынесено из специализированных каскадных линий на шину данных.
На рис. 11.3 показаны пять основных блоков контроллера прерываний:
· регистр запросов прерываний (IRR);
· блок разрешения приоритетов (PR);
· служебный регистр (ISR);
· регистр маски (IMR);
· регистр векторов (VR).
Всеми прерываниями управляют каскадно включенные регистры запроса прерываний IRR и служебный регистр ISR. В регистре IRR фиксируются уровни всех прерываний, требующих обработки, а в регистре ISR — уровни всех прерываний, проходящих обработку. Во время цикла подтверждения прерывания с помощью блока разрешения приоритетов определяются приоритеты запросов по содержимому регистра IRR, а для прерываний с высшим приоритетом в регистре ISR помечаются соответствующие разряды. Регистр маски прерываний IMR используется совместно с регистром IRR и хранит код, по которому будут маскироваться определенные линии прерываний. Маскирование входов с более высоким приоритетом не влияет на линии запросов прерываний с низшим приоритетом. Номера предварительно запрограммированных векторов прерываний записываются в набор векторных регистров VR, для каждой линии запроса прерывания определен свой векторный регистр. Во время цикла подтверждения прерывания контроллера 82380 номер вектора, соответствующий выбранному прерыванию, выставляется на шину данных.
Рис. 9.3. Структурная схема контроллера прерываний
На структурной схеме Рис. 9.4показаны четыре 16-разрядных программируемых таймера контроллера 82380. По функционированию все таймеры идентичны своему предшественнику 82С54. Каждый таймер может работать в любом из шести различных режимов несмотря на то, что для всех четырех таймеров используется один общий тактовый вход. Этот вход может быть не зависящим от системной тактовой частоты. Микропроцессор 80386 может устанавливать и считывать текущее содержимое счетчика таймера в любой момент времени независимо от режима работы таймера. Выходы таймеров могут быть подключены к каким-нибудь системным функциональным устройствам, что в целом может способствовать упрощению структуры системы.
Таймер 0 занимает особое положение. Он обычно служит для формирования прерываний по времени, и его выход заводится непосредственно на вход контроллера прерываний. Этот таймер не имеет выхода из контроллера 82380. С помощью таймера 1 ведется отсчет времени для формирования цикла регенерации.
Рис. 9.4. Структура программируемых интервальных таймеров
Выход таймера 2 соединяется с каким-либо входом запроса прерывания для обеспечения других функций таймера. Выходы таймеров 1 и 2 могут использоваться для специальных целей, а также для обобщенных целей таймера и счетчика.
На Рис. 9.5 приведена структурная схема контроллера регенерации динамического ОЗУ 82380, в состав которого входят 24-разрядный счетчик адреса регенерации и логические схемы арбитража. Типовой цикл регенерации для шины микропроцессора 80386 включает только шесть тактов. На выходе таймера 1 периодически появляются запросы цикла регенерации, по которым контроллер выставляет запрос доступа к системной шине с помощью сигнала HOLD. Если после этого микропроцессор или другое ведущее устройство на шине подтверждает запрос, то контроллер регенерации динамического ОЗУ выполняет операцию чтения из памяти по адресу, содержащемуся на этот момент в регистре адреса регенерации. Одновременно активизируется сигнал REF#, вызывающий выполнение регенерации вместо обыкновенного чтения памяти. Управление шиной возвращается микропроцессору в конце описанного цикла.
Запрос на доступ к шине от контроллера регенерации динамического ОЗУ имеет высший приоритет, поэтому он может прервать любой активный процесс, происходящий с использованием ПДП.
Рис. 9.5. Контроллер регенерации динамического ОЗУ
Такая организация работы позволяет контроллеру ПДП пересылать большие блоки данных, не влияя на функции по регенерации памяти. Это достигается тем, что контроллер регенерации динамического ОЗУ не целиком захватывает управление шиной, а как бы "скрадывает" циклы шины из процесса ПДП. При этом 24-разрядный счетчик адреса регенерации может увеличиваться программно, чтобы изменялись используемая разрядность шины и способ организации памяти в виде банков.
Структурная схема программируемого генератора 82380 с выходным сигналом READY (готовность) для шины микропроцессора 80386, называемого генератором с состоянием ожидания, представлена на Рис. 9.6. Генератор с состоянием ожидания может быть активизирован любым периферийным устройством, в цикл работы которого требуется ввести такты ожидания. По таким запросам генератор поддерживает входной сигнал READY микропроцессора в неактивном состоянии в течение предварительно определенного числа тактов шины. В генераторе имеется шесть программно доступных регистров состояния ожидания – по три для доступа к памяти и обращения к устройствам ввода-вывода. Любой из этих шести регистров может быть выбран с помощью двухразрядного сигнала выбора состояния ожидания и сигнала M/IO# от ведущего устройства на шине. В четырехразрядные регистры состояния ожидания могут быть записаны коды номеров состояний ожидания 0 – 15. Независимо от того, активный или нет генератор с состояниями ожидания, он постоянно отслеживает состояние микропроцессора или другого ведущего в данный момент устройства на шине.
Если ведущее устройство на шине находится в режиме конвейерной работы, то генератор вводит такты ожидания, число которых равно значению, записанному в один из шести выбранных регистров состояний ожидания. Если же ведущее устройство работает в неконвейерном режиме, то в цикл шины вводится один такт ожидания. После сброса во все шесть регистров оказывается загружено значение FFH (разряды D7 — D4 и D3 — D0), что задает максимально возможное число тактов ожидания.
Любое периферийное устройство, которое может формировать свой собственный сигнал READY, может также запретить работу генератора с состояниями ожидания 82380, установив оба сигнала выбора регистров в состояние высокого уровня. Однако это не лишит генератор 82380 способности определить по состоянию конвейера число тактов ожидания в последующих циклах шины.