Содержание материала

+------------------------------------+--------------------------------------

| Конец цифрового ввода/вывода звука |

+====================================+

 

Когда пересылка закончена генерируется прерывание. Фактический номер

прерывания зависит от установки IRQ на плате Sound Blaster:

 

IRQ | Прерывание

-----+------------

2 | 0Ah

3 | 0Bh

5 | 0Dh

7 | 0Fh

 

 Для обслуживания прерывания необходимо выполнить:

 

1) подтвердите прием прерывания от DSP прочитав порт (2xEh) один раз для

8-битного звука, или порт 2xF для 16-битного звука.

2) Вывод следующего буфера, если есть.

3) Выведите значение 20h ( EOI ) в порт контроллера прерывания 20h,

а если IRQ8-15(прерывания 70h-77h), то записать 20h в A0h.

 

Установка прерывания :

 

DMA_complete = 0;

disable();

OldIRQ = getvect(0x08 + SbIRQ);

setvect(0x08 + SbIRQ,SBHandler);

enable();

 

Обработчик прерывания :

 

static void far interrupt SBHandler( void )

{

enable();

DMA_complete = 1;

 

// подтведить

inportb(baseAddrSB+0xE);

outportb(0x20,0x20);

}

 

Инициализация обработчика :

 

DMA_complete = 0;

im = inportb(0x21);

tm = ~(1 << SbIRQ);

outportb(0x21,im & tm);

enable();

 

Сброс обработчика :

 

disable();

setvect(0x08 + SbIRQ,OldIRQ);

i = inportb(0x21);

outportb(0x21, i | (1 << SbIRQ));

enable();

 

Воспроизведение файла выборки:

 

f = fopen(argv[1],"rb");

raw = ( char far * ) farmalloc(32000L);

if ( f == 0 || raw==0 )

{

printf("Не могу открыть файл выборки - %s\n",argv[1]);

printf("Нет памяти\n",argv[1]);

ResetSB();

return;

}

 

printf("Воспроизведение выборки ...\n");

WriteSB(ON_SOUND_SB);

RateSB(22222);

 

len=fread(raw,1,32000,f);

while ( 1 )

{

if ( len==0 ) break;

PlaySB(raw,len);

len=fread(raw,1,32000,f);

while ( StatePlaySB()==0 )

if ( kbhit() ) { getch(); goto Fin; }

}

 

Fin:

if ( f!=0 ) fclose(f);

if ( raw!=0 ) farfree(raw);

ResetSB();

 

 

Добавить комментарий

Не использовать не нормативную лексику.

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

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить