Глава 7. Ввод/вывод.

Раздел 1. Доступ к последовательному порту.

7.1.1 Программирование микросхемы UART 8250.

Последовательная связь настолько сложна, что были разработаны специальные микросхемы, выполняющие работу по формированию и синхронизации строк битов, составляющих последовательные данные. Такие микросхемы называют универсальным асинхронным приемником-передатчиком (universal asynchronous receiver transmitter или UART). IBM PC использует UART 8250 фирмы Intel.

Операционная система поддерживает 2 порта коммуникации, поэтому в машине имеются 2 микросхемы. Их базовые адреса хранятся в ячейке 0040:0000 для COM1 и 0040:0002 для COM2. (Базовый адрес это 2-хбайтовый адрес порта, который является младшим из группы адресов портов, дающих доступ к UART.) Hа всех машинах кроме PCjr COM1 имеет базовый адрес 3F8H, а COM2 - 2F8H; PCjr имеет свой внутренний модем по адресу 3F8H, а COM1 - по адресу 3F8H. Для удобства, мы в дальнейшем будем всегда нумеровать регистры 3FxH, но все сказанное в равной степени применимо и к регистрам 2FxH.

Микросхема 8250 имеет 10 программируемых однобайтных регистров, с помощью которых управляется и контролируется порт коммуникации. Большинство из них занимаются инициализацией порта, процессом, который может быть очень сложным. Доступ к этим 10 регистрам осуществляется через семь адресов портов с номерами 3F8H - 3FEH (или 2F8H - 2FEH). В пяти случаях регистр, к которому получаем доступ через данный порт, зависит от того, как установлен бит 7 в регистре контроля линии, который является единственным регистром с адресом порта 3FBH. Вот эти регистры:

 
3F8H (OUT, бит 7 = 0 в 3FBH)   Регистр хранения передатчика 
3F8H (IN, бит 7 = 0 в 3FBH)    Регистр данных приемника 
3F8H (OUT, бит 7 = 1 в 3FBH)   Делитель скорости обмена (младший) 
3F9H (IN, бит 7 = 1 в 3FBH)    Делитель скорости обмена (старший) 
3F9H (OUT, бит 7 = 0 в 3FBH)   Регистр разрешения прерывания 
3FAH (IN)                      Регистр идентификации прерывания 
3FBH (OUT)                     Регистр управления линии 
3FCH (OUT)                     Регистр управления модемом 
3FDH (IN)                      Регистр статуса линии 
3FEH (IN)                      Регистр статуса модема 

Из десяти регистров только шесть необходимы для простой последовательной связи. Регистр хранения передатчика содержит байт данных, которые будут посланы {7.1.6}, а регистр данных приемника - последний полученный байт данных {7.1.7}. Регистры управления и статуса линии инициализируют и управляют линией связи, используя скорость обмена, содержащуюся в двух регистрах делителя скорости обмена {7.1.2}. Из оставшихся четырех регистров регистры управления и статуса модема используются только для связи через модем {7.1.5}, а два регистра, связанных с прерываниями используются только в процедурах, управляемых прерываниями {7.1.8}.

Прерывания используются при связи в целях эффективности. Обычная коммуникационная процедура непрерывно проверяет регистр статуса линии, ожидая вводимого символа или указаниия, что все готово для передачи следующего байта данных. Поскольку процессор намного быстрее, чем обычные скорости с которыми передаются последовательные данные, то этот метод напрасно расходует процессорное время, которое может использоваться для обработки поступающих или передаваемых данных. По этой причине микросхема 8250 может быть установлена в режим, вызывающий прерывание при появлении символа, возникновении ошибки и т.п. Это прерывание моментально вызовет процедуру Вашей программы, которая, скажем, будет передавать следующий символ из коммуникационного буфера.


<~-Глава 7. Ввод/вывод.
Содержание
7.1.2 Инициализация последовательного порта.-~>

Сайт управляется системой uCoz