Echo
#07
31 октября 2000 |
|
DMA Sound Card - Программируемый таймер 8253 (Продолжение темы DMA SC в ECHO 6).
╔════════════════════════════════════════╗ ║ Программируемый таймер 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-м режиме. Поэтому, сначала нужно запрограм- мировать таймер, а потом разрешать переда- чу ПДП или прерывания от таймера.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября