pns curs-pag-1-81din100
TRANSCRIPT
TRIP NISTOR DANIEL
PROCESORUL DIGITAL DE SEMNALTMS320C50
Editura Universităţii din Oradea2004
Referenţi ştiinţifici:Prof.univ.dr. Bondor Károly, Universitatea din Oradea
Prof.univ.dr.ing. Gordan Cornelia, Universitatea din Oradea
EdCe
Descrierea CIP a Bibliotecii Naţionale a RomânieiTRIP, NISTOR DANIEL Procesorul digital de semnal TMS320C50 / NistorDaniel Trip. - Oradea : Editura Universităţii din Oradea,2004 Bibliogr. ISBN 973-613-680-9
004.383.3004.031.43
2
itura Universităţii din Oradea este acreditată de Consiliul Naţional alrcetării Ştiinţifice din Învăţământul Superior (CNCSIS).
3
Prefaţă
Utilizarea în momentul de faţă a procesoarelor digitale de semnal
într-o serie de aplicaţii tehnice şi ştiinţifice de vârf, face din studiul acestor
dispozitive electronice o disciplină de specialitate, aflată într-o continuă
transformare. Procesoarele digitale de semnal oferă un mijloc modern de
prelucrare digitală în timp real a semnalelor.
Lucrarea "Procesorul digital de semnal TMS320C50" se adresează în
principal studenţilor de la specializarea Electronică aplicată din cadrul
Facultăţii de Electrotehnică şi Informatică a Universităţii din Oradea.
Materialul prezentat în lucrare acoperă partea din cursul "Procesoare
numerice de semnal" referitoare la procesoarele în virgulă fixă. Lucrarea
vine în sprijinul studenţilor şi în cadrul orelor de laborator, unde la fiecare
lucrare se studiază algoritmi sau aplicaţii ale procesoarelor digitale de
semnal în virgulă fixă cu ajutorul plăcii de dezvoltare TMS320C5X DSP
Starter Kit.
Având în vedere importanţei acestui domeniu, lucrarea poate fi
studiată de studenţii de la alte specializări tehnice care doresc să îşi
însuşească noţiunile de bază privind mijloacele moderne de prelucrare
digitală a semnalelor dar şi de inginerii care doresc să obţină o
documentare rapidă.
Expunerea informaţiilor din volumul de faţă se face gradual, începând
de la enumerarea principalelor necesităţi practice de utilizare a
procesoarelor digitale de semnal, prezentând apoi arhitectura internă a
procesorului în virgulă fixă TMS320C50 şi modul lor specific de funcţionare
în tehnică "pipe line", iar în ultima parte a lucrării se prezintă o serie de
4
aspecte practice folosite la implementarea unor algoritmi specifici utilizaţi în
prelucrarea digitală a semnalelor.
Mulţumesc pe această cale domnului Prof.univ.dr. Bondor Károly şi
doamnei Prof.univ.dr.ing. Gordan Cornelia pentru ajutorul acordat, care în
calitate de referenţi, prin observaţii şi sugestii valoroase, au impus lucrării
de faţă un caracter ştiinţific şi academic.
Oradea, 2004 Autorul
5
CUPRINS
Prefaţă 3Cuprins 51.Introducere 7
1.1. Tehnicile de prelucrare digitală a semnalelor 81.2. Arhitectura procesoarelor de semnal 91.3. Sisteme de numerotaţie în virgulă fixă 11
2. Unitatea centrală de prelucrare a procesorului digitalde semnal TMS320C50 132.1. Circuite de scalare 142.2. Multiplicatorul 172.3. Unitatea logică paralelă 192.4. Regiştrii de stare şi control 192.5. Sistemul de întreruperi 22
3. Configurarea şi adresarea memoriei la procesorul desemnal TMS320C50 263.1. Configurarea memoriei 263.2. Adresarea memoriei program 303.3. Modurile de adresare ale operanzilor 353.4. Funcţionarea procesoarelor de semnal
TMS320C50 în tehnică “pipe-line” 404. Circuite periferice 43
4.1. Circuitul de temporizare 434.2. Porturile seriale ale procesorului de semnal
TMS320C50 464.2.1. Portul serial standard 464.2.2. Registrul de stare şi control al portului serial 494.2.3. Modurile de funcţionare ale portului serial 52
4.3. Porturi de intrare-ieşire 555. Noţiuni de utilizare a procesorului TMS320C50 58
5.1. Reprezentarea numerelor pentru procesoareledigitale de semnal în virgulă fixă 58
5.2. Operaţii aritmetice realizate cu procesorul digitalîn virgulă fixă TMS320C50 62
5.3. Transformata Fourier rapidă 655.4. Filtre digitale 70
Anexă 80Bibliografie 99
6
7
1. Introducere
Tehnologia digitală cunoaşte în prezent progrese impresionante.
Prelucrarea numerică a semnalelor a fost unul dintre catalizatorii aflaţi în
spatele progresului tehnologiei digitale iar sistemele digitale de prelucrare a
semnalelor se bucură de aceeaşi apreciere într-un număr mare de aplicaţii.
Succese ale prelucrării digitale a semnalelor sunt înregistrate
permanent în diferite domenii. Nevoia de putere de prelucrare digitală a
semnalelor creşte continuu, determinând dezvoltarea sistemelor folosite în
acest scop. Preţul sistemelor integrate specializate pentru prelucrarea
semnalelor este scăzut în prezent, comparabil cu cel al microprocesoarelor
şi cel al microcontrolerelor.
Datorită microelectronicii, ca parte activă la această evoluţie, s-a
ajuns la ora actuală la unităţi de prelucrare digitală a semnalelor, care
conţin într-un chip diferite tipuri de memorie, circuite periferice de uz
general şi specializate, fiind create astfel toate premisele de proiectare şi
implementare de noi produse.
Procesoarele digitale de semnal sunt sisteme digitale de prelucrare
a semnalelor capabile să execute un număr remarcabil de instrucţiuni în
unitatea de timp. Beneficiind de o arhitectură de tip Harvard, în comparaţie
cu cea clasică a microprocesoarelor, procesoarele digitale de semnal sunt
capabile să execute o instrucţiune într-un singur ciclu maşină, pretându-se
la aplicaţiile în timp real.
Dintre domeniile în care procesoarele digitale de semnal îşi găsesc
aplicaţii se remarcă următoarele:
- telecomunicaţii: modem-uri, compresie de date, securizare de date, filtrare
digitală, telefonie celulară;
8
- produse de larg consum: receptoare radio şi TV digitale, sintetizatoare
muzicale;
- automobile: controlul adaptiv al funcţionării automobilului, frâne anti-
derapaj, navigaţie, GPS (sistem de poziţionare);
- control: controloare de harddisk, controloare de imprimantă, robotică;
- instrumentaţie: generare de funcţii, recunoaşterea formelor, analizoare de
spectru;
- electronică medicală: aparatură electronică complexă, prelucrarea
imaginilor de la echografe şi tomografe;
- electronică de putere şi acţionări electrice, etc.
1.1. Tehnicile de prelucrare digitală a semnalelor
Cu mult timp în urmă, prelucrarea semnalelor se realiza cu ajutorul
circuitelor analogice. Apariţia microprocesoarele a permis prelucrarea
digitală a semnalelor. Tehnicile de prelucrare digitală a semnalelor sunt
fundamentale în ceea ce priveşte manipularea semnalelor analogice din
mediul înconjurător. Când aceste semnale sunt prelucrate de către sistemul
de prelucrare digital, metodele de prelucrare analogice trebuie să fie
transformate pentru realizarea implementării digitale - 5.4.
Semnalele din mediul înconjurător au o natură analogică. Pentru a
putea fi prelucrate de sistemele digitale, semnalele analogice sunt
eşantionate şi apoi cuantizate într-un convertor analog-digital, obţinându-se
în urma conversiilor date reprezentate sub formă binară. Datele sub formă
binară sunt prelucrate apoi de sistemele digitale de prelucrare cu ajutorul
unor algoritmi optimizaţi pentru a îndeplini o anumită sarcină într-un timp
cât mai scurt. Rezultatul prelucrării digitale este convertit apoi în formă
9
analogică. În figura 1.1 este prezentată schema bloc a unui sistem digital
de prelucrare a semnalelor.
Fig.1.1 Schema bloc a unui sistem de prelucrare digitală a semnalelor
Procesoarele digitale de semnal sunt realizate pentru a funcţiona
conform principiului amintit mai sus, fiind capabile să execute instrucţiuni
foarte complexe într-un singur ciclu maşină.
1.2. Arhitectura procesoarelor de semnal
Pentru microprocesoarele de uz general se foloseşte ca bază
arhitectura von Neuman. Acest tip de arhitectură - figura 1.2 - are
dezavantajul că datele şi instrucţiunile accesate de către unitatea centrală
folosesc aceeaşi magistrală de date, motiv pentru care într-un ciclu maşină
poate să fie citită fie un operand fie o instrucţiune.
Fig.1.2 Arhitectura unui microprocesor de uz general
10
Datele respectiv instrucţiunile, ajung la unitatea aritmetică şi logică
prin intermediul magistralei de date (MD). Selectarea unei locaţii din
memoria aferentă microprocesorului se realizează cu ajutorul magistralei
de adrese. Pe magistrala da control sunt transmise informaţii cu privire la
selectarea memoriei sau a porturilor de intrare-ieşire dar şi informaţii privind
sensul de transfer a datelor.
Datorită faptului că la prelucrarea digitală a semnalelor este necesar
accesul la date (operanzi) respectiv instrucţiuni, într-un interval de timp cât
mai scurt, pentru procesoarele digitale de semnal s-a adoptat arhitectura
Harvard modificată - figura 1.3.
Fig.1.3 Arhitectura unui procesor digital de semnal
După cum se poate contata din figura 1.3 procesorul digital de
semnal dispune de magistrale separate pentru adresarea memoriei de
program (MAMP) şi adresare a memoriei de date (MAMD). Transferul de
date între memoria de program/memoria de date şi unitatea aritmetică şi
logică centrală se realizează tot pe magistrale separate: magistrala de date
a memoriei program (MDMP) respectiv magistrala de date a memoriei de
date (MDMD). Sensul transferului de date este asigurat prin intermediul
semnalelor de pe magistrala de control. În figura 1.3 este indicat cu linie
11
întreruptă faptul că este posibilă realizarea transferurilor de date între
memoria program şi memoria de date a procesorului digital de semnal.
Existenţa unor magistrale separate pentru adresarea memoriei
program respectiv adresarea memoriei de date cât şi magistrale de acces
la date separat, facilitează accesul la un operand şi la o instrucţiune într-un
singur ciclu maşină.
Pentru memoria şi porturile I/O externe, procesorul digital de semnal
are o funcţionare asemănătoare cu cea a microprocesoarelor de uz
general, deoarece datele şi instrucţiunile ajung la unitatea aritmetică şi
logică centrală doar prin intermediul unei singure magistrale de date. Lucrul
cu echipamentele periferice încetineşte funcţionarea procesorului digital de
semnal.
1.3. Sistemul de numerotaţie în virgulă fixă
Semnalele analogice au o multitudine de forme şi sunt continue în
domeniul timp dar mijloacele lor de prelucrare digitală şi rezoluţia oferită
sunt limitate. Calculul digital are o precizie finită, rezultând doar o
aproximaţie a parametrilor prelucraţi. Procesoarele digitale de semnal au o
arhitectură internă care oferă o anumită precizie pentru reprezentarea
numerelor finite. În momentul actual se produc două tipuri de procesoare
digitale de semnal - în virgulă fixă şi virgulă mobilă - oferind fiecare în parte
o precizie a reprezentărilor numerice. Procesoarele în virgulă fixă sunt
caracterizate de o precizie limitată în comparaţie cu cea a procesoarelor în
virgulă mobilă. Cu toate acestea arhitecturile procesoarelor în virgulă fixă
sunt mai economice în comparaţie cu cele ale procesoarelor în virgulă
mobilă iar folosirea lor se pretează în aplicaţiile în care timpul de prelucrare
este scăzut.
12
Aritmetica care foloseşte numere cu o lungime finită este o aritmetică
cu precizie fixă sau limitată. Ambele formate în virgulă fixă şi în virgulă
mobilă sunt considerate de lungime finită.
Aritmetica în virgulă fixă este definită de formatul Q. De exemplu,
pentru procesorul de semnal TMS320C50 în virgulă fixă, formatul
Q15 (1.15) este un format des folosit la reprezentarea binară a datelor. Cel
mai semnificativ bit al reprezentării este bitul de semn urmat de un punct
imaginar, după care urmează o fracţie reprezentată pe 15 biţi. Numărul în
format Q15 are un domeniu zecimal cuprins între -1 şi 0.9(9) sau în
reprezentare hexazecimală între 8000(0)h şi 7FFF(F)h. Fracţia în format
Q15 poate fi exprimată într-o formă compactă conform următoarei relaţii:N
Nbbbbq −−− ++++−= 2...222 22
11
00 , (1.1)
unde N = 15.
Adunarea şi scăderea folosind reprezentarea numerelor în format
Q15 se realizează uşor folosind un sumator digital.
Operaţia de înmulţire presupune o înţelegere specială. Când sunt
înmulţite două numere reprezentate pe 16 biţi, rezultatul obţinut este
reprezentat pe 32 de biţi. Un produs a două numere reprezentate în
formatul Q15 (1.15) este un număr în formatul Q30 (2.30) cu doi biţi de
semn şi 30 de biţi reprezentând partea frecţionară. Datorită faptului că al
doilea bit de semn este redundant, rezultatul înmulţirii a două numere în
format Q15 trebuie deplasat la stânga cu un bit. După deplasarea la stânga
cu un bit, produsul este reprezentat în format Q31 (1.31). Rezultatul final va
fi dat de către cei 16 biţi mai semnificativi ai produsului deoarece, în marea
majoritate a cazurilor, operanzii procesoarelor numerice de semnal
TMS320C50 sunt formaţi din 16 biţi.
13
2. Unitatea centrală de prelucrare a procesorului digitalde semnal TMS320C50
Unitatea centrală de prelucrare este circuitul de bază al procesorului
digital de semnal fiind responsabil de scalarea operanzilor şi a numeroase
operaţii aritmetice şi logice. Principalele facilităţi de care dispune unitatea
centrală de prelucrare a procesoarelor TMS320C50 sunt:
- realizarea majorităţii instrucţiunilor aritmetice şi logice doar într-un singur
ciclu maşină;
- realizarea operaţiei de înmulţire cu operanzi (cu sau fără semn);
- arhitectură optimizată în vederea execuţiei de instrucţiuni "înmulţeşte şi
adună" specifice algoritmilor de prelucrare digitală a semnalelor;
- pre-scalarea, scalarea respectiv post-scalarea operanzilor, existenţa în
plus a unui registru acumulator tampon care este folosit în diferite
instrucţiuni aritmetice şi logice;
- operarea în tehnică "pipe-line", etc.
Pentru realizarea facilităţilor menţionate mai sus, procesoarele de
semnal TMS320C50 dispun în principal de următoarele circuite:
- o unitate aritmetică şi logică;
- un acumulator şi un acumulator tampon (buffer) de 32 biţi;
- un circuit de multiplicare a doi operanzi (reprezentaţi cu sau fără semn) de
câte 16 biţi;
- un registru de 32 biţi în care se obţine rezultatul operaţiei de înmulţire;
- o unitate logică paralelă.
Schema bloc a unităţii centrale de prelucrare a unui procesor digital
de semnal în virgulă fixă TMS320C50 este prezentată în figura 2.1.
Modul de operare precum şi starea unităţii centrale de prelucrare este
reflectat în regiştrii de stare şi control, regiştri care se află plasaţi în
memoria de date.
14
Fig.2.1 Schema bloc a unităţii centrale de prelucrare
2.1. Circuitele de scalare
În figura 2.1, se observă că unitatea centrală de prelucrare a proce-
soarelor TMS320C50 este prevăzută cu trei circuite de scalare: circuitul de
prescalare, P-scaler-ul şi circuitul de post scalare. Cunoaşterea acestor
circuite este importantă datorită facilităţilor pe care le oferă: operaţii
aritmetice cu precizie extinsă, evitarea depăşirilor, etc.
Circuitul de prescalare conectat la intrarea unităţii aritmetice şi logice
- ALU(32) - efectuează o deplasare a biţilor unui operand la stânga cu
maxim 16 biţi. Numărul de locaţii cu care biţii unui operand sunt deplasaţi
spre stânga sunt conţinuţi fie în registrul TREG1 dar cel mai adesea chiar
în mnemonica unor instrucţiuni prevăzute cu această posibilitate, după cum
este indicat în exemplul următor:
15
m .set 7 ; constantei m i se atribuie valoarea 7
; 00000007h
.data ; urmează o secţiune în fişierul sursă în
; care se rezervă o locaţie de memorie
; pentru constanta m
.word m
.text ; urmează o secţiune ce conţine instruc-
; ţiuni
LDP #m ; se selectează pagina de memorie în
; care este memorată constanta m,
; urmând o adresare directă
LACC m, 2 ; constanta m este încărcată în ACC
; fiind în prealabil deplasată la dreapta
; cu doi biţi (se specifică chiar în codul
; instrucţiunii) 0000001Ch
În final, se observă că în registrul acumulator ACC, operandul are
valoarea 28 sau că s-a realizat o înmulţire a constantei m cu 22 = 4. Dacă
ultima instrucţiune ar fi fost:
LACC m, 0
atunci în acumulator s-ar fi încărcat numărul 7, neexistând deplasarea cu
nici un bit a operandului spre dreapta.
Circuitul P-scaler este folosit pentru a scala rezultatul obţinut cu
ajutorul multiplicatorului a doi operanzi de câte 16 biţi - figura 2.1. Scalarea
rezultatului obţinut în urma operaţiei de înmulţire se realizează în funcţie de
conţinutul câmpului de doi biţi PM din cadrul registrului de stare ST1. Astfel,
există patru posibilităţi de scalare, conform următorului tabel. Conţinutul
16
câmpului de biţi PM poate fi încărcat cu instrucţiunea SPM 0 ÷ 3,
instrucţiune ce trebuie să preceadă operaţia de înmulţire.
Tabel 2.1
PM Deplasare
00 rezultatul din registrul PREG(32)
rămâne neschimbat (fără depla-
sare)
01 rezultatul înmulţirii este deplasat
cu un bit la stânga
10 rezultatul înmulţirii este deplasat
cu 4 biţi la stânga
11 rezultatul înmulţirii este deplasat
la dreapta cu 6 biţi
Circuitul de post-scalare este folosit pentru scalări numerice în diferite
scopuri, dar poate să asigure deplasări de maximum 7 biţi spre stânga a
operanzilor din registrul acumulator, după cum se poate observa şi din
exemplul următor.
LDP #n ; se selectează pagina de memorie în
; care este memorată variabila n
LACC #5 ; 00000005h --> ACC
SACL n, 1 ; cei 16 biţi mai puţin semnificativi ai
; acumulatorului sunt deplasaţi cu un
; un bit la stânga înainte ca aceştia să
; fie salvaţi în locaţia de memorie core-
; spunzătoare unei variabile n
; 000Ah --> (n)
17
2.2. Multiplicatorul
Multiplicatorul - figura 2.1 - are rolul de a realiza înmulţirea a doi
operanzi de câte 16 biţi iar rezultatul operaţiei este de 32 biţi. Operanzii
sunt interpretaţi ca numere cu semn, în cod complement lui doi. Există o
instrucţiune de înmulţire, MPYU, care consideră operanzii ca fiind numere
întregi fără semn, reprezentaţi în cod binar natural.
După cum se poate observa din figura 2.1, multiplicatorul primeşte
operanzii pe două căi: magistrala de date a memoriei program respectiv din
registrul TREG0 ( în cazul în care bitul TRM, conţinut de registrul PMST al
procesorului, este resetat, atunci conţinutul regiştrilor TREG1 şi TREG2
este identic cu cel al registrului TREG0, pentru a putea păstra
compatibilitatea cu procesoarele digitale de semnal TMS320C25).
Rezultatul operaţiei de înmulţire este stocat în registrul PREG(32), existând
posibilitatea realizării de scalări în funcţie de conţinutul câmpului de doi biţi
PM (vezi tabelul 2.1), conţinut în registrul de stare ST1. Încărcarea
registrului TREG0 se poate face cu instrucţiunea dedicată LT. Instrucţiunile
LTA, LTD, LTP şi LTS, pe lângă încărcarea registrului TREG0,
realizează în plus şi alte operaţii în acelaşi ciclu maşină. Pentru operaţiile
care realizează o operaţie de ridicare la pătrat, SQRA şi SQRS, operandul
provine doar din registrul TREG0.
Pentru procesoarele digitale de semnal sunt specifice instrucţiuni de
tipul înmulţeşte şi adună. Unul dintre exemple îl constituie instrucţiunea
MAC. Această instrucţiune realizează următoarele acţiuni: adună la
conţinutul acumulatorului conţinutul scalat (în funcţie de biţii PM) al
registrului PREG iar rezultatul rămâne stocat în acumulator, încarcă
registrul PREG0 cu un operand din memoria de date (fie prin adresare
directă fie prin adresare indirectă), iar în final, înmulţeşte conţinutul
18
registrului TREG0 cu un operand conţinut la o anumită locaţie din memoria
program indicată în codul instrucţiunii.
Instrucţiunea MACD, pe lângă operaţiile realizate de instrucţiunea MAC,
realizează în plus şi o deplasare a operandului din memoria de date la o
adresă imediat superioară. Astfel, dacă variabila m se află în locaţia de
memorie cu adresa adr, după efectuarea instrucţiunii MACD, variabila m se
va găsi la adresa adr+1.
Funcţionarea unităţii aritmetice şi logice este determinată şi de starea
a doi biţi: SXM (ST1.10 - bitul 10 din registrul ST1) şi OVM (ST0.11).
Bitul SXM determină modul de interpretarea a datelor de către
unitatea aritmetică şi logică precum şi circuitul de multiplicare. Astfel, dacă
bitul SXM este setat, cel mai semnificativ bit al unei date este bitul de semn
iar datele sunt reprezentate în cod complement faţă de doi. Dacă bitul SXM
este resetat, datele sunt considerate ca fiind numere naturale.
Tratarea depăşirilor de către unitatea aritmetică şi logică centrală se
realizează în funcţie de starea bitului OVM. Dacă bitul OVM este setat,
atunci în urma unei semnalizări de depăşire a conţinutului registrului
ACC(32), de către fanionul OV (ST0.12), registrul ACC(32) va fi încărcat fie
cu valoarea 7FFFFFFFH (valoarea pozitivă cea mai mare) fie cu valoarea
80000000H (valoarea negativă cea mai mică), în funcţie de sensul
depăşirii. Observaţie: Depăşirea se referă la faptul că rezultatul unei
operaţii aritmetice care are ca destinaţie registrul acumulator se reprezintă
pe un număr mai mare de 32 de biţi. Se observă că acest mod de lucru
introduce la apariţia depăşirilor limitarea superioară respectiv inferioară a
rezultatelor. Dacă bitul OVM nu este setat în "1" logic, în acumulator se va
19
păstra valoarea obţinută în urma operaţiei care a determinat depăşirea.
Este demn de remarcat faptul că operaţiile logice nu pot să producă
depăşire.
La semnalizarea depăşirilor de către fanionul OV se poate face o
ramificaţie a programului la o subrutină care rezolvă problema depăşirilor,
efectuându-se în principal scalări, după cum s-a menţionat secţiunea 2.1.
2.3. Unitatea logică paralelă
Unitatea logică paralelă este parte a unităţii centrale de prelucrare a
procesorului - figura 2.1 - şi este folosită cu precădere la setarea, resetarea
şi testarea unor câmpuri de biţi a oricărei locaţii de memorie de date,
implicit şi a regiştrilor de stare şi control a căror conţinut va fi descris în
subcapitolul 2.4. Unitatea logică paralelă (PLU) se poate utiliza
independent de ALU(32) respectiv de circuitul de multiplicare. Pe una dintre
cele două intrări ale PLU(32) se aplică datele provenite din memoria de
date prin intermediul magistralei de date a memoriei de date iar pe cea
de-a doua intrare, operandul este selectat fie din registrul de manipulare
dinamică de bit DBMR(16) fie dintr-o locaţie din memoria program. În urma
efectuării unei operaţii de tip citeşte, modifică sau scrie, rezultatul este
depus în locaţia de memorie din care provine primul operand specificat în
codul instrucţiunii. Bitul de test TC (ST1.11) este setat ori de câte ori
rezultatul operaţiilor logice efectuate de PLU este zero. Instrucţiunea BIT
care realizează teste la nivel de bit este executată tot de PLU(32).
2.4. Regiştrii de stare şi control
Procesoarele digitale de semnal TMS320C50 folosesc, pentru
păstrarea unor informaţii referitoare la starea şi modurile lor de lucru, patru
20
regiştri de stare şi control: ST0, ST1, PMST, CBCR. În primii doi regiştri
este păstrată starea pentru diferite condiţii, precum şi modurile de lucru
compatibile cu cele ale generaţiilor de procesoare digitale de semnal
anterioare (TMS320C25). În regiştrii PMST şi CBCR sunt conţinute
informaţii de stare şi control ale procesorului. Există în setul de instrucţiuni
al procesoarelor TMS320C5X instrucţiuni, care pe durata execuţiei ţin cont
de valorile unor biţi din regiştrii de stare şi control. De exemplu,
instrucţiunile de salt condiţionat încarcă în registrul PC(16) o adresă la care
se face ramificarea unui program doar dacă sunt îndeplinite condiţiile
impuse de utilizator. Aceste condiţii pot să depindă chiar de valoarea unor
biţi din regiştrii de stare şi control. Biţii de control: C, CNF, HM, INTM,
OVM, TC, SXM, XF din regiştrii ST0 şi ST1 pot fi setaţi sau resetaţi cu
ajutorul instrucţiunilor SETC respectiv CLRC. Pentru a modifica valoarea
unor biţi de stare şi control, a căror valoare nu poate fi reactualizată cu
instrucţiunile SETC respectiv CLRC, este nevoie de efectuarea unor
operaţii auxiliare: salvarea conţinutului registrului de stare într-o locaţie de
memorie temporară, reactualizarea conţinutului locaţiei de memorie
temporară prin intermediul unor operaţii logice şi în final, reîncărcarea în
registrul de stare şi control a conţinutului locaţiei de memorie temporară.
Conţinutul regiştrilor de stare şi control este următorul:
- Registrul ST0
DP - indicator pentru pagina de memorie de date curentă;
INTM - validează sau invalidează întreruperile nemascabile (mai puţin
RESET);
21
OVM - determină modul de lucru la apariţia unei depăşiri;
OV - indică depăşirea capacităţii acumulatorului;
ARP - indicatorul regiştrilor auxiliari.
- Registrul ST1
PM - determină modul de deplasare al conţinutului registrului PREG(32);
XF - indică valoarea logică la pinul XF al procesorului;
HM - indică modul Hold de operare;
SXM - indică modul de lucru cu extensia bitului de semn;
TC - bit de test şi control;
C - bitul de transport;
ARB - registru tampon de trei biţi pentru ARP.
- Registrul PMST
BRAF - folosit de instrucţiunile de repetare;
TRM - validează utilizarea mai multor regiştri temporari;
NDX - validează registrul index auxiliar;
22
MP/MC - 0 - memoria ROM este integrată cipului iar dacă este 1 memoria
de tip ROM este externă;
RAM - 1/0 - memoria RAM a cipului este cartată în / în afara memoriei
program;
OVLY - 1 - memoria RAM a cipului este cartată în memoria de date;
IPTR - indică locul în pagina de memorie 0 unde se află vectorii de
întrerupere.
- Rgistrul CBCR
CAR1 - indică registru auxiliar care este folosit pentru registrul circular 1;
CENB1 - validează registrul circular 1 (0 - după RESET);
CAR2 - indică registru auxiliar care este folosit pentru registrul circular 2;
CENB2 - validează registrul circular 2 (0 - după RESET).
2.5. Sistemul de întreruperi
Sistemul de întreruperi asigură sincronizarea activităţii unităţii
centrale cu evenimente externe. Procesorul de semnal TMS320C50
dispune de întreruperi hardware şi software. Întreruperile hardwarare sunt
mascabile de către utilizator sau nemascabile. Fiecare din cele 16
întreruperi mascabile au o prioritate bine precizată. Întreruperea
nemascabilă care determină resetarea procesorului, aducându-l într-o stare
bine determinată, are prioritatea cea mai mare. Prin proiectare, procesorul
TMS320C50 foloseşte doar 9 din cele 16 întreruperi mascabile, restul fiind
23
invalidate. Cererile de întrerupere provin de la porturile seriale, de la
circuitul temporizator, de la anumiţi pini ai procesorului, sau sunt generate
chiar prin program.
Strâns legat de sistemul de întreruperi este şi noţiunea de vector de
întrerupere. Un vector de întrerupere este, în esenţă, o locaţie din memoria
program, ce conţine o instrucţiune care produce ramificarea unui program,
în cazul în care unitatea centrală de prelucrare recunoaşte şi acceptă o
anumită cerere de întrerupere.
Pentru procesoarele digitale de semnal TMS320C50, locaţia din
memoria program la care se găseşte un vector de întrerupere este
determinată de conţinutul câmpului de 5 biţi IPTR(PMST.15-11), cei mai
semnificativi biţi ai registrului de control PMST(16), precum şi de nivelul de
prioritate desemnat fiecărei întreruperi. Conţinutul câmpului de biţi IPTR
indică un multiplu de 2k cuvinte de memorie program la începutul căruia
vor fi plasaţi vectorii de întrerupere indicaţi în tabelul 2.2.
Tabelul 2.2
Întrerupere Locaţie Prioritate Descriere
/ RESET 0 1 Semnal de reset (nemascabil)
/ INT1 2 3 Întrerupere externă
/ INT2 4 4 Întrerupere externă
/ INT3 6 5 Întrerupere externă
TINT 8 6 Întrerupere generată de circuitul de
temporizare intern
RINT 10 7 Întrerupere generată de portul serial
de recepţie
XINT 12 8 Întrerupere generată de portul serial
de transmisie
TRNT 14 9 Întrerupere generată de portul serial
24
de recepţie TDM
TXNT 16 10 Întrerupere generată de portul serial
de transmisie TDM
/ INT4 18 11 Întrerupere externă
TRAP 34 Instrucţiunea TRAP
/ NMI 36 2 Întrerupere nemascabilă
Din tabelul 2.2 se observă foarte uşor că pentru fiecare vector de
întrerupere se alocă câte două locaţii succesive de memorie program. În
prima locaţie este memorată de regulă o instrucţiune de salt la o anumită
subrutină de deservire a întreruperii. Subrutina corespunzătoare unei
întreruperi începe la adresa specificată în a doua locaţie de memorie a
vectorului de întrerupere.
Procesoarele de semnal TMS320C50 dispun de doi regiştri speciali
folosiţi pentru lucrul cu întreruperile: registrul de semnalizare a unei cereri
de întrerupere IFR(16) şi un registru de mascare a întreruperilor IMR(16).
Pentru o parte din întreruperile menţionate în tabelul 2.2, în registrul IFR
este rezervat câte un bit (fanion). Acest fanion va trece în "1" logic ori de
câte ori apare o cerere de întrerupere.
Conţinutul registrului IFR poate să fie citit sau modificat. O întrerupere
este anulată dacă fanionul corespunzător întreruperii din registrul IFR este
setat în "1" logic, prin program, în urma iniţializării procesorului sau în
momentul în care procesorul acceptă şi execută cererea de întrerupere.
Deşi cererile de întrerupere sunt memorate în registrul IFR, acestea
pot să fie executate doar dacă biţii corespunzători întreruperilor din registrul
IMR sunt setaţi în "1" logic. Astfel, registrul IMR acţionează ca o "mască"
25
asupra registrului IFR. Doar întreruperile /RESET şi /INT nu pot să fie
mascate. La fel ca şi în cazul registrului IFR, registrul IMR poate să fie citit
sau modificat prin program. Adresarea regiştrilor IFR şi IMR este identică
cu cea a regiştrilor cu funcţii speciale mapaţi în pagina 0 a memoriei de
date.
Este demn de remarcat faptul că procesoarele de semnal
TMS320C50 dispun de un bit de validare/invalidare generală a cererilor de
întrerupere. Este vorba de INTM (ST0.9) care în cazul în care este setat în
"1" logic invalidează cererile de întrerupere memorate în registrul IFR. Bitul
INTM poate fi setat sau resetat cu ajutorul instrucţiunilor SETC INTM
respectiv CLRC INTM.
Înainte de executarea unei secvenţe de program care deserveşte o
cerere de întrerupere, procesorul salvează starea unor regiştri interni.
Ultima instrucţiune a rutinelor care tratează cererile de întrerupere este
RETI sau RETE. Instrucţiunea RETI restaurează contextul în care se afla
programul principal chiar înainte de execuţia subrutinei de întrerupere,
adică, conţinutul unor regiştri interni vor conţine aceeaşi informaţie pe care
au avut-o înainte de deservirea întreruperilor. Regiştrii a căror conţinut se
salvează la executarea unei rutine de întrerupere în regiştri stivă tampon cu
un singur nivel sunt: ACC(32), ACCB(32), PREG(32), regiştrii de stare şi
control, mai puţin bitul XF (ST1.4).
26
3. Configurarea şi adresarea memoriei la procesorulde semnal TMS320C50
O etapă importantă în programarea procesorului digital de semnal
TMS320C50 este aceea de configurare a memoriei sale interne.
Configurarea memoriei, realizată prin setarea unor biţi special desemnaţi în
acest scop, trebuie să fie premergătoare rulării programului principal de
către procesor. Configurarea memoriei este necesară pentru o mai bună
organizarea a datelor memorate. Din punctul de vedere al configurării
memoriei interne, procesorul TMS320C50 este foarte flexibil. Odată ce
memoria procesorului a fost configurată, procesorul permite o serie de
moduri de adresare a fiecărei locaţii de memorie.
3.1. Configurarea memoriei
Procesorul digital de semnal TMS320C50 permite adresarea unui
spaţiu mare de memorie dar, memoria conţinută în structura sa internă este
limitată. Astfel, procesorul dispune de 2k cuvinte (16 biţi) de memorie de tip
ROM, 9k cuvinte (16 biţi) de memorie RAM cu singur acces şi 1056 cuvinte
de memorie RAM cu dublu acces.
Memoria de tip ROM aparţine memoriei program internă a
procesorului, începând de la adresa 0h şi include o secvenţă de testare a
procesorului, precum şi de configurare la pornire (boot code).
Memoria de tip RAM cu singur acces poate fi configurată de către
utilizator ca memorie de program şi / sau memorie de date între adresa
800h şi 2C00h în funcţie de modul de setare al biţilor “CNF”, “RAM” şi
“OVLY” din regiştrii de stare şi control ai procesorului. Aceste setări se fac
evident înaintea rulării aplicaţiilor. Citirea respectiv scrierea unei date din /
27
în memoria RAM cu singur acces se realizează într-un ciclu maşină. O
locaţie din memoria de tip RAM cu dublu acces poate fi citită respectiv
înscrisă simultan, într-un singur ciclu maşină. Cele 1056 de cuvinte (16 biţi)
de memorie cu acces dublu sunt împărţite în trei blocuri:
- blocul B0 conţine 512 cuvinte la adresele: 100h – 2FFh din memoria de
date sau la adresele 0FE00h – 0FFFFh în memoria program;
- blocul B1 conţine 512 cuvinte la adresele 0300h – 04FFh în memoria
internă de date;
- blocul B2 cuprinde 32 cuvinte la adresele 60h – 7Fh în memoria internă
de date a procesorului digital de semnal.
Dintre principalele avantaje ale utilizării memoriei interne a
procesorului faţă de folosirea unei memorii externe, se pot menţiona
următoarele:
- acces mai rapid la date / instrucţiuni;
- preţ mai mic al sistemului de prelucrare digitală;
- structură simplificată a sistemului de prelucrare (de exemplu lipsa logicii
externe de decodificare);
- consum redus de energie, etc.
Utilizarea memoriei externe are avantajul stocării unor programe
mari şi prelucrării unui număr foarte mare de date. Pentru unele aplicaţii
clasice: filtrări cu filtre cu răspuns finit la impuls (FIR), filtrări cu filtre cu
răspuns infinit la impuls (IIR), analiză spectrală, convoluţii, etc.,
dimensiunea memoriei RAM cu singur acces este suficientă.
Fig. 3.1 Regiştrii şi biţii pentru configurarea memoriei
28
În tabelul 3.1 se indică modul de configurare a memoriei procesorului
în funcţie de setarea biţilor indicaţi în Fig.3.1.
Registrul de stare ST1(16 biţi) poate fi înscris cu ajutorul instrucţiunii
LST şi poate fi citit cu instrucţiunea SST, deoarece acest registru nu este
plasat în pagina zero a memoriei de date. Asupra registrului PMST (16 biţi)
se pot efectua operaţii logice în vederea setării biţilor pe care îi conţine,
deoarece acest registru se poate plasa în pagina zero a memoriei de date.
Biţii din regiştrii ST1 şi PMST pot fi setaţi sau resetaţi cu ajutorul
instrucţiunilor SETC respectiv CLRC.
În figura 3.2 se prezintă modul de organizare al memoriei în cadrul
procesorului digital de semnal TMS320C50.
Fig.3.2 Organizarea memoriei
29
Tabel 3.1 Configurarea memoriei (MD - memoria de date, MP - memoria program)DARAM (intern)
CNF RAM MP/MC OVLY ROM SARAM(intern) B0 B1 B2
MD(externă)
MP(externă)
0 0 0 00000h-07FFh
invalidat 100h-2FFh(MD)
300h-4FFh(MD)
60h-7Fh(MD)
0800h -FFFFh
0800h-FFFFh
0 0 0 10000h-0700h
0800h-2BFFh(MD)
100h-2FFh(MD)
300h-4FFh(MD)
60h-7Fh(MD)
2C00h -FFFFh
0800h-FFFFh
0 0 1 0invalida
tinvalidat 100h-
2FFh(MD)
300h-4FFh(MD)
60h-7Fh(MD)
0800h -FFFFh
0000h-FFFFh
0 0 1 1invalida
t0800h-2BFFh(MD)
100h-2FFh(MD)
300h-4FFh(MD)
60h-7Fh(MD)
2C00h-FFFFh
0000h-FFFFh
0 1 0 00000h-07FFh
0800h-2BFFh(MD)
100h-2FFh(MD)
300h-4FFh(MD)
60h-7Fh(MD)
0800h -FFFFh
2C00h-FFFFh
0 1 0 10000h-07FFh
800h-2BFFh
(MP), (MD)
100h-2FFh(MD)
300h-4FFh(MD)
60h-7Fh(MD)
2C00h -FFFFh
2C00h-FFFFh
0 1 1 0invalida
t800h-2BFFh(MP)
100h-2FFh(MD)
300h-4FFh(MD)
60h-7Fh(MD)
0800h -FFFFh
0h-07FFh2C00h-ffffh
0 1 1 1invalida
t800h-2BFFh
(MP), (MD)
100h-2FFh(MD)
300h-4FFh(MD)
60h-7Fh(MD)
2C00h -FFFFh
0h-07FFh2C00h-ffffh
1 0 0 00000h-07FFh
invalid FE00h-FFFFh(MP)
300h-4FFh(MD)
60h-7Fh(MD)
0800h -FFFFh
0800h -FDFFh
1 0 0 10000h-07FFh
0800h-2BFFh(MD)
FE00h-FFFFh(MP)
300h-4FFh(MD)
60h-7Fh(MD)
2C00h -FFFFh
0800h -FDFFh
1 0 1 0invalida
tinvalidat FE00h-
FFFFh(MP)
300h-4FFh(MD)
60h-7Fh(MD)
0800h -FFFFh
0h-FDFFh
1 0 1 1invalida
t0800h-2BFFh(MD)
FE00h-FFFFh(MP)
300h-4FFh(MD)
60h-7Fh(MD)
2C00h -FFFFh
0h-FDFFh
1 1 0 00000h-07FFh
0800h-2BFFh(MP)
FE00h-FFFFh(MP)
300h-4FFh(MD)
60h-7Fh(MD)
0800h -FFFFh
2C00h-FDFFh
1 1 0 10000h -07FFh
800h-2BFFh
(MP), (MD)
FE00h-FFFFh(MP)
300h-4FFh(MD)
60h-7Fh(MD)
2C00h -FFFFh
2C00h-FDFFh
1 1 1 0invalida
t0800h-2BFFh(MP)
FE00h-FFFFh(MP)
300h-4FFh(MD)
60h-7Fh(MD)
0800h -FFFFh
0h-07FFh2C00h -FDFFh
1 1 1 1invalida
t800h-2BFFh
(MP), (MD)
FE00h-FFFFh(MP)
300h-4FFh(MD)
60h-7Fh(MD)
2C00h -FFFFh
0h-07FFh2C00h -FDFFh
30
Din cele prezentate mai sus, figura 3.2, se poate observa că există
situaţii în care memoria RAM internă (9 k cuvinte) este folosită atât pentru
memoria program cât şi pentru memoria de date, folosindu-se acelaşi
spaţiu de adresare.
3.2. Adresarea memoriei program
Memoria program este folosită pentru stocarea unor rutine de calcul
pentru o aplicaţie dată dar poate fi folosită şi pentru stocarea unor date cu
valori implicite. Adresarea unei locaţii a memoriei program poate fi
înţeleasă uşor dacă se urmăreşte figura 3.3.
Fig.3.3 Schema de principiu pentru adresarea unei locaţii de memorie program
Din figura 3.3 se poate observa că o adresă pentru memoria
program provine de la registrul PC (numărător de program de 16 biţi) prin
intermediul magistralei de adrese a memoriei program. Ca rezultat, pe
magistrala de date a memoriei program este plasat conţinutul locaţiei de
memorie a cărei adresă a fost indicată de PC. În figură se mai observă un
circuit de organizare a memoriei program şi un circuit de adresare care are
rolul de a furniza registrului PC adresa locaţiei de memorie care urmează a
fi adresată (utilizată).
31
În figura 3.4 se prezintă o detaliere a circuitelor cu ajutorul cărora se
realizează adresarea memoriei program.
Fig.3.4 Adresarea memoriei program
În figura 3.4, registrul PC este numărătorul de program şi are rolul
de a indica adresa instrucţiunii curente. Conţinutul registrului PC poate fi
stocat într-o stivă cu opt locaţii de memorie în cazul utilizării unor
instrucţiuni de tip CALL (apel de subrutină). După executarea subrutinei de
program apelate cu ajutorul instrucţiunii de tip CALL, ultima adresă
memorată în stivă se reîncarcă în registrul PC.
Registrul BMAR este plasat în mod normal în pagina 0 a memoriei
de date la adresa 1Fh şi este folosit în cazul instrucţiunilor care realizează
mutări de blocuri de date.
Registrul BRCR este şi el plasat în pagina 0 a memoriei de date la
adresa 09h, având rolul de indicator al numărului de repetări a unui bloc de
instrucţiuni, a cărui adresă de început este conţinută în registrul PASR, iar
adresa sa de sfârşit este conţinută în registrul PAER. Regiştrii PASR şi
PAER se găsesc tot în pagina 0 a memoriei de date la adresele 0Ah
respectiv 0Bh. Bitul BRAF din registrul PMST (bitul 0) indică în starea
setată executarea repetată a unui bloc de instrucţiuni. După ce conţinutul
32
BRCR devine zero, bitul BRAF trece în zero logic. Repetarea unui bloc de
instrucţiuni se realizează cu ajutorul instrucţiunii RPTB.
Câmpul de 5 biţi IPTR ai registrului PMST (biţii 11-15) indică la care
multiplu de 2k cuvinte de memorie program sunt plasaţi vectorii de
întrerupere ai procesorului de semnal TMS320C50. Biţii CNF din registrul
ST1 (bitul 12), RAM şi MP/MC din PMST (bitul 4 respectiv bitul 3) sunt
folosiţi la configurarea memoriei.
De la registrul PC(16) sunt generate efectiv adresele pentru
memoria program atunci când sunt accesate instrucţiuni sau operanzi
imediaţi. După citirea unei instrucţiuni din memoria program, conţinutul
numărătorului de program este incrementat automat cu o unitate,
realizându-se astfel adresarea instrucţiunii următoare. Există şi situaţii în
care conţinutul PC, după citirea unei instrucţiuni, se încarcă cu o valoare
impusă de utilizator prin program, alta decât cea obţinută prin simpla
incrementare, cum ar fi:
- executarea unor instrucţiuni de salt la o anumită adresă sau apel de
subrutină;
- acceptarea unei întreruperi de către unitatea centrală a procesorului ;
- repetarea unui bloc de instrucţiuni;
- reîncărcarea din stivă a unei adrese după deservirea unei întreruperi
sau a unei subrutine;
- citirea sau scrierea unor tabele în memorie;
- la citirea celui de-al doilea operand necesar unor instrucţiuni ce pot
realiza o operaţie de înmulţire şi o operaţie de adunare (MAC, MACD,
etc.).
Adresele generate de către numărătorul de program PC pot fi
“vizibile” şi în exteriorul procesorului, în vederea depanării unor programe,
cu ajutorul opţiunii “vizibilitate adrese”, prin setarea bitului AVIS din registrul
33
PMST (PMST.7). Nefolosirea acestei opţiuni determină scăderea
consumului de energie şi a zgomotului generat de către procesor.
În mod normal conţinutul registrului PC este incrementat cu câte o
unitate atunci când programul este executat secvenţial. La apariţia unei
instrucţiuni de ramificare a programului (de exemplu: B adresa_nouă),
registrul PC este încărcat cu "adresa_nouă". În cazul apelării unei
subrutine, conţinutul registrului PC (adresa_curentă) este incrementat cu
doi şi apoi memorat pe vârful stivei. După revenirea din subrutină, registrul
PC se încarcă cu ultima valoare salvată în stivă. Tratarea întreruperilor se
realizează în mod similar, cu precizarea că se salvează conţinutul mai
multor regiştri înainte de executarea rutinei care deserveşte întreruperea.
Pentru instrucţiunile de ramificare condiţionată a programului, saltul la
o nouă adresă din memoria program are loc doar dacă condiţia/condiţiile
specificate în instrucţiune sunt îndeplinite. Neîndeplinirea acestor condiţii
determină executarea instrucţiunii ce urmează celei de salt condiţionat.
Procesoarele de semnal TMS320C50 admit şi întoarcerile condiţionate din
subrutină. În tabelul 3.2 sunt prezentate condiţiile care pot să determine
modificarea registrului PC.
Tabelul 3.2
Operand Condiţie Descriere
EQ ACC = 0 Conţinutul acumulatorului este egal cu 0
NEQ ACC ≠ 0 Conţinutul acumulatorului este diferit de zero
LT ACC < 0 Conţinutul acumulatorului este mai mic decât
zero
LEQ ACC ≤ 0 Conţinutul acumulatorului este mai mic sau
egal cu zero
GT ACC > 0 Conţinutul acumulatorului este mai mare
decât zero
34
GEQ ACC ≥ 0 Conţinutul acumulatorului este mai mare sau
egal cu zero
C C = 1 Bitul Carry al acumulatorului este setat
NC C = 0 Bitul Carry al acumulatorului este resetat
OV OV = 1 Apariţia unei depăşiri a ACC
NOV OV = 0 Nu s-a detectat depăşirea ACC
BIO BIO = 0 Semnalul de la pinul BIO are nivel logic zero
TC TC = 1 Bitul de test/control este setat
NTC TC = 0 Bitul de test/control este resetat
Dacă o instrucţiunea de ramificare a programului conţine mai multe
condiţii, saltul la noua adresă are loc dacă toate condiţiile sunt îndeplinite.
In caz contrar, conţinutul registrului PC indică instrucţiunea imediat
următoare celei de salt condiţionat.
În exemplul următor este indicată o secvenţă de program care
realizează un salt condiţionat.
ZAP
CLRC SXM
LACC #10
adr1 SUB #1
adr2 BCND adr1, NEQ
SETC SXM
...
Conţinutul acumulatorului este decrementat cu o unitate până în momentul
în care acesta ajunge la zero. Se realizează saltul la adresa adr1 atât timp
cât conţinutul acumulatorului nu este egal cu zero. După îndeplinirea
condiţiei, procesorul execută următoarea instrucţiune, SETC SXM.
35
3.3. Modurile de adresare ale operanzilor
Pentru executarea instrucţiunilor este necesară adesea accesarea
de operanzi. Operanzii reprezintă constante predefinite de programator sau
variabile. Operanzii pot să se găsească plasaţi în memoria de date, în
memoria program sau chiar în codul unor instrucţiuni.
Procesoarele digitale de semnal TMS320C50 admit următoarele
moduri de adresare a operanzilor: adresarea imediată, adresarea directă,
adresarea indirectă, adresarea regiştrilor dedicaţi, adresarea regiştrilor
mapaţi în memoria de date şi adresarea circulară.
A. Adresarea imediatăÎn cazul adresării imediate, operandul se găseşte înscris chiar în
codul unei instrucţiuni, după cum se poate observa din figura 3.5.
Fig.3.5 Exemplu de adresare imediată
Adresarea imediată poate să fie de două feluri: adresare imediată
scurtă şi adresare imediată lungă. Pentru adresarea imediată scurtă, codul
instrucţiunii este reprezentat împreună cu operandul pe 16 biţi – fig.3.5.
Pentru adresarea imediată lungă, codul instrucţiunii ce conţine operandul
este format din două cuvinte de 16 biţi. De remarcat faptul că acelaşi tip de
36
instrucţiune poate fi folosit, în funcţie de modul de scriere al instrucţiunii, în
unul sau mai multe moduri de adresare.
Observaţie: Cu ajutorul instrucţiunii ADRK #k se adună constanta k la
conţinutul registrului auxiliar curent.
B. Adresarea directăProcesoarele de semnal din familia TMS320C5X admit modul de
adresare directă a operanzilor aflaţi în memoria de date. În acest caz, se
consideră că memoria de date se poate împărţi în 512 părţi (pagini).
Fiecare “pagină” din memoria de date conţine 128 de locaţii de memorie
consecutive.
Prin adresarea directă, se specifică de fapt, pentru un operand
adresat, pagina de memorie şi locaţia de memorie din cadrul paginii în care
acesta se află.
Pagina de memorie în care se găseşte operandul se poate specifica
cu instrucţiunea LDP în modul următor:
LDP #k ;
unde 0 ≤ k ≤ 511.
Constanta “k”, reprezentată pe 9 biţi, este încărcată în câmpul DP
(9biţi) din registrul ST0. După specificarea paginii “k”, locaţia de memorie
folosită de operand se specifică în cadrul unei instrucţiuni următoare,
conform următorului exemplu:
ADD dma ; 0 ≤ dma ≤ 127
37
unde “dma” reprezintă adresa unei locaţii de memorie din cadrul paginii “k”
în care se află operandul. Această adresă se codifică pe 7 biţi şi este
conţinută în codul instrucţiunii ADD - figura 3.6 - (instrucţiunea ADD
realizează o operaţie de adunare a operandului specificat prin adresarea
directă la conţinutul registrului acumulator).
Fig.3.6 Adresarea directă a operanzilor
Prin concatenarea câmpului DP (9 biţi) din registrul ST0, folosiţi
pentru indicarea unei anumite pagini din memoria de date, cu cei 7 biţi din
cadrul unei instrucţiuni care indică adresa locaţiei de memorie din cadrul
unei pagini, folosită de operand, se obţine o adresă efectivă de 16 biţi. Cu
ajutorul acestui mod de adresare se pot accesa un număr de 65536 locaţii
de memorie.
C. Adresarea indirectăProcesoarele digitale de semnal TMS320C50 dispun de opt regiştri
auxiliari şi o unitate aritmetică care îi deserveşte, în scopul adresării
indirecte a operanzilor. Denumirea de adresare indirectă provine de la
faptul că adresa efectivă a unei locaţii de memorie este dată de conţinutul
unuia din cei opt regiştri auxiliari.
38
Registru auxiliar folosit la adresarea indirectă este selectat în funcţie
de conţinutul unui registru indicator de registru auxiliar ARP (3 biţi)
- figura 3.7.
Fig.3.7 Circuitul pentru realizarea adresării indirecte
Datorită faptului că fiecare registru auxiliar conţine 16 biţi, rezultă că
prin adresarea indirectă se poate accesa oricare locaţie de memorie de 64k
cuvinte. Selectarea unui registru auxiliar pentru realizarea unei adresări
indirecte se poate face în mai multe moduri. Astfel, ARP se poate încărca
cu un număr cuprins între 0 şi 7 folosind instrucţiunea:
MAR *, ARi ;
unde 0 ≤ i ≤ 7 iar ARi indică registrul auxiliar care urmează a fi folosit la
următoarea adresare indirectă. Recunoaşterea registrului auxiliar ARi după
denumirea sa este posibilă dacă la începutul codului sursă se include şi
directiva de asamblare ".mmregs" prin care regiştrilor cu funcţiuni speciale li
se atribuie o denumire simbolică. Instrucţiunea MAR nu realizează nici o
39
operaţie ci doar actualizează conţinutul registrului ARP. Simbolul " * " este
specific adresării indirecte, reprezentând registrul auxiliar curent.
Un alt mod de încărcare a registrului ARP, des utilizat, este şi acela
în care actualizarea are loc automat după executarea unor instrucţiuni
specifice, după cum se menţionează şi în exemplul următor:
ADD #10h, 5, AR3
Cu ajutorul acestei instrucţiuni, constanta 10h este deplasată la
stânga cu 5 biţi şi apoi adunată la conţinutul acumulatorului, rezultatul fiind
păstrat în acumulator. După efectuarea adunării, registrul ARP este
încărcat cu 3, motiv pentru care conţinutul registrului auxiliar AR3 este
folosit la realizarea următoarei adresări indirecte.
Regiştrii auxiliari se încarcă de regulă cu ajutorul instrucţiunii LAR.
Conţinutul lor mai poate fi modificat şi cu instrucţiunile ADRK (adună o
constantă la conţinutul unui registru auxiliar) şi SBRK (scade o anumită
valoare din conţinutul unui registr auxiliar).
Operaţiile care se pot realiza cu conţinutul regiştrilor auxiliari se
efectuează cu ajutorul unei unităţi aritmetice dedicate (ARAU). ARAU poate
realiza incrementări sau decrementări cu o unitate a conţinutului regiştrilor
auxiliari sau chiar cu un anumit număr, dar poate realiza şi operaţii cu
inversare de bit, folosite în special în cazul analizelor de spectru a
semnalelor prelucrate.
În instrucţiunile scrise în limbaj de asamblare pentru procesoarele
TMS320C50 se folosesc următoarele simboluri a căror semnificaţie este
indicată în continuare:
* ; acest simbol indică faptul că conţinutul registrul auxiliar curent
este folosit ca adresă a memoriei de date; după adresarea locaţiei de
memorie, conţinutul registrului auxiliar curent rămâne nemodificat;
40
*+ ; conţinutul registrului auxiliar curent este folosit ca adresă a
unei locaţii de memorie de date iar după adresare, conţinutul registrului
auxiliar folosit este incrementat cu o unitate;
*– ; conţinutul registrului auxiliar curent este folosit ca adresă a
unei locaţii de memorie de date iar după adresare, conţinutul registrului
auxiliar folosit este decrementat cu o unitate;
*0+ ; conţinutul registrului auxiliar curent este folosit ca adresă a
unei locaţii de memorie de date iar după adresare, la conţinutul registrului
auxiliar folosit se adună conţinutul registrului INDX (16 biţi);
*0– ; conţinutul registrului auxiliar curent este folosit ca adresă a
unei locaţii de memorie de date iar după adresare, din conţinutul registrului
auxiliar folosit se scade conţinutul registrului INDX (16 biţi);
*BR0+ ; conţinutului registrului auxiliar curent i se adaugă conţinutul
registrului INDX cu inversare de bit - tabelul 5.1;
*BR0– ; din conţinutul registrului auxiliar curent se scade conţinutul
registrului INDX cu inversare de bit - tabelul 5.1.
3.4. Funcţionare procesoarelor de semnal TMS320C50în tehnică "pipe-line"
Pentru executarea unei instrucţiuni sunt necesare în general patru
faze: aducerea instrucţiunii din memoria program a procesorului,
decodarea instrucţiunii, aducerea operandului asociat instrucţiunii din
memoria de date sau program şi în final executarea instrucţiunii. La
microprocesoarele de uz general, cele patru faze menţionate se execută
secvenţial în timp, adică, la un moment dat microprocesoarele execută
doar o singură fază a unei instrucţiuni. Acest lucru este dezavantajos şi are
ca principal efect nedorit scăderea timpului de execuţie a instrucţiunilor.
41
La procesoarele digitale de semnal acest mod de lucru este înlocuit
cu un anumit paralelism în ceea ce priveşte efectuarea operaţiilor. Pentru
fiecare fază există un anumit circuit care este responsabil de realizarea
unei singure faze a instrucţiunii. Din acest motiv, la procesoarele de semnal
se poate spune că la un moment dat se află în desfăşurare patru
instrucţiuni aflate în faze diferite, având ca efect final, executarea unei
instrucţiuni într-un singur ciclu maşină. Acest mod de lucru mai este
cunoscut şi sub denumirea de tehnică "pipe-line" şi are ca principal scop
creşterea semnificativă a vitezei de procesare a datelor. Tehnica "pipe-line"
poate fi înţeleasă mai uşor dacă se urmăreşte figura 3.8.
Fig.3.8 Modul de lucru în tehnică “pipe-line”.
Din figura de mai sus se observă că pe durata primului ciclu maşină
se aduce din memoria program instrucţiunea N. Pe durata următorului ciclu
maşină se aduce din memoria program instrucţiunea N+1 şi se decodifică
instrucţiunea N. Pe durata celui de-al treilea ciclu maşină, se aduce din
memoria program instrucţiunea N+2, se decodifică instrucţiunea N+1 şi se
accesează operandul aferent instrucţiunii N. În momentul în care se
execută efectiv instrucţiunea N, din memoria program este adusă
instrucţiunea N+3, se decodifică instrucţiunea N+2 şi se accesează
operandul folosit de instrucţiunea N+1. După secvenţa descrisă, la fiecare
42
nou ciclu maşină se execută câte o instrucţiune, datorită paralelismului care
există în efectuarea fiecărei faze.
Realizarea celor patru faze necesare efectuării unei instrucţiuni este
“transparentă” pentru utilizator cu excepţia cazurilor când la un moment dat
două instrucţiuni aflate în faze diferite apelează aceleaşi resurse hardware
ale procesorului.
În această situaţie apare un conflict la utilizarea resurselor interne,
conflict ce trebuie să fie evitat prin metode specifice, deoarece în caz
contrar se obţin rezultate eronate. Cazurile care pot să producă erori
datorită modului de lucru “pipe-line” sunt: accesul la registrele cartate în
memorie pentru reactualizare şi comenzile de configurare ale memoriei.
Dacă se înscrie o valoare la adresele de memorie unde sunt cartaţi regiştrii
procesorului, cu ajutorul instrucţiunilor SAMM, LMMR, SACL sau SPKL,
atunci registrul a cărui conţinut a fost modificat nu poate să fie utilizat
pentru generare de adrese în modul indirect de adresare. Dacă se
utilizează instrucţiunile amintite mai sus pentru încărcarea cu o nouă
valoare a unui registru cartat în memorie atunci accesul efectiv la acel
registru se face doar în faza de execuţie (faza a 4 a). Aceasta înseamnă că
putem utiliza noua valoare înscrisă într-un registru cartat doar după încă
două cicluri de instrucţiune. Se recomandă ca în acest interval de timp
procesorul să execute o instrucţiune care nu foloseşte valoarea înscrisă în
regiştrii cartaţi (de exemplu pentru generarea unei adrese) sau să execute
pentru fiecare ciclu instrucţiunea NOP.
43
4. Circuitele periferice
Pentru a creşte performanţele, flexibilitatea şi aplicaţiile procesoarelor de
semnal TMS320C50, acestea au fost prevăzute intern cu o serie de circuite
auxiliare (periferice). Dintre circuitele periferice mai semnificative se pot
aminti: circuitul de temporizare, porturile seriale şi porturile de intrare-ieşire,
a căror structură şi funcţionare sunt descrise în cadrul acestui capitol.
4.1. Circuitul de temporizare
Procesoarele digitale de semnal TMS320C50 sunt prevăzute cu un
circuit de temporizare care are principala funcţie de a genera, periodic,
semnale de întrerupere către unitatea centrală a procesorului. Schema bloc
a circuitului de temporizare este indicată în figura 4.1.
Fig.4.1 Schema bloc a circuitului de temporizare
Circuitul de temporizare are la bază un numărător de 16 biţi şi un pre-
scaler de 4 biţi. Semnalul care decrementează conţinutul prescalerului este
44
CLKOUT1 cu o frecvenţă egală cu jumătatea din cea a cristalului de cuarţ
conectat între pinii X1 şi X2/CLKIN ai procesorului TMS320C50. Conţinutul
registrului TIM este identic cu cel al numărătorului iar conţinutul pre-
scalerului este identic cu cel al unui câmp de 4 biţi PSC conţinuţi în registrul
de control TCR al circuitului de temporizare.
Funcţionarea circuitului de temporizare este posibilă dacă bitul de
stop TSS şi bitul de reset TRB ai temporizatorului sunt în "0" logic, caz în
care semnalul de tact CLKOUT1 ajunge la pre-scaler. În momentul în care
conţinutul pre-scalerului este zero, logica de comandă determină reîncărca-
rea pre-scalerului cu conţinutul unui câmp de patru biţi TDDR din registrul
TCR, prin intermediul câmpului de biţi PSC menţionat mai sus. Tot în
momentul anulării conţinutului pre-scalerului, conţinutul numărătorului este
decrementat cu o unitate. După ce şi conţinutul numărătorului devine zero,
logica de comandă determină transferul conţinutului registrului PRD în
numărător prin intermediul registrului TIM, generându-se totodată un
semnal de întrerupere TINT pentru unitatea centrală a procesorului digital
de semnal. Semnalul de întrerupere mai este disponibil la pinul TOUT al
procesorului, putând fi folosit în diferite aplicaţii.
Structura registrului de control a circuitului de temporizare este
următoarea:- Registrul de control al circuitului de temporizare(TCR)
Semnificaţia biţilor din registrul TCR este indicată în continuare:
- TDDR - un câmp de 4 biţi este încărcat în prescaler prin intermediul PSC;
biţii din TDDR pot fi înscrişi sau citiţi;
45
- TSS - acest bitul este responsabil de pornirea şi oprirea circuitului de
temporizare, permiţând sau blocând accesul semnalului CLKOUT1 la pre-
scaler; dacă bitul TSS este în "1" logic temporizatorul este oprit iar dacă
acesta este în "0" logic, temporizatorul este pornit;
- PSC - câmpul de biţi PSC reflectă conţinutul pre-scalerului, putând să fie
doar citiţi; pe durata funcţionării circuitului de temporizare conţinutul PSC şi
TIM se modifică periodic, în timp ce conţinutul PDR şi TDDR rămâne
neschimbat până la o nouă reîncărcare a lor;
- TRB - bitul de reset al circuitului de temporizare; în "0" logic, TRB deter-
mină reîncărcarea în numărător a conţinutului registrului PRD şi a pre-
scalerului cu conţinutul lui TDDR; în "1" logic, bitul TRB nu influenţează
funcţionarea temporizatorului;
Rolul biţilor SOFT şi FREE este precizat la descrierea registrului de control
SPC al portului serial.
Datorită modului de funcţionare prezentat mai sus, semnalul TINT
este generat periodic iar frecvenţa apariţiei acestui semnal poate fi
determinată cu ajutorul relaţiei:
( )( )111
1 ++=
PRDTDDRTf
CLKOUTTINT . (4.1)
Frecvenţa maxină a semnalului TINT se obţine în cazul în care
conţinutul TDDR şi PRD este zero, adică
1max
1
CLKOUTTINT Tf = . (4.2)
Regiştrii TIM, PRD şi TCR sunt plasaţi în pagina 0 a memoriei de
date la adresele 024H, 025H respectiv 026H.
46
4.2. Porturile seriale ale procesorului de semnal TMS320C50
Procesorul digital de semnal TMS320C50 dispune de două tipuri de
porturi seriale care realizează comunicaţia serială de date.
Unul dintre cele două porturi seriale, portul serial standard (PS_S),
asigură legătura între procesor şi alte dispozitive electronice compatibile
(circuite de codare seriale, convertoare analog-digitale seriale, etc.) în mod
bidirecţional, full duplex.
Al doilea port serial al procesorului, multiplexat cu diviziune în timp
PS_TDM, este folosit pentru comunicaţia între mai multe procesoare
digitale de semnal, în cazul realizării unei prelucrări de date în sisteme
multiprocesor. Printr-o setare corespunzătoare, portul PS_TDM poate să
lucreze la fel ca un PS_S. Cele două porturi seriale permit recepţia
respectiv transmiterea de date în mod continuu sau în salve (eng. burst) în
pachete de 8 sau 16 biţi.
În această lucrare se descrie doar principiul de funcţionare al PS_S
modul său de programare. Descrierea detaliată a porturilor seriale şi a
modurilor sale de funcţionare se găseşte în [16].
4.2.1. Portul serial standard
Schema bloc a portului serial standard este indicată în figura 4.2.
Regiştrii de câte 16 biţi care sunt folosiţi pentru realizarea comunicaţiilor
seriale prin intermediul portului serial standard sunt:
- XSR - registrul de deplasare a datelor transmise preia datele de la
registrul DXR în mod paralel şi le transmite la pinul DX în mod serial;
- DXR - registrul de transmitere date reţine datele care urmează a fi
transmise de la magistrala de date după care le transmite registrului XSR;
47
registrul DXR se află plasat la adresa 021H în pagina 0 a memoriei de
date;
Fig.4.2 Schema bloc a portului serial standard al TMS320C50
- RSR - registrul de deplasare a datelor recepţionate preia datele de la
pinul DR în mod serial şi apoi le transferă registrului DRR în mod paralel;
- DRR - registrul de recepţionare date reţine datele furnizate de către
registrul RSR şi realizează apoi transferul lor spre magistrala de date;
registrul DRR se găseşte la adresa 020H în pagina zero a memoriei de
date;
- SPC - registrul de control al portului serial conţine biţii de stare şi control
ai portului serial; SPC se găseşte la adresa 022H în pagina 0 a memoriei
de date.
Programatorul are acces prin program doar la regiştrii DXR, DRR şi
SPC ai portului serial.
La transferul automat al datelor din registrul DXR în XSR şi a celor
din registrul RSR în registrul DRR este generat un semnal de întrerupere
XINT respectiv RINT către logica centrală a procesorului, care în funcţie de
48
modul de lucru cu întreruperi poate să accepte transmiterea respectiv
recepţia de date prin portul serial.
Pentru realizarea sincronizării la transmiterea şi recepţionarea datelor
se mai folosesc, conform figurii 4.2, următoarele semnale disponibile la pinii
asociaţi:
- FSX - semnalul cadru de sincronizare la transmitere care are rolul de a
iniţializa transferul efectiv de date, semnal care se generează automat la
începutul unui pachet de date;
- CLKX - semnalul de tact de transmitere impune ritmul de transfer al
datelor la nivel de bit;
- FSR - semnalul cadru de sincronizare la recepţie cu rolul de a iniţializa
recepţia datelor, prezenţa sa fiind necesară înaintea preluării unui pachet
de date de la pinul DR;
- CLKR - semnalul de tact de recepţie impune ritmul de preluare a datelor
la nivel de bit.
În figura 4.3 se prezintă un exemplu de interconectare a două
procesoare digitale de semnal prin intermediul unui port serial.
Datele care se doresc a fi transmise se încarcă prin program în
registrul DXR. În momentul în care o dată este înscrisă în DXR, aceasta va
fi transferată registrului XSR doar dacă data anterioară a fost complet
transmisă în mod serial spre pinul DX. La transferul unei date din registrul
DXR în registrul XSR, bitul de stare XRDY din registrul SPC trece din "0" în
"1" logic. Această tranziţie generează un semnal de întrerupere XINT,
semnal care indică faptul că în DXR se poate înscrie o nouă dată.
Pentru a evita "alterarea" datelor transmise, se indică înscrierea unei
noi date în DXR doar după realizarea transferului conţinutului DXR în XSR,
altfel data anterioară din DXR se pierde prin suprascriere.
49
Fig.4.3 Interconectarea a două DSP prin intermediul portului serial
La recepţie, datele care sosesc la pinul DR sunt deplasate serial în
registrul RSR, la nivel de bit, în ritmul semnalului de tact CLKR. Când data
recepţionată este complet încărcată în registrul RSR, aceasta se transferă
în mod automat registrului DRR de unde poate apoi fi citită prin program.
La transferul unei date din registrul RSR în registrul DRR, bitul de stare
RRDY din registrul SPC suferă o tranziţie de la "0" la "1" logic. Schimbarea
stării acestui bit determină generarea unui semnal de întrerupere RINT,
indicând faptul că data recepţionată poate fi folosită de program.
4.2.2. Registrul de stare şi control al portului serial
Controlul asupra portului serial se realizează prin intermediul registru-
lui de stare şi control (SPC) care conţine 16 biţi. Semnificaţia biţilor SPC
este indicată în continuare:
- bitul FREE se foloseşte în combinaţie cu bitul SOFT determinând
împreună modul în care funcţionează generatorul care furnizează semnale
de tact portului serial în momentul în care apare un punct de întrerupere
datorat unei întreruperi soft-ware; dacă bitul FREE este setat în "1" logic
atunci semnalele de tact se generează chiar dacă apare întreruperea soft-
ware; dacă bitul FREE este resetat, bitul SOFT este în "1" logic şi
transmisia unei date este în plină desfăşurare atunci generarea semnalelor
50
de tact este oprită imediat ce apare întreruperea soft-ware iar dacă bitul
SOFT este în "0", generarea semnalelor încetează doar după transmiterea
completă a datei transmisă în momentul în care survine întreruperea;
- Registrul de control al portului serial
- RSRFULL - indică prin "1" logic dacă registrul RSR conţine o dată iar data
din registrul DRR nu a fost citită de la ultimul transfer al conţinutului
registrului RSR în registrul DRR; în această situaţie secţiunea de recepţie a
portului serial aşteaptă citirea datei din registrul DRR dar între timp datele
sosite la pinul DR nu sunt luate în considerare sau sunt pierdute;
- /XSREMPTY - acest bit indică prin "0" logic dacă din registrul XSR data a
fost transmisă iar în registrul DXR nu a fost încărcată o nouă dată de la
ultimul transfer al conţinutului registrului DXR în registrul XSR;
- XRDY - acest bit indică printr-o tranziţie din "0" în "1" logic că registrul
DXR a fost încărcat în registrul XSR iar DXR poate fi încărcat cu o nouă
dată ce urmează a fi transmisă; în urma acestui transfer se mai generează
şi o întrerupere XINT;
- RRDY - bitul indică printr-o tranziţie din "0" în "1" logic că registrul RSR a
fost încărcat în registrul DRR şi că data din registrul DRR poate fi citită; în
momentul schimbării valorii acestui bit se generează o întrerupere RINT;
- IN1 - indică nivelul semnalului la pinul CLKX;
- IN0 - indică nivelul semnalului la pinul CLKR;
51
- /RRST - resetarea acestui bit atrage după sine resetarea secţiunii de
recepţie a portului serial şi încetarea funcţionării acestuia precum şi
resetarea biţilor RSRFULL şi RRDY; setarea în "1" logic permite funcţio-
narea părţii de recepţie a portului serial;
- /XRST - la resetarea pinului funcţionarea părţii de transmisie a portului
serial încetează, bitul XSREMPTY devine "0", bitul XRDY devine "1" şi se
mai generează o întrerupere XINT; dacă bitul este adus în "1" logic
secţiunea de transmisie a portului serial intră în funcţiune;
- TXM - este folosit la configurarea pinului FSX ca intrare sau ieşire dacă
TXM este în "0" respectiv "1" logic; semnalul FSX (sincronizare cadru) este
generat la transferul fiecare transfer al datelor din registrul DXR în XSR
fiind sincron cu semnalul de tact CLKX;
- MCM - indică sursa pentru semnalul CLKX; dacă MCM este în "1" logic,
semnalul CLKX se ia de la pinul CLKX iar dacă MCM este resetat,
semnalul CLKX are frecvenţa egală cu un sfert din cea a semnalului
generat intern de procesor CLKOUT1;
- FSM - acest bit indică modul de realizare a transmisiilor/recepţiilor de date
însoţite sau nu de semnalul de sincronizare de cadru; dacă FSM este setat,
la pinii FSX/FSR se transmite un impuls înaintea fiecărei date transmise;
dacă FSM este resetat, impulsul de sincronizare de cadru este folosit doar
pentru iniţializarea transmiterii/recepţiei continue a unei secvenţe de date;
- FO - bitul indică formatul datelor care trec prin portul serial; dacă FO este
setat atunci datele sunt reprezentate pe 8 biţi iar dacă FO este resetat
datele sunt reprezentate pe 16 biţi;
- DLB - acest pin permite în cazul este setat să realizeze o legătură internă
digitală între semnalele DR şi DX precum şi între FSR şi FSX (de exemplu
pentru testarea portului serial);
- RES - bit rezervat şi se află în "0" logic.
52
Nivelul logic al fiecărui bit al registrului SPC, după resetare, este dată
în [16]. Se recomandă ca setarea biţilor să se realizeze prin program şi să
nu se folosească valorile implicite ale fiecărui bit după resetarea
procesorului digital de semnal.
4.2.3. Modurile de funcţionare ale portului serial
Portul serial standard al procesorului digital de semnal poate să
funcţioneze cu comunicaţie în "salve" (engl. burst) sau cu comunicaţie con-
tinuă. Pentru modul de funcţionare în salve fiecare cuvânt de date este
precedat/urmat de un impuls de sincronizare de cadru FSX/FSR. Pentru
modul de funcţionare cu comunicaţie continuă este folosit doar un singur
impuls FSX/FSR care să iniţieze comunicaţia.
A. Modul de transmitere în "salve".Transmiterea în acest mod de funcţionare se poate urmări cu ajutorul
diagramelor de semnal prezentate în figura 4.4.
Fig.4.4 Diagrame de semnal pentru transmitere în salve
Transferul unei date începe în momentul în care, prin program, registrul
DXR este încărcat. În momentul transferării conţinutului registrului DXR în
registrul XSR se generează un impuls de întrerupere XINT iar datele, la
53
nivel de bit, încep să fie transmise spre pinul de ieşire DX. Un cuvânt de
date trebuie să fie încărcat în DXR doar după transmiterea completă a
datei anterioare din registrul XSR, adică atunci când XRDY este în "1"
logic.
B. Modul de recepţie în salve.Pentru acest mod de funcţionare, recepţia datelor poate fi urmărită cu
ajutorul diagramelor de semnal din figura 4.5.
Fig.4.5 Diagrame de semnal pentru recepţia în salve
Fiecare cuvânt de date este precedat de un semnal de sincronizare de
cadru FSR. După recepţionarea unei date în registrul RSR, prin intermediul
pinului de intrare DR, aceasta este transferată în registrul DRR. În urma
transferului se generează un semnal de întrerupere RINT. În momentul
apariţiei semnalului RINT, data conţinută în registrul DRR poate fi citită prin
program.
C. Modul de transmitere continuu.Pentru acest mod de funcţionare se folosesc formele de undă prezen-
tate în figura 4.6.
54
Fig.4.6 Diagrame de semnal pentru transmiterea continuă a datelor
În acest caz, transmiterea unei serii de date la frecvenţa maximă de
lucru este iniţiată de generarea unui semnal FSX. Semnalul FSX apare în
momentul transferului unei date din registrul DXR în registrul XSR. Deşi
semnalul FSX este generat doar la începutul transmiterii unei serii de date,
semnalul XINT se va genera imediat ce registrul XSR poate prelua o nouă
dată. Acest mod de lucru impune încărcarea ritmică a registrului DXR cu
date deoarece o întârziere duce la întreruperea modului de transmitere
continuă. După o astfel de întrerupere, datele care urmează să fie
transmise vor fi precedate din nou de un semnal FSX.
D. Modul de recepţie continuuÎn cazul recepţiei continue de date se folosesc următoarele diagrame
temporale care pun în evidenţă acţiunile care au loc pentru acest mod de
funcţionare, conform figura 4.7.
Datele care sosesc la pinul DR sunt precedate de un semnal cadru
de sincronizare la recepţie FSR. După ce o dată este recepţionată în
registrul RSR, aceasta este transferată registrului DRR. În momentul
transferului se generează un semnal de întrerupere RINT. Deşi datele sunt
precedate doar de un singur impuls de sincronizare de cadru la recepţie,
55
generarea întreruperilor XINT are loc după recepţionarea fiecărei date în
parte.
Fig.4.7 Diagrame de semnal pentru recepţia continuă a datelor
4.3. Porturi de intrare-ieşire
Procesoarele digitale de semnal TMS320C50 au un spaţiu de 64k de
adrese care pot fi folosite la selectarea unor echipamente periferice cu
comunicaţie pe port paralel. Magistrala de adrese este disponibilă pentru
selectarea directă sau indirectă (prin decodare) a unor periferice care fac
schimbul de date cu procesorul de semnal prin intermediul magistralei de
date. Pentru accesarea echipamentelor periferice sunt folosite instrucţiunile
IN respectiv OUT. Pentru selectarea perifericelor, procesoarele de semnal
generează semnale de citire /RD, scriere /WE şi de iniţializare a unei
operaţii de schimb de date cu echipamentele periferice /IS.
În continuare este exemplificat modul în care procesorul digital
TMS320C50 preia date de la un circuit periferic. Circuitul integrat ADS7811
este un convertor analog-digital, realizat în tehnologie CMOS, admite o
frecvenţă de eşantionare de 250kHz, un timp de conversie de 3,5µs, intrare
analogică asimetrică pe care se poate aplica o tensiune cuprinsă între
+2,5V şi -2,5V, iar rezultatele conversiei sunt reprezentate pe 16 biţi în cod
complement lui doi, conform tabelului 4.1.
56
Tabelul 4.1
Ieşire digitalăCod complement a lui doi
Descriere Intrareanalogică
Cod binar Cod hexazecimalDomeniu maxim ± 2,5 VLSB 76 µV
Domeniu pozitiv 2,499924 V 0111 1111 1111 1111 7FFF2,5V – 1 LSB
0 V 0000 0000 0000 0000 0000
− LSB – 76 µV 1111 1111 1111 1111 FFFFDomeniu negativ – 2,5 V 1000 0000 0000 0000 8000
Modul de conectare al convertorului analog-digital la procesorul de
semnal este indicat în figura 4.8. Citirea unei date de la convertorul analog-
digital se realizează în acest caz cu ajutorul instrucţiunii IN.
La executarea instrucţiunii IN, semnalul /IS generat de procesor are
nivel logic zero. Selectarea convertorului analog-digital se realizează cu
ajutorul unui decodificator care are ca intrare semnalele /IS şi cele
provenite pe liniile de adrese A0-A2.
Porţile logice sunt folosite pentru logica de comandă a convertorului,
care pe durata conversiei folosesc semnalul /BUSY. Datele pot fi
transferate procesorului de semnal imediat după apariţia frontului crescător
al semnalului /BUSY. Între convertor şi procesor se conectează un etaj
tampon. Datele sunt accesibile la ieşirea circuitului tampon în momentul
apariţiei semnalului /RD generat de către procesor.
57
Fig.4.8 Circuit de interfaţare cu convertorul analog-digital ADS7811
După cum se observă în figura 4.8, folosirea unor circuite de
decodificare permite extinderea spaţiului de adresare pentru echipamente
periferice.
58
5. Noţiuni de utilizarea a procesorului TMS320C50
În cadrul acestui capitol sunt prezentate modurile de reprezentare a
datelor în procesorul de semnal TMS320C50, observaţii referitoare la
efectuarea operaţiilor aritmetice de bază precum şi câteva din aplicaţiile
clasice ale procesoarelor de semnal.
5.1. Reprezentarea numerelor pentru procesoareledigitale de semnal în virgulă fixă
Datorită posibilităţilor de realizare fizică, reprezentarea numerelor în
sistemul binar, bazat pe două cifre, 0 şi 1, este folosită în cazul
dispozitivelor electronice digitale. Cele două cifre sunt asociate la câte un
nivel de tensiune, nivel care depinde de tipul şi tehnologia de realizare a
dispozitivelor electronice digitale.
Valoarea unui număr natural N se obţine cu ajutorul relaţiei
următoare:
∑=
=n
k
kkbN
02 , (5.1)
unde coeficienţii { }1,0=kb . Secvenţa de variabile binare bnbn-1...b2b1b0 este
reprezentarea în cod binar natural a numărului N. În secvenţa de variabile
binare, bn cel mai semnificativ bit (MSB) iar b0 se numeşte cel mai puţin
semnificativ bit (LSB). În procesoarele digitale de semnal TMS320C50,
numerele întregi pozitive sunt reprezentate pe 16 biţi (n = 15). Rezultatele
unor operaţii realizate de aceste procesoare de semnal sunt reprezentate
fie pe 16 biţi fie pe 32 de biţi. În acest sens, procesoarele mai sus amintite
sunt prevăzute cu un acumulator, un registru acumulator tampon şi un
registru de produs de 32 de biţi.
59
Acumulatorul este alcătuit la rândul său din două registre de câte 16
biţi - ACCH(16) şi ACCL(16). Cu ajutorul a 16 biţi se pot reprezenta numere
cuprinse între 0 şi (2n - 1) adică între 0 şi 65535. Dacă are loc o deplasare
la stânga cu un bit ak -> ak+1 şi a0 = 0 atunci numărul N a fost înmulţit cu doi
iar noul număr este reprezentat pe n+1 biţi.
La reprezentarea binară a numerelor întregi cu semn, bitul cel mai
semnificativ al secvenţei binare reprezintă semnul numărului. Dacă
valoarea bitului de semn este zero atunci numărul este pozitiv iar dacă
valoarea bitului de semn este 1 atunci numărul este negativ.
Pornind de la acest mod de codificare pentru numerele întregi
pozitive, codificare cunoscută şi sub denumirea de cod complement lui doi,
valoarea numărului codificat se obţine cu ajutorul relaţiei:
∑−
=
+−=1
022
n
k
kk
nn bbZ (5.2)
În relaţia (5.2), bitul bn determină semnul numărului (bitul bn se mai
numeşte bit de semn), având şi ponderea cea mai mare. Cu ajutorul a 16
biţi, dintre care cel mai semnificativ de semn, se pot reprezenta numere
cuprinse între -2n-1 şi (2n-1 - 1) adică între -32768 şi 32767.
Codificarea numerelor întregi negative în cod complement lui doi se
face în modul următor: se reprezintă valoarea absolută a numărului negativ
în cod binar natural, se determină complementul reprezentării binare şi în
final se adaugă 1. De exemplu, pentru reprezentarea numărului -9 în cod
complement lui doi pe 8 biţi, avem următorii paşi:
a. se reprezintă în cod binar natural numărul 9
00001001
b. se inversează fiecare bit al reprezentării binare a numărului 9
11110110
60
c. la reprezentarea inversată (complement a lui 1) se adună 1
11110111
Dacă se realizează în binar adunarea lui -9 cu numărul 7 se obţine:
11110111+
00000111-----------------------
11111110 adică chiar reprezentarea lui -2 în cod complement lui doi.
Numerele cu semn sunt însumate în acelaşi fel ca şi în cazul
numerelor fără semn. Singura diferenţă constă în modul de interpretare a
acestor numere. Această ultimă observaţie are şi un interes practic,
deoarece pentru însumarea numerelor, în reprezentare cu semn sau fără
semn se foloseşte acelaşi circuit sumator. Conversia numerelor negative în
echivalentul lor pozitiv, se realizează în mod identic: se inversează la nivel
de bit secvenţa corespunzătoare reprezentării unui număr negativ cu semn
şi apoi se adună 1.
Procesoarele digitale de semnal TMS320C50 admit efectuarea unor
operaţii aritmetice asupra numerelor negative reprezentate în cod binar
complement lui doi. Cum majoritatea datelor în procesoarele de semnal
TMS320C50 sunt reprezentate pe 16 biţi, la încărcarea lor în registre de
capacitate mai mare, de exemplu de 32 de biţi, apare o problemă, şi
anume, cei mai semnificativi 16 biţi ai registrelor de 32 de biţi rămân în 0
logic, lucru ce generează o gravă eroare. În cazul în care se încarcă un
număr negativ reprezentat pe 16 biţi într-un registru de 32 de biţi, cel mai
semnificativ bit al registrului de 32 de biţi fiind în 0 logic, ar însemna că s-a
încărcat un număr pozitiv şi nu unul negativ. Acest tip de eroare este
evitată în mod elegant de către procesor. Procesorul dispune de un mod de
lucru cu extensia bitului de semn, care poate fi selectat prin setarea bitului
SXM (ST1.10) din registrul de stare şi control ST1. Modul de operare cu
extensia bitului de semn are ca efect, după încărcarea unui număr
61
reprezentat pe 16 biţi în cod complement lui doi într-un registru de 32 de
biţi (de exemplu registrul acumulator), setarea tuturor celor mai
semnificativi 16 biţi cu valoarea bitului de semn a numărului reprezentat pe
16 biţi. Dacă bitul SXM este în 0 logic, numerele vor fi interpretate ca fiind
reprezentate în cod binar natural.
Valoarea unui număr fracţionar subunitar fără semn se obţine cu
ajutorul relaţiei următoare:
∑=
−=n
k
kkbN
12 , (5.3)
unde coeficienţii { }1,0=kb . De data aceasta, bitul b1 are ponderea cea mai
mare, fiind cel mai semnificativ bit al secvenţei b1b2...bn-1bn care reprezintă
codul binar asociat unui număr fracţionar subunitar fără semn. Precizia
numărului fracţionar este dată de fracţia 2-n. Domeniul de valori care pot să
fie reprezentate în acest mod este (2-n, 1-2-n).
Numerele fracţionare subunitare cu semn pot să fie reprezentate cu
ajutorul relaţiei următoare:
( ) ∑=
−+−=n
k
kkbbN
1
00 221 . (5.4)
Şi de această dată, cel mai semnificativ bit al reprezentării este bitul de
semn. Domeniul de valori care pot să fie reprezentate cu (5.4) este
(-1, 1-2-n). În procesoarele digitale de semnal în virgulă fixă, pentru
reprezentarea numerelor fracţionare subunitare se foloseşte formatul Qn.
Acest format indică numărul "n" de biţi din dreapta bitului de semn. Astfel,
pentru numere fracţionare subunitare reprezentate pe 16 biţi, avem
formatul Q15.
Reprezentarea numerelor sub formă fracţionară subunitară prezintă
unele avantaje. Înmulţirea a două numere subunitare are ca rezultat tot un
număr subunitar, motiv pentru care în urma operaţiilor de înmulţire nu pot
62
să apară depăşiri. Însumarea a două numere subunitare nu este
întotdeauna un număr subunitar, fapt ce poate determina o depăşire a
conţinutului registrului în care se obţine rezultatul. Aceste depăşiri pot să fie
evitate printr-o prescalare corespunzătoare a datelor care urmează a fi
prelucrate.
5.2. Operaţii aritmetice realizate cu procesoruldigital în virgulă fixă TMS320C50
Operaţia de înmulţire este realizată cu ajutorul unui circuit special
destinat acestui scop iar rezultatul înmulţirii este plasat într-un registru de
produs (PREG). Datele în procesorul digital de semnal TMS320C50 sunt
reprezentate pe 16 biţi. Rezultatul înmulţirii a două numere reprezentate pe
16 biţi este un număr care este reprezentat pe 32 biţi. Din acest motiv,
registrul de PREG conţine 32 biţi.
La înmulţirea a două numere, din care cel puţin unu este cu semn,
procesorul trebuie setat în modul de lucru cu extensia bitului de semn. Se
realizează obligatoriu extensia bitului de semn la fiecare produs parţial.
Pentru a exemplifica acest lucru se înmulţeşte numărul -3 (1101 cod
complement lui doi) cu 3 (0011). Cum ambele numere sunt reprezentate pe
câte 4 biţi, rezultatul înmulţirii este o secvenţă binară de 8 biţi.
1101 X0011
--------------- 11111101 <- extensia bitului de semn
1111101 <- extensia bitului de semn ------------------ 11110111 -> -9
În cazul în care se realizează înmulţirea a două numere fracţionare în
format Q15 se obţine un număr fracţionar în format Q30. Datorită faptului
că numerele fracţionare în format Q15 sunt reprezentate pe 16 biţi (bitul de
63
semn fiind cel mai semnificativ), rezultatul operaţiei de înmulţire care se
obţine este reprezentat pe 32 de biţi. Cei mai semnificativi doi biţi ai
rezultatului sunt biţi de semn dintre care unul este redundant. În
procesoarele digitale de semnal TMS320C50, eliminarea unui bit de semn
redundant se realizează automat în urma operaţiei de înmulţire, printr-o
deplasare la stânga a rezultatului cu o poziţie şi adăugarea unui bit de
valoare zero, bit ce devine cel mai puţin semnificativ bit al rezultatului.
Deplasarea automată a rezultatului obţinut în urma înmulţirii se face în
urma încărcării în registrul PM (product mode) de 2 biţi a valorii 01b.
Câmpul de doi biţi PM se află în registrul de stare şi control ST1.
Instrucţiunea cu care se setează deplasamentul corespunzător registrului
PREG(32) este SPM.
În exemplul următor se prezintă înmulţirea a două numere fracţionare
cu semn în format Q3. Rezultatul înmulţirii este în format Q6 dar datorită
faptului că pentru reprezentarea numerelor sunt necesari 4 biţi, rezultatul
final este o secvenţă binară de 8 biţi, cei mai semnificativi doi biţi fiind biţii
de semn.
-0,5 1101 X 0,5 0100 ---------------
00000000 0000000 111100 ---------------- 11.110000 <- rezultatul înmulţirii este deplasat la stânga cu o poziţie
pentru a elimina un bit de semn --------------- 1.1100000 <- se iau în considerare doar cei mai semnificativi 4 biţi
conform reprezentării iniţiale a numerelor fracţionare
1110 -> -0,25
Luând în considerare doar cei mai semnificativi 4 biţi ai rezultatului
înmulţirii, se constată apariţia unei erori de trunchiere.
64
Operaţia de adunare a numerelor reprezentate în cod complement lui
doi a fost folosită la însumarea produselor parţiale din exemplele
menţionate mai sus. Problema care apare în urma operaţiei de adunare
este aceea că rezultatul obţinut poate să fie reprezentat pe un număr mai
mare de biţi decât numerele care se adună. De exemplu:
9 1001+7 0111 -----------16 10000 <- se iau în considerare cei mai puţin semnificativi 4 biţi
Se constată că rezultatul adunării este reprezentat pe un număr mai
mare de biţi. În acest caz operaţia de adunare a determinat o depăşire şi
implicit un rezultat incorect. Programatorii trebuie să ţină cont de acest
lucru şi să pre-scaleze operanzii înaintea unei operaţii de adunare în aşa
fel încât apariţia depăşirilor să nu fie posibilă. Este cunoscut faptul că prin
scalare se pierde o anumită cantitate de informaţie.
In urma unor operaţii de adunare, unitatea aritmetică a procesorului
digital de semnal TMS320C50 poate să furnizeze un rezultat care să
depăşească capacitatea acumulatorului. Depăşirea capacităţii acumula-
torului este semnalizată în mod automat prin setarea bitului OV(ST0.12).
Procesorul de semnal tratează depăşirile care apar în urma unei
operaţii de adunare în două moduri, în funcţie de starea bitului OVM
(ST0.11). Astfel, dacă bitul OVM (modul de lucru la depăşire) este setat în
"1" logic, la apariţia unei depăşiri în acumulator se păstrează doar valoarea
maximă sau minimă care poate să fie reprezentată pe cei 32 de biţi de care
dispune acumulatorul, în funcţie de sensul depăşirii. Bitului OV nu îşi
schimbă valoarea până în momentul în care acest lucru nu se realizează cu
instrucţiunea LST sau SETC/CLRC, se foloseşte un salt condiţionat de
acest bit sau se acceptă o cerere de întrerupere. În cazul în care bitul OVM
nu este setat, la apariţia unei depăşiri, în acumulator se vor reţine cei mai
puţin semnificativi 32 de biţi ai rezultatului.
65
5.3. Transformata Fourier rapidă
În cazul în care se doreşte determinarea spectrului unui semnal
discret în timp se utilizează transformata Fourier discretă. Transformata
Fourier discretă este dată de relaţia următoare:
[ ] [ ]nxekXN
n
knNj
∑−
=
−=
1
0
2π
, (5.5)
unde x[n] reprezintă semnalul discret în timp iar X[k] reprezintă
componentele spectrului secvenţei x[n].
Dacă se face notaţia Nj
N eWπ2
−= , relaţia (1) poate fi scrisă mai simplu
în modul următor:
[ ] ][1
0nxWkX
N
n
knN∑
−
=
= . (5.6)
Termenul Nj
N eWπ2
−= , numit şi factor de fază, poate fi reprezentat în
planul complex pe un cerc cu raza unitate, cu centrul în origine, după cum
este indicat în figura 5.1, pentru N = 4 respectiv N = 8.
Fig.5.1 Reprezentarea grafică a factorului de fază
În cazul în care N = 4 (pentru a obţine o reprezentare cât mai exactă, în
situaţii reale N este de ordinul sutelor), factorul de fază este egal cu:
66
jjeWj
N −=−+−==−
)2
sin()2
cos(42 πππ
, (5.7)
iar secvenţa (5.6) devine:
[ ]
]3[]2[)1(]1[)(]0[]1[)(
...]1[)(]0[)(][)(][
)1(
101
0
xjxxjxNxj
xjxjnxjnxWkX
kkkNk
kkknN
n
knN
+−+−+=−−+
+−+−=−==
−⋅
⋅⋅−
=∑ (5.8)
Valorile secvenţei X[k] pentru transformata Fourier discretă (DFT) în patru
puncte se mai pot scrie în mod următorul:
)3()2()1()0(]0[ xxxxX +++= (5.9)
)3()2()1()0(]1[ jxxjxxX +−−= (5.10)
)3()2()1()0(]2[ xxxxX −+−= (5.11)
)3()2()1()0(]3[ jxxjxxX −−+= (5.12)
Din (5.9), (5.10), (5.11) şi (5.12) se observă că secvenţa X[k] se obţine în
urma unor operaţii cu numere complexe. Determinarea directă a secvenţei
(5.8) presupune realizarea a N2 operaţii de înmulţire şi adunare. Pentru
reducerea semnificativă a numărului necesar de operaţii necesare calculării
unei DFT s-au dezvoltat algoritmi care oferă acelaşi rezultat dar după un
număr mai mic de operaţii. Un astfel de algoritm este FFT (transformata
Fourier rapidă) care descompune un DFT în N puncte într-un DFT în N/2
puncte, apoi un DFT în N/4 puncte etc. Se ajunge la un moment dat, dacă
N este o putere a lui doi, la un DFT în două puncte, numit şi "fluture".
Împărţirea DFT în N puncte în două secvenţe de N/2 puncte se mai
numeşte decimare în timp. Prima secvenţă va conţine eşantioanele pare
ale semnalului de intrare iar cea de-a doua secvenţă conţine eşantioanele
impare. Acest lucru se poate constata şi din diagrama prezentată în figura
5.2. Prin aplicarea algoritmului FFT la determinarea componentelor
spectrale X[k] sunt necesare doar N + 2(N/2)2 operaţii de înmulţire şi
adunare [6], [9], etc. Din diagrama prezentată în figura 5.2 se observă că
67
cele patru eşantioane ale semnalului de la intrare nu sunt folosite în
ordinea eşantionării lor ci sunt plasate în memoria de date a procesorului
de semnal în mod diferit.
Fig.5.2 FFT în patru puncte
Modul de ordonare a datelor achiziţionate este specific algoritmului
FFT şi este cunoscut ca inversare a biţilor care dau numărul de ordine al
unui eşantion după cum este indicat în tabelul următor.
Tabel.5.1
Indexeşantion
Reprezentareaindexului în CBN
Reprezentareacu bit inversat
Indexinversat
0 00 00 0
1 01 10 2
2 10 01 1
3 11 11 3
Procesoarele digitale de semnal TMS320C50 facilitează inversarea
de bit a indexului eşantioanelor semnalului achiziţionat fără a fi necesară
păstrarea temporară a datelor care necesită spaţiu de memorie
suplimentar. Pentru schimbarea indexului datelor de prelucrat, ca fază
premergătoare calculului FFT, există mai multe posibilităţi, dintre care se
exemplifică în continuare următoarele două.
68
A. .dataadr1 .word 0, 0, 0, 0, 0, 0, 0, 0 ; se rezervă spaţiu de
; memorie pentru dateadri .word 0, 0, 0, 0, 0, 0, 0, 0 ; se rezervă spaţiu pentru
; datele achiziţionate a căror; ordine este inversată cfm.; algoritmului FFT
cont .word 7 ; se iniţializează o locaţie de mem.; în care se stochează un contor; pentru un algoritm de calcul FFT; în 8 puncte
.ps 0a00h ; la adresa 0a00h începe o sec-; ţiune de program
.entry ; intrarea în programul principal; se face la adresa 0a00h
.mmregs ; regiştri cu funcţii speciale sunt; mapaţi la începutul paginii 0 a; memoriei de date
; aici se inserează o rutină de iniţializare a procesorului şi a interfeţei; analogice TLC32040 pentru TMS320C5X DSP Starter Kit - [2], [14].
CLRC INTM ; se validează întreruperilewait: NOP ; se aşteaptă o cerere de
NOP ; întrerupereB wait.text
rec: SETC SXM ; după acceptarea unei întreruperi; survenite după recepţia unei date; sunt invalidate toate întreruperile; mascabile
LDP #0 ; se încarcă registrul APR cu 0LAMM DRR ; se încarcă în acumulator conţinu-
; tul registrului DRR (recepţie date; aflat în pag. 0 a mem. de date
LAR AR2, #adr1 ; datele achiziţionate se stochează; în ordinea sosirii, în locaţii succe-; sive începând cu adresa adr1
MAR *, AR2SACL *+LDP #contLACC contSUB #1 ; contorul este decrementat cu o
; unitateSACL cont
69
BCND inv, EQ ; dacă cele 8 eşantioane aufost
; stocate în memoria de date,; urmează schimbarea ordinii lor; în vederea realizării FFT
RETEinv: SETC INTM ; se invalidează întreruperile
LACC #7LDP #contSACL cont ; se încarcă în locaţia cont 7LAR AR3, #adri ; ordinea eşantioanelor este
; schimbată pentru calculul FFT; noua ordonare se face în mem.; de date de la adresa adri
LAR AR0, #4 ; se încarcă AR0 cu 4; registrul AR0 este folosit pentru; adresarea indirectă
; (se consideră că bitul PMST.2 este resetat, caz în care (INDX) = (AR0))LAR AR2, #adr1
loop: MAR *, AR2LACC *BR0+, AR3 ; se încarcă în ACC data a cărei
; adresă este se obţine prin; însumarea conţinutului reg. AR2; cu cel al reg. INDX şi se salvează
SACL *+ ; în memoria de date la începând; cu adresa adri
LACC contSUB #1SACL contBCND wait, EQB loop
B. .dataadri .word 0, 0, 0, 0, 0, 0, 0, 0 ; se alocă spaţiu pentru date
.ps 0a00h ; la adresa 0a00h începe o sec-; ţiune de program
.entry ; intrarea în programul principal; se face la adresa 0a00h
.mmregs ; regiştri cu funcţii speciale sunt; mapaţi la începutul paginii 0 a; memoriei de date
; aici se inserează o rutină de iniţializare a procesorului şi a interfeţei
70
; analogice TLC32040 pentru TMS320C5X DSP Starter Kit - [2], [14].LACC #4LDP #0SAMM INDX ; registrul INDX este încărcat cu 4LAR AR2, #adriMAR *, AR2RPT #7IN *BR0+, PA0 ; datele preluate de la portul PA0
; vor fi stocate începând de la; adresa adri cu un index inversat; conform algoritmului FFT
B start_fft
5.4. Filtre digitale
Filtrele digitale sau impus în ultimul timp datorită următoarelor
considerente:
- existenţa unor sisteme de dezvoltare bazate pe procesoare digitale de
semnal la preţuri din ce în ce mai mici, ce oferă posibilitatea implementării
unor algoritmi complecşi de calcul, ceea ce determină obţinerea unor
caracteristici în domeniul frecvenţă apropiate de cele ale filtrelor ideale,
caracteristici greu de realizat cu ajutorul unor filtre analogice;
- se elimină dezavantajul filtrelor analogice datorat fenomenului de
îmbătrânire în timp a componentelor folosite şi cel al gabaritului mare în
cazul filtrării unor semnale de joasă frecvenţă;
- pentru diferite tipuri de filtre digitale se poate folosi acelaşi sistem digital
de prelucrare a semnalelor;
- reglarea unor parametri ai filtrului se realizează uşor prin modificarea
softului corespunzător.
Transformarea unui filtru analogic în filtru digital se realizează în
modul următor. Pentru exemplificare se foloseşte un filtru RC trece jos -
figura 5.3.a.
71
Fig.5.3.Tensiunea u2 de la ieşirea filtrului este dată de relaţia următoare:
( ) ( ) ( )dttduRCtutu 2
12 −= . (5.13)
Dacă tensiunile u1 şi u2 sunt eşantionate cu o perioadă T, atunci valoarea
tensiunii u2 la momentul t = nT este dată de relaţia:
[ ] [ ] [ ] ( )[ ]T
TnunTuRCnTunTu 12212
−−−= , (5.14)
cu condiţia ca perioada de eşantionare T să fie suficient de mică.
Din relaţia (5.14) rezultă
[ ] [ ] ( )[ ]Tnu
TRCTRC
nTu
TRCnTu 1
11
1212 −
+−
+= , (5.15)
sau dacă facem notaţiile
TRCa
+=
1
10 şi
TRCTRC
b+
=1
1 atunci relaţia (5.15)
devine
[ ] [ ] ( )[ ]TnubnTuanTu 121102 −−= . (5.16)
Pentru relaţia (5.16) se poate realiza structura din figura 5.3.b. În relaţia
(5.16) se observă că răspunsul filtrului în timp discret depinde de tensiunea
72
de intrare în momentul t = nT dar şi de răspunsul filtrului la momentul
anterior t = (n-1)T. Acest lucru indică faptul că în structura corespunzătoare
filtrului digital există un element care introduce o întârziere TD asupra
semnalului u2. Din punct de vedere al realizării practice, este necesară
memorarea ultimului eşantion al tensiunii de la ieşirea filtrului până în
momentul apariţiei unui nou eşantion, după un interval de timp T, la intrarea
filtrului.
Procesoarele digitale de semnal oferă posibilitatea efectuării în timp
real a unor operaţii mult mai complexe decât cele indicate în relaţia (5.16).
În momentul de faţă se folosesc în mod curent mai multe tipuri de
filtre digitale dintre care se remarcă filtrele digitale cu răspuns finit la impuls
(FIR) şi filtrele cu răspuns infinit la impuls (IIR).
A. Filtrele cu răspuns finit la impuls (FIR)
Relaţia care descrie funcţionarea unui filtru de tip FIR este
următoarea:
[ ] [ ]∑=
−=M
kk knxany
0, (5.17)
unde ak reprezintă coeficienţii filtrului. Pornind de la relaţia (5.17) se poate
determina o structură echivalentă pentru filtrele de tip FIR - figura 5.4. Cu
ajutorul acestei structuri se pun în evidenţă operaţiile care trebuie să fie
executate de către procesorul digital de semnal în vederea filtrării.
În structura din figura 5.4 se observă că pentru obţinerea unui eşantion la
ieşirea filtrului digital este nevoie de realizarea unei linii de întârziere a
eşantioanelor aplicate la intrarea filtrului. Astfel, pentru a obţine un eşantion
de ieşire y[n] sunt necesare ultimele M eşantioane ale semnalului x[n] care
este filtrat.
73
Fig.5.4 Structura echivalentă unui filtru FIR
O altă observaţie importantă este aceea că în algoritmul de calcul al
FIR se găsesc o serie de operaţii de tipul înmulţeşte şi adună, operaţie care
este de altfel specifică prelucrării digitale de semnal. Procesorul digital de
semnal TMS320C50 pune la dispoziţia programatorilor mai multe
instrucţiuni puternice, capabile să efectueze operaţii de înmulţire, adunare
şi deplasare a datelor în memoria de date.
Ţinând cont de observaţiile făcute anterior se prezintă în continuare o rutină
de calcul folosită pentru realizarea unei filtrări digitale cu ajutorul
procesorului TMS320C50.
Subrutina care determină răspunsul unui filtru de tip FIR rulează pe
placa de dezvoltare TMS320C50 DSK prevăzută cu interfaţa analogică
TLC32040. Pentru acest exemplu, datele de intrare şi răspunsul filtrului
sunt adresate direct iar coeficienţii filtrului sunt adresaţi indirect. Din acest
motiv, cele mai recente M eşantioane ale semnalului care este filtrat şi
răspunsul filtrului digital sunt memorate în cadrul unei singure pagini din
memoria de date, diferită de pagina 0, rezervată pentru regiştrii interni ai
procesorului. Coeficienţii filtrului ak, datorită modului de adresare indirectă,
pot fi memoraţi în orice zonă a memoriei de date dar la locaţii succesive în
ordinea indicilor. Subrutina este executată ori de câte ori este generată o
întrerupere datorată recepţiei unui eşantion de la interfaţa analogică.
74
Adrese Conţinut memorie
adry y[n]
adra0 a0
adra1 a1
... ...
adraM aM
adrx0 x[n]
adrx1 x[n-1]
... ...
adrxM x[n-M]
start LDP #0LAMM DRRAND #0FFFChLDP #nr_pag_date ;pagina de date în care se găseşte
;ultimele M eşantioane a semnalului ;care se filtrează
SACL #adrx0LAR AR0, #adraMMAR *, AR0ZAPLTD adrxM ;MPY *- ;..LTD adrx1MPY *-LTD adrx0MPY *APACSACH adry,1AND #0FFFChSAMM DXRIDLERETE
75
B. Filtrele cu răspuns infinit la impuls
O altă categorie importantă de filtre sunt cele cu răspuns infinit la
impuls IIR. Relaţia care descrie funcţionarea acestor filtre este următoarea:
[ ] [ ] [ ]knybknxanyN
kk
M
kk −+−= ∑∑
== 10, (5.18)
unde ak şi bk reprezintă coeficienţii filtrului. Din relaţia (5.18) se observă că
valoarea unui eşantion de la ieşirea unor astfel de filtre depinde pe lângă
eşantioanele de la intrarea filtrului şi de răspunsul filtrului la momente
anterioare, fapt ce indică existenţa unei "reacţii negative". Fiind un sistem
prevăzut cu o reacţie negativă, programatorul trebuie să fie foarte atent la
calculul coeficienţilor pentru a evita o posibilă instabilitate a sistemului
digital de filtrare. Pentru IIR se pot realiza mai multe structuri echivalente
după cum este indicat în figurile 5.5 şi 5.6.
Fig.5.5 Structura unui filtru IIR (forma directă)
76
Fig.5.6 Structură de filtru IIRCu ajutorul acestor structuri se pot dezvolta algoritmi de calcul care pot fi
uşor implementaţi pe sistemele bazate pe procesorul de semnal
TMS320C50.
Aplicând transformata z relaţiei (5.18) se obţine:
( ) ( ) ( )∑∑=
−−
=
⋅+⋅=N
k
kk
kM
kk zzYbzzXazY
10, (5.19)
de unde funcţia de transfer a filtrului ( ) ( )( )zXzYzH = este dată de relaţia:
( )k
N
kk
M
k
kk
zb
zazH
−
=
=
−
⋅−
⋅=
∑
∑
1
0
1. (5.20)
77
Relaţia (5.20) poate fi adusă sub forma:
( ) ∏ −−
−−
⋅−⋅−
⋅+⋅+=
j jj
jjj
zbzbzazaa
zH 22
11
22
110
1. (5.21)
Relaţia (5.21) indică faptul că H(z) se obţine prin conectarea în cascadă a
unui anumit număr de structuri de filtru de tip IIR de ordinul doi (sau unu) -
pentru M = N = 2 - după cum se observă şi în figura următoare.
Fig.5.7 Structură echivalentă de filtru IIR
În continuare se prezintă modul de implementare pe un procesor
digital de semnal TMS320C50 un filtru de tip IIR de ordinul doi - figura 5.7.
Pentru un filtru IIR de ordinul doi, funcţia de transfer se poate scriesub forma:
( ) ( )( )
( )( )
( )( ) 2
21
1
22
110
1 −−
−−
⋅−⋅−⋅+⋅+
===zbzbzazaa
zXzW
zWzY
zXzYzH . (5.22)
Dacă considerăm că
( )( )
22
110
−− ⋅+⋅+= zazaazWzY
, (5.23)
şi ( )( ) 2
21
111
−− ⋅−⋅−=
zbzbzXzW
, (5.24)
78
iar apoi aplicăm transformata z inversă relaţiilor (5.23) şi (5.24) se obţine:]2[]1[][][ 210 −+−+= nwanwanwany (5.25)
]2[]1[][][ 21 −+−+= nwbnwbnxnw (5.26)
unde w[n] reprezintă o variabilă intermediară.Deoarece numărul coeficienţilor filtrului sunt puţini, aceştia pot fi
memoraţi fără probleme pe o singură "pagină" de memorie dacă sefoloseşte adresarea directă, după cum se observă în coloanele următoare.
Rutina următoare deserveşte o cerere de întrerupere la achiziţionarea unuieşantion din semnalul de intrare.
RX: LDP #0 ;LAMM DRR ;se încarcă în ACCL reprezentarea
;binară a unui eşantion al semnalului de;intrare
LDP #adr_pag ;se adresează "pagina" din memoria de;date unde se găsesc coeficienţii filtrului
SACL adrx ;salvează eşantionul curent în;locaţia x[n]
ZAP ;0 --> ACC şi 0 -->PREGLT adrw2 ;w[n-2] --> TREG0MPY adrb2 ;(TREG0) x b2 --> PREGAPAC ;(ACC) + (PREG) --> ACC
;în registrul acumulator se găseşte; w[n-1] b1 + w[n-2] b2
LT adrw1 ; w[n-1] --> TREG0MPY adrb1 ;(TREG0) x b1 --> PREGAPAC ; (ACC) + (PREG) --> ACC
;în registrul acumulator se găseşte; w[n-1] b1 + w[n-2] b2
ADD adrx,15 ;la conţinutul acumulatorului se adaugă;x deplasat la stânga cu 15 biţi
SACH adrw0 ;(ACCH) --> la adresa w0;la locaţia adrw0 se găseşte; x[n] + w[n-1] b1 + w[n-2] b2 (5.26)
Adresă Conţinutadrw0 w[n]adrw1 w[n-1]adrw2 w[n-2]
Adresă Conţinutadra0 a0
adra1 a1
adra2 a2
Adresă Conţinutadrb1 b1
adrb2 b2
adrx xadry y
79
LT adrw2 ;w[n-2] --> TREG0MPY adra2 ;(TREG0) x a2 --> PREGLTD adrw1 ;(ACC) + (PREG) --> ACC
;în acumulator se găseşte w[n-2] a2;w[n-1] --> TREG0;(adrw1) --> (adrw2)
MPY adra1 ;(TREG0) x a1 --> PREGLTD adrw0 ;(ACC) + (PREG) --> ACC
;în acumulator se găseşte;w[n-1] a1 + w[n-2] a2;w[n] --> TREG0;(adrw0) --> (adrw1)
MPY adra0 ;w[n] x a0 --> PREGAPAC ;(ACC) + (PREG) = (ACC)
; în acumulator se găseşte; w[n] a0 + w[n-1] a1 + w[n-2] a2
SACH adry ;LDP #0 ;LMMR DRR, #adry; y[n] este trimis convertorului
;digital-analogRETE ;revenire din subrutina de întrerupere
;cu refacerea contextului şi validarea;întreruperilor
80
ANEXĂ
Semnificaţia Simbolurilor LiteraleFolosite în Cadrul Mnemonicelor Instrucţiunilor
( x ) Indică conţinutul unui registru, bit sau locaţie de memorie,iar x reprezintă registrul, bitul sau adresa locaţiei dememorie;
dma Folosit la adresarea directă a memoriei, reprezintă unnumăr 0 127≤ ≤dma corespunzător câmpului de 7 biţiDP;
{ind} Indică modul de adresare indirect al unui operand şivarianta de modificare a conţinutului registrului AR(ARP);
* (AR(ARP)) --> AR(ARP)*- (AR(ARP)) - 1 --> AR(ARP)*+ (AR(ARP)) + 1 --> AR(ARP)*0- (AR(ARP)) - (INDX) --> AR(ARP)*0+ (AR(ARP)) + (INDX) --> AR(ARP)*BR0- (AR(ARP)) - ‘(INDX) --> AR(ARP)*BR0+ (AR(ARP)) + ‘(INDX) --> AR(ARP)shift indică numărul de biţi cu care se deplasează un operand
spre stânga;shift1 0 16≤ ≤shiftshift2 0 15≤ ≤shiftnext ARP Număr care reprezintă adresa unui ARn şi care se
încadrează în câmpul de trei biţi ARP din registrul ST0,0 7≤ ≤nextARP ;
[ x ] Indică un câmp opţional la scrierea unei instrucţiuni înlimbaj de asamblare;
op Operand obţinut prin unul dintre modurile de adresarecorespunzătoare unei instrucţiuni;
aop Adresa unui operand;k Număr care reprezintă operandul în adresarea imediată
scurtă şi care în absenţa unor precizări se găseşte îndomeniul 0 255≤ ≤k ;
lk Număr care reprezintă operandul în adresarea imediatălungă fiind cuprins în domeniul − ≤ ≤32768 32767lk ;
#k, #lk Prefix şi constantă care reprezintă operandul în adresareaimediată scurtă respectiv lungă;
dst Destinaţie obţinută printr-unul dintre modurile de adresarecorespunzătoare unei instrucţiuni;
adst Adresa unei destinaţii;
81
pma Număr care reprezintă adresa unei locaţii din memoriaprogram fiind cuprins în domeniul 0 65535≤ ≤pma ;
cond Condiţie utilizată în instrucţiuni de salt, apel de subrutine şirevenire din subrutine condiţionate:EQ(ACC=0), NEQ(ACC ≠ 0), LT(ACC<0), LEQ(ACC ≤0),GT(ACC>0),GEQ(ACC ≥0),NC(C=0),C(C=1), NOV(OV=0),OV(OV=1), NTC(TC=0), TC(TC=1), BIO(BIO la nivel logiczero), UNC(necond.);
addr Număr care reprezintă dresa unei locaţii din memoria dedate fiind cuprins în domeniul 0 ≤pma ≤65535;
#addr Prefix şi constantă care reprezintă adresa unei locaţii dinmemoria de date pentru adresarea directă lungă;
PA Adresă port I/O, 0 65535≤ ≤PA ;ACCL Biţii 0 - 15 ai acumulatorului;ACCH Biţii 16 - 31 ai acumulatorului;