Аппаратное обеспечение IBM PC



         

Инициализация асинхронного адаптера


Первое, что должна сделать программа, работающая с асинхронным адаптером - установить протокол обмена и скорость передачи данных. После загрузки операционной системы для асинхронных адаптеров устанавливается скорость 2400 бод, не выполняется проверка на четность, используются один стоповый бит и восьмибитовая длина передаваемого символа. Вы можете изменить этот режим командой MS-DOS MODE.

Выполнив ввод из порта 3FBh, программа может получить текущий режим адаптера. Для установки нового режима измените нужные вам поля и запишите новый байт режима по адресу 3FBh.

Если вам надо задать новое значение скорости обмена данными, перед записью байта режима установите старший бит этого байта в 1. Затем последовательно двумя командами вывода загрузите делитель частоты тактового генератора. Младший байт запишите в порт 3F8h, старший - в порт 3F9h.

Перед началом работы необходимо также проинициализировать регистр управления прерываниями (порт 3F9h), даже если в вашей программе не используются прерывания от асинхронного адаптера. Если прерывания вам не нужны, запишите в этот порт значение 0.

На этом инициализацию можно считать законченной.

Для того, чтобы узнать текущее состояние асинхронного адаптера, вы можете использовать следующую функцию:

/** *.Name aux_stat *.Title Определение режима асинхронного адаптера * *.Descr Эта функция считывает текущий режим * асинхронного порта и записывает его * в структуру с типом AUX_MODE. * *.Proto void aux_stat(AUX_MODE *mode, int port); * *.Params AUX_MODE mode - структура, описывающая * протокол и режим работы порта: * * typedef struct _AUX_MODE_ { * * union { * struct { * unsigned char len : 2, // длина символа * stop : 1, // число стоп-битов * parity : 2, // контроль четности * stuck_parity : 1, // фиксация четности * en_break_ctl : 1, // установка перерыва * dlab : 1; // загрузка регистра * // делителя * } ctl_word; * char ctl; * } ctl_aux; * * unsigned long baud; // скорость передачи данных * * } AUX_MODE; * * int port - номер асинхронного адаптера: * 0 - COM1, 1 - COM2 * *.Return Ничего * *.Sample aux_test.c **/




Содержание  Назад  Вперед