Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная «информатика» По Информатике (Петров И. С.).doc
Скачиваний:
31
Добавлен:
07.10.2014
Размер:
383.49 Кб
Скачать

20. Последовательный и параллельный порты, их назначение

Последовательный порт

Порт или интерфейс, который может использоваться для последовательной связи, при которой за раз передается только 1 бит.

Большинство последовательных портов для персональных компьютеров удовлетворяют стандарту RS-232C или RS-422. Последовательный порт есть интерфейс общего назначения, он может использоваться для многих типов устройств, включая модемы, мыши и принтеры (хотя большинство принтеров подсоединяются к параллельному порту).

Обычный PC имеет ttyS0 и ttyS2 на IRQ 4, и ttyS1 и ttyS3 на IRQ 3. Вы можете увидеть, какие IRQs используются, напечатав: setserial /dev/ttyS2, и т.д. Просмотр /proc/interrupts покажет некоторых из них. Чтобы использовать более, чем два последовательных устройства, вы должны будете переназначить прерывания. Хороший подход состоит в переназначении прерывания для параллельного порта. В PC обычно для ваших параллельных портов установлены прерывания IRQ 5 и IRQ 7, но мало кто использует два параллельных порта. Вы можете переназначать одно из прерываний на последовательное устройство, и прекрасно использовать оставшийся параллельный порт. чтобы сделать это, вам нужна будет программа setserial. Кроме того, вы должны поиграть с перемычками на матернской плате, свериться с документацией на вашу плату. Установите перемычки на IRQ, который вы хотите назначить каждому порту.

Вы должны установить все так, чтобы имелось одно и только одно прерывание для каждого последовательного устройства. Вот как Грэг устанавливает его в /etc/rc.d/rc.local - вы должны сделать это в файле, который выполняется после запуска:

/sbin/setserial /dev/ttyS0 irq 3 # моя последовательная мышь

/sbin/setserial /dev/ttyS1 irq 4 # мой Wyse dumb терминал

/sbin/setserial /dev/ttyS2 irq 5 # мой модем Zoom

/sbin/setserial /dev/ttyS3 irq 9 # мой модем USR

Стандартные назначения IRQ:

IRQ 0 Таймер, канал 0

IRQ 1 Клавиатура

IRQ 2 Cascade for controller 2

IRQ 3 Последовательный порт 2

IRQ 4 Последовательный порт 1

IRQ 5 Параллельный порт 2

IRQ 6 Накопитель на гибких дисках

IRQ 7 Параллельный порт 1

IRQ 8 Часы реального времени

IRQ 9 Перенаправлен на IRQ2

IRQ 10 не назначен

IRQ 11 не назначен

IRQ 12 не назначен

IRQ 13 Математический сопроцессор

IRQ 14 Накопитель на жестких дисках 1

IRQ 15 Накопитель на жестких дисках 2

В действительности нет никакого "правильного способа" назначения прерывания. Только удостоверьтесь, что оно не используется материнской платой или любыми другими платами.

Номера прерываний 2, 3, 4, 5 или 7 - это хороший выбор. «не назначен» означает, что в настоящее время ничего стандартно не использует эти IRQS. Также обратите внимание, что IRQ 2 - это тоже, что и IRQ 9. Вы можете вызывать его или как 2 или как 9, последовательный драйвер очень понятливый. Если у вас последовательная плата с 16-разрядным разъемом шины, то вы можете также использовать IRQ 10, 11, 12 или 15.

Только удостоверьтесь, что вы не используете IRQ 0, 1, 6, 8, 13 или 14! Они используются вашей материнской платой. Вы модете заработать множество неприятностей, используя эти IRQ не по назначению. Когда вы закончите, посмотрите /proc/interrupts и удостоверьтесь, что конфликтов нет.

Установка адресов последовательных устройств

Затем, вы должны установить адрес порта. Проверьте в руководстве по вашей плате установки перемычек. Подобно прерываниям, одно последовательное устройство может иметь только один адрес. Ваши порты обычно будут приходить с такими установками:

ttyS0 адрес 0x3f8

ttyS1 адрес 0x2f8

ttyS2 адрес 0x3e8

ttyS3 адрес 0x2e8

Выберите адреса, которые вы хотите использовать для каждого последовательного устройства и соответственно установите перемычки. Мой модем установлен на ttyS3, мышь на ttyS0, а мой терминал на ttyS2.

Когда вы перезагрузитесь, Linux должен увидеть ваши последовательные порты по тем адресам, на которые вы их установили. IRQ, который видит Linux, может не соответствовать IRQ, который вы устанавливаете перемычками. Не волнуйтесь об этом. Linux не делает попыток определить IRQ при загрузке, потому что определение IRQ рисковано и может быть неправильным. Используйте setserial, чтобы сообщить Linux, какое IRQ используется портом. Вы можете проверить /proc/ioports, чтобы увидеть, какие адреса порта ввода-вывода используются после загрузки Linux.

Адаптер параллельного интерфейса представляет собой набор регистров, расположенных в адресном пространстве устройств ввода/вывода. Количество регистров зависит от типа порта, однако три из них стандартны и присутствуют всегда - регистр данных, регистр состояния и регистр управления. Адреса регистров отсчитываются от базового, стандартные значения которого 3BCh, 378h, 278h. Узнать количество установленных портов в компьютере и их базовые адреса можно просканировав область данных BIOS по адресам 0:408h для LPT1, 0:40Ah для LPT2, 0:40Ch для LPT3 и 0:40Eh для LPT4. Если по данным адресам содержится слово (2 байта) с ненулевым значением, то это и есть базовый адрес порта. Если слово содержит нулевое значение - порт не установлен. BIOS не поддерживает больше 4 LPT-портов. Порт может использовать аппаратное прерывание (IRQ7 или IRQ9). Многие современные системы позволяют изменять режим работы порта, его адрес и IRQ из настроек BIOS Setup. Например, в AWARD BIOS имеется раздел Integrated Peripherals, позволяющий настраивать режим, адрес и IRQ порта.

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