Assembler - язык неограниченных возможностей


Таймер


Все, что нам было известно до сих пор о системном таймере, — это устройство, вызывающее прерывание IRQ0 приблизительно 18,2 раза в секунду. На самом деле программируемый интервальный таймер — весьма сложная система, включающая в себя целых три устройства — три канала таймера, каждый из которых можно запрограммировать для работы в одном из шести режимов. И более того, на большинстве современных материнских плат располагаются два таких таймера, так что число каналов оказывается равным шести. Для своих нужд программы могут использовать канал 2 (если им не нужен динамик) и канал 4 (если присутствует второй таймер). При необходимости можно перепрограммировать и канал 0, но затем надо будет вернуть его в исходное состояние, чтобы BIOS и DOS могли продолжать работу.

В пространстве портов ввода-вывода для таймера выделена область от 40h до 5Fh:

    порт 40h — канал 0 (генерирует IRQ0)

    порт 41h — канал 1 (поддерживает обновление памяти)

    порт 42h — канал 2 (управляет динамиком)

    порт 43h — управляющий регистр первого таймера

    порты 44h – 47h — второй таймер компьютеров с шиной MicroChannel

    порты 48h – 4Bh — второй таймер компьютеров с шиной EISA

Все управление таймером осуществляется путем вывода одного байта в порт 43h (для первого таймера). Рассмотрим назначение бит в этом байте.

    биты 7 – 6: если не 11 — это номер канала, который будет программироваться

    00,01,10 = канал 0,1,2

биты 5 – 4:

    00 — зафиксировать текущее значение счетчика для чтения (в этом случае биты 3 – 0 не используются)

    01 — чтение/запись только младшего байта

    10 — чтение/запись только старшего байта

    11 — чтение/запись сначала младшего, а потом старшего байта

биты 3 – 1: режим работы канала




Начало  Назад  Вперед