|
|
|
|
|
|
[ Pobierz całość w formacie PDF ]
D3h - wyłączenie wzmocnienia sygnałów z układu DA. U\ycie lego rozkazu spowoduje, \e sygnały pojawiające się na wyjściu DA nie będą przesyłane do wzmacniacza (nie będą wzmacniane i przesyłane na odpowiednie gniazdo karty). U\ycie rozkazu nie zakłóci 103 PROGRAMOWANIE DSP odtwarzania syntezowanego przez układ FM dzwięku. Nale\y zwrócić uwagę, \e u\ycie rozkazu D3h jest wymagane przed rozpoczęciem konwersji analogowo-cyfrowej. Powody są tu jasne - próbkowany dzwięk jest jednocześnie kierowany na wyjście układu DA i bardzo łatwo o powstawianie sporych zakłóceń podczas samplin-gu. Kierowany na wyjście DA sygnał jest przy tym mocno zniekształcony - winy nale\y upatrywać w prędkości działania samej karty. Dowodem na to mo\e być fakt, \e przetwarzaniu analogowo-cyfrowemu przy włączonym wzmacnianiu DA w trybie emulacji Sound Blaste^a na kartach Gravis Ultra Sound towarzyszy dzwięk bardzo dobrej jakości. Rozkazu D3h mo\emy u\ywać do chwilowego wyciszania odtwarzanej próbki dzwiękowej. D8h - testowanie włączenia układu wzmacniania sygnałów z DA. Je\eli do układu DSP wyślemy kod rozkazu D8h, odczytana zaraz potem z DSP wartość będzie równa FFh, gdy wyjście układu DA jest połączone ze wzmacniaczem lub OOh, gdy tak nie jest. W praktyce rozkaz rzadko u\ywany (powtórne wysłanie do DSP komendy Dlh lub D3h nie powoduje przecie\ \adnego błędu). DOh - zatrzymanie transmisji DM. D4h - kontynuacja wstrzymanej rozkazem DOh transmisji DM. Rozkaz E l h Rozkaz El h nie został opisany w dokumentacji firmowej, mimo \e jest przyjmowany nawet przez starsze układy. Wysyłając go do DSP sprawdzić mo\emy wersję karty. Pierwszy odebrany zaraz po wysłaniu kodu komendy bajt to bardziej znaczący numer wersji karty, drugi bajt - mniej znaczący. Oto tekst zródłowy programu wyświetlającego numer wersji zainstalowanej karty: Program Wersja; Uses DSPDir; begin ifnotDSPResetthen begin wnteInCBrak karty Sound Blaster'); halt end; DSPWrite[$E1], {wystanie kodu rozkazu } writefSound Blaster'); writeln(DSPRead,'.',OSPRead) end. ROZDZIAA 4 4.6 BADANIE KONFIGURACJI SB Elegancko napisany program powinien zwalniać u\ytkownika z obowiązku samodzielnego ustalania parametrów pracy. W szczególności dotyczy to programów rozrywkowych. Programy obsługujące karty dzwiękowe powinny więc automatycznie rozpoznawać ich konfigurację. W odniesieniu do kart serii Sound Blaster oznacza to sprawdzenie numeru linii 1RQ, adresu bazowego i numeru kanału DM u\ywanych przez kartę. Sprawa badania adresu bazowego jest dosyć prosta - wystarczy podejmować próby resetowania układu DSP, za ka\dym razem zakładając inną wartość adresu. Poprawna (i odebrana w określonym czasie) odpowiedz układu oznaczać będzie, \e przyjęta wartość jest prawidłowa. Algorytm ten został zaim-plementowany w przedstawionej wcześniej bibliotece DSPDir. Więcej problemów nastręcza jednak sprawdzanie numerów kanału DM i linii IRQ- O ile zało\ymy, \e komputer komunikuje się z kartą u\ywając pierwszego kanału procedura odnajdywania numeru przerwania IRQ przypisanego karcie działać powinna według schematu: " Zainstalowanie własnych procedur obsługi przerwań IRQ 2, 3, 5, 7. Ka\da z procedur powinna modyfikować wartość zadeklarowanej wcześniej zmiennej globalnej przypisując jej swój numer. " Zainicjowanie transmisji przyjętym kanałem DM. Zakończenie transmisji spowoduje wywołanie ustawionego zworka-mi przerwania. Procedura jego obsługi nada odpowiednią wartość zmiennej, z której następnie będziemy mogli odczytać numer linii IRQ, na jakiej pojawił się sygnał. W przypadku, gdy nie znamy numeru kanału DM u\ywanego podczas transmisji, algorytm powtarzamy dla kolejnych, prawdopodobnych kanałów. Poni\ej prezentuję tekst zródłowy programu wyświetlającego informacje o konfiguracji karty Sound Blaster (przy zało\eniu transmisji kanałem DM l): program SBIRGInfo; uses dos.dspdir; var 01dlRQHand2,01dlRQHand3,01dlRQHand5;pointer; 01dlRQHand7;pointer; {stare wektory przerwań IRQ} PROGRAMOWANIE OSP Numberbyte; OLD21 byte: procedurę ProclRQ2; interrupt, { dla IRQ2 } begin Number:=2; portE$20]:=$2C { EOI} end; procedurę ProclRQ3; inCerrupt; { dla IRQ3 } begin Number:=3; port[$20]:=$20 {EO!} end: procedurę PraclRQ5; mterrupt: { dla IRQ5 } begin Number:=5; port[$20]:=$20 {EOI} end; procedurę Pr'oclRQ7; inCerrupt; { dla IRQ7 } begin Number:=7; port[$203:=$2Q {EOI} end; begin if noc SBInstalled Chen { czy wykryto kartę } begin wntelnC'Brak karty Sound Blaster'']; halt end; getintvec(8-2,aidlRQHand2); { zapamiętujemy stary wektor} setintvec(8+2,@ProclRQ2]; { naginamy"} getintvecES*3,OldlRQHand3); { zapamiętujemy stary wektor} 5etintvec(8+3,@ProclRQ3]; { naginamy"} getintvec[8-5,OldlRQHand51; { zapamiętujemy stary wektor} setintvec(S+5,@ProclRQ5]: { naginamy"} getintvec[8-7,OldlRQHand7); { zapamiętujemy stary wektor} setintvec(8+7,(o)ProclRQ7); { naginamy"} OLD21 :=port[$21]; p0(t[$21]:=porc[$213and89: ROZDZIAA 4 {odblokowane l;nnlRa2,3.5,7} port[$OA]'=5: { ustawienie maski dla kanafu OMA 1 } port[$OC]:=0;
[ Pobierz całość w formacie PDF ] zanotowane.pldoc.pisz.plpdf.pisz.plbialaorchidea.pev.pl
|
|
|