|
Канал звука
Так как традиционный
канал звука в персональном компьютере предназначен для озвучивания системных
событий, то все его узлы, которые участвуют в формировании звуковой волны, разнесены
по разным блокам (ранее микросхемам). Каждым блоком-микросхемой надо управлять
по отдельности, используя
специфичные для нее особенности, поэтому вроде бы простое управление звуком
никак не напоминает работу с музыкальным синтезатором.
Для операций,
синхронизированных с реальным временем, а это системные часы и звуковой канал,
используются три программируемых интервальных счетчика-таймера. В самых первых
моделях IBM PC XT и AT применялась микросхема 8253 (или 8254), а в дальнейшем
ее функции были встроены в чипсет системной платы. Принципы управления счетчиками,
независимо от типа процессора, остаются одними и теми же.
На рис.
показана подсистема формирования звуковых сигналов. От системных часов поступают
импульсы с частотой 1,19 МГц, которые одновременно подаются на три канала таймера
(на рисунке показан только канал 2). Каналы 0 и 1 используются для расчета времени
системных событий, например прерываний BIOS или восстановления синхронизации
времени после аппаратных прерываний. Заметим, что хотя пользователю доступно
программирование этих каналов, но использовать их и менять какие-либо настройки
и режимы нежелательно.
Третий канал
(канал 2) используется для формирования звуковых сигналов BIOS. Но т, к. системные
события, которые озвучивает BIOS, происходят только во время начальной загрузки
и при тяжелых ошибках операционной системы, то пользователь вправе использовать
этот канал по своему усмотрению. То есть любая пользовательская программа может
управлять режимом этого канала по собственному алгоритму, например синтезировать
голос человека, музыку или подавать звуковые сигналы в ответ на ошибочные действия
пользователя.
В каждом канале
используются 16-разрядные двоичные счетчики, с помощью которых можно сосчитать
максимально 65 635 импульсов. Если разделить входную частоту 1,19 МГц на разрядность
счетчика, то минимальная частота на его выходе будет около 55 Гц или 18,2 импульса
в секунду.
Счетчик канала
может работать в 6-ти режимах, которые программируются пользователем. Но в любом
из них за каждый такт системных часов счетчик всегда только вычитает единицу
из значения, которое в него записано. После обнуления он формирует выходной
импульс.
В счетчик
можно записать любое число в диапазоне от 0 до 65 635 двумя способами — загрузить
два байта или только один, старший или младший.
Чтобы не нарушать
работу счетчика во время загрузки нового значения (частота синхронизации процессора
и таймера не совпадают), каждый канал снабжен регистром-задвижкой, в который
загружается будущее значение счетчика. А содержимое счетчика меняется только
после получения таймером байта управления и одного или двух байтов, которые
должны быть в него загружены.
Для управления
любым каналом таймера используется управляющий порт с адресом 43h, в который
посылаются однобайтные команды. После команды управления по адресу порта нужного
канала передается один или два байта для загрузки счетчика канала. Рабочий цикл
счетчика завершится, когда его значение будет равно 0. Адреса портов таймера
приведены в табл. 10.1, а значения битов в командном слове — в табл. 10.2. Табл.
10.3 содержит названия возможных режимов работы каналов таймера, но почти всегда
используется 3-й режим, когда канал таймера работает в режиме обычного делителя
импульсов, имитируя генератор.
Порты таймера
Значение битов в командном слове таймера
|
|
|
|
|
|
|
|
|
|
Если 0, то двоичные
данные, иначе BCD
Номер режима
— 000-101
|
|
|
|
|
|
|
|
Тип операции:
00 — передавать значения счетчика в задвижку; 01 — читать/писать только
старший байт;
10 — читать/писать
только младший байт; 1 1 — читать/писать сначала старший байт, а потом
младший Номер программируемого канала
|
Режимы работы каналов таймера
|
|
|
|
|
|
|
|
|
|
Прерывание по
пользовательскому счету
Односчетныи запуск
Задающий генератор
(деление входной частоты)
Формирование прямоугольных
импульсов
Формирование одиночного
импульса
Формирование одиночного
импульса
|
|
|
|
|
|
Динамик компьютера
не подключен непосредственно к выходу 2-го канала таймера, а управляется блоком
периферийного интерфейса. Это значит, что помимо управления таймером, для того
чтобы запищал динамик, надо установить определенные биты портов периферийного
интерфейса.
Интерфейс
с периферией ранее выполнялся на микросхеме 8255, представляющей собой три однобайтовых
порта. Каждый порт в состоянии как принимать данные, так и передавать. При этом
полученное или переданное значение может, по желанию программиста, храниться
во внутреннем регистре интерфейса. Адреса портов интерфейса с периферией приведены
в табл. 10.4. Само управление блоком периферийного интерфейса похоже на работу
с таймером, но т. к. в данном случае, кроме управления таймером и динамиком,
на эти порты возлагаются и другие системные функции, то требуется изменение
состояния одиночных битов, а не целых байтов. Поэтому программисту приходится
сначала считывать состояние порта, а потом записывать новое значение с измененными
одним или двумя битами.
Младший бит
(бит 0) порта В управляет воротами (gate), которые разрешают (бит
равен 1) или запрещают (бит равен 0) прохождение импульсов
от системных часов к счетчику какого-либо канала таймера. Чтобы импульсы от
таймера проходили к динамику, помимо битов порта В надо установить в единицу
бит 5 порта С. Кроме того, выходные импульсы от таймера проходят через порт
В (бит 1). Заметим, что этот порт также можно использовать для генерации звука.
Порты периферийного интерфейса
|
|