Documente Academic
Documente Profesional
Documente Cultură
RECEPTOR DTMF
STUDENT: PROFESOR:
Ilie Lorenta Zoican Sorin
1
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
2
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
3
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
4
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
| 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:
5
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
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
8
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
Buclă de aşteptare
Se citeşte eşantionul
N=N-1
nu da
N=0?
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
Call test_and_output
da nu
Contor expirat?
af=ax1 or af
ar=pass af
Organigrama de conversie:
9
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
nu k=2? da
k=4?
nu
nu da
k=8? r=0
da r=1
r=2
r=3
mr1=r
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
#include "def2181.h"
10
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
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
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) }*/
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
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;
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 */
18
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
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*/
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
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
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
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
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
29
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
Intreruperi
30
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
Configuratia pinilor
31
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
32
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
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.
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
34