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