|
Особенности и архитектура
Современная персональная платформа может обслуживать до 255 последовательных портов, только небольшая часть из которых принадлежит бортовым устройствам UART, а все остальные располагаются на дополнительных адаптерах. Разнообразие шинных технологий формирует и разнообразие подходов к использованию RS232-протокола в операционных системах.
В MS-DOS по умолчанию доступны только те последовательные порты, список которых формирует BIOS (Basic Input/Output System). Они идентифицируются со старшего базового адреса (как правило, это 3F8h), нумеруются мнемоническими именами COMx , где x – номер порта, и, как правило, располагаются на ISA-шине.
BIOS обслуживает последовательные порты с помощью запроса на прерывание INT14h, посредством которого можно проинициализировать RS232-порт, принять или передать байт данных, проверить статус порта и обеспечить доступ к регистровым полям для чтения/записи. Работа через BIOS страдает одним существенным недостатком: дисциплина FIFO для аппаратной буферизации не поддерживается. Поэтому программное обеспечение, обслуживающее проходящие через последовательный порт данные, должно обрабатывать поток со скоростью не меньшей, чем скорость их поступления. В противном случае неизбежна потеря данных.
Работа с использованием INT14h допускает прием и передачу данных с портовой скоростью от 110 до 9600 бод. При больших скоростях приходится организовывать программную буферизацию принимаемых, а в отдельных случаях и передаваемых данных. Это можно сделать при использовании прерываний, генерируемых последовательными портами.
Структура регистров UART
Программируя обмен с последовательным портом, необходимо принять во внимание его архитектуру. В составе порта доступны для работы восемь регистров, выполняющих одну или несколько функций RS232-протокола. Эти регистры располагаются один за другим, начиная с адреса, который называется базовым.
Базовые адреса последовательных портов хранятся в формате слова в служебной области, закрепленной за базовой системой ввода-вывода, начиная с адреса 40:0. Эта область называется BIOS Data Area. Как правило, в BDA-области зарезервировано четыре поля для COM1…COM4-портов, в которых хранятся их базовые адреса. Если порт отсутствует, то соответствующее поле BIOS Data Area содержит ноль.
Обычно базовый адрес COM1 расположен в 3F8h, COM2 – 2F8h, COM3 – 3E8h, COM4 – 2E8h. Такое распределение происходит в процессе сканирования в пространстве портов от старших адресов к младшим. Поэтому, если, например, в системе есть только последовательные порты с базовыми адресами 3E8h и 2E8h, то именно им BIOS присвоит мнемонические имена COM1 и COM2 соответственно.
Продолжение
|