Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000544.doc
Скачиваний:
41
Добавлен:
30.04.2022
Размер:
14.75 Mб
Скачать

9.5. Назначение портов rs-232

Компьютер, совместимый с IВМ РС, может иметь до четырех последовательных портов. Они маркируются как СОМ1 - СОМ4. Каждый СОМ-порт формируется отдельным UART 16450, установленным внутри компьютера. UART содержит восемь восьмибитовых регистров. Адреса ввода/вывода этих регистров вычисляются добавлением смещения регистра к базовому адресу СОМ-порта

. Базовые адреса портов равны: COM1 – 3F8h, COM2 – 2F8h, COM3 – 3E8h, COM4 – 2E8h. При включении компьютера BIOS проверяет адреса всех установленных последовательных портов и заносит их в определенные ячейки памяти. Так однобайтовая ячейка памяти 0000:0411h в трех младших битах содержит общее количество установленных COM-портов. Информация о базовых адресах установленных портов размещается в ячейках

COM1: 0000:0400h – 0000:0401h,

COM2: 0000:0402h – 0000:0403h,

COM3: 0000:0404h – 0000:0405h,

COM4: 0000:0406h – 0000:0407h.

Рассмотрим назначение портов.

Порт 3F8h (смещение 00h) при нулевом значении управляющего бита служит для записи в него передаваемого байта данных и чтения из него принимаемого байта. При единичном значении управляющего бита этот порт используется для записи в него младшего байта кода делителя частоты тактового генератора, определяющего скорость передачи и приема. В качестве управляющего бита DLAB используется старший (восьмой) бит регистра формата данных. Если по этому адресу записан байт, то он передается в регистр сдвига передатчика и последовательно поступает на выход. Во время приема происходит обратная операция: после того как данные успешно приняты и с помощью регистра сдвига преобразованы в параллельный формат, они передаются в буферный регистр приемника. Когда информация из этого регистра считана, он очищается и готов к приему следующего блока данных.

Порт 3F9h (смещение 01h) при единичном значении того же управляющего бита используется для записи старшего байта кода делителя частоты. При нулевом значении управляющего бита порт используется для управления прерываниями. Используя этот регистр разрешения прерываний, можно настраивать прерывания, генерируемые UART, на различные события. Назначения битов этого регистра приведены ниже:

бит 0 1 - прерывание при получении данных,

0 - нет прерывания,

бит 1 1 - прерывание, когда регистр передатчика пуст,

0 - нет прерывания,

бит 2 1 - прерывание при ошибке приема данных,

0 - нет прерывания,

бит 3 1 - прерывание по изменению состояния линий CTS, DSR, DCD, RI,

0 - нет прерывания,

биты с 7 по 4 всегда нули.

Порт 3FAh (смещение 02h) используется только для чтения и его содержимое указывает на причину прерывания. При возникновении прерывания нулевой бит этого регистра устанавливается в 0. Биты 1 и 2 указывают код причины прерывания. Биты с 7 по 3 не используются и всегда равны 0. Назначение битов регистра следующее:

бит 0 1 - нет прерывания

0 - прерывание

биты 2,1 00 - изменение входного сигнала (приоритет 3)

01 - регистр передатчика пуст (приоритет 2)

10 - в буферном регистре приемника данные готовы (приоритет 1)

11 - ошибка передачи данных или остановка (максимальный приоритет 0).

Установленное в UART прерывание должно быть сброшено для корректности дальнейшего обмена данными. Сброс производится при обмене с одним из регистров, в зависимости от причины прерывания. Для сброса прерывания производится, в зависимости от кода события:

код 00 - чтение содержимого регистра состояния модема (смещение 06h),

код 01 - запись в регистр передатчика (смещение 00h) или чтение регистра,

идентификации прерываний (смещение 02h),

код 10 - чтение байта данных из буферного регистра приемника (смещение 00h),

код 11 - чтение регистра состояния приемопередатчика (смещение 05h).

Порт 3FBh (смещение 03h) доступен для чтения и записи и содержит биты, управляющие форматом кадра (скорость, количество битов данных, количество стоповых битов и настройка проверочного бита). Седьмой разряд содержит управляющий бит для выбора назначения портов 3F8h и 3F9h. Назначение остальных битов регистра:

биты 1,0 – код длины посылки (00 - 5 бит данных, 01 - 6 бит, 10 - 7 бит, 11 - 8 бит),

бит 2 – код длины стоповой посылки (1 - 2 стоповых бита, 0 - 1 столовый бит),

биты 5,4,3 – код проверки четности (000 - нет проверки, 001 - нечетная,

011 – четная, 101 - всегда 1, 111 – всегда 0),

бит 6 – включение остановки (1 - остановка включена, 0 - остановка выключена).

Когда установлен седьмой управляющий бит, регистры приемопередатчика (смещение 00h) и разрешения прерываний (смещение 01h) используются для загрузки делителя скорости обмена. В первый записывается младший, во второй - старший байт делителя. В компьютере тактовая частота, подаваемая в UART, составляет 1,8432 МГц. Внутри UART эта частота сначала делится на 16 и образует частоту равную 115200 Гц. Скорость обмена получается дальнейшим делением частоты 11520 Гц на делитель. Так для получения скорости 9600 бод необходимо, чтобы делитель был равен 12. Следовательно, в буферный регистр приемопередатчика должно быть записано число 12, а в регистр разрешения прерываний - ноль.

Порт 3FCh (смещение 04h) используется для управления модемом. Он управляет состоянием управляющих линий интерфейса RS-232, таких как DTR и RTS . Используется редко. Биты 5-7 всегда равны 0. Четвертый бит управляет обратной связью (1 – обратная связь доступна, 0 –недоступна). Нулевой бит управляет сигналом DTR (1 – включено, 0 - выключено, присутствует на разъеме RS-232). Нулевой бит управляет сигналом RTS (1 – включено, 0 - выключено, присутствует на разъеме RS-232).

Порт 3FDh (смещение 05h) - регистр состояния приемопередатчика, содержащий флаги готовности и ошибок. Совместное использование с регистром идентификации прерываний позволяет установить источник прерываний. Назначения битов регистра следующее:

бит 0 - принятые данные готовы (1 - принятые данные находятся в регистре приемника, 0 - нет принятых данных),

бит 1 - ошибка переполнения (1 - обнаружена ошибка, 0 - нет ошибки),

бит 2 - ошибка проверки на четность (1 - обнаружена ошибка, 0 - нет ошибки),

бит 3 - ошибка блока (1 - обнаружена ошибка, 0 - нет ошибки),

бит 4 - остановка (1 – обнаружена остановка, 0 – нет остановки),

бит 5 – буфер передатчика пуст (1 - нет байта в регистре передатчика,

0 - в регистре передатчика один байт),

бит 6 – передатчик пуст (1 - нет байта в регистре передатчика и регистре сдвига,

0 - в регистре передатчика и регистре сдвига один байт),

бит 7 – равен 0.

Порт 3FEh (смещение 06h) - регистр состояния модема, содержит состояние линий CTS, DSR, RI, DCD и признаки их изменения. Назначение регистров:

бит 7 – обнаружена несущая передачи данных (1 - DCD активна, 0 – неактивна),

бит 6 – индикатор звонка (1 - RI активна, 0 – неактивна),

бит 5 – набор данных готов (1 – DSR активна, 0 – неактивна),

бит 4 - сброс для передачи (1 - CTS активна, 0 – неактивна),

бит 3 - изменение DCD ( 1 - DCD изменена с момента последнего считывания,

0 – DCD не изменена),

бит 2 - изменение RI ( 1 - RI изменена с момента последнего считывания,

0 – RI не менялось),

бит 1 - изменение DSR ( 1 - DSR изменена с момента последнего считывания,

0 – DSR не изменена),

бит - изменение CTS ( 1 - CTS изменена с момента последнего считывания,

0 – CTS не изменена).

Регистр 3FE ( смещение 07h) - байт памяти.

При инициализации универсального асинхронного приемо-передатчика (UART) в IBM*86 необходимо:

  • записать по адресу 3FBh управляющий байт с единицей в 7 бите;

  • записать код делителя частоты по адресам 3F8h и 3F9h;

  • записать по адресу 3FBh управляющий байт с нулем в 7 бите и с требуемыми значениями остальных битов;

  • записать управляющий байт по адреcу 3F9h;

  • записать управляющий байт по адреcу 3FCh.

Далее обмен информацией, в зависимости от выбранного и установленного режима работы, осуществляется по прерываниям или опросу состояния линий квитирования (опросу флага готовности).