Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОМ-ПОРТ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
134.66 Кб
Скачать

Аппаратная реализация сом-портов

СОМ-порты ХТ/АТ базируются на микросхемах UART (Universal Asynchronus Receiver Transmitter) – универсальный асинхронный приёмопередатчик (УАПП). Эти микросхемы осуществляют преобразование параллельного кода в последовательный при передаче данных и обратное преобразование при приёме данных. Они формируют и обрабатывают управляющие сигналы интерфейса RS-232С (управление и состояние модема).

СОМ-порты ХТ/АТ используют микросхемы, совместимые на уровне регистров с UART i8250-8250/16450/16550А.

В компьютерах класса АТ применяют микросхемы UART следующих модификаций:

  • 16450 – быстродействующая версия 8250. Эта микросхема обеспечивает минимум, требуемый ОС/2 для работы с СОМ-портами;

  • 16550 – развитие 16450. Может использовать канал DMA для обмена данными. Имеет FIFO-буфер, но некорректность его работы не позволяет им воспользоваться;

  • 16550А – имеет работающие 16-байтные FIFO-буферы приёма и передачи и возможность использования DMA. Обеспечивает обмен на скоростях 9600 бит/с и выше без потери данных. Большинство универсальных микросхем контроллеров портов ввода/вывода, входящих в чипсеты современных системных плат обеспечивают совместимость с этой микросхемой.

С программной точки зрения UART 16550А представляет набор регистров, доступ к которым определяется адресом (смещением адреса регистра относительно базового адреса порта) и значением бита DLAB (бита 7 регистра LCR – регистр управления линией – настройки параметров канала). В адресном пространстве микросхема занимает 8 смежных адресов. Список регистров и способы доступа к ним приведены в таблице 3.

Таблица 3. Регистры UART 16550А

Доступ

Регистр

Чтение/запись R/W

смещение

DLAB

имя

название, назначение

0h

0

THR

Transmit Holding Register – промежуточный регистр данных передатчика

WO

0h

0

RBR

Receiver Buffer Register –буферный регистр принимаемых данных

RO

0h

1

DLL

Divisor Latch LSB – регистр младшего байта делителя частоты

R/W

1h

1

DLM

Divisor Latch MSB – регистр старшего байта делителя частоты

R/W

1h

0

IER

Interrupt Enable Register – регистр разрешения прерывания

R/W

2h

X

IIR

Interrupt Identification Register – регистр идентификации прерываний и признака режима FIFO

RO

2h

X

FCR

FIFO Control Register – регистр управления FIFO

WO

3h

X

LCR

Line Control Register – регистр управления линией (настройка параметров канала)

R/W

4h

X

MCR

Modem Control Register – регистр управления модемом

R/W

5h

X

LSR

Line Status Register – регистр состояния линии

R/W

6h

X

MSR

Modem Status Register – регистр состояния модема

R/W

7h

X

SCR

Scratch Pad Register – рабочий регистр (8 бит)

R/W

 Некоторые биты допускают только чтение. Запись в регистр может привести к сбою протокола.

Рассмотрим использование регистров UART 16550А.

THR – данные, записанные в этот регистр будут пересланы в выходной сдвигающий регистр (когда он будет свободен), из которого поступят на выход при наличии разрешающего сигнала CTS. Бит 0 передаётся и принимается первым. Если длина посылки менее 8 бит, старшие биты равны нулю (игнорируются).

RBR – заносятся данные, принятые входным сдвигающим регистром для последующего считывания процессором.

DLL, DLM – регистры делителя частоты. Делитель определяет по формуле D=115200/V, где V – скорость передачи, бит/с. Входная частота синхронизации 1,8432 МГц делится на заданный коэффициент, после чего получается 16-кратная частота передачи данных.

IER – регистр разрешения прерывания. Единичное значение бита разрешает прерывание от соответствующего источника:

биты 7-4 = 0 – не используются

бит 3 – по изменению состояния модема (любой из линий CTS, DSR, RI, DCD) – ModIE

бит 2 – по обрыву/ошибке линии - RхLIE

бит 1 – по завершению передачи - ТхDE

бит 0 – по приёму символа (в режиме FIFO – прерывание по тайм-ауту) – RxDIE

IIR – регистр идентификации (только для чтения) прерываний и признака режима FIFO. Для упрощения программного анализа UART выстраивает внутренние запросы прерывания по 4-х уровневой приоритетной системе. Порядок приоритетов (по убыванию): состояние линии, приём символа, освобождение регистра передатчика и состояние модема. При возникновении условий прерывания UART указывает на источник с высшим приоритетом до тех пор, пока он не будет сброшен соответствующей операцией. Только после этого будет выставлен запрос с указанием следующего источника:

биты 7:6 – признак режима FIFO:

11 – режим FIFO 16550A;

10 – режим FIFO 165550;

00 – обычный режим.

биты 5:4 – не используются;

бит 3 – прерывания по тайм-ауту (не в режиме FIFO);

биты 2:1 – причина прерывания с наивысшим приоритетом (не в режиме FIFO):

11 – ошибка/обрыв линии; сброс - чтением регистра состояния лини;

10 – принят символ; сброс – чтением данных;

01 – передан символ (регистр THR пуст); сброс – записью данных;

00 – изменение состояния модема; сброс – чтением регистра состояния модема.

бит 0 – признак необслуженного запроса прерывания:

1 – нет запроса 0 – есть запрос

В режиме FIFO причину прерывания идентифицируют биты (3:1):

011 – ошибка/обрыв линии; сброс – чтением регистра состояния линии;

010 - принят символ; сброс – чтением регистра данных приёмника;

110 – индикатор тайм-аута (за 4-х кратный интервал времени передачи символа не передано и не принято ни одного символа, хотя в буфере имеется, по крайней мере, один). Сброс – чтением регистра данных приёмника;

001 – регистр THR пуст; сброс – записью данных;

000 – изменение состояния модема (CTS, DSR, RI или DCD); сброс – чтением регистра MSR;

FCR – регистр управления FIFO (только для записи). Назначение бит:

биты 7:6 – ITL (Interrupt Trigger Level) – уровень заполнения FIFO – буфера, при котором вырабатывается прерывание:

00 – 1 байт;

01 – 4 байта;

10 – 8 байт;

11 – 14 байт;

биты 5:4 – зарезервированы;

бит 3 – разрешение операций DMA;

бит 2 сброс счётчика FIFO – передатчика (запись 1 – сбрасывает) сдвигающий регистр не сбрасывается;

бит 1 – то же, что и бит 2 для приёмника;

бит 0 – разрешение (1) режима FIFO для передатчика и приёмника;

LCR – регистр управления линией (настройка параметров канала):

бит 7 – DLAB (Divisor Latch Access Bit) – управление доступом к делителю частоты

бит 6 – формирование обрыва линии (посылка нулей при бит 6=1)

бит 5 – принудительное формирование бита паритета

0 – контрольный бит генерируется в соответствии с паритетом выводимого символа

1 – постоянное значение контрольного бита при чётности – нулевое, нечётности – единичное

бит 4 – выбор типа контроля

0 – нечётность, 1 – чётность

бит 3 – разрешение контрольного бита

1 – разрешение, 0 – запрещён

бит 2 – количество стоп-бит

0 – 1 стоп-бит, 1 – 2 стоп-бита

биты 1:0 – количество бит данных

00 – 5 бит, 01 – 6 бит,

10 – 7 бит, 11 – 8 бит

MCR – регистр управления модемом:

биты 7:5 – зарезервированы;

бит 4 – разрешение режима диагностики:

0 – нормальный режим;

1 – режим диагностики;

бит 3 – разрешение прерываний (с помощью внешнего входа OUT2):

0 – запрещены, 1 – разрешены

В диагностическом режиме поступает на вход MSR.7;

бит 2 – управление выходным сигналом 1 (не используется)

В диагностическом режиме поступает на вход MSR.6;

бит 1 – управление выходом RTS:

1 – активен (-V), 0 – пассивен (+V)

В диагностическом режиме поступает на вход MSR.5

LSR – регистр состояния приёмопередатчика:

бит 7 – ошибка принятых данных в режиме FIFO (буфер содержит хоть один символ принятый с ошибкой формата, паритета или обрывом). В не FIFO режиме всегда 0;

бит 6 – регистр передатчика пуст (нет данных для передачи ни в сдвиговом регистре, ни в буферных, THR или FIFO);

бит 5 – регистр передатчика готов принять байт для передачи. В режиме FIFO указывает на отсутствие символов в FIFO – буфере передачи. Вызывает прерывание;

бит 4 – индикатор обрыва линии (вход приёмника находится в состоянии логического нуля не менее, чем время посылки символа);

бит 3 – ошибка кадра (неверный стоп-бит);

бит 2 – ошибка контрольного бита (паритета или фиксирования);

бит 1 – переполнение (потеря символа);

бит 0 – принятые данные готовы. Сброс – чтением приёмника.

Индикаторы ошибок – биты 4:1 – сбрасываются после чтения регистра LSR.

MSR – регистр состояния модема:

биты 7,6,5,4 – состояние линий DCD, RI, DSR, CTS соответственно;

биты 3,2,1,0 – изменение состояний линий DCD, RI, DSR, CTS соответственно. Признаки изменения сбрасываются по чтению регистра;

SCR – рабочий регистр (8 бит) предназначен для временного хранения данных. На работу UART влияния не оказывает.

В диагностическом режиме (при бите 4 = 1 регистра MCR) внутри UART организуется внутренняя «заглушка»:

  • выход передатчика переводится в состояние логической единицы;

  • вход приёмника отключается;

  • выход сдвигающего регистра передатчика логически сдвигается со входом приёмника;

  • входы DSR, CTS, RI и DCD отключаются от входных линий, на них внутренне подаются сигналы DTRC, RTSR, OUT1C, IE;

  • выходы управления модемом переводятся в пассивное состояние (логический ноль).

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