Sunteți pe pagina 1din 34

SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

FACULTATEA ELECTRONICA TELECOMUNICATII


SI TEHNOLOGIA INFORMATIEI

RECEPTOR DTMF

STUDENT: PROFESOR:
Ilie Lorenta Zoican Sorin

*** 2008 ***

1
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

Descrierea teoretica a prelucarii de semnal

DTMF (Dual Tone Multifrequency) reprezintă un sistem de


semnalizare care înlocuieşte semnalizarea clasică,cu pulsuri,în reţeaua
telefonică. De asemenea sistemul DTMF este utilizat şi în alte aplicaţii :
sisteme bancare prin telefon,poştă electronică pe linie
telefonică,control la distanţă prin telefon.
Aparatul telefonic poate transmite operaţia de numerotare
(numărul apelat) spre centrală telefonică în următoarele moduri:
a) Serii de impulsuri lipsă de curent egale ca număr cu cifra care
trebuie transmisă;
b) Semnalizare multifrecvenţă (DTMF = Dual Tone Multifrequency),
care se realizează prin transmiterea simultană în linie a două semnale
de frecvenţe standardizate pentru fiecare cifră transmisă;
Codecul DTMF conţine un codor care transformă apăsările de
taste în semnale dual-tone, şi un decodor care detectează prezenţa şi
conţinutul informaţiei semnalului de ton DTMF care va fi recepţionat.
Fiecare tastă de pe claviatură cu numerotare în cod DTMF este unic
identificată de frecvenţa de pe linie şi frecvenţa de pe coloană (ca în

2
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

figura 1). Schema de generare şi decodare nu este aşa de complicată


şi poate fi uşor rulată pe un DSP.

Sunt folosite două frecvenţe pentru a genera un digit DTMF. O


frecvenţă este aleasă din cele patru de pe rând, iar cealaltă este
aleasă din cele patru de pe coloană. Două din cele opt frecvenţe pot fi
combinate pentru a genera 16 digiţi DTMF, diferiţi între ei. Din cele 16
butoane care apar în figura de mai sus, 12 sunt butoane care se
gasesc pe orice tastatură telefonică , iar patru dintre ele sunt rezervate
pentru aplicaţii viitoare. Tastele A, B, C, D nu sunt folosite în prezent ,
dar sunt parte integrantă a standardului.

RECEPTIONAREA TONURILOR DTMF

Apăsând orice tastă , se generează un ton care este suma a două


sinusoide pe frecvenţe diferite, corespunzătoare liniei şi coloanei din
dreptul acelei taste. Frecvenţele utilizate în DTMF sunt alese cu grijă,
astfel încât circuitele de decodare să nu le confunde cu alte semnale
care pot apărea pe linie. Deoarece transmiterea semnalelor DTMF nu

3
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

implică o întrerupere a circuitului telefonic, tonurile DTMF pot fi


transmise şi în timpul unei convorbiri telefonice, prin simpla apăsare a
unei taste.

Un semnal multifrecvenţă (DTMF) reprezintă o sumă de două


sinusoide convenabil alese; există mai multe standarde DTMF care
diferă prin numărul de frecvenţe alese şi prin valoarea acestora. Cel
mai utilizat standard este standardul CCITT care recomandă două
grupuri de frecvenţe : un grup de frecvenţe joase şi un grup de
frecvenţe înalte. Frecvenţele tipice DTMF sunt cuprinse între 700 Hz şi
1700 Hz.
Decodarea unui ton DTMF presupune extragerea celor 2 frecvenţe (tonuri) din semnal şi
testarea acestora pentru a se determina dacă semnalul este ton DTMF;dacă cele 2
frecvenţe corespund standardului DTMF atunci se determină codul de 4 biţi asociat
semnalului DTMF receptionat.

Decodarea analogică a tonurilor DTMF se realizează prin detecţia şi numărarea


trecerilor prin zero ale semnalului testat după ce acesta a fost trecut printr-un set de filtre
trece bandă foarte selective.În prelucrarea digitală este convenabil să se efectueze o
transformare din domeniul timp în domeniul frecvenţă. Această transformare este
efectuată utilizînd algoritmul Goertzel.Implementarea acestui algoritm se face cu ajutorul
unui filtru IIR de ordin 2 deci receptorul DTMF contine si el un asemenea filtru.In figura
1 este prezentată structura filtrului IIR de ordin 2.

4
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

Figura 1.Filtru IIR de ordin 2 care implementeaza algoritmul Goertzel

Algoritmul Goertzel este urmatorul:

| X(k) | 2 = A 2 + B 2 - A.B.c k
A = Q k (N-1); B = Q k (N-1);
Q k (n) = c k .Q k (n-1) - Q k (n-2) + x(n);
c k = 2. cos (2πk/N);
Alegerea lui N şi k se face conform relaţiei:
f recvenţa dorită k
----------------------------------- = -----
( frecvenţa de eşantionare) N

Pentru detecţia unui ton DTMF este necesară determinarea amplitudinii celor 2
componente spectrale (frecvenţele care însumate generează tonul DTMF) şi a
armonicelor acestora. k = (N.frecvenţa dorita)/(frecvenţa de eşantionare) ;trebuie ales N
astfel încît k să rezulte cît mai apropiat de un numar întreg. Se alege N = 205 pentru
frecvenţele fundamentale şi N = 201 pentru armonici. Frecvenţa de eşantionare este de 8
kHz.
Avantajele folosirii algoritmului Goertzel:

 nu este necesară stocarea a N eşantioane ale semnalului testat (N este numărul de


puncte în care se calculează transformata Fourier discretă).
 calculul unui punct al DFT se realizează simultan cu citirea eşantionului curent al
semnalului testat.
 nu este necesară adresarea cu inversarea biţilor (ca la FFT).
 implementarea algoritmului Goertzel este simplă (echivalentă cu un filtru IIR de
ordin 2).

Testele care se efectueaza dupa ce a fost trecut prin filtre sunt:


1. - determinarea frecvenţei de linie şi a frecvenţei de coloană cu amplitudini
maxime, din cele 8 componente spectrale asociate frecvenţelor fundamentale.
2. - verificarea amplitudinii componentelor spectrale alese la punctul 1 (acestea
trebuie să depăşească un prag minim impus).

5
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

3. - se verifică dacă mai există şi alte componente spectrale care au


amplitudinea peste pragul impus la punctul 2 (acest lucru nu este permis pentru un ton
DTMF).
4. - se calculează diferenţa în decibeli dintre nivelul frecvenţei de rînd şi nivelul
frecvenţei de coloană (determinate anterior) şi se compară cu un prag impus (altul decît
cel definit anterior);diferenţa nu trebuie să depăşească acest prag.
5. - pentru frecvenţele de rînd şi de coloană determinate se verifică amplitudinile
componentelor spectrale ale armonicii a -2 -a ;acestea trebuie să fie neglijabile.
6. - codul binar asociat tonului DTMF se generează numai dacă acesta are durata
corectă (tonul DTMF are o durată de 40-50 ms ). Specificaţiile date de AT&T
despre durata tonului arată următoarele:10digiţi/sec este rata de date
maximă pentru semnalele Touch-Tone. Pentru un interval de timp de
100 milisecunde, durata tonului este de cel putin 45 de milisecunde şi
nu mai lungă de 65 milisecunde. Esenţial este faptul că seria digiţilor
generaţi de la claviatură sunt transformate în serii de “dualtones” cu
durate bine specificate care sunt întrerupte de pauze, care sunt de
asemenea de anumite durate. Pauzele sunt de asemenea necesare
pentru a face deosebirea între doi sau mai mulţi digiţi intraţi succesiv.

Un ton DTMF se obtine prin însumarea unei frecvenţe din


grupul frecvnţelor joase cu o frecvenţă dingrupul frecvenţelor înalte.
Avantajele utilizării procesorului de semnal ADSP 2181 în generarea şi
recepţia tonurilor DTMF sunt urmatoarele:
- precizie ridicată în generarea frecvenţelor necesare;
- modificarea simplă a standardului DTMF (prin schimbarea structurii
de date a programului);
- posibilitatea implementării unor sisteme de generare şi recepţie
DTMF multicanal;

SCHEMA BLOC A SISTEMULUI

6
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

Organigrama programului

7
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

Iniţializare variabile,
întreruperi, stare

Iniţializare codec

SETUP
Iniţializare DSP

restart

da
nu Asteaptă întreruperi pe
SPORT0

Prelucrări associate
algoritmului de
recepţie

Evaluarea şi generarea
codului tonului decodat

Organigrama pentru algoritmul Goertzel

8
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

Buclă de aşteptare

s-a primit întrerupere pe


SPORT0

Se citeşte eşantionul

N=N-1

nu da
N=0?

Cntr=tones Apel feed-forward

Se calculează
nu amplitudinile la pătrat
corespunzatoare
da
Contor expirat? fiecarei frecvenţe şi se
stochează în mnsqr

rts
Se umple bufferul
circular
Q1Q2_buff cu
valorile calculate

Organigrama pentru calc outcode:

Call test_and_output

Se iniţializează i1, i2, i3, cntr


af=pass 0

da nu
Contor expirat?

Outcode=ar Amplitudinea la pătrat


corespunzătoare
frecvenţelor tonurilor nu
DTMF este mai mare
decât nivelul minim?
rts
da

af=ax1 or af
ar=pass af

Organigrama de conversie:

9
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

Se citeşte outcode în registrul AR

Selectăm zona k=HI (frecvenţe înalte)


nu k=1? da

nu k=2? da
k=4?
nu
nu da
k=8? r=0
da r=1

r=2
r=3

mr1=r

ERR Selectăm m=LO


Error=1

nu da
m=1?
nu
da
m=2?
nu
da c=0
m=4? c=1
nu da

m=8? c=2

c=3

ay1=c

sr1=4*r

ar1=sr1+c

tone=ar

rts

Listingurile programului in limbaj de asamblare:

#include "def2181.h"

#define f_sample 8000 /*se defineste frecventa de esantionare*/


#define N 205 /*sunt N puncte de esantioane= N puncte de calcul pt fourier*/
#define tones 8 /*sunt 8 tonuri dtmf*/
#define tones_x_2 16 /*se face decodare de doua ori*/
#define M 1000 /*larginmea bufferului in*/
#define scale -8 /*se defineste constanta scale =-8*/
.section/dm data1; /*sectiunea de date in memorie*/
.var/circ Q1Q2_buff[tones_x_2]; /* Goertzel feedback loop storage elements ,este
un buffer circular in care se stocheaza coeficientii
Goertzel*/

10
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

.var outcode; /* codul de iesire*/


.global outcode;
.extern calc_tone;
.var/circ buff_in[M]; /* bufferul de intrare*/
.var in_sample; /*{ esantionul de intrare curent }*/
.var countN; /*{ numara esantioanele 1, 2, 3, ..., N }*/
/*{ min "tone-present" mnsqr level }*/
.var
min_tone_level[tones]=0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003;
/*{ valorile rezultate 1.15 mnsqr Goertzel }*/ /*praguri
minime*/
.var mnsqr[tones]; /*se declara o variabila magnitude square (x2(k) din formula
Goertzel)*/
.var bits[tones]=0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080;
/*.var port_in*/
.var tab[16]={0x0000,0x0001,0x0002,0x0003,
0x0004,0x0005,0x0006,0x0007,
0x0008,0x0009,0x000A,0x000B,
0x000C,0x000D,0x000E,0x000F}; /*tabela tonurilor, fiecare ton e pe 4 biti*/
.global tab;
.var tone;
.global tone;
.var error;
.global error;
.var rx_buf[3]; /* Status + L data + R data, buffer de receptie */
.var tx_buf[3] = 0xc000, 0x0000, 0x0000; /* Cmd + L data + R data, buffer de
transmisie */
.var init_cmds[13] = 0xc002, /* se incepe initialixarea comenzilor codecului */
/*Left input control reg
b7-6: 0=left line 1
1=left aux 1
2=left line 2
3=left line 1 post-mixed loopback
b5-4: res
b3-0: left input gain x 1.5 dB*/

0xc102, /*
Right input control reg
b7-6: 0=right line 1
1=right aux 1
2=right line 2
3=right line 1 post-mixed loopback
b5-4: res
b3-0: right input gain x 1.5 dB */
0xc288, /*left aux 1 control reg
b7 : 1=left aux 1 mute
b6-5: res

11
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

b4-0: gain/atten x 1.5, 08= 0dB, 00= 12dB


*/ 0xc388, /*
right aux 1 control reg
b7 : 1=right aux 1 mute
b6-5: res
b4-0: gain/atten x 1.5, 08= 0dB, 00= 12dB*/
0xc488, /*
left aux 2 control reg
b7 : 1=left aux 2 mute
b6-5: res
b4-0: gain/atten x 1.5, 08= 0dB, 00= 12dB*/
0xc588, /*
right aux 2 control reg
b7 : 1=right aux 2 mute
b6-5: res
b4-0: gain/atten x 1.5, 08= 0dB, 00= 12dB*/
0xc680, /*
left DAC control reg
b7 : 1=left DAC mute
b6 : res
b5-0: attenuation x 1.5 dB*/
0xc780, /*
right DAC control reg
b7 : 1=right DAC mute
b6 : res
b5-0: attenuation x 1.5 dB*/
0xc85c, /*
data format register
b7 : res
b5-6: 0=8-bit unsigned linear PCM
1=8-bit u-law companded
2=16-bit signed linear PCM
3=8-bit A-law companded
b4 : 0=mono, 1=stereo
b0-3: 0= 8.
1= 5.5125
2= 16.
3= 11.025
4= 27.42857
5= 18.9
6= 32.
7= 22.05
8= .
9= 37.8
a= .
b= 44.1
c= 48.

12
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

d= 33.075
e= 9.6
f= 6.615
(b0) : 0=XTAL1 24.576 MHz; 1=XTAL2 16.9344
MHz*/
0xc909, /*
interface configuration reg
b7-4: res
b3 : 1=autocalibrate
b2-1: res
b0 : 1=playback enabled*/
0xca00, /*
pin control reg
b7 : logic state of pin XCTL1
b6 : logic state of pin XCTL0
b5 : master - 1=tri-state CLKOUT
slave - x=tri-state CLKOUT
b4-0: res*/
0xcc40, /*
THIS PROGRAM USES 16 SLOTS PER FRAME
miscellaneous information reg
b7 : 1=16 slots per frame, 0=32 slots per
frame
b6 : 1=2-wire system, 0=1-wire system
b5-0: res
*/
0xcd00; /*
digital mix control reg
b7-2: attenuation x 1.5 dB
b1 : res
b0 : 1=digital mix enabled*/
.var stat_flag;
.section/pm data2; /*sectiune memorie program*/
.var/circ coefs[tones]=0x6d02,0x68b2,0x63fd,0x5eef,0x4a71, 0x4091, 0x3291, 0x23ce;
/*{ 2.14 coeficientii Goertzel : 2*cos(2*PI*k/N) }*/

//{-------------------- PROGRAMUL PRINCIPAL -------------------------------------}


.SECTION/PM IVreset; /* sectiune de PM cu vectori de intreruperi, sunt 12
tipuri de intreruperi*/
jump start; rti; rti; rti; /*00: reset */
jump input_samples; rti; rti; rti; /*04: IRQ2 */
//rti; rti; rti; rti; /*04: IRQ2 */
rti; rti; rti; rti; /*08: IRQL1 */
rti; rti; rti; rti; /*0c: IRQL0 */
ar = dm(stat_flag); /*10: SPORT0 tx */
ar = pass ar; /*continutul ar trece prin ALU fara sa fie schimbat, dar se
modifica flagul de stare*/

13
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

if eq rti;
jump next_cmd;
jump input_samples; /*14: SPORT0 rx */
rti; rti; rti;
rti; rti; rti; rti; /*18: IRQE */
rti; rti; rti; rti; /*1c: BDMA */
rti; rti; rti; rti; /*20: SPORT1 tx or IRQ1 */
rti; rti; rti; rti; /*24: SPORT1 rx or IRQ0 */
nop; rti; rti; rti; /*28: timer */
rti; rti; rti; rti; /*2c: power down */
.section/pm program;
start:
/* shut down sport 0 */
ax0 = b#0000100000000000; /*numar in binary, reprezinta o masca*/
dm (Sys_Ctrl_Reg) = ax0;
ena timer;
i5 = rx_buf; /*i5 si i6 fac parte din DAG2*/
l5 = LENGTH(rx_buf);
i6 = tx_buf;
l6 = LENGTH(tx_buf);
i3 = init_cmds; /*i3 face parte din DAG1*/
l3 = LENGTH(init_cmds);
m1 = 1;
m5 = 1;
/*================== S E R I A L P O R T #0 S T U F F
==================*/
/* se seteaza modul de functionare pentru portul
serial SPORT0*/
ax0 = b#0000110011010111;
dm (Sport0_Autobuf_Ctrl) = ax0;
/* |||!|-/!/|-/|/|+- receive autobuffering 0=off, 1=on
|||!| ! | | +-- transmit autobuffering 0=off, 1=on
|||!| ! | +---- | receive m?
|||!| ! | | m5
|||!| ! +------- ! receive i?
|||!| ! ! i5
|||!| ! !
|||!| +========= | transmit m?
|||!| | m5
|||!+------------ ! transmit i?
|||! ! i6
|||! !
|||+============= | BIASRND MAC biased rounding control bit
||+-------------- 0
|+--------------- | CLKODIS CLKOUT disable control bit
+---------------- 0 */
ax0 = 0; dm (Sport0_Rfsdiv) = ax0;

14
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

/* RFSDIV = SCLK Hz/RFS Hz - 1 */


ax0 = 0; dm (Sport0_Sclkdiv) = ax0;
/* SCLK = CLKOUT / (2 (SCLKDIV + 1) */
ax0 = b#1000011000001111; dm (Sport0_Ctrl_Reg) = ax0;
/* multichannel
||+--/|!||+/+---/ | number of bit per word - 1
||| |!||| | = 15
||| |!||| |
||| |!||| |
||| |!||+====== ! 0=right just, 0-fill; 1=right just, signed
||| |!|| ! 2=compand u-law; 3=compand A-law
||| |!|+------- receive framing logic 0=pos, 1=neg
||| |!+-------- transmit data valid logic 0=pos, 1=neg
||| |+========= RFS 0=ext, 1=int
||| +---------- multichannel length 0=24, 1=32 words
||+-------------- | frame sync to occur this number of clock
|| | cycle before first bit
|| |
|| |
|+--------------- ISCLK 0=ext, 1=int
+---------------- multichannel 0=disable, 1=enable */
/* non-multichannel
|||!|||!|||!+---/ | number of bit per word - 1
|||!|||!|||! | = 15
|||!|||!|||! |
|||!|||!|||! |
|||!|||!|||+===== ! 0=right just, 0-fill; 1=right just, signed
|||!|||!||+------ ! 2=compand u-law; 3=compand A-law
|||!|||!|+------- receive framing logic 0=pos, 1=neg
|||!|||!+-------- transmit framing logic 0=pos, 1=neg
|||!|||+========= RFS 0=ext, 1=int
|||!||+---------- TFS 0=ext, 1=int
|||!|+----------- TFS width 0=FS before data, 1=FS in sync
|||!+------------ TFS 0=no, 1=required
|||+============= RFS width 0=FS before data, 1=FS in sync
||+-------------- RFS 0=no, 1=required
|+--------------- ISCLK 0=ext, 1=int
+---------------- multichannel 0=disable, 1=enable
*/
ax0 = b#0000000000000111; dm (Sport0_Tx_Words0) = ax0;
/* ^15 00^ transmit word enables: channel # == bit # */
ax0 = b#0000000000000111; dm (Sport0_Tx_Words1) = ax0;
/* ^31 16^ transmit word enables: channel # == bit # */
ax0 = b#0000000000000111; dm (Sport0_Rx_Words0) = ax0;
/* ^15 00^ receive word enables: channel # == bit # */
ax0 = b#0000000000000111; dm (Sport0_Rx_Words1) = ax0;
/* ^31 16^ receive word enables: channel # == bit # */

15
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

/*============== S Y S T E M A N D M E M O R Y S T U F F
==============*/
/*initializare adsp*/
ax0 = b#0001100000000000; dm (Sys_Ctrl_Reg) = ax0;
/* +-/!||+-----/+-/- | program memory wait states
| !||| |0
| !||| |
| !||+---------- 0
| !|| 0
| !|| 0
| !|| 0
| !|| 0
| !|| 0
| !|| 0
| !|+----------- SPORT1 1=serial port, 0=FI, FO, IRQ0, IRQ1,..
| !+------------ SPORT1 1=enabled, 0=disabled
| +============= SPORT0 1=enabled, 0=disabled
+---------------- 0
0
0 */
ifc = b#00000011111110; /* clear pending interrupt */
nop;
icntl = b#00010;
/* ||||+- | IRQ0: 0=level, 1=edge
|||+-- | IRQ1: 0=level, 1=edge
||+--- | IRQ2: 0=level, 1=edge
|+---- 0
|----- | IRQ nesting: 0=disabled, 1=enabled
*/
mstat = b#1100000;
/* ||||||+- | Data register bank select
|||||+-- | FFT bit reverse mode (DAG1)
||||+--- | ALU overflow latch mode, 1=sticky
|||+---- | AR saturation mode, 1=saturate, 0=wrap
||+----- | MAC result, 0=fractional, 1=integer
|+------ | timer enable
+------- | GO MODE*/
/*ADSP 1847 Codec initialization*/
/* clear flag */
ax0 = 1;
dm(stat_flag) = ax0;
/* enable transmit interrupt */
ena ints;
imask = b#0001000001;
/* |||||||||+ | timer
||||||||+- | SPORT1 rec or IRQ0
|||||||+-- | SPORT1 trx or IRQ1

16
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

||||||+--- | BDMA
|||||+---- | IRQE
||||+----- | SPORT0 rec
|||+------ | SPORT0 trx
||+------- | IRQL0
|+-------- | IRQL1
+--------- | IRQ2 */
ax0 = dm (i6, m5); /* start interrupt */
tx0 = ax0;
check_init:
ax0 = dm (stat_flag); /* wait for entire init */
af = pass ax0; /* buffer to be sent to */
if ne jump check_init; /* the codec */
ay0 = 2;
check_aci1:
ax0 = dm (rx_buf); /* once initialized, wait for codec */
ar = ax0 and ay0; /* to come out of autocalibration */
if eq jump check_aci1; /* wait for bit set */
check_aci2:
ax0 = dm (rx_buf); /* wait for bit clear */
ar = ax0 and ay0;
if ne jump check_aci2;
idle;
ay0 = 0xbf3f; /* unmute left DAC */
ax0 = dm (init_cmds + 6);
ar = ax0 AND ay0;
dm (tx_buf) = ar;
idle;
ax0 = dm (init_cmds + 7); /* unmute right DAC */
ar = ax0 AND ay0;
dm (tx_buf) = ar;
idle;
/* end codec initialization, begin filter demo initialization */
call setup; /*initializare buffere Q1Q2buff , coefs*/
call restart;
i1=buff_in; /* i1 este pointer catre bufferul de intrare*/
i0=Q1Q2_buff;
i4=coefs;

ifc = b#00000011111110; /* clear any pending interrupt, registru de


fortare
intreruperi */
nop;
imask = b#0001100001; /* enable rx0 interrupt */
/* |||||||||+ | timer
||||||||+- | SPORT1 rec or IRQ0
|||||||+-- | SPORT1 trx or IRQ1

17
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

||||||+--- | BDMA
|||||+---- | IRQE
||||+----- | SPORT0 rec
|||+------ | SPORT0 trx
||+------- | IRQL0
|+-------- | IRQL1
+--------- | IRQ2
*/
stop : nop; /*bucla de asteptare, sta in ea pana apare intrerupere*/
jump stop;
/* SPORT0 interrupt handler*/
input_samples:
ena sec_reg; /* use shadow register bank, se folosesc registrele secundare */
si=dm(rx_buf + 2); /* get new sample from SPORT0 (from codec), in si se scrie ce
se gaseste pe ultima pozitie din rx_buf */

sr=ashift si by scale (hi); /*se face impartire la 256*/


dm(in_sample)=sr1; /* stocarea esantionului de intrare */
/*---------- DECREMENTAREA CONTORULUI DE ESANTIOANE
-------------------------*/
/*cand ay<0 se trece la feedfwd dupa ce termina prelucrarea esantioanelor*/
decN: ay0=dm(countN);
ar=ay0-1;
dm(countN)=ar;
if lt jump skip_backs;
//{----------- F A Z A F E E D B A C K ---------------------------------------}
feedback: ay1=dm(in_sample); /*{ extrage esantionul la intrare AY1=1.15*/
cntr=tones;
do backs until ce;
mx0=dm(i0,m0), my0=pm(i4,m4); /*{extrage Q1 si COEF Q1=1.15,
COEF=2.14*/
mr=mx0*my0(rnd), ay0=dm(i0,m2); /*inmulteste, get Q2 MR=2.30, Q2=1.15*/
sr=ashift mr1 by 1 (hi); /*schimba 2.30 in 1.15 */
ar=sr1-ay0; /*Q1*COEF - Q2 AR=1.15*/
ar=ar+ay1; /*Q1*COEF - Q2 + intrarea AR=1.15*/
dm(i0,m0)=ar; /*rezultatul = noul Q1 */
backs: dm(i0,m0)=mx0; /*vechiul Q1 = noul Q2*/
jump end;;
//{---------- C A N D F A Z A F E E D B A C K E S T E G A T A -------------}
/*cand count N=0*/ }
skip_backs:
call feedforward;
call test_and_output;
call calc_tone;
call restart;
end: nop;
rti;

18
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

/* transmit interrupt used for Codec initialization*/


next_cmd:
ena sec_reg;
ax0 = dm (i3, m1); /* fetch next control word and , citeste prima pozitie din
vectorul init_cmds*/
dm (tx_buf) = ax0; /* place in transmit slot 0 */
ax0 = i3;
ay0 = init_cmds;
ar = ax0 - ay0;
if gt rti; /* rti if more control words still waiting */
ax0 = 0xaf00; /* else set done flag and */
dm (tx_buf) = ax0; /* remove MCE if done initialization */
ax0 = 0;
dm (stat_flag) = ax0; /* reset status flag, la sfarsitul initierii codecului
stat_flag=0 */

rti; /*se intoarce la IVReset, la jump input-samples*/


/*
{-------------------- S U B R U T I N E ---------------------------------------}
{ M si L registre in generatoarele de adresa, and seteaza ICNTL }
*/
setup:

l0 = tones_x_2;
l1 = 0;
l2 = 0;
l3 = 0;
l4 = tones;
m0 = 1;
m2 = -1;
m4 = 1;

icntl=b#01111;
rts;
/*
{ reseteaza pointerii,reseteaza valorile contorului }
{ aduce bufferele Goertzel feedback la zero, etc }
{ */
restart: i0=Q1Q2_buff;
i4=coefs;
cntr=tones_x_2;
do zloop until ce;
zloop: dm(i0,m0)=0;
ax0=N;
dm(countN)=ax0;

19
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

i1=buff_in;
rts;

//{--------------- F A Z A F E E D F O R W A R D ----------------}
feedforward: cntr=tones;
i2=mnsqr; /*i2 indexeaza vectorul mnsqr in care se retine
amplitudinea patratica corespunzatoare frecventelor
DTMF*/

do forwards until ce;


mx0=dm(i0,m0); /*extrage doua copii Q1 1.15 */
my0=mx0;
mx1=dm(i0,m0); /*extrage doua copii Q2 1.15 */
my1=mx1;
ar=pm(i4,m4); /*extrage COEF 2.14*/
mr=0;
mf=mx0*my1(rnd); /* Q1*Q2 1.15 */
mr=mr-ar*mf(rnd); /* -Q1*Q2*COEF 2.14 */
sr=ashift mr1 by 1 (hi); /*2.14 -> 1.15 format conv. 1.15 */
mr=0;
mr1=sr1;
mr=mr+mx0*my0(ss); /* Q1*Q1 + -Q1*Q2*COEF 1.15 */
mr=mr+mx1*my1(rnd); /* Q1*Q1 + Q2*Q2 + -Q1*Q2*COEF 1.15 */
forwards: dm(i2,m0)=mr1; /* stocheaza in bufferul mnsqr 1.15 , se
memoreaza x2(k)*/
rts;

//{------------- Testarea nivelelor si a codului de iesire ----------------}


test_and_output: i3=bits; /*indexari la prima pozitie a vectorilor*/
i1=min_tone_level;
i2=mnsqr;
cntr=tones;
af=pass 0;
do thresholds until ce;
ax1=dm(i3,m0); /* preia pozitia bitilor la set/clear */
ax0=dm(i2,m0); /*preia valoarea calculata tone mnsqr */
ay0=dm(i1,m0); /* preia valoarea de prag min tone level */
ar=ax0-ay0; /* mnsqr - min_tone_level */
thresholds: if gt af=ax1 or af;
ar=pass af;
dm(outcode)=ar; /* scrie rezultatul la iesire */
rts;

PROGRAM DE CONVERSIE DE LA 8 BITI LA 4 BITI


.section /pm program;
.extern outcode;
.global calc_tone;

20
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

.extern tone;
.extern tab;
.extern error;
calc_tone:
AR=dm (outcode);
AY0=0X00F0;
AR=AR AND AY0;
SR=LSHIFT AR BY -4(HI); //k
AX0=SR1; //ax0=k
ay0=1;
ar=ax0-ay0;
if eq jump r0;
ay0=2;
ar=ax0-ay0;
if eq jump r1;
ay0=4;
ar=ax0-ay0;
if eq jump r2;
ay0=8;
ar=ax0-ay0;
if eq jump r3;
jump err;
r0:
mr1=0; // r
jump e1;
r1:
mr1=1; // r
jump e1;
r2:
mr1=2; // r
jump e1;
r3:
mr1=3; // r
e1:
AR=dm(outcode);
AY0=0X000F;
AR=AR AND AY0; // ar=m
ax0=ar; // ax0=m
ay0=1;
ar=ax0-ay0;
if eq jump c0;
ay0=2;
ar=ax0-ay0;
if eq jump c1;
ay0=4;
ar=ax0-ay0;
if eq jump c2;

21
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

ay0=8;
ar=ax0-ay0;
if eq jump c3;
jump err;
c0:
ay1=0; // c
jump e2;
c1:
ay1=1;
jump e2;
c2:
ay1=2;
jump e2;
c3:
ay1=3;
e2:
//4*r+c = 4*mr1+ay1

SR=ASHIFT mr1 BY 2(HI);


AR=sr1+AY1; // ar=4r+c

I1=tab;
M3=AR;
MODIFY (I1,M1);
AR=dm(I1,M1);
dm(tone)=AR;

rts;
err: si=1;
dm(error)=si;

RTS;

Programul de conversie:

Outcode:
0 0 0 0 0 0 0 0 f7 f6 f5 f4 f3 f2 f1 f0

k=2^r m=2^c
Tab[4*r+c]
c
f0 f1 f2 f3
f4 0 1 2 3
f5 4 5 6 7
r
f6 8 9 A B
f7 C D E F

22
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

k,m iau valori din mulţimea {1,2,4,8}


c,r iau valori din mulţimea {0,1,2,3}
Important este doar ultimul octet din outcode, format din HI şi LO.

SCHEMELE ELECTRICE

23
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

24
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

25
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

Detalieri ale schemelor electrice

Structura microprocesorului ADSP2181

ADSP2181 este un microcalculator optimizat pentru procesarea semnalelor


digitale(DSP) si alte aplicatii de procesare numerica la viteze mari.
Acest procesor combina arhitectura de baza a familiei de procesoare ADSP2100 cu doua
porturi seriale, un port intern DMA pe 16 biti, un port DMA pe un octet, un regulator
programabil, un flag de intrare/iesire, capacitatea de a utiliza intreruperile si un chip
pentru memoria de date si de program.
ADSP 2181 integreaza 80Kocteti de memorie , configurata sub forma a 16Kcuvinte de
24 de biti pentru meoria de program RAM si 16K-cuvinte de 16 biti petru memoria
RAM de date.circuitele de joasa putere sunt construite astfel incat sa poata indeplini
conditiile de putere scazuta a echipamentelor portabile pe baza de baterie. Acest procesor
este disponibil in 2 variante :128 -leadTQFP si 128-lead PQFP packages.

Este fabricat pentru viteze mari, cu putere scazuta, bazat pe CMOS si are un ciclu
de operare a instructiunii de 25ns. Fiecare instructiune se poate executa intr-un singur
ciclu de procesor. Deoarece are o arhitectura flexibila si un set de instructiuni cuprinzator

26
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

acesta perimte ca procesorul sa efectueze mai multe operatii in paralel. Intr-un singur
ciclu de procesor ADSP 2181 poate sa:
-genereze urmatoarea adresa de program
-sa mute una sau doua date
-sa updateze pointerii petru una sau doua adrese de date
- sa execute o noua operatie
Aceasta se intampla in timp ce procesorul continua sa:
-sa primeasca si sa transmita date prin cele 2 porturi seriale
-primeste si/sau transmite date prin portul DMA intern
-primeste si/sau transmite datele prin portul DMA de octeti
-decrementeaza contorul
Doua generatoare de adrese(DAG) ofera adrese pentru transporturile unui operand
dual, simultan (de la memoria de program si memoria de date). Fiecare DAG mentine si
updateaza patru adrese de pointeri. Oricand pointerul este folosit pentru a accesa
datele(prin adresare indirecta) este modificat ulterior de valoarea unuia din cei patru
registri modificatori. Un transfer eficient de date se obtine prin utilizarea a cinci
magistrale interne:
-magistrala de adrese pentru memoria de program (PMA) ;
-magistrala de date pentru memoria de program (PMD) ;
- magistrala de adrese pentru memoria de date (DMA) ;
- magistrala de date pentru memoria de date (DMD) ;
-magistrala pentru rezultate (R) ;

Porturi Seriale

ADSP 2181 incorporeaza doua porturi seriale sincronizate (SPORT0 , SPORT1)


pentru comunicatii seriale si multiprocesor. Porturile seriale SPORT sunt bidirectionale si
au o sectiune de transmisiune si receptie. Pot sa utilizeze un ceas extern sau sa genereze
propriunl lor ceas. Pot avea o lungime diferita a cuvintelor de la 3 la 16 biti si pot utiliza
optional legea A sau legea µ. Sectiunea de transmisiune sau de receptie poate genera
intreruperi in transferul cuvintelor ce contin date. Prezinta o interfata multicanal pentru a
primi selectiv si a transmite cuvinte de 24 sau de 32. Porturile seriale pot fi configurate
astfel incat sa aiba doua intreruperi externe si semnale de flag pentru intrare si iesire.

27
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

Configuratia pinilor

-14 pini de adresa – pini de la iesire pentru program, date octeti si spatiii de
intrare/iesire ;
-24 pini de date-pini de intrare/iesire pentru spatii de memorie de program si de
date ;
-RESET/-intrarea procesorului de reset ;
-IRQ2/-cerere de intrerupere la limita;
-IRQL0,IRLQ1/-cerere de intrerupere pe nivel;
-IRQE/-cerere de intrerupere;
-BR/-cerere de intrare pentru magistrala;
-BG/-alocarea unei iesiri pentru magistrala;
-BGH/-alocarea unei iesiri de hung pentru magistrala;
-PMS/-selectarea unei iesri din memoria de program;
-DMS/-selectarea unei iesiri din memoria de date;
-IOMS/-selectarea unei iesiri din spatiul de memorie de intrare/iesire;

28
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

-CMS/-selectarea unei iesiri din memoria combinata;


-RD/-activarea iesirii din cititrea in memorie;
-WR/-activarea iesirii din scrierea in memorie;
-MMAP-intrare in harta de memorie;
-BMODE-intrare pentru optiunea de control pentru boot;
-CLKIN,XTAL-intrare pentru ceas sau cristal de cuartz;
-CLKOUT-iesirea ceasului;
-SPORT0 pe 5 pini-pinii portului serial de intrare/iesire;
-SPORT1 pe 5 pini-portul serial 1 aau 2 intreruperi externe, Flag in si Flag out;
-IRD/,IWR/- intrarea pentru portul de scriere/citire IDMA;;
-IS/-selectarea portului IDMA;
-IAL- activarea adresei de latch pentru portul IDMA;
-IAD pe 16 biti-magistrala de adrese/date pentru portul IDMA;
-PWD/- bit de control pentru joasa putere;
-PWDACK- bit de control pentru joasa putere;
-FL0,FL1,FL2-flaguri de iesire;
-PF7:0-pini programabili de intrare/iesire;
-EE,EBR,EBG,ERESET,EMS,EINT,ECLK,ELIN,ELOUT-pentru emulator;
-GND-11 pini de masa;
-VDD-6 pini de alimentare;

Registrul de control al intreruperilor(ICNTL)

Controleaza intreruperile necontrolate si defineste IRQ0/,IRQ1/, IRQ2/ ca fiind


intreruperi externe . IRQE/ este o intrerupere externa de nivel msi poate fi fortata sau
stearsa. IFC este un registru write-only care este folosit pentru a forta sau a sterge o
intrerupere.
Memoria de octet ofera accesul la un spatiu de memorie intins pe 8 biti printr-un
port DMA pe un octet. Interfata acestei meorii permite accesul la 4Mocteti de memorie
utilizand 8 linii de date ca linii suplimentare de adrese. Aceasta inseamna ca portul
BDMA are un sir de 22 de biti de adresa. Astfel DSP-ul poate sa incarce automat codul
bootstrap din memoria de octet

29
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

Intreruperi

Controlerul de intreruperi permite procesorului sa raspunda la 11 posibile


intreruperi, si resetare intr-un timp foarte scurt. Membrii seriei ADSP-218xN au la
dispozitie patru pini de intreruperi IRQ2, IRQL0, IRQL1 si IRQE. In plus SPORT1 poate
fi reconfigurat pentru IRQ0, IRQ1, FI, si FO,pentru a avea in total de sase intreruperi.
Seria ADSP-218xN permite intreruperi interne de la timer,bytul DMA doua
porturi seriale, de la software si circuitul de oprire. Nivele de intreruperi au nivele de
prioritate stabile intern si mascabile (in afara de reset si oprire). Pini de intrare IRQ2,
IRQ0, si IRQ1 pot fi programati sa fie sensibili la nivel sau front. IRQL0 si IRQL1 sunt
sensibili la nivel iar IRQE la front. Nivelurile de prioritati si vectorii adresa sunt
prezentate in tabelul urmator.
Sursa intreruperii Vectorul adresa al intreruperii
Reset (or Power-Up with PUCR = 1) 0x0000 (Highest Priority)
Power-Down (Nonmaskable) 0x002C
IRQ2 0x0004
IRQL1 0x0008
IRQL0 0x000C
SPORT0 Transmit 0x0010
SPORT0 Receive 0x0014
IRQE 0x0018
BDMA Interrupt 0x001C
SPORT1 Transmit or IRQ1 0x0020
SPORT1 Receive or IRQ0 0x0024
Timer 0x0028 (Lowest Priority)

Seria ADSP-218xN mascheaza toate intreruperile pentru o instructiune ciclu ce


urmeaza executiei unei instructiuni ce modifica registrul IMASK. Acest lucru nu
afecteaza functia de autobuffering a portului serial si nici transferul DMA.

Registrul de control al intreruperilor, ICNTL, determina daca intreruperile IRQ0,


IRQ1, si IRQ2 sunt sensibile la nivel sau front. Pinul IRQE determina o intrerupere
externa , sensibila la front si poate fi fortata.
Registrul IFC este un registru write-only folosit pentru a forta si elimina
intreruperi. Stivele de pe chip memoreaza automat starea procesorului si sunt pastrate in

30
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

timpul procesarii intreruperilor.Stiva are o adancime de 12 nivele pentru a permite


activarea sau dezactivarea serviciului de intreruperi global.Dezactivarea intreruperilor nu
afecteaza autobufferarea portului serial sau a DMA-ului.Cand procesorul este resetat
atunci servicul de interuperi este activate.

Structura CODECULUI AD1847


Codec-ul AD1847 integreaza conversia datelor audio cheie si functiile de control
intr-un singur circuit integrat. Este construit pentru a putea fi folosit in aplicatii
multimedia si jocuri audio fiind alimentat de la o singura sursa de 5V si are un cost redus.
Are o interfata seriala pentru implementarea pe placa principala a calculatorului.
Cerintele circuitului exterior sunt limitate la un numar minim de componente cu cost
redus. AD1847 poate accepta si genera doua complemente PCM de date pe 16 biti
liniare,digitale, o structura de date liniara pe 8 biti PCM si date pe 8 biti pentru legea A si
legea µ.

Configuratia pinilor

-SCLK= pinul cu numarul 1-este un semnal bidirectional care furnizeaza ceasul


ca iesire la magistrala seriala cand pinul de Bus Master este pe nivel high si accepta

31
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

semnalul de ceas ca intrare cand pinul de BM este pe low. Acesta se ruleaza in


permanenta.

-SDFS = pinul cu numarul 6 este un semnal bidirectional care furnizeaza


semnalul de sincronizare de frame ca iesire catre magistrala seriala cand pinul BM este pe
high si accepta semnalul de sincronizare de frame ca intrare cand pinul de BM este pe
low. Functioneaza la o frecventa egala cu jumatate din rata de esantionare a lui AD1847
cu doua esantioane pe frame .
-SDI= pinul cu numarul 4- intrarea seriala de date. Este folosit in dispozitivele
periferice cum ar fi CPU sau un DSP pentru control si sincronizarea informatiei de date.
-SDO= pinul cu numarul 5- iesirea seriala de date. Este folosit ca informatie de
date pentru captare si readback . Transferurile se realizeaza pe 16 biti.
-RESET/= pinul cu numarul 11. Acest semnal este activ pe low. Lansarea acestui
semnal va initializa registrii la valorile lor de default.
-PWRDOWN/= pinul cu numarul 12-este activ pe low. Reseteaza registrii de
control de pe chip si trece codec-ul in starea de consum minim de putere. Vref si toate
circuitele analogice sunt dezactivate.
-BM= pinul cu numarul 33.Deoarece este activ pe high acest semnal indica faptul
ca AD1847 este master pe magistrala seriala. Codec-ul va trimite semnalul de ceas serial
SCLK si semnalul de sinc SDFS catre magistrala seriala. Numai AD1847 trebuie
configurat ca master al magistralei seriale. Daca BM este conectat pe low logic AD1847
este configurat ca slave si va accepta SCLK si SDFS ca semnale de intrare.un codec AD
1847 ar trebui sa fie configurat ca slave doar daca in schema mai exista un codec
AD1847 ca master.
-TSO= pinul cu numarul 7 –iesirea slotului de timp. Este setat pe high de
AD1847 si coincide cu LSB-ul ultimei dati cand acest slot a fost folosit de AD1847. este
folosit in sisteme cu mai multe codec-uri.
-TSI= pinul cu numarul 8-intrarea slotului de timp. Lansarea acestui semnal
indica faptul ca AD1847 ar trebui sa utilizeze imediat urmatoarele trei slot-uri de timp
(TSSEL=1) sau urmatoarele 6 slot-uri (TSSEL=0) si apoi se acitveaza pinul TSO. TSI ar
trebui sa fie activ pe low cand AD1847 este master intr-un sistem cu un singur codec.

32
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

-CLKOUT= pinul cu numarul 44-iesirea ceasului. Semnalul este versiunea de


buffer a iesirii ceasului de cristal iar frecventa depinde de tipul de cristal selectat. Acest
pin poate sa aibia trei stari daca BM este setat pe low sau prin programarea bitului
CLKTS in registrul de control al pinului

Semnale analogice

-L_LINE1= pinul cu numarul 23 – intrarea liniei prin partea stanga. Nivelul de intrare
pentru linie pentru primul canal stang.
-R_LINE1= pinul cu numarul 17- intrarea liniei prin partea dreapta . Nivelul de intrare
pentru primul canal drept.
-L_LINE2= pinul cu numarul 22. intrarea liniei prin partea stanga. Nivelul de intrare
pentru linie pentru al doilea canal stang.
R_LINE2= pinul cu numarul 18- intrarea liniei prin partea dreapta . Nivelul de intrare pe
linie pentru canalul2 drept.
-L_AUX1=pinul cu numarul 26-intrarea auxiliara pe partea stanga. Intrarea nivelului de
linie pentru canalul AUX1 stang.
-R_AUX1=pinul cu numarul 27-intrarea auxiliara pe partea dreapta. Intrarea nivelului de
linie pentru canalul AUX1 drept.
-L_AUX2=pinul cu numarul 32-intrarea auxiliara pe partea stanga. Intrarea nivelului de
linie pentru canalul AUX2 stang.
-R_AUX2=pinul cu numarul 31-intrarea auxiliara pe partea dreapta. Intrarea nivelului de
linie pentru canalui AUX2drept.
- L_OUT=pinul cu numarul 30- iesirea liniei pe partea stanga. Nivelul de iesire pentru
linie pentru canalul stang.
-R_OUT=pinul cu numarul 28- iesirea liniei pe partea dreapta. Nivelul de iesire pentru
linie pentru canalul drept.

Pini cu diferite functii


-XTAL1I= pinul cu numarul 40- intrarea pe cristalul intai pentru 24.576MHz
-XTAL1O= pinul cu numarul 41- iesirea pe cristalul intai pentru 24.576MHz
-XTAL2I= pinul cu numarul 42- intrarea pe cristalul al doilea pentru 16.9344 MHz
-XTAL2O= pinul cu numarul 43- iesirea pe cristalul al doilea pentru 16.9344 MHz
-Vref= pinul cu numarul 16-referinta de tensiune. O tensiune nominala de 2,25. aceste
semnal nu ar trebui sa aiba un semnal dependent pentru incarcare.
-XCTL1:O=pinii 37 si 36 –pentru control extern. Aceste semnale TTL reflecta starea
curenta a bitilor din interiorul registrilor codec-uluipot fi utilizati pentru semnalizare sau
pentru control extern.
-Vrefi=pinul cu numarul 15- tensiunea de referinta interna.

33
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII

-L_FILT=pinul cu namarul 21- filtru capacitiv pentru canalul stang. Acest pin necesita un
condensator de 1 µF legat la masa analogica pentru efectuarea unei operatii
-R_FILT=pinul cu namarul 19- filtru capacitiv pentru canalul drept. Acest pin necesita un
condensator de 1 µF legat la masa analogica pentru efectuarea unei operatii potrivite.
-NC= pinul cu namarul 29- nici o canectare
-Vcc=pinii 13 si 25- tensiunea analogica de +5V
GNDA=pinii cu numarul 14,20,24- masa analogica
Vdd=pinii 2,9,34,39-tensiune digitala de +5V
-GNDD=pinii 3,10,35,38-masa digitala
Acest port implementeaza o magistrala seriala pentru multiplexare diviziunii de timp
(TDM). Poate sa contia fie 32(biti FSR pe low) sau 16(FRS biti pe high) sloturi . pentru
operatii stereo se folosesc trei cuvinte/esantioane :
-control/stare [DM(tx_buf),DM(rx_buf)]
-canal de date stang [DM(tx_buf+1),DM(rx_buf+1)]
- canal de date drept [DM(tx_buf+2),DM(rx_buf+2)]
DSP preia sau genereaza informatii si date de la un buffer care este la transmisia lui
SPORT0 si primeste autobuffere. Autobuffering in cadrul modului multicanal este cea
mai simpla cale pentru a trimitesau a primi date de cand se reduce intreruperea globala iar
utilizatorul nu trebuie sa se intereseze de slotul curent in care sunt inscrise datele. Cand se
vor transmite toate cele trei cuvinte in frame-ul curent se genereaza o intrerupere.

EPROM 27C010

Acest chip de memorie este de putere joasa , cu performante mari, organizata ca


1M pe 8 biti. Acesta nencesita o tensiune de 5 V intr-o operatie de citire obisnuita. Orice
octet poate fi accesat in mai putin de 90 ns, eliminand necesitatea vitezei si reducand
starile de WAIT in sistemele cu microprocesoare cu performante foarte bune. Toate
dispozitivele au doua linii de control (CE/ si OE/) pentru a permite proiectantilor
flexibilitatea de a preveni conflictele ce pot sa apara pe magistrala . Acest chip are
caracteristici suplimentare care asigura o buna calitate si o utilizare eficienta. Algoritmul
de programare rapida reduce timpul cerut pentru a programa o anumita parte si
garanteaza fiabilitatea programarii. Codul de identificare pentru produsul incarcat
indetifica producatorul si dispozitivul.

34