Компьютер - электронное устройство, которое не заменит человека до тех пор, пока не научится смеяться шуткам начальника и сваливать свои собственные ошибки на соседний компьютер.




; Микросхема 8253 работает независимо от процессора. Процессор программирует микросхему и затем обращается к другим делам. Таким образом 8253 действует как часы реального времени - она считает свои импульсы независимо от того, что происходит в компьютере. Однако, максимальный программируемый интервал составляет прибли- зительно 1/12 секунды. Для подсчета интервалов времени в часы и минуты нужны какие-то другие средства. Именно по этой причине импульсы от нулевого канала микросхемы таймера накапливаются в переменной, находящейся в области данных BIOS. Этот процесс пока- зан на рис. 2-1. Это накопление обычно называется подсчетом вре- мени суток. 18.2 раза в секунду выход канала 0 обрабатывается аппаратным прерыванием (прерыванием таймера), которое ненадолго останавливает процессор и увеличивает счетчик времени суток. Число 0 соответствует полночи 12:00; когда счетчик достигает значения эквивалентного 24 часам, он сбрасывается на ноль. Другое время в течение суток легко определяется делением показателя счетчика на 18.2 для каждой секунды. Счетчик времени суток ис- пользуется в большинстве операций, связанных со временем.


2.1.1 Программирование микросхемы таймера 8253/8254.



      Каждый из трех каналов микросхемы таймера 8253 (8254 для AT) состоит из трех регистров. Доступ к каждой группе из трех регист- ров осуществляется через один порт; номера портов от 40H до 42H соответствуют каналам 0 - 2. Порт связан с 8-битным регистром ввода/вывода, который посылает и принимает данные для этого кана- ла. Когда канал запрограммирован, то через этот порт посылается двухбайтное значение, младший байт сначала. Это число передается в 16-битный регистр задвижки (latch register), который хранит это число и из которого копия помещается в 16-битный регистр счетчи- ка. В регистре счетчика число уменьшается на единицу каждый раз, когда импульс от системных часов пропускается через канал. Когда значение этого числа достигает нуля, то канал выдает выходной сигнал и затем новая копия содержимого регистра задвижки передви- гается в регистр счетчика, после чего процесс повторяется. Чем меньше число в регистре счетчика, тем быстрее ритм. Все три кана- ла всегда активны: процессор не включает и не выключает их. Теку- щее значение любого из регистров счетчика может быть прочитано в любой момент времени, не влияя на счет.
      Каждый канал имеет две входные и одну выходную линии. Выходная линия выводит импульсы, возникающие в результате подсчета. Назна- чение этих сигналов варьируется в зависимости от типа IBM PC:

      Канал 0 используется системными часами времени суток. Он уста- навливается BIOS при старте таким образом, что выдает импульсы приблизительно 18.2 раза в секунду. 4-байтный счетчик этих им- пульсов хранится в памяти по адресу 0040:006C (младший байт хра- нится первым). Каждый импульс инициирует прерывание таймера (но- мер 8) и именно это прерывание увеличивает показание счетчика. Это аппаратное прерывание, поэтому оно обрабатывается всегда, независимо от того, чем занят процессор, если только разрешены аппаратные прерывания (см. обсуждение в [1.2.2]). Выходная линия используется также для синхронизации некоторых дисковых операций, поэтому если Вы изменили ее значение, то Вам необходимо восстано- вить первоначальное значение перед обращением к диску.

      Канал 1 управляет обновлением памяти на всех машинах кроме PCjr, поэтому его лучше не трогать. Выходная линия этого канала связана с микросхемой прямого доступа к памяти [5.4.2] и ее им- пульс заставляет микросхему DMA обновить всю память. На PCjr канал 1 служит для преобразования входных данных с клавиатуры из последовательной в параллельную форму. PCjr не использует микрос- хему прямого доступа к памяти, поэтому когда он вместо этого прогоняет данные через процессор, то прерывание от таймера забло- кировано. Канал 1 используется для подсчета заблокированных им- пульсов часов времени суток, с тем чтобы можно было обновить значение счетчика после завершения дисковых операций.

      Канал 2 связан с громкоговорителем компьютера и он производит простые прямоугольные импульсы для генерации звука. Программисты имеют больший контроль над вторым каналом, чем над остальными. Простые звуки могут генерироваться одновременно с другими прог- раммными операциями, а более сложные звуковые эффекты могут быть

достигнуты за счет использования процессора. Канал 2 может быть отсоединен от громкоговорителя и использоваться для синхрониза- ции. Наконец, выходная линия канала 2 связана с динамиком компью- тера. Однако динамик не будет генерировать звук до тех пор пока не сделаны определенные установки микросхемы интерфейса с перифе- рией 8255.
      Две входные линии для каждого канала состоят из линии часов, которая передает сигнал от микросхемы системных часов и линии, называемой воротами (gate), которая включает и выключает сигнал от часов. Ворота всегда открыты для сигналов часов по каналам 0 и 1. Но они могут быть закрытыми для канала 2, что позволяет неко- торые специальные манипуляции со звуком. Ворота закрываются уста- новкой младшего бита порта с адресом 61H, который является ре- гистром микросхемы 8255; сброс этого бита снова открывает ворота. Эта микросхема обсуждается в [1.1.1]. Отметим что - как и выход канала 2 - бит 1 порта 61H связан с динамиком и также может ис- поьзоваться для генерации звука. На рис. 2-2 приведена диаграмма микросхемы таймера 8253.
      Микросхема таймера может использоваться непосредственно для временных операций, но это редко бывает удобным. Ввод с часов производится 1.19318 миллионов раз в секунду (даже на AT, где системные часы идут быстрее, микросхема таймера получает сигнал с частотой 1.19 Мгц). Поскольку максимальное число, которое может храниться в 16 битах, равно 65535 и поскольку это число делится на частоту импульсов от часов, равную 18.2, то максимальный воз- можный интервал между импульсами равен приблизительно 1/12 секун- ды. Поэтому большинство временных операций используют счетчик времени суток BIOS. Для подсчета времени читается значение време- ни суток и сравнивается с некоторым ранее запомненным значением для определения числа импульсов, прошедших с того момента. Спе- циальный способ, описанный в [2.1.7], позволяет испоьзовать счет- чик времени суток для операций в реальном времени.
      8253 предоставляет разработчикам оборудования 6 режимов работы для каждого канала. П