Аппаратные интерфейсы ПК - страница 6

стр.

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

Status Register (>SR) — регистр состояния (только чтение), адрес=>BASE+1. Регистр отображает 5-битный порт ввода сигналов состояния принтера (биты >SR.4-SR.7) и флаг прерывания. Бит >SR.7 инвертируется — низкому уровню сигнала соответствует единичное значению бита в регистре, и наоборот.

Ниже описано назначение бит регистра состояния (в скобках даны номера контактов разъема порта).

♦ >SR.7>Busy — инверсное отображение состояния линии >Busy (11): при низком уровне на линии устанавливается единичное значения бита — разрешение на вывод очередного байта.

♦ >SR.6>Ack (Acknowledge) — отображение состояния линии >Ack# (10).

♦ >SR.5>РЕ (Paper End) — отображение состояния линии >Paper End (12). Единичное значение соответствует высокому уровню линии — сигналу о конце бумаги в принтере.

♦ >SR.4>Select — отображение состояния линии >Select (13). Единичное значение соответствует высокому уровню линии — сигналу о включении принтера.

♦ >SR.3>Error — отображение состояния линии >Error# (15). Нулевое значение соответствует низкому уровню линии — сигналу о любой ошибке принтера.

♦ >SR.2>PIRQ — флаг прерывания по сигналу >Ack# (только для порта PS/2). Бит обнуляется, если сигнал >Ack# вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния.

♦ >SR[1:0] — зарезервированы.

Control Register (>CR) — регистр управления, адрес=>ВАSЕ+2, допускает запись и чтение. Регистр связан с 4-битным портом вывода управляющих сигналов (биты 0–3) для которых возможно и чтение; выходной буфер обычно имеет тип «открытый коллектор». Это позволяет корректно использовать линии данного регистра как входные при программировании их в высокий уровень. Биты 0, 1, 3 инвертируются.

Ниже описано назначение бит регистра управления.

♦ >CR[7:6] — зарезервированы.

♦ >CR.5>Direction — бит управления направлением передачи (только для портов PS/2, см. ниже). Запись единицы переводит порт данных в режим ввода. При чтении состояние бита не определено.

♦ >CR.4>AckINTEN (Ack Interrupt Enable) — единичное значение разрешает прерывание по спаду сигнала на линии >Ack# — сигнал запроса следующего байта.

♦ >CR.3>Select In — единичное значение бита соответствует низкому уровню на выходе >Select In# (17) — сигналу, разрешающему работу принтера по интерфейсу Centronics.

♦ >CR.2>Init — нулевое значение бита соответствует низкому уровню на выходе >Init# (16) — сигнал аппаратного сброса принтера.

♦ >CR.1>Auto LF — единичное значение бита соответствует низкому уровню на выходе >Auto LF# (14) — сигналу на автоматический перевод строки (LF — Line Feed) по приему байта возврата каретки (CR). Иногда сигнал и бит называют >AutoFD или >AutoFDXT.

♦ >CR.0>Strobe — единичное значение бита соответствует низкому уровню на выходе >Strobe# (1) — сигналу стробирования выходных данных.

Запрос аппаратного прерывания (обычно >IRQ7 или >IRQ5) вырабатывается по отрицательному перепаду сигнала на выводе 10 разъема интерфейса (>Ack#) при установке >CR.4=1. Во избежание ложных прерываний контакт 10 соединен резистором с шиной +5 В. Прерывание вырабатывается, когда принтер подтверждает прием предыдущего байта. Как уже было сказано, BIOS это прерывание не использует и не обслуживает.

Перечислим шаги процедуры вывода байта по интерфейсу Centronics с указанием требуемого количества шинных операций процессора.

1. Вывод байта в регистр данных (1 цикл >IOWR#).

2. Ввод из регистра состояния и проверка готовности устройства (бит >SR.7 — сигнал >Busy). Этот шаг зацикливается до получения готовности или до срабатывания программного тайм-аута (минимум 1 цикл >IORD#).

3. По получению готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается. Обычно, чтобы переключить только один бит (строб), регистр управления предварительно считывается, что к двум циклам >IOWR# добавляет еще один цикл >IORD#