Материалы

Модель внешнего устройства для программиста

Рейтинг:   / 0
ПлохоОтлично 

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

Словосочетанием “модель периферийного устройства для программиста” будем называть набор регистров в периферийном устройстве, которые можно прочитать-записать программно.

Простейшая модель для программиста внешнего устройства может содержать довольно мало регистров: - регистр состояния (статуса), регистр управления, регистр (буфер) данных.

Применяют два основных способа доступа к регистрам ПУ:

  1. Произвольной адресации регистров;
  2. С индексацией регистров (SB).

В первом случае процессор по команде может записать/считать данные в любой регистр ПУ. Если ПУ имеет большое количество регистров, например, более 100, как в sound blaster, используют второй способ. В этом случае ПУ имеет два регистра: индексный регистр и регистр данных. При записи в индексный регистр заносим номер регистра ПУ, в который хотим записать, затем в регистр данных заносим записываемое число.

Адресация регистров внешнего устройства:

  • изолированный ввод-вывод (порты);
  • отображение на память.

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

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

 Пример 1. Нулевой канал таймера имеет порт данных с адресом 40h
и порт управления с адресом 43h.


Пример 2. Приемник последовательного интерфейса COM1 имеет
порт данных с адресом 0378h и порт состояния (статуса) с адресом
03FDh. Младший бит в порте состояния (флаг окончания приема)
устанавливается в 1, если приемник принял извне байт.

Оба вида адресации аппаратно поддержаны со стороны процессора. В первом случае в адресном пространстве процессора выделяется область адресов для ПУ. Адреса из этой области транслируются напрямую, без использования схемы преобразования (логический адрес равен физическому). В процессоре Motorola 68040 этот механизм называется “прозрачная трансляция адресов”. Для указания выделенной области регистров ПУ используются специальные регистры. В этих регистрах дополнительно имеются поля, определяющие разрешение/запрещение КЭШирования, тип доступа r/w и др. На рисунке (см. рисунок ниже) представлена схема страничной трансляции.

Схема страничной трансляции процессора МС68040

Регистры прозрачной трансляции ТТО и ТТ1 (см. рисунок ниже) определяют блоки адресного пространства, которые транслируются прозрачно (прямо): в этих блоках логические адреса являются физическими.

 

Формат регистров прозрачной трансляции

Значения полей регистров ТТО и ТТ1:

LOGICAL ADDRESS BASE - значение А31 - А24, определяют блок прозрачной трансляции;

LOGICAL ADDRESS MASK - игнорируемые разряды А31 - А24;

Е (Enable) - разрешение: определяет возможность прозрачной трансляции (Е=1 разрешена).

Cl (Cashe Inhibit) - КЭШ запрещен: определяет возможность использования КЭШа ( С1=0 означает, что КЭШ используется);

R/W - чтение/запись: определяет тип доступа в транслируемом блоке: (R/W=0 - запись; R/W=1 - чтение);

RWM (Read/Write Mask) - маска чтения-записи: определяет достоверность поля R/W (RWM=0 - поле используется);

FC BASE (Function Code Base) - значение функционального кода блока прозрачной трансляции;

FC MASK (Function Code Mask) - игнорируемые биты функциональною кода.

При изолированном вводе-выводе процессор должен иметь: специальные команды работы с ПУ, специальные сигналы на шине, различающие обращение к памяти и к ПУ.

В процессорах семейства х86 использован изолированный ввод-вывод. На шине процессора имеются специальные сигналы. При обращении к памяти вырабатываются стробы MEMR, MEMW, а к ПУ - стробы I/OR, I/OW. Схема подключения приведена на рисунке (см. рисунок ниже).

 

Схема подключения ПУ

В составе системы команд имеются следующие две команды ввода-вывода:

  1. in - ввод 1/2/4-байтового элемента данных из порта в регистр процессора al/ax/eax;
  2. out - вывод 1/2/4-байтового элемента данных из регистра al/ax/eax в порт.

Номер порта операнда-источника в команде in или операнда-приемника в команде out можно задать двумя способами: непосредственной адресацией или косвенно-регистровой с использованием только регистра dx.

!Примеры.

in                    al,040h; ввести байт в al из порта 40h

mov               dx,0378h; записать номер порта 0378h в регистр dx

in                    al,dx; ввести байт в al из порта 0378h

mov               al,049h; записать байт 49h в регистр al

out                 dx,al; вывести байт из al в порт, номер которого содержится в dx

Кроме того, в системе команд есть две строковые (цепочечные) команды ввода-вывода:

  1. insb / insw / insd - ввод из порта цепочки (строки) байтов/слов/двойных слов в последовательные адреса памяти;
  2. outsb / outsw /outsd - вывод цепочки (строки) байтов/слов/двойных слов из последовательных адресов памяти в порт.
Яндекс.Метрика