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

СИСТЕМНЫЙ ТАЙМЕР


5.1.

5.2.

5.3.

5.4.

5.5.

5.6.

Кроме часов реального времени, любой компьютер (даже простейший IBM PC) содержит устройство, называемое системным таймером. Это устройство подключено к линии запроса на прерывание IRQ0 и вырабатывает прерывание INT 8h приблизительно 18,2 раза в секунду (точное значение - 1193180/65536 раз в секунду).

При инициализации BIOS устанавливает свой обработчик для прерывания таймера. Этот обработчик каждый раз увеличивает на 1 текущее значение четырехбайтовой переменной, располагающейся в области данных BIOS по адресу 0000:046Ch - счетчик тиков таймера. Если этот счетчик переполняется (прошло более 24 часов с момента запуска таймера), в ячейку 0000:0470h заносится 1.

Другое действие, выполняемое стандартным обработчиком прерывания таймера - контроль за работой двигателей НГМД. Если после последнего обращения к НГМД прошло более 2 секунд, обработчик прерывания выключает двигатель. Ячейка с адресом 0000:0440h содержит время, оставшееся до выключения двигателя. Это время постоянно уменьшается обработчиком прерывания таймера. Когда оно становится равно 0, обработчик выключает двигатель НГМД.

Последнее действие, которое выполняет обработчик прерывания таймера - вызов прерывания INT 1Ch. После инициализации системы вектор INT 1Ch указывает на команду IRET, т.е. ничего не выполняется. Программа может установить собственный обработчик этого прерывания для того чтобы выполнять какие-либо периодические действия.

Необходимо отметить, что прерывание INT 1Ch вызывается обработчиком прерывания INT 8h до сброса контроллера прерывания, поэтому во время выполнения прерывания INT 1Ch все аппаратные прерывания запрещены. В частности, запрещены прерывания от клавиатуры.

Обработчик прерывания INT 1Ch должен заканчиваться командой IRET. Если же вы подготавливаете собственный обработчик для прерывания INT 8h, перед завершением его работы необходимо сбросить контроллер прерываний. Это можно сделать, например, так:

mov al, 20h out 20h, al


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

Обработчик INT 8h Обработчик INT 1Ch ----------------¬ ¦ ¦ ----------------------------¬ ¦ ------------+----------¬ ¦ Увеличение счетчика ¦ ¦ ¦ Выполнение действий, ¦ ¦ по адресу 0000:046Ch, ¦ ¦ ¦ определенных в ¦ ¦ проверка его на пере- ¦ ¦ ¦ программе ¦ ¦ полнение. ¦ ¦ L-----------T----------- L-------------T-------------- ¦ ¦ ¦ ¦ ¦ --------------+-------------¬ ¦ ------------+----------¬ ¦ Проверка времени послед- ¦ ¦ ¦ IRET ¦ ¦ него обращения к НГМД, ¦ ¦ L-----------T----------- ¦ если оно больше 2 секунд, ¦ ¦ ¦ ¦ выключение двигателя НГМД.¦ ¦ ¦ L-------------T-------------- ¦ ¦ ¦ ¦ ¦ --------------+-------------¬ ¦ ¦ ¦ Вызов прерывания +>- ¦ ¦ INT 1Ch. +<----------------- L-------------T-------------- ¦ --------------+-------------¬ ¦ Сброс контроллера ¦ ¦ прерываний. ¦ L-------------T-------------- ¦ --------------+-------------¬ ¦ IRET ¦ L----------------------------

Таймер обычно реализуется на микросхеме Intel 8253 (для компьютеров IBM PC и IBM XT) или 8254 (для компьютеров IBM AT и IBM PS/2). Следующий раздел книги посвящен описанию микросхемы 8254.

Мы не будем подробно рассказывать о всех возможностях этих микросхем, так как обычно используются только несколько режимов работы (а чаще всего один). Полное описание вы сможете найти в справочной литературе по микросхемам 8253/8254 , а также по их отечественным аналогам К1810ВИ53 и К1810ВИ54.


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