Микросхемы асинхронных приемопередатчиков

в начало

Преобразование параллельного кода в последовательный для передачи и обратное преобразование при приеме данных выполняют специализированные микросхемы UART (Universal Asynchronous Receiver-Transmitter) универсальный асинхронный приемопередатчик (УАПП). Эти же микросхемы формируют и обрабатывают управляющие сигналы интерфейса (управление и состояние модема). COM-порты IBM PC XT/AT базируются на микросхемах, совместимых на уровне регистров с UART 18250 – 8250/16450/16550А. Это семейство представляет собой усовершенствования начальной модели, направленные на повышение быстродействия, снижение потребляемой мощности и загрузки процессора при интенсивном обмене.

Микросхемы 8250х имеют невысокое быстродействие по обращениям со стороны системной шины. Они не допускают обращения к своим регистрам в смежных шинных циклах процессора – для корректной работы с ними требуется введение программных задержек (команд JMP) между обращениями CPU. В компьютерах класса АТ применяют микросхемы UART следующих модификаций:

- 16450 – быстродействующая версия 8250 для АТ. Ошибок 8250 и полной совместимости с XT BIOS не имеет. Эта микросхема является миниму­мом, требуемым для работы OS/2 с COM-портами.

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

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

Микросхемы UART 16550А с программной точки зрения представляют собой набор регистров, доступ к которым определяется адресом (смещением адреса регистра относительно базового адреса порта) и значением бита ВЬАВ (бита 7 регистра ЬСК). В адресном пространстве микросхема занимает 8 смеж­ных адресов. Список регистров 11АКТ 16550А и способы доступа к ним при­ведены в таблице 3.7.

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

Доступ Регистр Чтение/запись R/W
Смещение DLAB Имя Название  
Оh THR Transmit Holding Register WO
Оh RBR Receiver Buffer Register RO
Оh DLL Divisor Latch LSB R/W
Lh DLM Divisor Latch MSB R/W
Ih IER Interrupt Enable Register R/W
2h X IIR Interrupt Identification RO
2h X FCR FIFO Control Register WO
Зh 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 R/W

 

Микросхемы 8250 отличаются от приведенного ниже описания отсутствием регистра РСК и всех возможностей ПРО и ВМА (и со­ответствующих им бит регистров).

- THR (Transmit Holding Register) – промежуточный регистр данных передатчика (только для записи). Данные, записанные в этот регистр, будут пересланы в выходной сдвигающий регистр (когда он будет свободен), из которого поступят на выход при наличии разрешающего сигнала CTS. Бит О передается (и принимается) первым. При длине посылки менее 8 бит старшие биты игнорируются.

- RBR (Receiver Buffer Register) – буферный регистр принимаемых данных (только для чтения). Данные, принятые входным сдвигающим регистром, помещаются в регистр RBR, откуда они могут быть считаны процессором. Если к моменту окончания приема очередного символа предыдущий не был считан из регистра RBR, фиксируется ошибка переполнения. При длине посылки менее 8 бит старшие (липшие) биты в регистре имеют нулевое значение.

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

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

- IER (Interrupt Enable Register) – регистр разрешения прерываний. Единичное значение бита разрешает прерывание от соответствующего источника:

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

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

Бит 2 – RxL IE – по обрыву/ошибке линии.

Бит 1 – TxD IE – по завершении передачи.

Бит 0 – RxD IE – по приему символа (в режиме FIFO – прерывание по тайм-ауту).

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

Биты [7:6] – признак режима Р1РО:

11 – режим FIFO 16550А, 10 – режим FIFO 16550, 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 Control Register) – регистр управления FIFO (только для записи). Назначение бит:

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

00 – 1 байт (по умолчанию);

01 – 4 байта;

10 – 8 байт;

11 – 14 байт.

Биты [5:4] зарезервированы.

Бит 3 – разрешение операций DMA.

Бит 2 – RESETTF (Reset Transmitter FIFO) – сброс счетчика FIFO-передатчика. Запись единицы в этот бит приводит к сбросу счетчика FIFO (сдвигающий регистр не сбрасывается).

Бит 1 – RESETRF (Reset Receiver FIFO) – сброс счетчика FIFO-приемника. Запись единицы в этот бит приводит к сбросу счетчика FIFO (сдви­гающий регистр не сбрасывается).

Бит 0 – TRFIFOE (Transmit And Receive FIFO Enable) – разрешение (единицей) режима FIFO для передатчика и приемника. При смене режима FIFO-буферы автоматически очищаются.

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

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

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

Бит 5 – STICPAR (Sticky Parity) – принудительное формирование бита паритета:

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

1 – постоянное значение контрольного бита:

при EVENPAR=1 – нулевое, при EVENPAR=0 – единичное.

Бит 4 – EVENPAR (Even Parity Select) – выбор типа контроля: 0 – нечетность, 1 – четность.

Бит 3 – PAREN (Parity Enable) – разрешение контрольного бита:

1 – контрольный бит (паритет или постоянный) разрешен, 0 – запрещен.

Бит 2 – STOPS (Stop Bits) – количество стоп-бит:

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

1 – 2 стоп-бита (для 5-битного кода стоп-бит будет иметь длину 1,5 бит).

Биты [1:0] SERIALDB (Serial Data Bits) – количество бит данных:

00 – 5 бит,

01 – 6 бит.

10 – 7 бит,

11 – 8 бит.

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

Биты [7:5]=0 – зарезервированы.

Бит 4 – LME (Loopback Mode Enable) – разрешение режима диагностики:

0 – нормальный режим, 1 – режим диагностики (см. ниже).

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

0 – прерывания запрещены,

1 – разрешены.

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

Бит 2 – OUT1C (OUT1 Bit Control) – управление выходным сигналом 1 (не используется). В диагностическом режиме поступает на вход MSR.6.

Бит 1 – RTSC (Request To Send Control) – управление выходом RTS:

1 – активен (-V), 0 – пассивен (+V). В диагностическом режиме поступает на вход MSR.4.

Бит 0 – DTRC (Data Terminal Ready Control) – управление выходом DTR:

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

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

- LSR (Line Status Register) – регистр состояния линии (точнее, состояния приемопередатчика):

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

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

Бит 5 – THRE (Transmitter Holding Register Empty) – регистр передатчика готов принять байт для передачи. В режиме FIFO указывает на отсутствие символов в FIFO-буфере передачи. Вызывает прерывание.

Бит 4 – BD (Break Detected) – индикатор обрыва линии (вход приемника находится в состоянии лог. 0 не менее, чем время посылки символа).

Бит 3 – FE (Framing Error) – ошибка кадра (неверный стоп-бит).

Бит 2 – PE (Parity Error) – ошибка контрольного бита (паритета или фиксированного).

Бит 1 – OE (Overrun Error) – переполнение (потеря символа). Если прием очередного символа начинается до того, как предыдущий был выгружен из сдвигающего регистра в буферный или FIFO, прежний символ в сдвигающем регистре теряется.

Бит 0 – DR (Received Data Ready) – принятые данные готовы (в DHR или FIFO-буфере). Сброс – чтением приемника.

Индикаторы ошибок – биты [4:1] – сбрасываются после чтения регистра LSR. В режиме FIFO признаки ошибок хранятся в FIFO-буфере вместе с каждым символом. В регистре они устанавливаются (и вызывают прерывание) в тот момент, когда символ, принятый с ошибкой, находится на вершине FIFO (первый в очереди на считывание). В случае обрыва линии в FIFO заносится только один “обрывной” символ, и UART ждет восстановления и последующего старт-бита.

- MSR (Modem Status Register) – регистр состояния модема:

Бит 7 – DCD (Data Carrier Detect) – состояние линии DCD.

Бит 6 – RI (Ring Indicator) – состояние линии RI.

Бит 5 – DSR (Data Set Ready) – состояние линии DSR.

Бит 4 – CTS (Clear To Send) – состояние линии CTS.

Бит 3 – DDCD (Delta Data Carrier Detect) – изменение состояния DCD.

Бит 2 – TERI (Trailing Edge Of Ring Indicator) – спад огибающей RI (окончание звонка).

Бит 1 – DDSR (Delta Data Set Ready) – изменение состояния DSR.

Бит 0 – DCTS (Delta Clear To Send) – изменение состояния CTS.

Признаки изменения – биты [3:0] – сбрасываются по чтению регистра.

- SCR (Scratch Pad Register) – рабочий регистр (8 бит), на работу UART не влияет, предназначен для временного хранения данных (в 8250 отсутствует).

В диагностическом режиме (при LME=1) внутри UART организуется внутренняя “заглушка” (loopback):

- Выход передатчика переводится в состояние лог. 1.

- Вход приемника отключается.

- Выход сдвигающего регистра передатчика логически соединяется со входом приемника.

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

- Выходы управления модемом переводятся в пассивное состояние (лог. 0).

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