SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
FACULTATEA ELECTRONICA TELECOMUNICATII SI TEHNOLOGIA INFORMATIEI
RECEPTOR DTMF
STUDENT: Ilie Lorenta
PROFESOR:
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 semnalizare care înlocuieşte semnalizarea clasică,cu pulsuri,în pulsuri,în reţeaua telefonică. De asemenea sistemul sistemul DTMF este utilizat şi în alte aplicaţii : sist sistem eme e
banc bancar are e
prin prin
tele telefo fon, n,po poşt ştă ă
elec electr tron onic ică ă
pe
lini linie e
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) Semnaliz Semnalizare are multifr multifrecve ecvenţă nţă (DTMF (DTMF = Dual Tone Tone Multifr Multifrequ equency ency), ), 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
Descrierea teoretica a prelucarii de semnal
DTMF (Dual Tone Multifrequency) reprezintă un sistem de semnalizare semnalizare care înlocuieşte semnalizarea clasică,cu pulsuri,în pulsuri,în reţeaua telefonică. De asemenea sistemul sistemul DTMF este utilizat şi în alte aplicaţii : sist sistem eme e
banc bancar are e
prin prin
tele telefo fon, n,po poşt ştă ă
elec electr tron onic ică ă
pe
lini linie e
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) Semnaliz Semnalizare are multifr multifrecve ecvenţă nţă (DTMF (DTMF = Dual Tone Tone Multifr Multifrequ equency ency), ), 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 frecve frecvenţ nţă ă este este alea aleasă să din din cele cele patru patru de pe rând, rând, iar iar cealal cealaltă tă este 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 buto butoan ane e care care apar apar în figu figura ra de mai mai sus, sus, 12 sunt sunt buto butoan ane e care 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
N=0?
Apel feed-forward
Cntr=tones
Se calculează amplitudinile la pătrat corespunzatoare fiecarei frecvenţe şi se stochează în mnsqr
nu da
da
Contor expirat?
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
Contor expirat?
nu
Amplitudinea la pătrat corespunzătoare frecvenţelor tonurilor DTMF este mai mare decât nivelul minim?
Outcode=ar
rts
da
af=ax1 or af ar=pass af
Organigrama de conversie: 9
nu
SISTEME DIGITALE DE PRELUCRARE A SISTEMELOR PENTRU TELECOMUNICATII
Se citeşte outcode în registrul AR Selectăm zona k=HI (frecvenţe înalte)
nu nu nu
nu
k=8?
k=4?
da
k=1? da
k=2? da
da r=3
r=0
r=1 r=2
mr1=r ERR Error=1
Selectăm m=LO
nu nu m=2?
nu m=4?
nu
da
m=1?
da
da c=1
c=0
da c=2
m=8? 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,
0xc288,
/* 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 */ /*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,
0xca00,
/*
/*
interface configuration reg b7-4: res b3 : 1=autocalibrate b2-1: res b0 : 1=playback enabled*/ 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 */ 0xcd00; /*
b6 : 1=2-wire system, 0=1-wire system b5-0: res 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; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; rti; nop; rti; rti; rti; rti; rti; rti; rti; .section/pm program; start:
/*14: SPORT0 rx */ /*18: IRQE */ /*1c: BDMA */ /*20: SPORT1 tx or IRQ1 */ /*24: SPORT1 rx or IRQ0 */ /*28: timer */ /*2c: power down */
/* 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; fortare
/* clear any pending interrupt, registru de 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; jump stop;
/*bucla de asteptare, sta in ea pana apare intrerupere*/
/* SPORT0 interrupt handler*/
input_samples: ena sec_reg; si=dm(rx_buf + 2);
/* use shadow register bank, se folosesc registrele secundare */ /* 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*/ /* place in transmit slot 0 */
dm (tx_buf) = ax0; 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
k=2^r Tab[4*r+c] c
r
f4 f5 f6 f7
f0 0 4 8 C
f1 1 5 9 D
f2 2 6 A E
f3 3 7 B F
22
f4
f3
f2
f1
m=2^c
f0
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) Power-Down (Nonmaskable) IRQ2 IRQL1 IRQL0 SPORT0 Transmit SPORT0 Receive IRQE BDMA Interrupt SPORT1 Transmit or IRQ1 SPORT1 Receive or IRQ0 Timer
0x0000 (Highest Priority) 0x002C 0x0004 0x0008 0x000C 0x0010 0x0014 0x0018 0x001C 0x0020 0x0024 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