Из газеты 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-м режиме. Поэтому, сначала нужно запрограм- мировать таймер, а потом разрешать переда- чу ПДП или прерывания от таймера.