|
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-м режиме. Поэтому, сначала нужно запрограм- мировать таймер, а потом разрешать переда- чу ПДП или прерывания от таймера.
Другие статьи номера:
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3