Для подготовки контроллера СОМ - порта к работе необходимо

Рассмотрим порты ввода-вывода СОМ1, имеющего базовый адрес 3F8h. Следует обратить внимание, что порты 3F8h и 3F9h имеют разное назначение в зависимости от бита 7 порта 3F8h (т. е. бит DLAB - Divisor Latch Access Bit).

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

COM – порты могут быть сконфигурированы различным образом. BIOS PC поддерживает до 4 последовательных интерфейсов. С конфигурацией двух как правило, проблем не возникает, тем более что стандартные установки на плате интерфейса обычно соответствуют оптимальным. Проблемы могут возникнуть при конфигурировании портов COM3 и COM4, поскольку для необходимо указать непересекающиеся с другими устройствами адреса и номера линий прерывания.

Стандартные значения адресов и IRQ для COM – портов приведены в таблице 2.2.

Имя порта Адрес порта Прерывание
COM 1 3F8h-3FFh IRQ 4
COM 2 2F8h-2FFh IRQ 3
COM 3 3E8h-3EFh IRQ 4*
COM 4 2E8h-2EFh IRQ 3*

Таблица 2.

 

 

*Хотя порты COM 3 и COM 4 могут совместно с портами COM 1 и COM 2 использовать прерывания IRQ 3 и IRQ 4, не рекомендуется конфигурировать порты таким образом. Если необходимы дополнительные последовательные порты, то лучше установить COM 3 на IRQ 5 или IRQ 10, а COM 4 на IRQ 11 (конечно, если эти прерывания не используются другими устройствами).

Таблица3

Порт Операция Описание
3F8h Запись Регистр передатчика – сюда засылается байт для передачи
Чтение Регистр приёмника – отсюда извлекается принятый байт
Запись Если DLAB = 1,то сюда засылается младший байт скорости обмена (см. порт 3F9h)
3F9h Запись Если DLAB=1, то сюда засылается старший байт скорости обмена. Скорость задается значением делителя, равным 115200/V, где V - скорость в бодах. Например, для скорости 9600 бод делитель равен 115200/9600=12=0Ch, поэтому нужно вывести 0Ch в порт 3F8h и 0 в порт 3F9h.
Запись Регистр управления прерываниями (1 = разрешить прерывание): 7 6 5 4 3 2 1 0 ┌──┬──┬──┬──┬──┬──┬──┬──┐ │0 │0 │0 │0 │ │ │ │ │ Бит: └──┴──┴──┴──┴┬─┴┬─┴┬─┴┬─┘ ──── │ │ │ └─> 0: прерывание по │ │ │ приему символа │ │ └────> 1: прерывание по │ │ завершению │ │ передачи символа │ └───────> 2: прерывание по │ обрыву линии или │ или ошибке в линии └──────────> 3: прерывание по изменению состояния модема (любой из линий CTS, DSR, RI и DCD)
3FAh Чтение Регистр идентификации прерывания. Когда произошло прерывание, здесь содержится причина, вызвавшая его: 7 6 5 4 3 2 1 0 ┌──┬──┬──┬──┬──┬──┬──┬──┐ │0 │0 │0 │ 0│ 0│ │ │ Бит: └──┴──┴──┴──┴──┴──┼──┴┬─┘ ──── │ │ │ └──>0: 0=есть отложенные │ прерывания └──────>1-2:причина прерывания: 11=ошибка или обрыв линии; сбрасывается чтением регистра состояния линии (порт 3FDh) 10=принят символ; сбрасывается чтением приемника (порт 3F8h) 01=передан символ; сбрасывается записью символа в регистр передатчика (порт 3F8h) 00=изменение состояния модема(линий CTS, DSR, RI или DCD); сбрасывается чтением регистра состояния модема (порт 3FEh)
3FBh Чтение/ Запись Регистр управления линией 7 6 5 4 3 2 1 0 ┌──┬──┬──┬──┬──┬──┬──┬──┐ │ │ │ │ │ │ │ Биты: └┬─┴┬─┴┬─┴──┼──┴┬─┴──┼──┘ ───── │ │ │ │ │ │ │ │ │ │ │ └> 0-1: число битов │ │ │ │ │ данных: 00=5, 01=6, │ │ │ │ │ 10=6, 11=8 │ │ │ │ └─────> 2: число стоп-битов: │ │ │ │ 0=1, 1=1.5 при 5 │ │ │ │ битах данных и 2 в │ │ │ │ противном случае │ │ │ └─────────> 3-4: тип четности: │ │ │ X0=нет, │ │ │ 01=нечетная, │ │ │ 11=четная │ │ └──────────────> 5: постоянная │ │ четность: │ │ 0=отмена постоянной │ │ четности │ │ 1=постоянный бит │ │ четности, зависит от │ │ битов 3-4: │ │ биты 3-4=01 - бит четности всегда 1 │ │ биты 3-4=11 - бит четности всегда 0 │ │ биты 3-4=X0 - без бита четности │ └─────────────────> 6: 1=имитировать обрыв │ линии(посылка нулей) └────────────────────> 7: бит DLAB: 1=порты 3F8h и 3F9h для загрузки скорости обмена; 0=порты 3F8h и 3F9h в обычном режиме
3FCh Запись Регистр управления модемом 7 6 5 4 3 2 1 0 ┌──┬──┬──┬──┬──┬──┬──┬──┐ │ 0│ 0│ 0│ │ │ │ │ │ Бит: └──┴──┴──┴┬─┴┬─┴┬─┴┬─┴┬─┘ ─── │ │ │ │ └>0: 1=установить выход DTR │ │ │ └───>1: 1=установить выход RTS │ │ └──────>2: 1=установить OUT1 (не │ │ используется) │ └─────────>3: 1=установить OUT2 │ (разрешить прерывания от │ RS-232) └────────────>4: 1=диагностический режим (посылать выход на вход стыка).
3FDh Чтение Регистр состояния линии. Биты 1-4 вызывают прерывания по ошибке, если оно разрешено: 7 6 5 4 3 2 1 0 ┌──┬──┬──┬──┬──┬──┬──┬──┐ │ 0│ │ │ │ │ │ │ │ Бит: └──┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘ ─── │ │ │ │ │ │ └─> 0:1=данные приняты. Сбрасывается │ │ │ │ │ │ чтением приемника │ │ │ │ │ └────> 1:1=потеря предыдущего символа │ │ │ │ └───────> 2:1=ошибка четности │ │ │ └──────────> 3:1=неверный стоп-бит │ │ └─────────────> 4:1=обнаружен обрыв линии │ └────────────────> 5:1=сдвиговый регистр передатчика пуст. │ Можно передавать след. символ └───────────────────> 6:1=регистр передатчика пуст. Нет обрабатываемых данных.
3FEh Чтение Регистр состояния модема. Биты 0-3 вызывают прерывание по изменению состояния модема, если оно разрешено: 7 6 5 4 3 2 1 0 ┌──┬──┬──┬──┬──┬──┬──┬──┐ │ │ │ │ │ │ │ │ │ Бит: └┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘ ─── │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──> 0:1=изменилось состояние линии CTS │ │ │ │ │ │ └─────> 1:1=изменилось состояние линии DSR │ │ │ │ │ └────────> 2:1=изменилось состояние линии RI │ │ │ │ └───────────> 3:1=изменилось состояние линии DCD │ │ │ └──────────────> 4: состояние линии CTS │ │ └─────────────────> 5: состояние линии DSR │ └────────────────────> 6: состояние линии RI └───────────────────────> 7: состояние линии DCD Примечание: "Изменилось состояние линии..." означает, что данная линия стыка RS-232 изменила свое состояние по сравнению с последним чтением этого регистра.

выполнить следующие шаги: