╔════════════════════════════════════════╗
║ Программируемый таймер 8253 ║
║ (Продолжение темы DMA SC в ECHO 6) ║
╚════════════════════════════════════════╝
Для задания временных интервалов и фор-
мирования сигналов с различными временными
параметрами применяется программируемый
таймер 8253 (отечественный аналог
КР580ВИ53) или 8254. С точки зрения прог-
раммиста они идентичны. В состав таймера
входят: буфер шины данных, схема управле-
ния вводом-выводом и три независимых кана-
ла, каждый из которых содержит регистр ре-
жима, схему управления каналом, буфер и
16-разрядный счетчик.
Программирование канала осуществляется
путем вывода управляющих слов в регистр
режима каналов и начального значения в его
счетчики. Каждый канал имеет управляющий
вход GATE и выход OUT и может работать в
одном из следующих шести режимов:
- Режим 0 (прерывание терминального
счета). После записи управляющего слова в
регистр режима канала на выходе OUT уста-
навливается напряжение низкого уровня;
загрузка счетчика не изменяет это состоя-
ние. Затем начинается декремент счетчика
(последовательное вычитание из него едини-
цы). В момент, когда счетчик обнулится, на
выходе OUT установливается напряжение вы-
сокого уровня и сохраняется до загрузки
счетчика новым значением. Счет возможен
только при наличие сигнала высокого уровня
на входе GATE. Низкий уровень этого сигна-
ла или ниспадающий фронт запрещают счет.
Перезагрузка счетчика во время счета при-
водит к следующему: загрузка младшего бай-
та останавливает текущий счет, загрузка
старшего байта запускает новый цикл счета.
Минимально допустимое значение счетчика
равно 2.
- Режим 1 (ждущий мультивибратор). На
выходе OUT формируется отрицательный им-
пульс длительностью t=n*T, где n-число,
загруженное в счетчик, T-период тактовых
импульсов. Низкий уровень на выходе OUT
устанавливается со следующего такта после
подачи на вход GATE сигнала высокого уров-
ня.
Загрузка в счетчик нового числа не
влияет на длительность текущего импульса,
а учитывается при следующем запуске. Пере-
запуск счетчика производится нарастающим
фронтом входа GATE (без перезагрузки счет-
чика). Минимальное допустимое n=1.
- Режим 2(генератор частоты). Каждый
раз после достижения счетчиком нуля на
выходе OUT появляется отрицательный им-
пульс с длительностью один такт. Перезаг-
рузка счетчика сказывается только после
перезапуска счетчика. При исчезновении
сигнала высокого уровня на входе GATE
прекращается счет и на выход OUT подается
напряжение высокого уровня. Перезапуск
счетчика происходит при наличии на входе
GATE сигнала высокого уровня.
- Режим 3(генератор меандра). Аналоги-
чен режиму 2, но положительный уровень вы-
ходного сигнала занимает первый полупе
риод, а отрицательный-второй полупериод.
Точнее, если n (начальное значение счетчи-
ка) четно, то длительность положительного
и отрицательного полупериодов равна n*T/2;
если же n нечетно - то (n+1) *T/2 и (n-1)
*Т/2 соотвественно. Низкй уровень сигнала
на входе GATE запрещает счет, на выходе
OUT устанавливается сигнал высокого уров-
ня. Высокий уровень GATE разрешает счет, а
нарастание его запускает счетчик начально-
го состояния. Отметим, что n=3 в этом ре-
жиме недопустимо.
- Режим 4(счетчик событий). По оконча-
нии отсчета числа, загруженного в счетчик,
на выходе OUT формируется отрицательный
импульс длительностью один такт. Запись в
счетчик во время счета младшего байта не
влияет на текущий счет, а запись старшего
байта перезапускает счетчик. Низкий уро-
вень входа GATE запрещает счет, высокий -
разрешает. Минимальное допустимое значение
счетчика равно 1.
- Режим 5(счетчик событий с автозагруз-
кой). Отличие от режима 4 состоит в том,
что каждое нарастание сигнала на входе
GATE перезапускает счетчик. Перезагрука
счетчика не влияет на текущий цикл, однако
следующий цикл определяется вновь занесен-
ным числом.
Временные диаграммы режимов таймера
приведены на следущем рисунке:
│┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐
CLK ├┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└
__ ├┐n=5 ┌────────────────┐n=4 ┌──────────────────
WR │└────┘ └────┘
│ ┌─────────────────────────┐ ┌────────
GATE ├───────┘ └───┘
├─────┐ ┌─────────┐ ┌──
OUT │ └───────────┘ └───────────────┘
n │ 5 4 3 2 1 0 4 3 2 2 1 0
└────────────────────────────────────────────────
Режим 0
│┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐
CLK ├┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└
__ ├┐n=4 ┌──────┐n=5 ┌────────────────────────────
WR │└────┘ └────┘
│ ┌──────────┐ ┌─┐ ┌─────────────
GATE ├─────────┘ └────┘ └────┘
├───────────┐ ┌───────┐ ┌──
OUT │ └───────┘ └───────────────┘
n │ 4 3 2 1 0 5 4 3 5 4 3 2 1 0
└─────────────────────────────────────────────────
Режим 1
│┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐
CLK ├┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└
__ ├┐n=4 ┌──┐n=3 ┌────────────────────────────────
WR │└────┘ └────┘
│ ┌────────────────────────┐ ┌─────────
GATE ├──────┘ └────┘
├─────────────┐ ┌────┐ ┌─────┐ ┌──────────┐ ┌──
OUT │ └─┘ └─┘ └─┘ └─┘
n │ 4 3 2 1 0 3 2 1 0 3 2 1 0 3 2 1 0
└─────────────────────────────────────────────────
Режим 2
│┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐
CLK ├┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└
__ ├┐n=4 ┌────────────────┐n=5 ┌──────────────────
WR │└────┘ └────┘
│ ┌────────────────────────────────┐ ┌───
GATE ├─────┘ └───┘
├──────────┐ ┌─────┐ ┌─────┐ ┌────────
OUT │ └────┘ └────┘ └────┘
n │ 4 3 2 1 0 4 3 2 1 0 4 3 2 1 0 5 5 4
└─────────────────────────────────────────────────
Режим 3
│┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐
CLK ├┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└
__ ├┐n=4 ┌────────────────┐n=5 ┌─────────────────────
WR │└────┘ └────┘
├──────────────────────────────┐ ┌──────────────
GATE │ └───┘
├──────────────┐ ┌────────────────────────────┐ ┌─
OUT │ └─┘ └─┘
n │ 4 3 2 1 0 5 5 4 3 2 1 0
└─────────────────────────────────────────────────
Режим 4
│┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐
CLK ├┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└
__ ├┐n=4 ┌────────────────────────────────────────
WR │└────┘
│ ┌────────┐ ┌─┐ ┌─────────────────
GATE ├─────────┘ └───┘ └───┘
├─────────────────┐ ┌─────────────────┐ ┌──────
OUT │ └─┘ └─┘
n │ 4 3 2 1 0 4 3 4 3 2 1 0
└─────────────────────────────────────────────────
Режим 5
В звуковой карте имеются два таймера,
адреса которых приведены в таблице:
Первый Таймер:
┌────────┬────────────┬──────────────────────────────┐
│ Адрес │ Операция │ Назначение │
├────────┼────────────┼──────────────────────────────┤
│ #3D │ запись │ Загрузка счетчика канала 0 │
│ │ чтение │ Чтение счетчика канала 0 │
│ #7D │ запись │ Загрузка счетчика канала 1 │
│ │ чтение │ Чтение счетчика канала 1 │
│ #BD │ запись │ Загрузка счетчика канала 2 │
│ │ чтение │ Чтение счетчика канала 2 │
│ #FD │ запись │ Запись управляющего слова │
│ │ │ в регистр режима канала │
└────────┴────────────┴──────────────────────────────┘
Второй Таймер:
┌────────┬────────────┬──────────────────────────────┐
│ Адрес │ Операция │ Назначение │
├────────┼────────────┼──────────────────────────────┤
│ #3E │ запись │ Загрузка счетчика канала 0 │
│ │ чтение │ Чтение счетчика канала 0 │
│ #7E │ запись │ Загрузка счетчика канала 1 │
│ │ чтение │ Чтение счетчика канала 1 │
│ #BE │ запись │ Загрузка счетчика канала 2 │
│ │ чтение │ Чтение счетчика канала 2 │
│ #FE │ запись │ Запись управляющего слова │
│ │ │ в регистр режима │
└────────┴────────────┴──────────────────────────────┘
Управляющее слово имеет следующий фор-
мат:
7 6 5 4 3 2 1 0
╔═╤═╤═╤═╤═╤═╤═╤═╗
║ │ │ │ │ │ │ │ ║ Раскладка битов Маска
╚╤╧╤╧╤╧╤╧╤╧╤╧╤╧╤╝ ─────────────── ─────
│ │ │ │ │ │ │ └> 0: 0 = двоичный код, а & 1
│ │ │ │ │ │ │ 1 = двоично-десятичный код
│ │ │ │ └─┴─┴──> 1-3: режим работы канала: а & 0Eh
│ │ │ │ 000 - режим 0
│ │ │ │ 001 - режим 1
│ │ │ │ X10 - режим 2
│ │ │ │ X11 - режим 3
│ │ │ │ 100 - режим 4
│ │ │ │ 101 - режим 5
│ │ └─┴────────> 4-5: вид загрузки счетчика: а & 30h
│ │ 00 - "защелкивание"
│ │ (биты 0-3 безразличны)
│ │ 01 - только младший байт
│ │ 10 - только старший байт
│ │ 00 - младший байт, затем старший
└─┴────────────> 6-7: номер канала: a & C0h
00 - канал 0
01 - канал 1
10 - канал 2
11 - запрещенная комбинация
Существует два способа чтения текущего
значения счетчика канала:
1. Чтение с остановом счетчика. Для
обеспечения стабильных показаний необходи-
мо приостановить работу канала либо пода-
чей сигнала низкого уровня на вход
GATE (кроме режима 1), либо блокированием
тактовых импульсов.
2. Чтение "на лету". Для считывания
счетчика без остановки процесса счета ис-
пользуется посылка в порт 43h управляющего
слова в режиме "защелкивания" (см. выше).
Это управляющее слово фиксирует текущее
значение счетчика и Вы можете считать его
младший байт, а затем старший байт.
В звуковой карте каналы таймера имеют
следующее назначение.
Первый Таймер:
┌────────┬─────────────────────────────┬───────────────────────┐
│ Канал │ Назначение │ Режим │
├────────┼─────────────────────────────┼───────────────────────┤
│ 0 │ запрос для канала 0 ПДП │ 2, CLK=3.5 МГц │
│ 1 │ запрос для канала 1 ПДП │ 2, CLK=3.5 МГц │
│ 2 │ запрос прерываний │ 2, CLK=1.75Мгц │
│ │ (бит вектора D6) │ │
└────────┴─────────────────────────────┴───────────────────────┘
Второй Таймер:
┌────────┬─────────────────────────────┬───────────────────────┐
│ Канал │ Назначение │ Режим │
├────────┼─────────────────────────────┼───────────────────────┤
│ 0 │ запрос для канала 2 ПДП │ 2, CLK=3.5 МГц │
│ 1 │ запрос для канала 3 ПДП │ 2, CLK=3.5 МГц │
│ 2 │ запрос прерываний │ 2, CLK=1.75Мгц │
│ │ (бит вектора D5) │ │
└────────┴─────────────────────────────┴───────────────────────┘
Входы GATE всех каналов всегда имеют
высокий уровень, поэтому счет на каналах
разрешен всегда.
Внимание! Контроллеры ПДП и прерываний
нормально работают только, если соответст-
вующий им канал таймера работает во 2-м
режиме. Поэтому, сначала нужно запрограм-
мировать таймер, а потом разрешать переда-
чу ПДП или прерывания от таймера.