Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DMITR / USED / DIPLOM1.DOC
Скачиваний:
19
Добавлен:
16.04.2013
Размер:
410.62 Кб
Скачать

3.6 Управление процедурой обмена через rs232.

Одна из стратегий организаций обмена данными по интерфейсу RS-232- это обмен данными, управляемый прерываниями.

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

- маскируются аппаратные прерывания, так как вся процедура инициализации адаптера должна выполнятся без прерываний;

- сохраняется предыдущий вектор прерывания;

- на место сохранённого вектора записывается точка входа в собственный обработчик прерывания;

- в контроллере аппаратных прерываний деблокируются прерывания от COM1 или COM2;

- в адаптере последовательной связи деблокируются прерывания. Для этого маска разрешаемых прерываний записывается во внутренний регистр разрешения прерываний;

- очищаются все условия прерываний, которые, возможно, уже возникли из-за включения механизма прерываний в работу;

- вновь разрешаются аппаратные прерывания;

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

Маскирование прерываний перед началом инициализации позволяет избежать ситуации, при которой процесс инициализации будет прерван аппаратным прерыванием, в том числе и от адаптера последовательной связи, на «полпути», когда не закончено, например, переключение векторов прерываний.

Установка маски в регистр разрешения прерываний недостаточно для того, чтобы адаптер последовательной связи генерировал запросы прерывания. Необходимо также установить в 1 бит 3 внутреннего регистра управления внешним устройством.

Программирование адаптера влияет только на генерацию им запросов прерываний по линиям IRQ3 иIRQ4. Однако будут или не будут прерывания от адаптера последовательной связи обслуживаться центральным процессором (т.е. будут ли проходить прерывания), зависит от текущего состояния контроллера прерываний. Эта микросхема используется для задания номера прерывания, выполняемого процессом при возникновении сигналов на линиях запросов прерываний, для упорядочивания аппаратных прерываний по приоритетам и др.

Контроллер прерываний обслуживает обычно до 16 линий запросов прерываний IRQ0-IRQ15. Приоритет запроса убывает отIRQ0(наивысший приоритет)кIRQ15 (наинизший приоритет). Закрепление узлов персонального компьютера за линиями запросов является одним из отличительных признаков архитектур персонального компьютера. В архитектуреIBM PC линии запросов прерываний закреплены за различными аппаратными узлами следующим образом (Таблица 4.):

IRQ0

аппаратный таймер.

IRQ1

клавиатура.

IRQ2

канал ввода/вывода.

IRQ3

1-й адаптер последовательной связи (COM1).

IRQ4

2-й адаптер последовательной связи (COM2).

IRQ5

контроллер фиксированного диска.

IRQ6

контроллер накопителей на гибком диске.

IRQ7

контроллер 1-го адаптера параллельной связи (LPT1).

Таблица 4.

Ту или иную линию запроса аппаратного прерывания можно маскировать. Маска воспринимаемых запросов хранится во внутреннем регистре контроллера прерываний 8259 и может быть прочитана или записана доступом к порту 21h. Каждый бит этого порта соответствует одной линии запроса прерываний. Если этот бит равен 1, линия маскирована, запросы прерываний невидимы контроллеру и следовательно не обслуживаются процессором. В случае, когда бит равен 0, запрос прерывания будет обслуживаться в соответствии с приоритетом. Когда поступает запрос аппаратного прерывания, контроллер анализирует значение, записанное во внутреннем регистре, обслуживания прерывания (20h). В этом регистре хранится уровень прерывания, обслуживаемого в текущий момент. Если он ниже уровня приоритета нового запроса, то начинается обслуживание этого запроса. Контроллер сообщает в процессор о необходимости выполнения прерывания и передаёт его номер. Процессор гененерирует инструкцию INT с переданным гомером. Закрепление номеров прерываний за линиями запроса может изменятся программированием контроллера. Обычно линии IRQ0 соответствует номер прерывания 8, линии IRQ1-9, линии IRQ2- )Аh, линии IRQ3- 0Bh, линии IRQ4-0Ch и так далее.

Важно чтобы при завершении аппаратного прерывания его уровень приоритета был бы сброшен в порте 20h. В противном случае менее приоритетные запросы прерываний будут по прежнему игнорироватся несмотря на то, что более приоритетное прерывание уже обслужено. Сброс внутреннего регистра обслуживания прерываний выполняется записью в порт 20h значения 20h.

Структура обработчика прерываний асинхронной связи:

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

- рассматриваемый обработчик является обработчиком аппаратного прерывания и поэтому должен завершаться инструкциями очистки внутреннего регистра обслуживаемого прерывания контроллера 8259;

- получив управление, обработчик уточняет причину возникновения прерывания. Для этого читается и анализируется содержимое внутреннего регистра идентификации прерывания;

- определив пречину прерывания, обработчик устраняет её и выполняет все необходимые действия. Например, если прерывание вызвано готовностью данных, обработчик считывает регистр данных приёмника, что устраняет причину прерывания. Затем он помещает принятый байт в приёмный буфер;

- перед завершением своей работы обработчик прерывания анализирует наличие ещё не обработанных прерываний. Как отмечалось ранее, различные причины прерываний могут возникать одновременно. Поэтому после “сброса” причины и выполнения всех необходимых действий вновь анализируется регистр идентификации прерывания. Если его бит 0 равен 0, это означает, что устранены все причины и обработчик может завершить свою работу.

Т.к. мы используем протокол остановки (возобновления) передачи по принятым символам XOFF/XON, то обработчик анализирует принятые символы, и получив символ XOFF останавливает передачу до получения XON.

Соседние файлы в папке USED