Взаимодействие с параллельным портом

Расширенный параллельный порт (EPP) был разработан совместным предприятием Intel, Xircom и Zenith Data Systems. Порты EPP были сначала указаны в стандарте EPP 1.7, а затем включены в стандарт IEEE 1284, выпущенный в 1994 году. EPP имеет два стандарта: EPP 1.7 и EPP 1.9. Между двумя стандартами существуют различия, которые могут повлиять на работу устройств. Это обсуждается далее. EPP имеет типичную скорость передачи порядка от 500 КБ/с до 2 МБ/с. Это достигается за счет того, что аппаратное обеспечение, содержащееся в порту, позволяет генерировать квитирование, стробирование и т. д., а не программное обеспечение, как в случае с Centronics.

Для любителей чаще используется EPP, чем ECP. EPP отличается от ECP тем, что порт EPP генерирует и контролирует все передачи на периферийное устройство и с него. ECP, с другой стороны, требует, чтобы периферийное устройство согласовывало обратный канал и контролировало квитирование. Этого сложнее достичь с помощью обычной связующей логики, поэтому действительно требуется выделенный контроллер или периферийный чип ECP.

При использовании режима EPP каждой линии назначается свой набор задач и меток. Они перечислены ниже в таблице 4. Очень часто можно увидеть, что имена SPP и EPP перепутаны местами в спецификациях и литературе по параллельным портам. Из-за этого очень трудно сосредоточиться на том, что именно происходит. Поэтому во всей документации здесь будут использоваться имена EPP.

шпилька SPP-сигнал Сигнал ПКП IN / OUT Функция
1 Строб Написать Вне A low on this line indicates a Write, High indicates a Read
2-9 Данные 0-7 Данные 0-7 Вход-выход Шина данных. Двунаправленный
10 Ack Прерывание In Линия прерывания. Прерывание происходит по положительному (нарастающему) фронту.
11 Занятый Подожди In Используется для рукопожатия. Цикл EPP может быть запущен при низком уровне и завершен при высоком уровне.
12 Бумага закончилась/конец Запасной In Запасной — не используется в рукопожатии EPP
13 Выберите Запасной In Запасной — не используется в рукопожатии EPP
14 Автоматический перевод строки Строб данных Вне When Low, indicates Data transfer
15 Ошибка/неисправность Запасной In Запасной – Примечание, используемое в рукопожатии EPP
16 инициализировать Сброс Вне Сброс — Активный Низкий
17 Выбрать принтер Адрес Строб Вне Низкий уровень указывает на передачу адреса
18-25 земля земля GND земля
Читайте также:
Использование тепловизионной камеры для обнаружения скрытых вентиляционных отверстий

Таблица 1. Назначение контактов для усовершенствованного разъема параллельного порта.

Paper Out, Select и Error не определены в рукопожатии EPP. Эти линии могут быть использованы пользователем любым способом. Состояние этих линий можно определить в любое время, просмотрев регистр состояния SPP. К сожалению, запасных выходов нет. Это может стать проблемой регулярно.

Чтобы выполнить действительный обмен данными с использованием EPP, мы должны следовать рукопожатию EPP. Поскольку аппаратное обеспечение выполняет всю работу, это рукопожатие необходимо использовать только для вашего аппаратного обеспечения, а не для программного обеспечения, как в случае с SPP. Чтобы инициировать цикл EPP, вашему программному обеспечению необходимо выполнить только одну операцию ввода-вывода для соответствующего регистра EPP. Подробности об этом в последствии.

Порт EPP также имеет новый набор регистров. Однако 3 из них были унаследованы от стандартного параллельного порта. Ниже приведена таблица, показывающая новые и существующие регистры.

Адрес Название порта Читай пиши
База + 0 Порт данных (SPP) Написать
База + 1 Порт состояния (SPP) Читать
База + 2 Порт управления (SPP) Написать
База + 3 Адресный порт (EPP) Читай пиши
База + 4 Порт данных (EPP) Читай пиши
База + 5 Не определено (16/32-битные передачи)
База + 6 Не определено (32-битные передачи)
База + 7 Не определено (32-битные передачи)

Таблица 2 Регистры EPP

Как видите, первые 3 адреса точно такие же, как регистр стандартного параллельного порта, и ведут себя точно так же. Поэтому, если вы использовали Enhanced Parallel Port, вы можете выводить данные на Base + 0 точно так же, как если бы это был стандартный параллельный порт (SPP). Если бы вы подключили принтер и использовали режим совместимости, вам нужно было бы проверить, занят ли порт, а затем активировать и деактивировать строб с помощью порта управления и состояния, а затем дождаться подтверждения.

Если вы хотите связаться с устройством, совместимым с EPP, все, что вам нужно сделать, это поместить любые данные, которые вы хотите отправить, в регистр данных EPP на базе + 4, и карта сгенерирует все необходимые необходимые подтверждения. Точно так же, если вы хотите отправить адрес на свое устройство, вы используете адресный регистр EPP со смещением +3.

Читайте также:
Десять простых правил хорошей постерной презентации - PMC

И регистр адреса EPP, и регистр данных EPP доступны для чтения/записи, поэтому для чтения данных с вашего устройства вы можете использовать одни и те же регистры. Однако карта принтера EPP должна инициировать цикл чтения, поскольку и строб nData, и строб nAddress являются выходами. Ваше устройство может сигнализировать запрос на чтение с помощью прерывания, и ваш ISR выполняет операцию чтения.

Порт состояния имеет одну небольшую модификацию. Бит 0, который был зарезервирован в наборе регистров SPP, теперь становится битом тайм-аута EPP. Этот бит будет установлен, когда произойдет тайм-аут EPP. Это происходит, когда линия nWait не снимается в течение примерно 10 мкс (в зависимости от порта) после подтверждения линии IOW или IOR. IOW и IOR — это линии чтения и записи ввода-вывода, присутствующие на шине ISA.

The EPP mode is very depended of the ISA bus timing. When a read cycle is performed, the port must undertake the appropriate Read/Write handshake and return the data in that ISA cycle. Of course this doesn’t occur within one ISA cycle, thus the port uses the IOCHRDY (I/O Channel Ready) on the ISA bus to introduce wait states, until the cycle completes. Now imagine if a EPP Read or Write is started with no peripheral connected? The port never gets an acknowledgment (nWait), thus keeps sending requests for wait states, and your computer locks up. Therefore the EPP implements a type of watchdog, which times out after approximately 10uS.

Три регистра, Base + 5, Base + 6 и Base + 7, можно использовать для 16- и 32-битных операций чтения/записи, если ваш порт поддерживает это. Это может еще больше сократить ваши операции ввода-вывода. Параллельный порт может передавать только 8 бит за раз, поэтому любое 32- или 16-битное слово, записанное в параллельный порт, будет разделено на блоки размером в байт и отправлено через 8 линий данных параллельного порта.

EPP имеет только два основных регистра и флаг состояния тайм-аута. Что можно настроить?

Читайте также:
Как установить настенный туалетный столик и раковину - This Old House

Прежде чем вы сможете запускать какие-либо циклы EPP путем чтения и записи в порты данных и адресов EPP, порт должен быть правильно настроен. В состоянии ожидания порт EPP должен иметь неактивные линии nAddress Strobe, nData Strobe, nWrite и nReset, высокий уровень. Некоторые порты требуют, чтобы вы настроили это перед запуском любого цикла EPP. Поэтому наша первая задача — вручную инициализировать эти строки с помощью регистров SPP. Запись XXXX0100 в порт управления сделает это.

На некоторых картах, если параллельный порт находится в обратном режиме, цикл записи EPP не может быть выполнен. Поэтому целесообразно перевести параллельный порт в прямой режим перед использованием EPP. Очистка бита 5 в регистре управления должна привести к более приятному сеансу программирования, без того, чтобы рвать на себе волосы.

Бит тайм-аута EPP мы уже обсуждали. Если этот бит установлен, порт EPP может работать неправильно. Обычный сценарий всегда считывает 0xFF либо из адресов, либо из циклов данных. Этот бит следует сбросить для надежной работы и постоянно проверять.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: