Микросхемы асинхронных приемопередатчиков
2.5.2. Микросхемы асинхронных приемопередатчиков
Преобразование параллельного кода в последовательный для передачи и обратное преобразование при приеме данных вы- полняют специализированные микросхемы UART (Universal Asynchronous Receiver-Transmitter - универсальный асинхрон- ный приемопередатчик). Эти же микросхемы формируют и обрабатывают управляющие сигналы интерфейса. СОМ-пор- ты IBM PC XT/AT базируются на микросхемах, совместимых на уровне регистров с UART 18250 - 8250/16450/16550А. Это семейство представляет собой усовершенствование начальной модели, направленное на повышение быстродействия, сниже- ние потребляемой мощности и загрузки процессора при ин- тенсивном обмене. Отметим следующее:
т 8250 имеет ошибки (появление ложных прерываний), учтенные в XT BIOS.
"; 8250А - ошибки исправлены, в результате чего потеряна совместимость с BIOS. Работает в некоторых моделях AT, но непригоден для скорости 9600 бит/с.
т 8250В - исправлены ошибки 8250 и 8250А, восстановле- на ошибка в прерываниях - возвращена совместимость с XT BIOS. Работает в AT под DOS (кроме скорости 9600 бит/с).
Микросхемы 8250х имеют невысокое быстродействие по об- ращениям со стороны системной шины. Они не допускают обращения к своим регистрам в смежных шинных циклах процессора - для корректной работы с ними требуется вве- дение программных задержек между обращениями CPU.
В компьютерах класса AT применяют микросхемы UART следующих модификаций:
а? 16450 - быстродействующая версия 8250 для AT. Оши- бок 8250 и полной совместимости с XT BIOS не имеет. Требуется для работы OS/2 с СОМ-портами.
16550 - развитие 16450. Может использовать канал DMA для обмена данными. Имеет FIFO-буфер, но некорректность его работы не позволяет им воспользо- ваться.
т 16550А - имеет работающие 16-байтные FIFO-буферы приема и передачи и возможность использования DMA. Именно этот тип UART должен применяться в AT при интенсивных обменах на скоростях 9600 бит/с и выше. Совместимость с этой микросхемой обеспечивает боль- шинство микросхем контроллеров портов ввода/вывода, входящих в современные чипсеты.
Микросхемы UART 16550А с программной точки зрения представляют собой набор регистров, доступ к которым определяется адресом (смещением адреса регистра относи- тельно базового адреса порта) и значением бита DLAB (бита 7 регистра LCR). В адресном пространстве микросхема зани- мает 8 смежных адресов. Список регистров UART 16550А и способы доступа к ним приведены в табл. 2.6. Микросхе- мы 8250 отличаются отсутствием регистра FCR и всех воз- можностей FIFO и DMA.
Доступ |
Регистр |
Чтение/запись R/W |
||
Смещение |
DLAB |
Имя |
Название |
|
Oh |
0 |
THR |
Transmit Holding Register |
WO |
Oh |
0 |
RBR |
Receiver Buffer Register |
RO |
Oh |
1 |
DLL |
Divisor Latch LSB |
R/W |
Ih |
1 |
DLM |
Divisor Latch MSB |
R/W |
Ih |
0 |
IER |
Interrupt Enable Register |
R/W |
2h |
X |
IIR |
Interrupt Identification Register |
RO |
2h |
X |
FCR |
FIFO Control Register |
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 |
R/W |
THR - промежуточный регистр данных передатчика (только для записи). Данные, записанные в регистр, будут пересланы в выходной сдвигающий регистр (когда он будет свободен), из которого поступят на выход при наличии разрешающего сигнала CTS. Бит 0 передается (и принимается) первым. При длине посылки менее 8 бит старшие биты игнорируются.
RBR - буферный регистр принимаемых данных (только для чтения). Данные, принятые входным сдвигающим регистром, помещаются в регистр RBR, откуда они могут быть считаны процессором. Если к моменту окончания приема очередно- го символа предыдущий не был считан из регистра, фикси- руется ошибка переполнения. При длине посылки менее 8 бит старшие биты в регистре имеют нулевое значение.
DLL - регистр младшего байта делителя частоты.
DLM - регистр старшего байта делителя частоты. Делитель определяется по формуле D==115200/V, где V - скорость пе-
редачи, бит/с. Входная частота синхронизации 1,8432 МГц делится на заданный коэффициент, после чего получается 16-кратная частота передачи данных.
IER - регистр разрешения прерываний. Единичное значение бита разрешает прерывание от соответствующего источника.
Назначение бит регистра IER:
Биты 7-4=0 - не используются.
Бит 3 - Mod IE-no изменению состояния модема (лю- бой из линий CTS, DSR, Rl, DCD).
йа Бит 2 - RxL IE-no обрыву/ошибке линии. Бит 1 - TxD IE - по завершении передачи.
ай Бит 0 - RxD IE-no приему символа (в режиме FIFO - прерывание по тайм-ауту).
IIR - регистр идентификации (только для чтения) прерыва- ний и признака режима FIFO. Для упрощения программного анализа UART выстраивает внутренние запросы прерывания по четырехуровневой системе приоритетов. Порядок приори- тетов (по убыванию): состояние линии, прием символа, осво- бождение регистра передатчика, состояние модема. При воз- никновении условий прерывания UART указывает на источник с высшим приоритетом до тех пор, пока он не будет сброшен соответствующей операцией. Только после этого будет выставлен запрос с указанием следующего источника.
Назначение бит регистра IIR:
Биты [7:6] - признак режима FIFO:
11 -режим FIFO 16550A,
10 - режим FIFO 16550,
00 - обычный.
Биты [5:4] - не используются. :в? Бит 3 - прерывание по тайм-ауту (не в режиме FIFO).
т Биты [2:1] - причина прерывания с наивысшим приори- тетом (в обычном, не FIFO-режиме):
11 - ошибка/обрыв линии; сброс - чтением регистра со- стояния линии,
10 - принят символ; сброс - чтением данных, 01 - передан символ (регистр THR пуст); сброс - запи- сью данных,
00 - изменение состояния модема; сброс - чтением ре- гистра состояния модема.
Бит 0 - признак необслуженного запроса прерывания:
1 - нет запроса, О -есть запрос.
Идентификация прерываний в режиме FIFO, IIR [3:1]:
Oil - ошибка/обрыв линии; сброс - чтением регистра состояния линии.
010 - принят символ; сброс - чтением регистра данных приемника.
110 - индикатор тайм-аута (за 4- кратный интервал вре- мени символа не передано и не принято ни одного сим- вола, хотя в буфере имеется по крайней мере один). Сброс - чтением регистра данных приемника.
001 - регистр THR пуст; сброс - записью данных.
000 - изменение состояния модема (CTS, DSR, R1 или DCD), сброс - чтением регистра MSR.
FCR - регистр управления FIFO (только для записи). Назначение бит регистра FCR:
Биты [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-передатчика (записью единицы; сдвигающий регистр не сбрасывается).
Бит 1 - RESETRFfReset Receiver FIFO) - сброс счетчика FIFO-приемника (записью единицы; сдвигающий регистр не сбрасывается).
- Бит 0 - TRFIFOE(Transmit And Receive FIFO Enable) - раз- решение (единицей) режима FIFO для передатчика и приемника. При смене режима FIFO-буферы автомати- чески очищаются.
LCR - регистр управления линией (настройки параметров канала).
Назначения бит регистра LCR:
Бит 7 - DLAB (Divisor Latch Access Bit) - управление до- ступом к делителю частоты.
Бит 6 - BRCON( Break Control) - формирование обрыва линии (посылка нулей) при BRCON=i.
Бит 5 - STICPARf Sticky Parity) - принудительное форми- рование бита паритета:
О - контрольный бит генерируется в соответствии с па- ритетом выводимого символа,
1 - постоянное значение контрольного бита: при lEVENPARi - нулевое, при EVENPAFfO - единичное.
s® Бит 4 - EVENPARf Even Parity Select) - выбор типа конт- роля: 0 - нечетность, 1 - четность.
т Бит 3 - PAREN( Parity Enable) - разрешение контрольно- го бита:
1 - контрольный бит (паритет или постоянный) разре- шен,
О - запрещен. is Бит 2 - STOPS (Stop Bits) - количество стоп-бит:
0-1 стоп-бит,
1-2 стоп-бита (для 5-битного кода стоп-бит будет иметь длину 1,5 бита).
т Биты [1:0] - SERIALDBf Serial Data Bits) - количество бит данных:
00 -5 бит, 01 -6 бит, 10 -7 бит, 11 -8 бит.
MCR - регистр управления модемом. Назначение бит регистра MCR-.
ш Биты [7:5]=0 - зарезервированы.
*§ Бит 4 - LME(Loopback Mode Enable) - разрешение режи- ма диагностики:
О - нормальный режим, 1 - режим диагностики (см. ниже).
ж Бит 3 - 1Е( Interrupt Enable) - разрешение прерываний с помощью внешнего выхода OUT2; в режиме диагностики поступает на вход MSR. 7:
О - прерывания запрещены, 1 - разрешены.
Бит 2 - OUT1C(OUT1 Bit Control) - управление выходным сигналом 1 (не используется); в режиме диагностики по- ступает на вход MSR.6.
Бит 1 - RTSC (Request To Send Control) - управление
выходом RTS; в режиме диагностики поступает на вход
MSR.4:
1 - активен (-V),
О - пассивен (+V). Бит 0 - DTRCfData Terminal Ready Control) - управление
выходом DTR; в режиме диагностики поступает на вход
MSR.5:
1 - активен (-V),
О - пассивен (+V).
LSR - регистр состояния линии (точнее, состояния приемо- передатчика).
Назначение бит регистра LSR:
Бит 7 - FIFOE( FIFO Error Status) - ошибка принятых дан- ных в режиме FIFO (буфер содержит хотя бы один сим- вол, принятый с ошибкой формата, паритета или обры- вом). В ne-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 - РЕ (Parity Error) - ошибка контрольного бита (па- ритета или фиксированного).
Бит 1 - ОЕ(Overrun Error) - переполнение (потеря сим- вола). Если прием очередного символа начинается до того, как предыдущий был выгружен из сдвигающего регист- ра в буферный или FIFO, прежний символ в сдвигаю- щем регистре теряется.
Бит 0 - DR(Receiver Data Ready) - принятые данные гото- вы (в DHR или FIFO-буфере). Сброс - чтением приемника.
Индикаторы ошибок - биты [4:1] - сбрасываются после чте- ния регистра LSR. В режиме FIFO признаки ошибок хранят- ся в FIFO-буфере вместе с каждым символом. В регистре они устанавливаются (и вызывают прерывание) в тот момент, когда символ, принятый с ошибкой, находится на вершине FIFO (первый в очереди на считывание). В случае обрыва линии в FIFO заносится только один "обрывной" символ, и UART ждет восстановления и последующего старт-бита.
MSR - регистр состояния модема. Назначение бит регистра MSR:
т Бит 7 - DCD (Data Carrier Detect) - состояние линии DCD. та Бит 6 - Rl(Ring Indicator) - состояние линии Rl. ак Бит 5 - DSR(Data Set Ready) - состояние линии DSR. ss Бит 4 - CTS(Clear To Send) - состояние линии CTS.
т Бит 3 - DDCD(Delta Data Carrier Detect) - изменение со- стояния DCD.
ss Бит 2 - TERI(Trailing Edge OfRing Indicator) -спад огиба- ющей Rl (окончание звонка).
Бит 1 - DDSR (Delta Data Set Ready) - изменение состоя- ния DSR.
ss? Бит 0 - DCTS (Delta Clear To Send) - изменение состоя- ния CTS.
Признаки изменения (биты [3:0]) сбрасываются по чтению регистра.
SCFt - рабочий регистр (8 бит), на работу UART не влияет, предназначен для временного хранения данных (в 8250 от- сутствует).
В диагностическом режиме (при LME=i) внутри UART орга- низуется внутренняя заглушка:
Выход передатчика переводится в состояние логической 1. Вход приемника отключается.
Выход сдвигающего регистра передатчика логически со- единяется со входом приемника.
Входы DSR, CTS, RI и DCD отключаются от входных линий и внутренне управляются битами DTRC, RTSC, OUT1C, IE.
• Выходы управления модемом переводятся в пассивное состояние (логический ноль).
Переданные данные в последовательном виде немедленно принимаются, что позволяет проверять внутренний канал данных порта (включая сдвигающие регистры) и отработку прерываний, а также определять скорость работы UART.