Модемы и факс-модемы. Программирование для MS-DOS и Windows

Обработка прерываний асинхронного адаптера


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

         Изменилось состояние линии приемника: произошло переполнение приемника, произошла ошибка четности или синхронизации, линия перешла в состояние BREAK

         Данные приняты и доступны для чтения через регистр данных. Обработчик прерывания должен прочитать их и сохранить в буфере для дальнейшей обработки

         Регистр передатчика пуст. Обработчик прерывания может записать в COM-порт следующий байт

         Изменилось состояние модема: изменилось состояние линий CTS, RI, DCD, DSR. Состояние этих линий позволяет программе определить, установлена ли связь с удаленным модемом, есть ли звонок на телефонной линии и т. д.

Вы можете отдельно запрещать или разрешать эти прерывания. Для этого необходимо установить соответствующие биты в регистре управления прерываниями.

Как мы указывали ранее, каждому COM-порту соответствует, кроме базового адреса его регистров, линия IRQ (см. главы "Последовательный асинхронный адаптер" и "COM-порт и номера IRQ"):

COM-порт

Линия IRQ

Прерывание



COM1

IRQ4

INT 0Ch

COM2

IRQ3

INT 0Bh

COM3

IRQ4

INT 0Ch

COM4

IRQ3

INT 0Bh

Заметим, что в данной таблице представлен только один возможный вариант соответствия номеру COM-порта линии IRQ. Некоторые платы асинхронных адаптеров и некоторые внутренние модемы имеют перемычки для выбора номера COM-порта (адреса базового регистра) и номера линии IRQ.

Что представляет из себя обработчик прерываний асинхронного адаптера? На рисунке 6.1 мы привели блок схему такого обработчика прерываний.

Рис. 6.1. Блок схема обработчика прерываний

Теперь опишем алгоритм обработки прерываний от асинхронного последовательного адаптера. Этот алгоритм реализован в программе CHATINT, представленной ниже.



Содержание раздела