Средства разработки приложений


Листинг 3. Работа с DSP и DMA - часть 2


Сначала надо установить частоту дискретизации, сообщив ему константу времени

t = 256 - 1 000 000 / f,
где f - частота дискретизации.

Затем следует задать команду на запись/воспроизведение звука. Для Sound Blaster 16 проще всего выбрать команды Bx/Cx, состоящие из четырех байтов: Command, Mode, LenLo, LenHi.

Формат первого байта Command приведен в табл. 3, а второго байта Mode - в табл. 4.

Байты LenLo и LenHi - младший и старший в соответствии с длиной передаваемого блока, уменьшенной на единицу.

Команды Bx/Cx позволяют задавать как знаковый, так и беззнаковый вид представления отсчетов. При знаковом отсчет представляет собой целое число со знаком, принимающее значение 0 при отсутствии входного сигнала, при беззнаковом - целое число без знака, равное 80h для 8-разрядного режима и 8000h для 16-разрядного при отсутствии входного сигнала.

Стандартом де-факто является представление 8-разрядных отсчетов в беззнаковой форме, а 16-разрядных - в знаковой, однако для упрощения процедуры преобразования в приводимой программе обе величины выбраны знаковыми.

Таблица 6. Команды DSPКоманда Описание
14h8-разрядное воспроизведение через DMA без автоинициализации. Команда состоит из 3 байт, за ее кодом следует длина передаваемых данных, уменьшенная на 1
1Ch8-разрядное воспроизведение с автоинициализацией. Команда состоит из 1 байта, длина воспроизводимого блока задается командой 48h
24h8-разрядная запись, аналогичная команде 14h
2Ch8-разрядная запись с автоинициализацией, аналогичная 1Ch
40hЗадание константы времени, 2 байта: после кода команды - константа
41hЗадание частоты дискретизации вывода, 3 байта: после команды 2 байта частоты дискретизации в диапазоне 5000-45 000 Гц
42hЗадание частоты дискретизации ввода, аналогичное 41h
48hЗадание длины передаваемых данных, 3 байта, включая 2 байта данных. Определяет, по истечении какого объема переданных данных должно поступить прерывание от звуковой платы
Bxh16-разрядный ввод-вывод
Cxh8-разрядный ввод-вывод
D0hПауза 8-разрядного ввода-вывода
D1hВыключение динамика
D3hВключение динамика
D4hПродолжение 8-разрядного ввода-вывода, приостановленного командой D0h
D5hПауза 16-разрядного ввода-вывода
D6hПродолжение 16-разрядного ввода-вывода, приостановленного командой D5h
D8hПосле этой команды чтение из DSP возвращает статус динамика: 0 - выключен; FFh - включен
D9hВыход из 16-разрядного ввода-вывода с автоинициализацией
DAhВыход из 8-разрядного ввода-вывода с автоинициализацией
E1hПосле этой команды чтение 2 байт из DSP приведет к получению номера версии DSP, причем 1-й байт - старший, а 2-й - младший

После программирования микшера следует установить свои процедуры обработки прерываний от звуковой платы и только потом можно будет задавать режимы DMA и DSP.


Начало  Назад  Вперед



Книжный магазин