Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


CENTRONICS И ЕГО ПРОГРАММИРОВАНИЕ




Параллельный интерфейс Centronics
Понятие Centronics
Стандарт IEEE 1284
Физический и электрический интерфейс
Работа с параллельным портом на низком уровне
Регистр данных (DR)
Регистр состояния (CR)
Регистр управления (CR)
Программирование интерфейса
Список контрольных вопросов
Список использованных источников

 

 


Параллельный интерфейс CENTRONICS

Исторически параллельный интерфейс был введен в персональный компьютер (ПК) для подключения принтера (отсюда и аббревиатура LPT – Line Printer –построчный принтер). Однако впоследствии параллельный интерфейс стал использоваться для подключения других периферийных устройств (ПУ). Базовая разновидность порта позволяет передавать данные только в одном направлении (от ПК к ПУ), однако позднее был разработан ряд стандартов двунаправленной передачи данных.

Адаптер параллельного интерфейса представляет собой набор регистров, расположенных в адресном пространстве устройств ввода/вывода. Количество регистров зависит от типа порта, однако три из них стандартны и присутствуют всегда. Это регистр данных, регистр состояния и регистр управления. Адреса регистров отсчитываются от базового, стандартные значения которого 3BCh, 378h, 278h. Порт может использовать аппаратное прерывание (IRQ7 или IRQ9). Многие современные системы позволяют изменять режим работы порта, его адрес и IRQ из настроек базовой системы ввода-вывода (Base Input Output System – BIOS) Setup.

LPT порт имеет внешнюю 8-битную шину данных, 5-битную шину сигналов состояния и 4-х битную шину управляющих сигналов. Очевидно, что порт асимметричен - 12 линий работают на вывод и только 5 на ввод.

При начальной загрузке BIOS пытается обнаружить параллельный порт, причем делает это примитивным и не всегда корректным образом - по возможным базовым адресам портов передается тестовый байт, состоящий из чередующегося набора нулей и единиц (55h или AAh), затем производится чтение по тому же адресу, и если прочитанный байт совпал с записанным, то считается, что по данному адресу найден LPT порт. Определить адрес порта LPT4 BIOS не может. Для работы с ПУ в BIOS предусмотрено прерывание INT 17h, предоставляющее возможность передавать данные (побайтно), инициализировать ПУ и получать информацию о его состоянии.

Понятие Centronicsотносится к набору сигналов, протоколу обмена и 36-контактному разъему, устанавливаемому в принтерах. Большинство современных принтеров совместимы с интерфейсом Centronics. Назначение сигналов и контакты разъема ПУ, на который они выведены приведены в таблице 1.

Таблица 1. Сигналы интерфейса Centronics

Сигнал Т Конт. Напр. Назначение
Strobe i Строб данных. Передается ЭВМ, данные фиксируются по низкому уровню сигнала.
D0 ... D7 2-9 i Линии данных. D0 - младший бит.
Ack o Acknowledge – импульс подтверждения приема байта (запрос на прием следующего). Может использоваться для формирования прерывания.
Busy o Занят. Прием данных возможен только при низком уровне сигнала
PE o "1" сигнализирует о конце бумаги
Select o "1" сигнализирует о включении принтера (ГП – готовность приемника), обычно +5 В через резистор от источника питания ПУ)
Auto LF i Автоматический перевод строки. Если "0", то ПУ при получении символа CR (перевод каретки) выполняет функцию LF – перевод строки
Error o Ошибка ПУ (off-line, нет бумаги, нет тонера, внутренняя ошибка)
Init i Инициализация (переход к началу строки, сброс всех параметров на значения по умолчанию)
Slct In i Выбор принтера. При "1" принтер не воспринимает остальные сигналы интерфейса
GND   19-30, - Общий провод

Примечание: столбец "T" – активный уровень сигнала: "1" – высокий активный уровень, "0" – низкий активный уровень. Столбец "Напр." – направление передачи по отношению к принтеру: I – Input (вход), O – Output (выход).

 

Сигнал Auto LF практически не применяется, но его неправильное значение приводит к тому, что принтер либо делает пропуски строк, либо печатает строки поверх друг друга, либо дублирует строки при печати в два прохода.

Отечественным аналогом интерфейса Centronics является ИРПР-М. Кроме него существует интерфейс ИРПР (устаревший), который отличается протоколом обмена, отсутствием сигнала "Error" и инверсией линий данных. Кроме того, ко всем входным линиям ИРПР подключены пары согласующих резисторов: 220 Ом к +5 В и 330 Ом к общему проводу. Это перегружает большинство интерфейсных адаптеров современных ПК.

 

 

Рис. 1. Протокол обмена данными по интерфейсу Centronics

 

Протокол обмена данными по интерфейсу Centronics приведен на рис. 1. Передача начинается с проверки источником сигнала Error. Если он установлен, то обмен не производится. Затем проверяется состояние сигнала Busy. Если он равен "0", то источник приступает к передаче байта данных. Для передачи байта источник выставляет на линии D0-D7 байт данных и выдает сигнал Strobe#. Приемник по сигналу Strobe# (здесь и далее по тексту значок "#" после названия сигнала является признаком того, что сигнал имеет низкий активный уровень) читает данные с шины данных и выставляет сигнал Busy на время его обработки. По окончании обработки приемник выдает сигнал ACK# и снимает сигнал Busy. Если в течение длительного времени (6 – 12 сек) источник не получает ACK#, то он принимает решение о ошибке "тайм-аут" (time-out) устройства. Если после приема байта приемник по какой - либо причине не готов принимать данные, то он не снимает сигнал Busy. При программной реализации обмена по указанному протоколу желательно ограничить время ожидания снятия Busy (обычно 30 – 45 сек), иначе возможно зависание программы.

Стандартный параллельный порт называется SPP (Standard Parallel Port). SPP порт является однонаправленным, на его базе программно реализуется протокол обмена Centronics. Порт обеспечивает возможность генерации IRQ по импульсу ACK# на входе. Сигналы порта выводятся на стандартный разъем DB-25S (розетка), который размещен непосредственно на плате адаптера или соединяется с ним плоским шлейфом (в случае, если адаптер интегрирован с материнской платой).

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

 

Таблица 2. Разъем и шлейф стандартного LPT порта

Контакт DB-25S Провод шлейфа I/O Сигнал Контакт DB-25S Провод шлейфа I/O Сигнал
O/I Strobe# I* ACK#
O(I) D0 I Busy
O(I) D1 I PE
O(I) D2 I Select
O(I) D3 O/I Auto LF#
O(I) D4 I Error#
O(I) D5 O/I Init#
O(I) D6 O/I Select In#
O(I) D7 18 - 25 10,22, 14,16, 18,20, 22,24,26 - GND

Примечание. I/O – направление передачи: I – вход; O – выход; O(I) – выход, состояние которого может быть считано при определенных условиях, O/I – выходные линии, состояние которых читается при чтении из соответствующих регистров порта. * - Вход ACK# соединен с питанием +5 В через резистор 10 кОм. Это сделано для исключения ложных прерываний, т.к. прерывание генерируется по отрицательному перепаду сигнала на входе ACK#.

 

Рис. 2. Разъем интерфейсного адаптера Cetronics DB-25S


В качестве недостатков стандартного LPT порта (SPP) следует отметить невысокую скорость передачи данных (100 – 150 кБ/сек), загрузку процессора при передаче данных, невозможность двунаправленного побайтного обмена. Существует "радиолюбительская" методика двунаправленного обмена, которая состоит в том, что для ввода данных на линии D0-D7 выставляют "1", а в качестве передатчика используют микросхемы с открытым коллектором, которые при открытом транзисторе могут "подсаживать" напряжение логической единицы до уровня порядка 1.5 – 1.7 В. Ток ограничен на уровне 30 мА. Как очевидно из уровней сигналов, они не соответствуют уровням ТТЛ, поэтому многие порты не работают в таком режиме или работают нестабильно. Кроме того, такой способ может быть опасен для адаптера порта, который будет работать с предельными для него токами.

Стандарт IEEE 1284, принятый в 1994 году, определяет термины SPP, ЕРР и ЕСР. Стандарт определяет 5 режимов обмена данными, метод согласования режима, физический и электрический интерфейсы. Согласно IEEE 1284, возможны следующие режимы обмена данными через параллельный порт:

– Compatibility Mode – однонаправленный (вывод) по протоколу Centronics. Этот режим соответствует стандартному (традиционному) порту SPP;

– Nibble Mode – ввод байта в два цикла (по 4 бита), используя для ввода линии состояния. Этот режим обмена может использоваться на любых адаптерах;

– Byte Mode – ввод байта целиком, используя для приема линии данных. Этот режим работает только на портах, допускающих чтение выходных данных (Bi-Directional или PS/2 Type 1);

– ЕРР (Enhanced Parallel Port) Mode – двунаправленный обмен данными, при котором управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту (чтения или записи в порт). Эффективен при работе с устройствами внешней памяти, адаптерами локальных сетей;

– ЕСР (Extended Capability Port) Mode – двунаправленный обмен с возможностью аппаратного сжатия данных по методу RLE (Run Length Encoding), использования FIFO-буферов и DMA. Управляющие сигналы интерфейса генерируются аппаратно. Эффективен для принтеров и сканеров.

В современных машинах с LPT-портом на системной плате режим порта – SPP, ЕРР, ЕСР или их комбинация задается в BIOS Setup. Режим Compatibility Mode полностью соответствует SPP и часто установлен по умолчанию. Все остальные режимы расширяют функциональные возможности интерфейса и повышают его производительность. Кроме того, стандарт регламентирует способ согласования режима, доступного как ПК, так и периферийному устройству.

Физический и электрический интерфейс.Стандарт IEEE 1284 определяет физические характеристики приемников и передатчиков сигналов. IEEE 1284 предусматривает два уровня интерфейсной совместимости: первый уровень - для устройств, не требующих высоких скоростей обмена, но использующих возможность смены направления передачи данных; второй уровень - устройства, работающие в расширенных режимах, с высокими скоростями и длинными кабелями. Требования к передатчикам приведены в таблице 3, для приемников – в таблице 4.

 

Таблица 3. Требования стандарта IEEE 1284 к передатчикам

Требование Значение
Диапазон уровней сигналов без нагрузки -0.5...+5.5 В
Уровень "1" при токе нагрузки 14 мА, не менее +2.4 В
Уровень "0" при токе нагрузки 14 мА, не более +0.4 В
Выходной импеданс, измеренный на разъеме 50±5 Ом
Скорость нарастания/спада импульса (должна находиться в указанных пределах) 0.05 ... 0.4 В/нс

 

Таблица 4. Требования стандарта IEEE 1284 к приемникам

Требование Значение
Допустимые пиковые значения сигналов, выдерживаемые без ошибок в работе, В -2.0 ... +7.0
Порог срабатывания "1", не выше, В 2.0
Порог срабатывания "0", не ниже, В 0.8
Гистерезис приемника (пределы), В 0.2 - 1.2
Входной ток (втекающий и вытекающий), не более, мкА
Входная емкость, не более, пФ

Примечание: Входные линии соединяются с шиной питания резистором 1.2 кОм.

Стандарт IEEE 1284 определяет три типа используемых разъемов: А (DB-25S), B (Centronics-36), C (новый малогабаритный 36-контактный разъем). Интерфейсные кабели могут иметь от 18 до 25 проводников (в зависимости от числа проводников GND). Не предъявляется жестких требований к экранировке и прочим параметрам, однако, такие кабели могут работать только на низких скоростях при длине не более 2 метров. Стандарт IEEE 1284 для улучшенных кабелей определяет следующие параметры:

– Все сигнальные проводники должны быть перевиты с отдельными обратными (общими) проводами;

– Каждая пара должна иметь импеданс 62±6 Ом в диапазоне частот 4–16 МГц;

– Уровень перекрестных помех не должен превышать 10%;

– Кабель должен иметь экран, покрывающий не менее 85 процентов внешней поверхности. На концах кабеля экран должен быть окольцован и соединен с контактом разъема GND.

Кабели, удовлетворяющие этим требованиям, маркируются как "IEEE Std 1284 - 1994 Compliant". Они могут иметь длину до 10 метров.

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

Контроллер порта расположен в адресном пространстве устройств ввода-вывода и обращение к нему производится посредством команд IN и OUT ассемблера. Или при помощи специальных команд компиляторов программ, написанных на языках высокого уровня. Информацию о портах LPT1 – LPT3 можно получить, прочитав переменные BIOS, приведенные в табл. 5.

BIOS ищет порты по адресам Base: 3BCh, 378h, 278h. Порт LPT4 BIOS найти не может:

 

– 378h - параллельный адаптер LPT1;

– 278h - параллельный адаптер LPT2;

– 3BCh - параллельный адаптер LPT3;

 


Таблица 5. Переменные BIOS для LPT портов

Имя порта Адрес в BIOS Тип переменной Описание
LPT1 0040:0008h Word Базовый адрес порта LPT1. Если переменная равна 0, то порт LPT1 не найден
  0040:0078h Byte Константа, задающая тайм-аут
LPT2 0040:000Ah Word Базовый адрес порта LPT2. Если переменная равна 0, то порт LPT2 не найден
  0040:0079h Byte Константа, задающая тайм-аут
LPT3 0040:000Ch Word Базовый адрес порта LPT3. Если переменная равна 0, то порт LPT3 не найден
  0040:007Ah Byte Константа, задающая тайм-аут
LPT4 0040:000Eh Word Базовый адрес порта LPT4. Если переменная равна 0, то порт LPT4 не найден
  0040:007Bh Byte Константа, задающая тайм-аут

 

Стандартный порт имеет три 8-битных регистра, расположенных по соседним адресам, начиная с базового (Base) адреса. Перечень данных регистров приведен в- табл. 6.

 

Таблица 6. Регистры стандартного LPT порта

Адрес Название W-R
Base+0 Data Register – регистр данных (DR) W/R
Base+1 Status register – регистр состояния (SR) R
Base+2 Control Register – регистр управления (CR) W/R

Примечание. W-R – доступные операции (W – запись, R – чтение, W/R – запись/чтение).

Регистр данных (DR).Записанные в этот регистр данные выводятся на выходные линии интерфейса D0-D7. Результат чтения этого регистра зависит от схемотехники адаптера и соответствуют либо записанным ранее данным, либо сигналам на линиях D0-D7, что не всегда одно и тоже. При стандартном включении справедлив первый вариант - читаемые данные равны ранее записанным.

Регистр состояния (SR). Представляет собой 5-ти битный порт ввода, на который заведены сигналы состояния от внешнего устройства. Допускает только чтение. Назначение битов данного регистра приведены в табл. 7.


Таблица 7. Биты регистра состояния SR

Бит Вес Название Назначение
BUSY Инверсное отображение состояния линии Busy (11). При низком уровне на линии 11 (Busy) – бит равен "1" – ПУ готово к приему очередного байта
ACK Отображение состояния линии ACK# (10). "0" – подтверждение приема, "1" – обычное состояние
PE Отображение состояния линии Paper End (12). "0" – норма, "1" – в ПУ нет бумаги
SLCT OUT Отображение состояния линии Select (13). "0" - ПУ не выбрано, "1" - ПУ выбрано
Error (инверсн.) Отображение состояния линии Error (15). "0" – ошибка ПУ, "1" – обычное состояние
PIRQ Флаг прерывания по ACK# (только PS/2). Обнуляется, если ACK# вызвал аппаратное прерывание. "1" – после сброса или после чтения регистра состояния
1-0 4-1 -- Не используются (резерв)

Регистр управления (CR).Регистр управления представляет собой 4-х битный порт вывода, допускающий чтение и запись. Биты 0, 1, 3 инвертируются, т.е. "1" в данных битах регистра управления соответствует "0" на соответствующих линиях порта. Назначение битов регистра управления приведены в табл. 8. Бит 5 используется только двунаправленными портами.

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


Таблица 8. Биты регистра управления CR

Бит Вес Название Назначение
- Резерв
- Резерв
Direction Бит управления направлением порта. "1" – режим ввода, "0" – режим вывода
AckIntEn Бит управления генерацией прерывания по ACK# . "1" – разрешить прерывание по спаду ACK# (10)
SLCT IN Управление линией SLCT IN# (17). "1" – работа принтера разрешена.
INIT Управление линией INIT# (16). "1" – обычное состояние, "0" – аппаратный сброс ПУ
Auto LF Управление линией Auto LF# (14). "1" – включить режим "Auto LF", "0" – обычное сост.
Strobe Управление линией Strobe# (1). "1" – стробирование данных, "0" – обычное сост.

 

Язык высокого уровня следует выбирать, если необходимо производить сложные вычисления, или в случае, если высокое быстродействие программы не требуется. Объектные коды, полученные в результате трансляции программ, написанных на языке высокого уровня, обычно занимают в памяти ЭВМ намного больше места и исполняются медленнее в сравнении с программами на ассемблере. Часто применяется подход, когда критичные к быстродействию части программы пишутся на ассемблере, а вычислительные процедуры – на языке высокого уровня, например, на Паскале или Си.

Рассмотрим работу с регистрами интерфейса CENTRONICS на языке PASCAL или ассемблере:

 

Паскаль: Ассемблер 8086:
Port[$378]:=x mov al,x mov dx,378h out dx,al

Х - число типа "byte" (0..255). Например, при посылке 170 (dec) = 10101010 (bin) на линии d0–d7 единичный сигнал будет присутствовать на выводах d1, d3, d5, d7 (обозначение выводов начинается с d0). Число 170 останется на выводах разъёма до тех пор, пока Вы не перешлёте туда же другое число (это может сделать и другая программа) или не выключите компьютер. Заметьте, что адрес порта в команде задан в шестнадцатиричном (hex) виде, а посылка - в десятичном (dec). Если вместо Паскаль-команды

Port[$378]:=170;

Вы примените

d:=Port[$378];

где d – переменная, то переменная примет значение последнего посланного в порт байта или, при переходе в режим приёма, значение байта, поданного на порт внешним устройством.

Пример чтения статус-регистра на языке Pascal:

d:=Port[$379];

В переменной d после выполнения программы будет отображено состояние порта. Допустим, переменная вернула значение 126 (dec). В двоичном (bin) виде оно выглядит как 01111110. Младшие (правые) три бита (нулевой, первый и второй) не используются, и почти равны 1, 1 и 0. Третий бит – 1, значит на ERROR высокий уровень. Та же ситуация на SELECT, Paper End, ACK и BUSY (не забывайте, что сигнал BUSY является инвертированным).

Приведем пример фрагмента программы, которая считывает байт с линий данных D0-D7:

 

Port[$37A]:=32; {32 "включает" единицу в пятом}

d:=Port[$378] ; {бите, переводя порт в режим ввода}

 

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



Поделиться:

Дата добавления: 2015-08-05; просмотров: 758; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты