background image

 

 

Procesory sygnałowe

Wykład 2

Płyta uruchomieniowa 

ADSP 21065L EZ-KIT Lite, 

przykłady w języku C

Dr inż. Robert 
Wielgat

Tarnów 2014

background image

 

 

Opis płyty ADSP 21065L EZ-KIT 

Lite

W płycie 

ADSP 21065L EZ-KIT Lite

 zaimplementowano 

rozwiązania sprzętowe ułatwiające interaktywne 
demonstracje. Użytkownik ma do dyspozycji przyciski 
oraz programowalne diody LED. Za pomocą kodeka 

AD1819A SoundPort® Kodek

 jest możliwy dostęp do 

wejścia audio (wybieranego za pomocą zwory jako 
wejście line lub mikrofonowe) oraz wyjścia audio (wyjście 
line). Na płycie EZ-KIT Lite znajduje się 

nieulotna pamięć

w której zapisano 

program monitora

. Program monitora 

pozwala użytkownikowi wgrywać, wykonywać oraz 
debugować programy. Zastępując pamięć EPROM na 
płycie pamięcią EPROM zawierającą kod użytkownika 
płyta EZ-KIT Lite staje się samodzielnym urządzeniem 
działającym bez pomocy komputera klasy IBM PC.
Dostęp do procesora ADSP-21065L jest możliwy z 
poziomu 

komputera PC

, który jest połączony z płytą za 

pomocą portu szeregowego lub opcjonalnie za pomocą 

emulatora JTAG

.

background image

 

 

Schemat blokowy płyty

 ADSP 21065L EZ-KIT Lite

background image

 

 

Layout płyty

 ADSP 21065L EZ-KIT Lite

background image

 

 

Wejścia/wyjścia na płycie

 ADSP 21065L EZ-KIT Lite

background image

 

 

Wejście zasilania

 ADSP 21065L EZ-KIT Lite

Podstawowym 
gniazdem 
zamontowanym na 
płycie jest wejście 
zasilacza. Według 
rys. 2. złącze J1. 
Zalecane 
parametry 
używanego 
zasilacza są 
następujące: 6,5 – 
9,0 V 1,2 A. Przy 
czym napięcie 
doprowadzane jest 
do pinu 
centralnego, masa 
znajduje się na 
pierścieniu 
okalającym 
wejście.

 

background image

 

 

Wejścia/wyjścia audio

 ADSP 21065L EZ-KIT Lite

Na płycie znajdują 

się złącza stereo mini 
jack stereo na rys 2 – 
J7, J8. J7 – Line out 
pozwala na dołączenie 
do układu urządzeń 
odbiorczych takich jak 
słuchawki 
stereofoniczne, daje to 
możliwość na ciągłe 
śledzenie efektów 
przetwarzania lub 
generowania dźwięku. 
J8 – Mic/ Line in 
pozwala na dołączenie 
urządzeń typu 
mikrofon, zewnętrzne 
źródło dźwięku. W celu 
korzystania z opisanych 
wyprowadzeń 
konieczne jest 
odpowiedzenie 
połączenie zworek 
pomiędzy wyjściami, a 
układem AD1819A.

background image

 

 

Porty rozszerzeń

 ADSP 21065L EZ-KIT Lite

Złącza oznaczone J2 

J4 to dwa 
wyprowadzenia portów 
rozszerzeń. Zapewniają 
one dostęp do sygnałów 
magistrali procesora. 
Jedną z możliwości 
korzystania z tych złącz 
poza debugowaniem 
jest kontrola hosta. 
Wszystkie przerwania, 
sygnały magistrali i 
sygnały PWM są 
dostępne za 
pośrednictwem tego 
portu. Obciążanie 
portów zewnętrznych 
może wpłynąć na 
szybkość magistrali oraz 
wydajność procesora.

background image

 

 

Złącze EMAFE

 ADSP 21065L EZ-KIT Lite

Złącze EMAFE - 

Enhanced Modular 
Analog Front End 
dostarcza 
standardowego 
interfejsu do 
podłączenia urządzeń z 
wejściami/wyjściami 
analogowymi. Złącze 
jest oznaczone jako J6, 
posiada 96 pinów 
ułożonych w trzech 
rzędach po 32 piny. 
Interfejs obsługuje: 

16 linii danych
8 linii adresowych
3 linie sterujące 

magistralą równoległą

16 synchronicznych 

portów szeregowych

1 wyjście przerwań
1 wejście flagi

background image

 

 

Port RS232

 ADSP 21065L EZ-KIT Lite

Złącze J3 to 

wyprowadzenie 
interfejsu UART 
służącego do 
komunikacji z 
zewnętrznymi 
urządzeniami w 
standardzie RS 232.

Za pomocą tego 

portu jest podłączony 
min. komputer 
nadrzędny, klasy IBM PC.

background image

 

 

Złącze JTAG

 ADSP 21065L EZ-KIT Lite

Złącze J10 jest 

wyprowadzeniem 
portu emulatora. Służy 
do uruchamiania i 
programowania 
procesora. Jednym z 
najważniejszych 
założeń standardu 
JTAG jest możliwość 
programowania 
układu w gotowym 
urządzeniu, bez 
konieczności 
odłączania. W celu 
zapewnienia 
odpowiedniego 
zasilania przy 
odłączonym złączu 
należy w odpowiedni 
sposób zewrzeć 
wybrane piny za 
pomocą zworek.

background image

 

 

Rola przycisków

 ADSP 21065L EZ-KIT Lite

Na płycie ewaluacyjnej 
zamontowano osiem 
przycisków push-button 
typu mikro switch. 
- Przycisk 

RESET

 pozwala 

zainicjować układ DSP. 
Przycisk pomocny jest w 
przypadku utraty 
komunikacji pomiędzy EZ-
KIT Lite, a komputerem, z 
którego uruchamiane są 
programy. W celu 
nawiązania powtórnej 
komunikacji należy wcisnąć 
przycisk RESET.
- Przyciski 

FLAG 0-3

 

pozwalają zmienić status 
czterech flag na pinach 
procesora DSP.
- Przyciski 

IRQ 0-2

 

umożliwiają wysyłanie 
zewnętrznego przerwania 
do procesora. IRQ0 jest 
wspólne z interfejsem 
UART, IRQ1 jest wspólne ze 
złączem EMAFE.

background image

 

 

Diody sygnalizacyjne

 ADSP 21065L EZ-KIT Lite

Na płycie znajduje 
się sześć diod 
LED, które są 
sterowane przez 
wyjścia procesora 
DSP. Są one 
oznakowane 
zgodnie z 
wyjściami flag, 
które je 
kontrolują. 
Ponadto na płycie 
zamontowana jest 
dioda zasilania 
sygnalizująca 
podłączenie 
zasilacza.

background image

 

 

Zwory

 ADSP 21065L EZ-KIT Lite

background image

 

 

Wybór trybu rozruchu

 ADSP 21065L EZ-KIT Lite

Zworka JP6 kontroluje 
zachowanie procesora 
ADSP, gdy system jest 
resetowany 
( w wyniku 
podłączenia zasilania 
lub przyciskiem 
RESET). 
Kiedy zworka nie jest 
podłączona do GND 
system ładowany jest 
z pamięci EPROM. Jeśli 
zworka jest 
podłączona do GND, 
procesor usiłuje się 
uruchomić poprzez 
interfejs hosta 
(expansion port). 

background image

 

 

Wybór rozmiaru pamięci 

EPROM

 ADSP 21065L EZ-KIT Lite

EZ-KIT Lite obsługuje 
pamięci: 128K x 8, 256K x 
8, 512K x 8, oraz 1M x 8, 
poszczególne z nich 
wybierane są poprzez 
zwory, JP4 i JP5. 
Fabrycznie na płytce jest 
montowana pamięć 
EPROM 256K x 8, jeżeli 
zostanie zastosowana 
inna pamięć zwory 
powinny zostać 
ustawione według 
poniższej tabeli: 

background image

 

 

Wybór ID Procesora

 ADSP 21065L EZ-KIT Lite

Podczas typowej pracy na 
pokładzie EZ-KIT Lite 
znajduje się tylko jeden 
procesor. W takim 
przypadku należy 
sprawdzić ustawienie 
zworek JP7 i JP8 dla 
zapewnienia poprawności 
działania systemu jedno 
procesorowego. W 
przypadku dołączenia do 
układu dodatkowego 
procesora poprzez złącze 
rozszerzeń zworki 
powinny być połączone  
według poniższej tabeli:
 

background image

 

 

Wybór funkcji wejścia 

Mic/Line in

 ADSP 21065L EZ-KIT Lite

Użyte złącze jack jest 
wykorzystywane do 
podłączenia 
zewnętrznych źródeł 
dźwięku oraz 
mikrofonu. Aby wybrać 
czy wejście ma 
pracować jako wejście 
mikrofonowe, czy też 
jako wejście Line 
należy ustawić zworki 
JP1 i JP2 zgodnie z 
poniższą tabelą:

background image

 

 

Wybór kodeka AD1819

 ADSP 21065L EZ-KIT Lite

Magistrala płytki 
dzielona jest pomiędzy 
zastosowany kodek a 
interfejs EMAFE. 
Zworka JP3 wyłącza 
dostęp kodeka do 
magistrali co 
zapobiega błędom w 
transmisji pomiędzy 
dwoma urządzeniami. 
Jeżeli EMAFE nie jest 
używane zworę JP3 
należy dołączyć do 
GND w celu 
umożliwienia pracy 
układowi AD1819

background image

 

 

Najważniejsze podukłady

 ADSP 21065L EZ-KIT Lite

background image

 

 

Procesor

 ADSP 21065L EZ-KIT Lite

Procesor ADSP 
21065L jest 
zmiennoprzecinkowy
m 32-bitowym 
procesorem 
I generacji do 
wydajnych 
i niskobudżetowych 
zastosowań w 
cyfrowym 
przetwarzaniu 
sygnałów. 

background image

 

 

Schemat blokowy procesora 

ADSP 21065L

background image

 

 

Oscylator

 ADSP 21065L EZ-KIT Lite

Zastosowany 
oscylator 
taktuje 
procesor z 
częstotliwością 

30 MHz. 
Wewnątrz 
procesora 
częstotliwość 
ta jest 
podwajana, 
dzięki temu 
procesor jest 
taktowany 
wewnętrznie z 
częstotliwością 

60 MHz.

background image

 

 

Pamięć SDRAM

 ADSP 21065L EZ-KIT Lite

2 bloki pamięci SDRAM 
(Synchroniczna 
dynamiczna pamięć 
dostępu swobodne-go) o 
wielkości 1Mb x 16 bit 
są połączone z linią MS3 
procesora. ADSP-21065L 
używa linii adresowej 13 
do wyboru banku. 
Dodatkowo ADSP ma 
rozłączoną linię 
adresową  służącą do 
od-świeżania pamięci 
SDRAM. Magistrala 
umożliwia przesył 
danych do i z pamięci z 
prędkością 2xCLKIN, co 
daje prędkość do 240 
MB/s. Wszy-stkie wejścia 
są próbkowane zegarem 
SDCLK. Natomiast 
wyjścia można 
odczytywać  na 
narastającym zboczu 
impulsów zegara SDCLK.

 

background image

 

 

Pamięć EPROM

 ADSP 21065L EZ-KIT Lite

PAMIEĆ EPROM 

(kasowalna 

półprzewodnikowa 

pamięć stała) o 

wielkości do 1Mb x 8 bit 

przechowuje programy, 

które mogą być 

wykorzystane przez 

ADSP-21065L. Operacja 

wyboru źródła 

restartowania 

kontrolowana jest przez 

wyprowadzenia BMS 

(Boot Memory Select) i 

BSEL (Boot EPROM). 

Pierwsze 256 instrukcji 

(1536 bajtów) jest 

automatycznie 

ładowane przez ADSP-

21065L po kasowaniu. 

background image

 

 

Układ CPLD

 ADSP 21065L EZ-KIT Lite

Programowalny 
układ CPLD realizuje 
indeksowane 
adresowanie 
wymagane przez 
interfejs EMAFE. 
Układ 
programowalny 
kontroluje 
ustawianie adresu, 
a także kierunek 
przesyłania danych 
po magistrali.

 

background image

 

 

Układ UART

 ADSP 21065L EZ-KIT Lite

UART jest układem 
używanym do 
asynchronicznego 
przesyłania danych 
z magistrali danych 
i adresowej 
procesora poprzez 
znajdujący się na 
płycie port 
szeregowy RS232. 
UART zawiera 
również bufor do 
tymczasowego 
gromadzenia 
danych w przypadku 
szybkiej transmisji.

background image

 

 

Kodek AD1819

 ADSP 21065L EZ-KIT Lite

Kodek zawiera 
dwukanałowy 
przetwornik Σ∆ AC i 
parę dwukanało-wych 
przetworników ∑∆ CA. 
Wejścia przetwornika 
AC mogą zostać 
wybrane z czterech par 
dwukanałowych 
sygnałów 
analogowych: LINE1, 
LINE2, pomocnicze 
("aux”) LINE#1 i 
wyjście DAC z 
mieszacza. 
Kontrolowane 
programowo 
wzmocnienie pozwala 
na niezależne 
wzmocnienie dla 
każdego kanału 
wchodzącego do 
przetwornika AC.

background image

 

 

Kodek AD1819

 ADSP 21065L EZ-KIT Lite

Parametry AD1819
- jednoukładowy zintegrowany 16-bitowy kodek 
audio stereo Σ/∆*,
- programowane wzmocnienie i tłumienie,
- wejścia i wyjścia stereo ,
- analogowe i cyfrowe mieszanie sygnałów,
- filtry sygnałowe zintegrowane w układzie 
scalonym: cyfrowa interpolacja i decymacja; 
filtracja dolnoprzepustowa wyjść analogowych,
- Cyfrowa zmiana częstotliwość próbkowania od 
7 kHz do 48 kHz,
- szeregowy cyfrowy interfejs kompatybilny z 
rodziną 
ADSP-21XX/21XXX,
- zasilanie 5V ( Imax = 140mA).

background image

 

 

Układy zasilania

 ADSP 21065L EZ-KIT Lite

Większość 
układów na płycie 
wymaga napięcia 
zasilania 3,3V, za 
wyjątkiem 
Kodeka 1819 oraz 
układu UART, 
które wymagają 
napięcia 5V. 
Zatem na płycie 
są umieszczone 
dwa niezależne 
źródła zasilania 
dające napięcia 
5V oraz 3,3V.

background image

 

 

Visual DSP++

Uruchamianie nowej sesji

Okno New Session 
pojawia się w 
momencie 
pierwszego 
uruchomienia 
programu

background image

 

 

Visual DSP++

Środowisko 

uruchomieniowe

Środowisko 
uruchomieniow
e Visual DSP++ 
pozwala na 
edycję, 
kompilację i 
uruchamianie 
programów na 
płycie ADSP 
21065L.

background image

 

 

Przykłady programów

background image

 

 

Program demonstracyjny 

„Blink”

Program ten steruje dwoma diodami LED 
podłączonymi do flag (6 i 7). Diody te są 
zapalane naprzemiennie. W celu uzyskania 
ciągłego świecenia diod użyto timera oraz 
przerwania generowanego w wyniku 
osiągnięcia przez rejestr TCOUNT wartości 
umieszczonej w rejestrze TPERIOD. 
Procedura obsługująca przerwanie 
naprzemiennie ustawia lub zeruje flagi 
wyjściowe 6 i 7 w zależności od stanu 
poprzedniego. Wyzerowanie flagi powoduje 
zapalenie się diody, natomiast ich ustawienie 
powoduje wyłączenie. W programie szybkość 
migania diód uzyskuje się poprzez zmianę: 
define flash_PERIOD 0x0300000 na 
0x0900000.

background image

 

 

Program „Blink” - kod

#include <def21065l.h>   

// dołączenie plików do programu

#include <21065l.h>
#include <signal.h>
#include <macros.h>

------------------------------------------------------------
DEFNICJE MAKR I STAŁYCH
------------------------------------------------------------
#define FLASH_PERIOD 0x5300000  

// określenie tempa cyklów 

     // migania diod

#define SetIOP(addr, val)  (*(int*)addr) = (val) 

// 

definicja

 

#define GetIOP(addr)       (*(int*)addr)         

// makr

 

------------------------------------------------------------

-

DECLARACJE ZMIENNYCH GLOBALNYCH
------------------------------------------------------------
int odd_or_even_flag; 

// deklaracja zmiennej flagi 

(parzysta, 

  // nieparzysta)

background image

 

 

Program „Blink” - kod

// PROTOTYPY FUNKCJI 
//------------------------------------------------------------

void timer_int(int);
void set_timer(int);
void init_timer(void);
void timer_int(int);

//************************************************************
// Definicja funkcji init_timer(): ustawienie priorytetu 
// timer a 0 na niski, zapisanie w wektorze przerwań, 
// zdjęcie maski i wystartowanie timera.
//************************************************************

void init_timer(void) 

// deklaracja funkcji inicjującej timer

{ asm("#include <def21065l.h>");

//dołączenie 

pliku<def21065l.h>

asm("bit clr mode2 TIMEN1 | TIMEN0;");

//zatrzymanie timera 1

 

    

// i timera 0

interrupt(SIG_TMZ, timer_int);  

// wskazanie na podprogram 

     // obsługi przerwania

asm("bit clr mode2 TIMEN0; 

//zatrzymanie timera 0

bit set imask TMZLI;
bit clr mode2 INT_HI0 | INT_HI1;
bit set mode2 PWMOUT0 | TIMEN0;");

//ustawienie trybu PWM dla 

//timera 0 i jego wystartowanie

}

background image

 

 

Program „Blink” - kod

//***********************************************************
// Definicja funkcji set_timer(). Start timera 0 po 
// okresie równym ilości cyklów zegarowych zawartych 
// w zmiennej t_period
*************************************************************

void set_timer(int t_period)

//deklaracja funkcji ustawiającej 

 // i startującej  timer 0

{

if (t_period > 1)
{
asm("bit clr mode2 TIMEN0;");    

//zatrzymanie timera 0

SetIOP(TPERIOD0, t_period);      

// ustawienie cyklu 

//timera na wartość zmiennej t_period

SetIOP(TPWIDTH0, 1); 

//ustawienie szerokości 
//impulsow na 1

asm("bit set mode2 TIMEN0;"); 

// wystartowanie timera 0

}

}

background image

 

 

Program „Blink” - kod

//**********************************************************

*

// Definicja funkcji timer_int(). Podprogram obsługi
// przerwania od timera 0
//**********************************************************

void timer_int( int sig_num ) 

// deklaracja funkcji

{
sig_num=sig_num;

if (1 & odd_or_even_flag++) 

// Jeżeli wartość operandu 

// „odd_or_even_flag” nie jest zerem, inkrementuj operand 
// i wykonaj:

{
asm("R0 = DM(IOSTAT);
R0 = BCLR R0 BY 2; 

// Wyzerowanie flagi nr. 6

DM(IOSTAT) = R0;");

asm("R0 = DM(IOSTAT);
R0 = BSET R0 BY 3;

// Ustawienie flagi nr. 7

DM(IOSTAT) = R0;");
}

...

background image

 

 

Program „Blink”

...

else 

// Jeżeli warunek (1 & odd_or_even_flag++) nie jest 

  // spełniony, wykonaj:

{
asm("R0 = DM(IOSTAT);
R0 = BSET R0 BY 2; 

// Ustawienie flagi nr. 6

DM(IOSTAT) = R0;");

asm("R0 = DM(IOSTAT);
R0 = BCLR R0 BY 3; 

// Wyzerowanie flagi nr. 7

DM(IOSTAT) = R0;");
}

return; 

// zakończenie działania funkcji

}

background image

 

 

Program „Blink”

//**********************************************************
// Definicja funkcji main(). Główna funkcja. Początkowe
// ustawienie flag, ustawienie i wystartowanie timera,
// przejście w pętle
//**********************************************************

*

void main ( void )

// deklaracja funkcji

{
asm("R0 = DM(IOSTAT);
R0 = BCLR R0 BY 2; 

// Wyzerowanie flagi nr. 6

DM(IOSTAT) = R0;");
asm("R0 = DM(IOSTAT);
R0 = BSET R0 BY 3;

// Ustawienie flagi nr. 7

DM(IOSTAT) = R0;");
set_timer(FLASH_PERIOD); 

// Wywołanie funkcji „Set_timer” z 

// argumentem = wartości zmiennej 

„FLASH_PERIOD”

init_timer();

// Wywołanie funkcji “Init_timer”

while( 1 )

// Przejście do nieskończonej pętli

{
idle();

// Zatrzymanie procesora , będzie reagował 
// tylko na przerwania

}

}

background image

 

 

Generacja przebiegu 

sinusoidalnego

ADSP 21065L

#define M_2PI 6.28318530717958647692
#define FS 48000
void main ( void )
{
   float output, t, A, f, dt;
  
   A=10000;  // Amplituda
   f=1000;   // Czestotliwosc [Hz]
   
   dt=f/(float)FS;
    
   init_codec();
   user_tx_ready = 0;
   t=0;
   …

background image

 

 

Generacja przebiegu 

sinusoidalnego

ADSP 21065L – c.d.


for(;;)
   {
      user_rx_ready = 1;
      idle();
      while (user_tx_ready);
      //---------------- Tu wpisz swoj kod -------------------
     
      output=A*sin(M_2PI*t);
      t+=dt;
      if(t>=1)
         t=0;
      
      //------------------------------------------------------  
      user_tx_buf[RIGHT_CHNL] = output;
      user_tx_buf[LEFT_CHANL] = output;
      user_tx_buf[TAG] = DOUT_TAG;
      user_tx_ready = 1;
   };
}

background image

 

 

Generacja przebiegu 

piłokształtnego narastającego 

ADSP 21065L

#define FS 48000
void main ( void )
{
   float output, t, A, f, dt;
  
   A=10000;  // Amplituda
   f=1000;   // Częstotliwość [Hz]
   
   dt=2*f/(float)FS;
    
   init_codec();
   user_tx_ready = 0;
   
   t=0;

   

background image

 

 

Generacja przebiegu 

piłokształtnego narastającego 

ADSP 21065L – c.d.


   for(;;)
   {
      user_rx_ready = 1;
      idle();
      while (user_tx_ready);
      //---------------- Tu wpisz swoj kod -------------------
     
      output=A*t;
      t+=dt;
      if(t>=1)
         t=-1;
         
      //------------------------------------------------------   
      user_tx_buf[RIGHT_CHNL] = output;
      user_tx_buf[LEFT_CHANL] = output;
      user_tx_buf[TAG] = DOUT_TAG;
      user_tx_ready = 1;
   };
}

background image

 

 

Generacja figur Lissajou 

ADSP 21065L

void Ellipse(float R1, float R2)
{
  //---------------- Tu wpisz swoj kod -------------------
  static float t=0;
  
  t+=FS_INV1000;
  if(t>=1)
     t=0;
     
  OutX=R1*sin(M_2PI*t);
  OutY=R2*sin(M_2PI*t+M_PI2);
}

Funkcja rysująca 

elipsę:

background image

 

 

Generacja figur Lissajou 

ADSP 21065L – c.d.

void main ( void )
{
   float t=0;
   float Ax=10000, Ay=10000;
   init_codec();
   user_tx_ready = 0;
    for(;;)
   {
      user_rx_ready = 1;
      idle();
      while (user_tx_ready);
      //---------------- Tu wpisz swoj kod 

-------------------

       Ellipse(Ax, Ay);
       //-----------------------------------------------

-------   

      user_tx_buf[RIGHT_CHNL] = OutX;
      user_tx_buf[LEFT_CHANL] = OutY;
      user_tx_buf[TAG] = DOUT_TAG;
      user_tx_ready = 1;
   };
}

Program 
główny z 
wywołaniem 
funkcji 
rysującej 
elipsę:

background image

 

 

Generacja echa

Ou

t

+

+

Gain 

1

In

+

+

Direct 
Signal

Reverb 
feedback

FIFO

Gain 2

W schemacie blokowym generacji echa kluczową  rolę 
odgrywa pamięć FIFO, która opóźnia sygnał bezpośredni o 

próbek. Poziom sygnału odbicia jednokrotnego i 

wielokrotnego kontroluje element wzmacniający Gain2 a 
poziom sygnału przy odbiciach wielokrotnych Gain1. 
Współczynniki Gain1 i Gain2 są z reguły mniejsze od 
jedności.

background image

 

 

Generacja echa

float sound_delay(float in, int time, float *buff)
{
  float out;
  static int n=0;
  
  out=buff[n];
  buff[n]=in;
  
   n++;
   if(n>=time*48)
      n=0;
  
  return out;
}

background image

 

 

Generacja echa

void main ( void )
{
    int i;
   
    float filter_input;
    float filter_output;
    float fifo;
    float gain1=1.0;
    float gain2=0.8;
    int delay=100;
    
    for( i=0; i<BUFFSIZE; i++)
       buffer[i]=0;    
    // Initialize some codec registers.
    init_codec();
    
  

background image

 

 

Generacja echa

// Loop forever.
   
   user_tx_ready = 0;
   for(;;)
   {
      user_rx_ready = 1;
      idle();
      while (user_rx_ready);
      while (user_tx_ready);
      filter_input = user_rx_buf[RIGHT_CHNL];
      fifo=gain2*sound_delay(fifo,100,buffer)+filter_input;
      filter_output=filter_input+gain1*fifo;
    
      user_tx_buf[RIGHT_CHNL] = filter_output;
      user_tx_buf[LEFT_CHANL] = filter_output;
      
      user_tx_buf[TAG] = DOUT_TAG;
      user_tx_ready = 1;
   };
}

background image

 

 

Efekt Ping-pong

Ga

in

 2

Gain 

4

Out 

L

+

+

Gain 

1

In 

L

+

+

Direct 
Signal

Reverb 
feedback

FIFO

Ou

R

+

+

In

 

R

+

+

Dir

ect 

Sig

na

l

Rev

erb

 

feed

ba

ck

FIF

O

Gain 

3

Ga

in

 2

Gain 

4

Out 

L

+

+

Gain 

1

In 

L

+

+

Direct 
Signal

Reverb 
feedback

FIFO

Ou

R

+

+

In

 

R

+

+

Dir

ect 

Sig

na

l

Rev

erb

 

feed

ba

ck

FIF

O

Gain 

3

background image

Koniec


Document Outline