Учебное пособие по дисциплине АПЭВМ Курейчик КП, Минск 2006. Учебное пособие по дисциплине "апэвм" Минск 2006 содержание введение
Скачать 4.42 Mb.
|
ЗВУКОВАЯ СИСТЕМА ЗВУКОВЫЕ КАРТЫ Современные звуковые карты являются специальными платами расширения, работающими на шине PCI. Современная звуковая карта должна иметь 16 бит стерео цифро-аналоговый и аналого-цифровой преобразователи, обеспечивать запись и воспроизведение стереозвука "CD качества" (44100 Гц частота преобразования)в режиме полного “дуплекса” (возможность одновременной записи и воспроизведения без каких-то либо ограничений) и иметь синтезатор MIDI основанный на Wave-Table принципе. Желательно иметь возможность аппаратного микширования нескольких звуковых потоков, осуществлять аппаратное ускорение при построении геометрической акустической модели (для обеспечения трехмерного позиционирования звука). ПОРТЫ SOUND BLASTER Родоначальницей массового проникновения звуковых карт в персональные компьютеры является фирма Creative Labs. Sound Blaster 2.0 использует так называемый “базовый порт”, обычно 220h. Все остальные порты отсчитываются от базового, который может быть изменен программно. В дальнейшем знак “(w)” обозначает доступность для записи, “(r)” - для чтения. 2x0h (w) порт данных CMS Music Voice 1-6 2x1h (w) регистры CMS Music Voice 1-6 2x2h (w) порт данных CMS Music Voice 7-12 2x3h (w) регистры CMS Music Voice 7-12 2x8h (r) статус FM-синтезатора 2x8h (w) регистр адреса FM-синтезатора 2x9h (w) порт данных FM-синтезатора FM-синтезатор также доступен через порты 388h и 389h - для совместимости с синтезаторами AdLib. 2x6h (w) сброс DSP 2xAh (r) чтение данных из DSP 2xCh (r) статус порта записи в DSP 2xCh (w) порт данных и команд DSP 2xEh (r) статус доступности DSP Sound Blaster Pro использует 24 порта, начиная с базового 2x0h (r) статус левого FM-канала 2x0h (w) левый регистр FM-синтезатора 2x1h (w) порт данных левого FM-канала 2x2h (r) статус правого FM-канала 2x2h (w) правый регистр FM-синтезатора 63 2x3h (w) порт данных правого FM-канала 2x4h (w) регистр микшера 2x5h (r/w) порт данных микшера 2x8h (r) статус FM-синтезатора 2x8h (w) регистр FM-синтезатора 2x9h (w) порт данных FM-синтезатора 2x6h (w) - 2xEh (r) аналогично Sound Blaster 2.0 2x0+10h (r) - 2x0+13h (w) работа с CD-ROM (устарело). ПРЕРЫВАНИЯ SOUND BLASTER Sound Blaster использует аппаратное прерывание IRQ2,3,5,7 или 9. Эти прерывания используются для выполнения команд: 10h Direct mode 8-bit DAC (single-byte data transfer) 14h DMA mode 8-bit DAC 16h DMA mode 2-bit ADPCM DAC 17h DMA mode 2-bit ADPCM DAC with Reference byte 20h Direct mode 8-bit ADC (single-byte data transfer) 24h DMA mode 8-bit ADC 30h MIDI Read (polling mode) 31h MIDI Read (interrupt mode) 34h MIDI UART mode (polling mode) 35h MIDI UART mode (interrupt mode) 38h MIDI Write (polling mode) 40h Set Time Constant 74h DMA mode 4-bit ADPCM DAC 75h DMA mode 4-bit ADPCM DAC with Reference byte 76h DMA mode 2.6-bit ADPCM DAC 77h DMA mode 2.6-bit ADPCM DAC with Reference byte 80h Set Silence Mode Data length 91h High-Speed DMA mode 8-bit DAC 92h High-Speed DMA mode 8-bit ADC D1h Turn on Speaker D3h Turn off Speaker D8h Get Speaker Status 00h = off FFh = on D0h Halt DMA in progress D4h Continue DMA E1h Get DSP Version low-byte = Major High-byte = Minor DSP DSP (Digital Signal Processor - обработчик цифровых сигналов) может использоваться в двух режимах - непосредственное программирование и DMA. 64 Первый способ проще для программирования, но он требует программной установки всех необходимых задержек, а также ограничивает формат проигрываемого звука 8-мибитным PCM (Pulse Code Modulation - импульсная кодовая модуляция) без сжатия. DMA-режим позволяет также работать со сжатым звуком. Перед началом работы DSP нужно проинициализировать. 1. Запись байта = 1 в порт сброса DSP 2. Задержка не менее 3 микросекунд 3. Запись байта = 0 в порт сброса DSP 4. Ожидание установленного бита 7 в порту статуса доступности DSP (2xEh) 5. Чтение байта из порта данных DSP (2xAh) 6. Если прочитано 0AАh, DSP готов, иначе - пункт 4. DSP требует около 100 микросекунд для инициализации. Если после 100 повторов не получено значение 0AАh, звуковая карта не работает (или ее нет вообще). Запись производится: Чтение статуса буфера записи (порт 2xCh) Если бит 7 установлен, повтор шага 1 Запись в порт данных (2xCh) Чтение производится: Чтение порта доступности данных DSP (2xEh) Если бит 7 установлен в 0, повтор шага 1 Чтение байта из порта 2xAh Обработка прерываний В режиме DMA DSP предоставляет прерывания для выполнения операций цифроаналогового преобразования (вывод звука), аналого-цифрового (для ввода звука) и MIDI. Для выполнения этих операций требуется перехват прерывания. Т.е. чтение из порта DSP (2xAh) выполняется обработчиком прерывания. Вызов прерывания осуществляется путем чтения порта доступности DSP (2xEh) без проверки результата чтения. Обработчик прерывания должен послать сигнал EOI (записать 20h в порт 20h - как и любой другой обработчик аппаратного прерывания). Работа с DSP в непосредственном режиме Запись байта 10h в порт команд DSP (2xCh) Запись одного байта некомпрессированного звука (PCM 8bit) в порт записи (2xCh) Осуществление необходимой задержки Повторить с шага 1 До начала этой операции нужно проинициализировать звуковую карту. Работа с DSP в режиме DMA Установить обработчики прерываний Запрограммировать частоту дискретизации передаваемых звуковых данных: отключить колонки (запись байта 0D1h в порт команд (2xCh) команда “Установить время” (40h) в тот же порт 65 записать значение дискретизации в тот же порт (оно находится по формуле 256 - (1 000 000 / частота). Для 8 кГц это 131 Запрограммировать контроллер DMA на прием блока данных Выбор канала 1 (запись байта 5 в регистр маски DMA (порт 0Ah) Запись 0 в порт 0Ch Установить DMA для ЦАП (45h) или АЦП (49h) записью в порт 0Bh Послать адрес блока данных записью младшего, затем старшего байта адреса в порт 02h Запись номера физической страницы в порт 83h Запись младшего, затем старшего байта числа (байт в блоке данных - 1) в порт 03h Включить канал 1 (запись байта 01h в регистр маски - порт 0Ah) Программирование DSP для приема/выдачи данных Команда “DMA-режим 8-битного ЦАП” - 14h в порт 2xCh Запись младшего, затем старшего байта длины блока данных в порт команд (2xCh) Вызов прерывания Сохранить регистры (если нужно) Запросить прерывание (чтение из порта 2xEh), только один раз (!) Если это был последний блок данных - на шаг f) Запрограммировать DMA (см. шаг 3) на новый блок данных Запрограммировать DSP (см. шаг 4) Послать сигнал EOI Восстановить регистры Вызвать IRET Восстановить обработчик прерывания 66 |