Порты асинхронного адаптера
Лабораторная работа №5
Тема: «Асинхронный последовательный адаптер»
Цель работы:Ознакомление с работой функций MS-DOS работы с асинхронным последовательным адаптером.
Теоретические сведения:
Последовательная передача данных предполагает, что данные передаются с использованием единственной линии. При этом биты байта данных передается по очереди с использованием одного провода.
Для синхронизации группе битов обычно предшествует специальный стартовый бит. После группы битов данных следует бит проверки на четность и один или два стоповых бита. Иногда бит проверки на четность может отсуствовать.
Исходное состояние линии последовательной передачи данных - уровень логической 1. Стартовый бит START сигнализирует о начале передачи данных. Далее передаются биты данных, вначале младшие, затем старшие. Если используется бит четности P, то передается и он. Бит четности имеет такое значение, чтобы в пакете битов общее количество единиц (или нулей) было четно или нечетно.
В самом конце передаются один или два стоповых бита STOP, завершающих передачу байта. Затем уровень линии передачи снова устанавливается в 1 до прихода следующего стартового бита.
Использование четности, стартовых и стоповых битов определяют протокол передачи данных. Очевидно, что передатчик и приемник данных должны использовать один и тот же протокол, иначе связь будет невозможной.
Другая важная характеристика - скорость передачи данных. Она также должна быть одинаковой для передатчика и приемника.
Скорость передачи данных обычно измеряется в бодах. Боды - это количество передаваемых бит в секунду. При этом учитываются и старт/стопные биты, а также бит четности.
В технической литературе и в различной документации документации вы можете встретить и другой термин - биты в секунду (bps). Здесь имеется в виду эффективная скорость передачи данных без учета временных затрат на передачу служебных битов.
Аппаратная реализация
Компьютер может быть оснащен одним или двумя асинхронными последовательными адаптерами. Эти адаптеры расположены либо на системной плате, либо (в старых компьютерах) на отдельной плате, вставляемой в разъемы расширения системной платы.
Бывают также платы расширения, содержащие 4, 8 или большее количество асинхронных последовательных адаптеров. Их часто используют для подключения нескольких модемов к одному компьютеру.
Микросхема UART
В основе последовательного порта передачи данных лежит микросхема Intel 8250 или более современные микросхемы, такие как 16450, 16550, 16550A. Это универсальный асинхронный приемо-передатчик (UART - Universal Asynchronous Receiver Transmitter). Микросхема содержит несколько внутренних регистров, доступных через команды ввода/вывода.
В микросхеме 8250 есть регистры передатчика и приемника данных. При передаче выходной байт записывается в буферный регистр передатчика, откуда затем переписывается в сдвиговый регистр передатчика. После этого байт выдвигается из сдвигового регистра по битам.
Аналогично работают сдвиговый и буферный регистры приемника.
Программа имеет доступ только к буферным регистрам, копирование информации в сдвиговые регистры и процесс сдвига выполняется микросхемой UART автоматически.
Порты асинхронного адаптера
На этапе инициализации системы BIOS тестирует имеющиеся асинхронные последовательные адаптеры и инициализирует первые два. Их базовые адреса располагаются в области данных BIOS начиная с адреса 0000:0400h.
Первый адаптер COM1 имеет базовый адрес 3F8h и занимает диапазон адресов от 3F8h до 3FFh, второй адаптер COM2 имеет базовый адрес 2F8h и занимает адреса 2F8h...2FFh.
Асинхронные адаптеры могут вырабатывать прерывания:
· COM1 - IRQ4 (соответствует INT 0Ch);
· COM2 - IRQ3 (соответствует INT 0Bh)
Порт 3F8h
Порт 3F8h соответствует регистру данных. Для передачи необходимо записать в этот порт передаваемый байт данных. После приема данных от внешнего устройства они могут быть прочитаны порта 3F8h.
В зависимости от состояния старшего бита управляющего слова, записываемого в управляющий регистр с адресом 3FBh, назначение порта 3F8h может изменяться. Если этот бит сброшен, порт используется для записи передаваемых данных. Если же бит установлен, порт используется для вывода значения младшего байта делителя частоты тактового генератора.
Изменяя содержимое делителя, можно изменять скорость передачи данных. Старший байт делителя записывается в порт 3F9h.
Зависимость скорости передачи данных от значения делителя частоты представлена ниже:
Делитель | Скорость передачи в бодах |
Порт 3F9h
Порт 3F9h используется либо как регистр управления прерываниями от асинхронного адаптера либо (после вывода в порт 3F9h байта с установленным старшим битом) для вывода значения старшего байта делителя частоты тактового генератора.
В режиме регистра управления прерываниями порт имеет следующий формат:
Поле | Описание |
Разрешение прерывания при готовности принимаемых данных | |
Разрешение прерывания после передачи байта, когда выходной буфер передачи пуст | |
Разрешение прерывания по обнаружению состояния BREAK или при возникновении ошибке | |
Разрешение прерывания по изменению состояния входных линий на разъеме RS232-C (CTS, DSR, RI, DCD) | |
4-7 | Не используются, должны быть равны 0 |
Порт 3FAh
Порт 3FAh представляет собой регистр идентификации прерывания. Считывая его содержимое, программа может определить причину прерывания.
Формат регистра:
Поле | Описание |
1 - Нет прерываний, ожидающих обслуживания | |
1-2 | 00 - Прерывание по линии состояния приемника, возникает при переполнении приемника, ошибках четности или формата данных или при состоянии "BREAK". Сбрасывается после чтения состояния линии из порта 3FDh; 01 - Данные приняты и доступны для чтения. Сбрасывается после чтения данных из порта 3F8h; 10 - Буфер передатчика пуст. Сбрасывается при записи новых данных в регистр данных передатчика, порт 3F8h; 11 - Состояние модема. Устанавливается при изменении состояния входных линий CTS, RI, DCD, DSR. Сбрасывается после чтения состояния модема из порта 3FEh |
3-7 | Должно быть равно 0 |
Порт 3FBh
Порт 3FBh – это управляющий регистр, доступен по записи и чтению.
Формат регистра:
Поле | Описание |
0-1 | Длина слова в битах: 00 - 5 бит; 01 - 6 бит; 10 - 7 бит; 11 - 8 бит |
Количество стоповых бит: 0 - 1 бит; 1 - 2 бита | |
3-4 | Четность: X0 - контроль на четность не используется; 01 - контроль на нечетность; 11 - контроль на четность |
Фиксация четности. При установке этого бита бит четности всегда принимает значение 0 (если биты 3-4 равны 11) или 1 (если биты 3-4 равны 01) | |
Установка перерыва. Вызывает вывод строки нулей в качестве сигнала BREAK для подключенного устройства | |
1 - порты 3F8h и 3F9h используются для для загрузки делителя частоты тактового генератора; 0 - порты используются как обычно |
Порт 3FCh
Порт 3FCh – это регистр управления модемом. Управляет состоянием выходных линий DTR, RTS, линий, специфических для модемов OUT1 и OUT2, для запуска диагностики.
Формат порта:
Поле | Описание |
Линия DTR | |
Линия RTS | |
Линия OUT1 (запасная) | |
Линия OUT2 (запасная) | |
Запуск диагностики при входе асинхронного адаптера, замкнутом на его выход | |
5-7 | Должно быть равно 0 |
Порт 3FDh
Порт 3FDh представляет собой регистр состояния линии.
Формат порта:
Поле | Описание |
Данные получены и готовы для чтения. Сбрасывается при чтении данных | |
Ошибка переполнения. Был принят новый байт данных, а предыдущий еще не был считан программой. Предыдущий байт потерян | |
Ошибка четности. Сбрасывается после чтения состояния линии | |
Ошибка синхронизации | |
Обнаружен запрос на прерывание передачи BREAK: длинная строка нулей | |
Регистр хранения передатчика пуст, в него можно записывать новый байт для передачи | |
Регистр сдвига передатчика пуст. Этот регистр получает данные из регистра хранения и преобразует их в последовательный вид для передачи | |
Истекло время ожидания |
Порт 3FEh
Порт 3FEh представляет собой регистр состояния модема.
Поле | Описание |
Линия CTS изменила состояние | |
Линия DSR изменила состояние | |
Линия RI изменила состояние | |
Линия DCD изменила состояние | |
Состояние линии CTS | |
Состояние линии DSR | |
Состояние линии RI | |
Состояние линии DCD |
Функции BIOS для работы с последовательным асинхронным адаптером
В этом разделе мы расскажем о функцях BIOS, облегчающих обслуживание двух асинхронных адаптеров, COM1 и COM2. Эти функции доступны через прерывание INT 14h.