Из газеты Echo #07, Брест, 11.2000
+----------------------------------------+
| Программируемый таймер 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 перезапускает счетчик. Перезагрука
счетчика не влияет на текущий цикл, однако
следующий цикл определяется вновь занесен-
ным числом.
Временные диаграммы режимов таймера
приведены на следущем рисунке:
Режим 0
Режим 1
Режим 2
Режим 3
Режим 4
Режим 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-м
режиме. Поэтому, сначала нужно запрограм-
мировать таймер, а потом разрешать переда-
чу ПДП или прерывания от таймера.