ПОРТ ПОСЛЕДОВАТЕЛЬНОЙ ПЕРЕДАЧИ ДАННЫХ
.docПОРТ ПОСЛЕДОВАТЕЛЬНОЙ ПЕРЕДАЧИ ДАННЫХ
Основные понятия.
Компьютер IBM PC имеет по крайней мере один порт последователь-
ной передачи данных, поддерживающий интерфейс RS-232-C (точнее,
подмножество сигналов этого интерфейса). Простота этого интерфейса
и его высокая помехоустойчивость способствуют его широкому примене-
нию для подключения к ПЭВМ как стандартных (мышь, модем, ...), так
и нестандартных периферийных устройств.
При последовательной передаче данные передаются по одному про-
воду поочередно бит за битом. Передача данных сопровождается на-
чальным стартовым синхробитом, битом контроля четности, следующим
за битами данных, и одним или двумя стоповыми битами в конце посыл-
ки (Рис.1).
──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬───
├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤ │ │
Ст 0 1 2 3 4 5 6 7 К Стоп
│мл. Биты данных ст.│
Рис. 1.
Количество передаваемых в посылке бит данных, наличие или от-
сутствие контрольного бита К, вид контроля (четность/нечетность),
количество стоповых бит, скорость передачи могут изменяться при
настройке порта. Естественно, эти параметры должны быть одинаковыми
на передающей и приемной сторонах.
Аппаратная реализация.
В основе последовательного порта передачи данных лежит микрос-
хема Intel 8250 - универсальный асинхронный приемопередатчик. Мик-
росхема имеет несколько внутренних регистров, адресуемых командами
ввода/вывода. Внешние устройства подключаются к линиям интерфейса
через разъемы, имеющие 9 или 25 контактов. Уровни напряжений на ли-
ниях: -15 вольт для логического нуля и +15 вольт для логической
единицы. Распределение линий по контактам разъемов приведено в
Табл. 1. Управление сигналами на линиях и опрос их состояния прог-
раммируются.
.
- 2 -
Табл. 1.
───────────┬──────────────────────────────────────────────┬────────
25 9 │ Назначение контакта │вход или
конт. конт.│ │выход
─────┬─────┼──────────────────────────────────────────────┼────────
1 │ - │ Защитное заземление (корпус) │ -
2 │ 3 │ Передаваемые данные TxD (Transmitted Data) │ Выход
3 │ 2 │ Принимаемые данные RxD (Received Data) │ Вход
4 │ 7 │ Запрос для передачи RTS (Request To Send) │ Выход
5 │ 8 │ Сброс для передачи CTS (Clear To Send) │ Вход
6 │ 6 │ Готовность данных DSR (Data Set Ready) │ Вход
7 │ 5 │ Сигнальное заземление SG (Signal Ground) │ -
8 │ 1 │ Детектор принимаемого с линии сигнала DCD │ Вход
│ │ (Data Carrier Detect) │
20 │ 4 │ Готовность выходных данных (DTR) │ Выход
│ │ (Data Terminal Ready) │
22 │ 9 │ Индикатор вызова RI (Ring Indicator) │ Вход
─────┴─────┴──────────────────────────────────────────────┴────────
Порты асинхронного адаптера.
Первый адаптер COM1 имеет базовый адрес 3F8h и занимает диапа-
зон адресов от 3F8h до 3FFh. Второй адаптер COM2 имеет базовый ад-
рес 2F8h и занимает диапазон адресов от 2F8h до 2FFh.
Асинхронные адаптеры подключены к линиям прерывания: COM1 к
IRQ4 (соответствует INT 0Ch), COM2 к IRQ3 (соответствует INT 0Bh).
Рассмотрим назначение портов адаптера.
Порт 3F8h соответствует регистрам данных. При передаче в него
заносятся передаваемые данные, при приеме из него читаются принятые
данные. Следует заметить, что это два разных регистра. В режиме
инициализации адаптера через этот порт передается младший байт де-
лителя частоты для установки скорости передачи.
Порт 3F9h в рабочем режиме используется для установки регистра
управления прерываниями. В режиме инициализации адаптера через этот
порт передается старший байт делителя частоты для установки скорос-
ти передачи. Формат этого регистра в рабочем режиме:
биты 0=1 - разрешение прерывания при готовности принимаемых данных;
1=1 - разрешение прерывания после передачи байта;
- 3 -
2=1 - разрешение прерывания по обнаружении состояния "BREAK"
или по ошибке;
3=1 - разрешение прерывания по изменению состояния входных ли-
ний CTS,DSR,RI,DCD на разъеме;
4-7 - не используются, должны быть равны 0.
Порт 3FAh связан с регистром идентификации прерываний. Формат
регистра:
биты 0 = 1 - нет прерываний, ожидающих обслуживания;
2,1 = 00 - прерывание по линии состояния приемника, возникает
при переполнении приемника, ошибках четности или
формата данных или при состоянии "BREAK";
сбрасывается после чтения состояния линии из порта
3FDh;
01 - данные приняты и доступны для чтения, сбрасывается
после чтения данных из порта 3F8h;
10 - буфер передатчика пуст, сбрасывается после записи
данных в порт 3F8h;
11 - состояние модема, устанавливается при изменении
состояния входных линий CTS, RI, DCD, DSR, сбрасы-
вается после чтения состояния модема из порта 3FEh;
7..3 - не используются, равны 0.
Порт 3FBh соответствует регистру управления и доступен по запи-
си и чтению. Формат регистра:
биты 1,0 = 00 - 5 бит │ длина слова в битах;
01 - 6 бит │
10 - 7 бит │
11 - 8 бит │
2 = 0 - 1 бит │ количество стоповых бит;
1 - 2 бита │
4,3 = x0 - контроль на четность не используется;
01 - контроль на нечетность;
11 - контроль на четность;
5 - фиксация четности. При установке этого бита бит четности
всегда принимает значение 0, если биты 4,3 = 11, или 1,
если биты 4,3 = 01;
6 - установка перерыва. Вызывает вывод строки нулей в ка-
честве сигнала "BREAK" для подключенного устройства;
7 = 1 - порты 3F8h и 3F9h используются для загрузки делителя
- 4 -
частоты;
0 - порты используются как обычно для рабочего режима.
Порт 3FCh соответствует регистру управления модемом. Он управ-
ляет состоянием выходных линий DTR и RTS, а также специфических для
модемов линий OUT1 и OUT2, и запуском диагностики. Формат порта:
биты 0 - линия DTR;
1 - линия RTS;
2 - линия OUT1; │ резервные линии;
3 - линия OUT2; │
4 - запуск диагностики при входе замкнутом на выход адаптера;
7..5 - не используются, должны быть равны 0.
Порт 3FDh связан с регистром состояния линии. Формат порта:
биты 0 - данные получены и готовы для чтения, сбрасывается при чте-
нии данных;
1 - ошибка переполнения; был принят новый байт данных, а пре-
дыдущий еще не был считан программой (потерян);
2 - ошибка четности, сбрасывается после чтения состояния линии;
3 - ошибка синхронизации;
4 - обнаружен запрос на прерывание передачи "BREAK" длинная
строка нулей;
5 - регистр хранения передатчика пуст, в него можно записать
новый байт данных;
6 - регистр сдвига передатчика пуст;
7 - тайм-аут (устройство не связано с компьютером).
Порт 3FEh связан с регистром состояния модема. Формат порта:
биты 0 - линия CTS изменила состояние;
1 - линия DSR изменила состояние;
2 - линия RI изменила состояние;
3 - линия DCD изменила состояние;
4 - состояние линии CTS;
5 - состояние линии DSR;
6 - состояние линии RI;
7 - состояние линии DCD.
Программирование асинхронного адаптера.
Для программирования асинхронного адаптера будем использовать
перечисленные выше порты ввода/вывода.
- 5 -
Вначале нужно выполнить инициализацию асинхронного адаптера,
т.е. задать его программируемые параметры: скорость передачи, коли-
чество бит в слове, параметры контроля четности, количество стопо-
вых бит. Текущее значение этих параметров можно узнать, прочитав
порт 3FBh. Для установки нового режима нужно изменить соответствую-
щие поля байта режима и записать его в порт 3FBh. Для установки за-
данной скорости обмена нужно вначале установить старший бит этого
байта в 1. Затем последовательно двумя командами вывода нужно заг-
рузить делитель частоты. Младший байт записывается в порт 3F8h,
старший - в порт 3F9h. Соответствие скорости передачи и содержимого
делителя частоты приведено в Табл.2.
Табл. 2.
─────────────┬────────────────────╥───────────┬────────────────────
Делитель │Скорость передачи ║ Делитель │Скорость передачи
│ в бодах ║ │ в бодах
─────────────┼────────────────────╫───────────┼────────────────────
1040 │ 110 ║ 24 │ 4800
768 │ 150 ║ 12 │ 9600
384 │ 300 ║ 6 │ 19200
192 │ 600 ║ 3 │ 38400
96 │ 1200 ║ 2 │ 57600
48 │ 2400 ║ 1 │ 115200
После установки скорости передачи нужно установить старший бит
байта режима в 0. Кроме этого, необходимо проинициализировать ре-
гистр управления прерыванием (порт 3F9h), даже если в программе не
используется прерывание, в него нужно записать 0. На этом инициали-
зация заканчивается.
Передача данных. Перед записью байта данных в регистр передат-
чика нужно убедиться, что регистр хранения передатчика свободен.
Признаком этого является установленный в 1 бит 5 регистра состояния
линии (3FDh).
Прием данных. Перед вводом байта из регистра приемника следует
убедиться, что он принят из линии. Признаком этого является уста-
новленный в 1 бит 0 бит регистра состояния линии (3FDh).