|
|
|
|
Уборка перед закрытием магазина
После того, как Ваша прикладная программа перестает нуждаться
в дальнейшем последовательном вводе/выводе, необходимо восстановить порт в его обычное состояние. Восстановление включает в себя
установку всех битов регистра разрешения прерываний порта в ноль
и выключение всех сигналов управления модемом. Затем контроллер
8259A должен быть запрограммирован для прекращения приема прерываний последовательного порта. В заключение, вектор последовательного прерывания
необходимо сбросить в начальное значение, которое было сохранено при инициализации ввода/вывода. Вот как это
реализуется в Microsoft C 5.0:
int intmask;
.
.
.
/* Запретить прерывания на время очистки */
_disable();
/* Сначала сбросить регистр разрешения прерываний порта */
outp(IER,IEROFF);
/* Выключить все биты регистра управления модемом */
outp(MCR,MCROFF);
/* Затем запретить распознавание контроллером 8259A прерываний
последовательного порта */
intmask = inp(P8259_1) | int_disable_mask;
outp(P8259_1, intmask);
/* Восстановить первоначальный вектор прерываний */
_dos_setvect(int_number, old_handler);
/* Снова разрешить прерывания */
_enable();
|
|
|