СИСТЕМНАЯ ПОДДЕРЖКА СОМ-ПОРТОВ
МИКРОСХЕМЫ АСИНХРОННЫХ ПРИЕМОПЕРЕДАТЧИКОВ
В СОМ-портах преобразование параллельного кода в последовательный для передачи и обратное преобразование при приеме данных выполняют специализированные микросхемы UART (Universal Asynchronous Receiver-Transmitter — универсальный асинхронный приемопередатчик).
Эти же микросхемы формируют и обрабатывают управляющие сигналы интерфейса.
В компьютерах класса AT применяют микросхемы UART перечисленных ниже модификаций: 16450, 16550, 16550А. Именно этот тип U ART должен применяться в РС.
Микросхемы UART 16550А с программной точки зрения представляют собой набор регистров, доступ к которым определяется адресом и значением бита DLAB (бита 7 регистра LCR). В адресном пространстве микросхема занимает 8 смежных адресов.
Т H R — промежуточный регистр данных передатчика (только для записи). Данные, записанные в регистр, будут пересланы в выходной сдвигающий регистр (когда он будет свободен), из которого поступят на выход при наличии разрешающего сигнала CTS.
RBR — буферный регистр принимаемых данных (только для чтения). Данные, принятые входным сдвигающим регистром, помещаются в регистр RBR, откуда они могут быть считаны процессором. Если к моменту окончания приема очередного символа предыдущий не был считан из регистра, фиксируется ошибка переполнения.
DLL — регистр младшего байта делителя частоты.
D L M — регистр старшего байта делителя частоты. Делитель определяется по формуле D=115200/V, где V — скорость передачи, бит/с.
IER — регистр разрешения прерываний. Единичное значение бита разрешает прерывание от соответствующего источника.
IIR — регистр идентификации прерываний и признака режима FIFO (только для чтения).
FCR — регистр управления FIFO (только для записи).
Для упрощения программного анализа UART выстраивает внутренние запросы прерывания по четырехуровневой системе приоритетов. Порядок приоритетов (по убыванию): состояние линии, прием символа, освобождение регистра передатчика, состояние модема.
LSR — регистр состояния линии (точнее, состояния приемопередатчика).
MSR —регистр состояния модема.
MCR — регистр управления модемом
SCR — рабочий регистр (8 бит), на работу UART не влияет, предназначен для временного хранения данных (в 8250 отсутствует).
В диагностическом режиме (при LME=1) внутри UART организуется внутренняя «заглушка»:
· выход передатчика переводится в состояние логической единицы;
· вход приемника отключается.
СОМ-порты поддерживаются BIOS Int 14h, который обеспечивает следующие функции:
· инициализация (установка скорости обмена и формата посылок; запрет источников прерываний) — на сигналы DTR и RTS влияния не оказывает; (Управляющие сигналы интерфейса DTR и RTS переводятся в исходное состояние («выключено» — положительное напряжение).
· вывод символа — активируются сигналы DTR и RTS, и после освобождения регистра THR в него помещается выводимый символ;
· ввод символа — активируется только сигнал DTR (RTS переходит в пассивное состояние), и ожидается готовность принятых данных;
· опрос состояния модема и линии (чтение регистров MSR и LSR).
Аппаратные прерывания не используются, ожидание готовности ввода и вывода ограничивается по тайм-ауту. Готовность можно быстро проверить опросом состояния.
В процессе начального тестирования POST BIOS проверяет наличие последовательных портов (регистров UART 8250 или совместимых) по стандартным адресам и помещает базовые адреса обнаруженных портов в ячейки BIOS Data Area 0:0400, 0402, 0404, 0406. Эти ячейки хранят адреса портов с логическими именами СОМ1-COM4. Нулевое значение адреса является признаком отсутствия порта с данным номером. В ячейки О47С, 047D, 047Е, 047F заносятся константы, задающие тайм-ауты для портов.
Обнаруженные порты инициализируются на скорость обмена -
2400 бит/с, 7 бит данных с контролем на четность (even), 1 стоп-бит. Управляющие сигналы интерфейса DTR и RTS переводятся в исходное состояние («выключено» — положительное напряжение).