
- •Лабораторная работа Исследование портов последовательной передачи данных
- •Последовательный интерфейс
- •Интерфейс rs-232с
- •Аппаратная реализация сом-портов
- •Средства bios для работы с сом-портами
- •Стандартные функции библиотеки Си
- •Варианты индивидуальных заданий к лабораторной работе «Исследование порта последовательной передачи данных»
- •Порядок выполнения работы
- •Содержание отчёта
- •Контрольные вопросы
- •Литература
Аппаратная реализация сом-портов
СОМ-порты ХТ/АТ базируются на микросхемах 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.