Determinarea Caracteristicilor Convertoarelor Analog Numerice cu Ajutorul Procesorului Numeric de Semnal Dsp56002
Cuprins
Cap.1 Introducere 1
Cap.2 Principalele caracteristici ale procesorului DSP56002 5
Unitatea de generare a adreselor 19
Unitatea de control a programului 27
Portul A 43
Portul B 45
Generatorul de tact 46
Emulatorul OnCE 52
Organizarea memoriei și moduri de operare 53
Cap. 3 Convertorul CS4215 60
Cap. 4 Prezentarea programelor 67
Generarea semnalului sinusoidal 69
Achiziția și realizarea FFT-ului 71
Tabelul de valori pentru sinus 75
Ada_init.asm 75
Txrx_ssr.asm 79
Fftr2cn.asm 80
Cap. 5 Instrucțiuni de utilizare 83
Cap. 6 Rezultate experimentale 87
=== LASTICA ===
Cap.1 Introducere.
Determinarea caracteristicilor convertoarelor analog numerice cu ajutorul procesorului numeric de semnal DSP56002 poate fi realizată cu un aparat a cărui schemă bloc este prezentată mai jos:
16 biți
PC DSP 56002 CAN
stop
start
CAN
de testat
12 biți
Schema de bază a acestui proiect este formată dintr-un calculator, un procesor numeric de semnal DSP56002, care în cazul nostru generează cu ajutorul unui program eșantioanele (în număr de 1024 ) unui semnal sinusoidal. Tot în cadrul schemei mai sunt prezente și un convertor numeric analogic precum și un convertor analog numeric ce urmează a fi testat. Convertorul numeric analogic din schemă face parte dintr-un circuit CS4215 numit și codec deoarece este format din două convertoare, unul numeric analogic și unul analog numeric. Semnalul numeric numeric sinusoidal de la ieșirea procelorului numeric de semnal este adus la intrarea convertorului numeric analogic . Semnalul analogic de la ieșirea convertorului numeric analogic este adus la intrarea convertorului analog numeric de testat, iar semnalul numeric de la ieșirea convertorului analog numeric elte aplicat la portul B al procesorului DSP56002, care cu ajutorul unui program achiziționează aceste semnale numerice și aplică transformata Fourier rapidă.
Eroarea totală a unui convertor analog numeric este dată de diferențele între caracteristica reală și caracteristica ideală a acestuia. Eroaea totală include erorile de câștig, de decalaj, de neliniaritate și de cuantizare precum și derive ale acestora. Etalonarea unui convertor analog numeric constă în calibrarea decalajului, urmată de calibrarea câștigului. Deci erorile de decalaj și câștig sunt predictibile și prin urmare pot fi înlăturate într-o măsură suficient de mare.
Considerând un convertor analog numeric care nu prezintă erori și aplicând un semnal sinusoidal analogic, la ieșirea sa vom obține un semnal sinusoidal numeric (eșantioanele unui sinus) perfect (fără erori).
Datorită faptului că obținerea unui convertor analog numeric care să nu prezinte erori este practic imposibilă și datorită zgomotului alb apar erori de cuantizare și neliniaritate.
Un PC 386 împreună cu un coprocesor și cu partea de soft necesară, este capabil să realizeze o transformată Fourier rapidă a unui număr de 4096 de eșantioane, provenite de la un convertor analog numeric, în câteva secunde. De asemenea acest sistem poate fi programat să calculeze raportul semnal zgomot, distorsiunile armonice sau domeniul liber dinamic fals.
Considerăm un semnal sinusoidal a cărui valoare maximă este +FSR/2 iar valoare minimă este -FSR/2 căruia i se aplică transformata Fourier rapidă. Unul dintre pașii importanți în realizarea transformatei Fourier rapide este alegerea numărului de eșantioane N. Acesta trebuie să fie o putere a lui doi. Valoarea lui N trebuie determină lățimea benzii de frecvență f=fs/N și implicit valoarea nivelului de zgomot.
În figura următoare se poate observa nivelul eșantionului sinusului (eșantionul util), nivelul mediu al zgomotului alb și nivelul de zgomot efectiv.
nivel maxim al unui eșantion
0 dB
S/Z=( 6.02N+1.76 ) dB
nivelul mediu al zgomotului alb
DZ=
nivelul zgomotului alb
f=fs/M fs/2
Puterea medie a zgomotului alb este constsntă.Considerând mai multe eșantioane M această putere este împărțită în M părți și rezultă o putere de zgomot mult mai mică. Pentru a calcula raportul semnal zgomot vom calcula puterea semnalului util și puterea semnalului mediu de zgomot.
Calculam apoi puterea acestora:
Raportul semnal zgomot este raportul acestor două puteri:
Diferența între nivelul mediu de zgomot și nivelul de zgomot efectiv se poate calcula cu ajutorul puterii de zgomot mediu și puterea de zgomot a unui eșantion:
CAP. 2 Principalele caracteristici ale ale DSP56002.
Procesoarele numerice de semnal din familia DSP56000 sunt circuite integrate, realizate în tehnologie CMOS cu 132 de pini.
Principalele caracteristici ale DSP56002 sunt:
· la o frecvență a semnalului de tact de 40 MHz, execută 20 milioane de instrucțiuni pe secundă;
· înmulțire într-un singur ciclu cu două cuvinte de 24 de biți;
· set de instrucțiuni paralele cu mod de adresare unic pentru DSP;
· întreruperi rapide cu autoreversie;
· mod de lucru cu consum redus;
· 512 cuvinte x 24 biți memorie RAM internă de program;
· două memorii RAM de date de 256 cuvinte x24 biți;
· două memorii ROM de date de 256 cuvinte 24 biți;
· port pentru accesarea memoriei externe suplimentare cu magistrala de 16 biți pentru adrese și 24 biți pentru date;
· interfață serială sincronă (SSI) pentru comunicarea cu codecuri și alte interfețe seriale;
· interfață de comunicare serială pentru comunicare asincronă;
· contor pe 24 biți (timer) ce poate de asemenea genera și măsura forme de undă digitale;
· registre de control al perifericelor situați în spațiul de memorie de date;
· două acumulatoare de 56 biți incluzând și bitul de extensie;
· înmulțire și adunare paralelă 24×24 biți înrt-un ciclu instrucțiune (două perioade de tact);
· dublă precizie la înmulțirea 48×48 biți cu rezultatul de 96 biți în șase cicluri instrucțiune ;
· întreruperi rapide cu revenire;
· patru magistrale interne de date pe 24 biți, trei magistrale interne de adrese pe 16 biți pentru transferul informației interne;
· arhitectură HARDVARD ce permite accesul simultan la memoria program și la cele două memorii de date;
· trei pini pentru cereri de întrerupere externe;
· emulator OnCE pentru depanarea programelor;
· oscilator PLL programabil soft;
· mod de lucru cu consum redus;
Arhitectura procesorului numeric de semnal
Familia DSP56K e construită pe un modul central de procesare .În jurul acestui modul central de procesare, în suprafața de extensie circuitul poate suporta diverse configurații ale memoriilor și circuitelor periferice care-l fac să difere de la membru la membru al familiei .Aaceastă secțiune face introducerea la arhitectura și la componentele majore ale modului central de procesare.Figura următoare arată schema bloc a unui procesor din familia DSP56K, incluzând moddul central de procesare și suprafața de expansiune fără specificații ale memoriei și perifericelor.
Module Mem. de Mem. de Mem. de
periferice program date X date Y
YAB
XAB
AGU Comutator
PAB extern de
magistrală
de
adrese
control de
magistrală
comutator comutator
intern de extern de
magistrală magistrală
de date de date
PLL Controler Controler Generat. Unitatea
întreru- decodor de aritmetică
peri de de adrese și OnCE
generator program de logică
de tact program program
MODC/NMI
MODB/IRQB
MODA/IRQA
RESET
Componentele centrale sunt:
· magistrala de date ;
· magistrala de adrese;
· comutator intern de magistrală;
· unitatea de manipulare a datelor;
· unitatea aritmetică și logică de date (data ALU );
· unitatea de generare adreselor;
· unitatea de control a programului (PCU)
· interfață pentru memoria externă;
· registrul de intrare DATA ALU;
· registrele acumulatoare A și B;
· registrul de deplasare pentru acumulator;
· circuitul de deplasare și limitare;
· generator de tact;
· emulator inclus în cip (OnCE);
Magistrala de date
Modul central de procesare al circuitului DSP56K este organizat în jurul registrelor celor trei unități de execuție independente: PCU, AGU și DATA-ALU.Transferul datelor între unitatea de execuție se fac pe cele patru magistrale bidirecționale pe 24 de biți: magistrala de date X (XDB); magistrala de date Y (YDB); magistrala de date program (PBD) și magistrala de date globale (GDB). Datele se transferă între ALU și memoria X și Y de date prin magistrala de date XDB și respectiv YDB. Aceste două magistrale sunt locale și sunt folosite doar în interiorul cipului pentru mărirea vitezei de lucru și minimizarea disipației de putere.Toate celelalte transferuri de date, ca de exemplu transferuri de I/O cu perifericele, se fac cu ajutorul magistralei GDB. Transferuri de date de pot efectua: registru la registru, registru la memorie și memorie la registru. Se pot transfera două cuvinte de 24 de biți sau un cuvănt de 56 de biți într-un singur ciclu instrucțiune.Transferurile între magistrale se fac prin intermediul comutatorului intern de magistrsale.
Magistrala de adrese
Adresa pentru memoria de date internă X sau Y e specificată prin intermediul magistralei de adrese pe 16 biți unidirecțională XAB și respectiv YAB. Adresa pentru memoria de program e specificată prin intermediul magistralei de adrese de program bidirecțională PAB.
Memoriile externe sunt adresate doar de o singură magistrală de adrese, pe 16 biți, unidirecțională, care poate fi înscrisă prin intermediul unui (comutator ) multiplexor de magistrală, cu conținutul uneia din cele trei magistrale de adrese descrise anterior (PAB; XAB; YAB). Într-un ciclu instrucțiune se poate accesa o singură memorie externă. Dacă se accesează două din cele trei spații de memorie externă într-o singură instrucțiune, atunci ea se va executa în doi cicli, fiind folosit un controler care arbitrează folosirea magistralei externe.
Comutatorul intern de magistrală
Transferul datelor între magistralele interne se realizează cu ajutorul acestui convertor intern de magistrală de date. Acest convertor, care este similar cu un comutator matrix, poate conecta oricare două magistrale interne fără întârzieri pipeline. Această flexibilitate simplifică programarea.
Unitatea de manipulare a biților
Această unitate este fizic localizată în comutatorul intern de magistrală deoarece astfel se poate accesa orice spațiu de memorie. Această unitate permite diverse operații pe un bit în locații de memorie, regiștre de adresă, regiștre de control, registre de date, prin intermediul magistralei XDB, YDB și GDP.
Unitatea aritmetică și logică de date (DATA ALU)
În unitatea aritmetică și logică se pot efectua toate operațiile aritmetice și logice cu operanzi ce reprezintă date. Registrele unității aritmetice și logice pot fi citiți sau înscriși prin intermediu magistralei de date XDB și YDB ca/cu operanzi pe 24 sau 48 de biți. Operanzii sursă pentru DATA ALU, care pot fi pe 24, 48 sau 56 biți, provin întotdeauna din registrul ALU. Rezultatul tuturot operțiilor făcute în DATA ALU sunt stocate în acumulator.
Datele pe 24 de biți sunt furnizate de 144 de niveluri. Aceste niveluri sunt suficiente pentru aplicații întrucât majoritatea operanzilor de date sunt făcuți pe 16 biți sau mai puțin și cu siguranță nu mai mult de 24 de biți.
DATA ALU poate efectua oricare din următoarele operații într-un singur ciclu instrucțiune: multiplicare, multiplicare acumulare cu un număr pozitiv sau negativ al acumulatorului, rotunjime, multiplicare acumulare cu un număr negativ sau pozitiv al acumulatorului și rotunjire, adunare, scădere, împărțire iterativă, deplasare și operații logice.
Componentele DATA ALU sunt:
· patru regiștrii de intrare pe 24 biți;
· o unitate de înmulțire și acumulare ce lucrează paralel într-un singur ciclu fără tehnică pipeline;
· doi regiștrii acumulatori pe 48 de biți;
· doi regiștrii de extensie a acumulatorului pe 8 biți;
· un registru de deplasare pentru acumulator;
· doi regiștrii pentru deplasare/limitare a operanzilor ce se transmit pe magistrala de date.
Registre de intrare ale DATA ALU
X1, X2, X3 și X4 sunt cei patru registre de intrare de date pe 24 de biți. Ei pot fi tratați ca patru registre independente pe 24 de biți sau ca registre pe 48 de biți numiți X și Y, rezultați prin concatenarea lui X1 cu X0 și Y1 cu Y0, X1 este cel mai semnificativ cuvânt în X, respectiv Y1 este cel mai semnificativ cuvânt în Y.
Aceste registre servesc ca buffere de intrare între XDB sau YDB și unitatea MAC. Ei se comportă ca operanzi sursă pentru DATA ALU și permite încărcarea de noi operanzi în instrucțiunea următoare, dacă instrucțiunea curentă utilizează conținutul regiștrelor.
Registrele mai pot fi de asemenea citiți înapoi de către magistrala de date pentru a implementa operații de întârziere de memorare și salvare pentru deservirea subrutinelor de întrerupere.
Unitatea MAC
Pentru instrucțiuni aritmetice, unitatea acceptă trei tipuri de operanzi de intrare și un rezultat pe 56 de biți de ieșire în următoarea formă: cel mai semnificativ produs și cel mai puțin semnificativ produs (MSP,LSP). Operațiile unității MAC decurg independent și paralel cu activitatea magistralelor XDB și YDB, și registrele sale facilitează bufferarea pentru intrările și ieșirile pentru DATA ALU. Bistabilele de intrare ale unității MAC permit scrierea într-un registru intern care e sursă pentru o operație a unității DATA ALU în aceeași instrucțiune. Unitatea aritmetică conține un multiplicator și două acumulatoare. Intrarile multiplicatorului poate proveni doar din registrul X sau Y (X0, Y0, X1, Y1). Multiplicatorul execută multiplicări de 24×24 biți paralel. Produsul este adunat și la conținutul unuia din acumulatorii pe 56 de biți, A sau B. Suma pe 56 de biți e stocată înapoi în același acumulator. Operația de multiplicare acumulare nu este sub forma unui pipeline, dar este o operație care se desfășoară într-un singur ciclu operație. Dacă instrucțiunea specifică o operație de multiplicare fără acumulare (instrucțiunea mpy), atunci unitatea MAC șterge acumulatorul și apoi adună conținutul la produs.
Când un rezultat pe 56 biți trebuie stocat ca un operand pe 24 biți, LSP-ul este pur și simplu tăiat, sau poate fi rotunjit în MSP. Rotunjirea e realizată când instrucțiunea specifică adunarea produsului multiplicatorului la conținutul acumulatorului. Unitatea logică realizează operațiile logice: and, or, eor și not.
Regiștre acumulatoare
ALU DATA conține două registre acumulatoare pe 56 de biți A și B. Fiecare e alcătuit din concatenarea a trei registre A2, A1, A0, respectiv B2, B1, B0. Cei 8biți de extensie de semn sunt stocați în A2 sau B2 și utilizați când este o dată mai mare de 48 de biți, cei 24 de biți MSB ai produsului sunt în A1 sau B1, cei 24 de biți LSB sunt stocați în A0 sau B0.
Depășirea apare când operandul sursă necesită mai mulți biți pentru reprezentarea unei date decât sunt disponibile în destinație. Cei 8 biți de extensie (regiștre de extensie) oferă protecție împotriva depășirilor. În familia DSP56K, valorile extreme pe care un cuvânt le poate avea sunt -1 și 0,9999998. Dacă suma a două numere e mai mică decât -1 sau mai mare decât 0,9999998, rezultatul (care nu poate fi reprezentat pe 24 de biți) are o subdepășire sau o supra depășire. Cei 8 biți ai registrului de extensie pot reprezenta rezultatul a 255 de depășiri.
Extensia automată de semn apare când cei 56 de biți ai acumulatorului sunt scriși cu un operand mai mic de 48 sau 24 de biți. Un operand pe 24 de biți e scris în (A1 sau B1) porțiunea MSB a acumulatorului, porțiunea LSB (A0 sau B0) fiind umplută cu cu zero și porțiunea de extensie EXT (A2 sau B2) este extensia de memorie din MSB. Un operand pe 48 de biți e scris în porțiunea MSB:LSB (A1:A0 sau B1:B0) a acumulatorului și porțiunea EXT este extensia de semn din MSB. Nici o extensie de semn nu apare dacă un registru individual pe 24 de biți e utilizat (A1, A0, B1 sau B0). Când oricare din A sau B este citit, el poate fi obțional scalat un bit la stânga sau un bit la dreapta pentru blocul aritmetic în virgulă mobilă. Extensia de semn poate de asemenea decurge când A sau B sunt scriși din XDB sau YDB sau ca rezultatul operațiilor din DATA ALU (cum ar fi instrucțiunea de transfer condiționat sau transfer de conținut de registre).
Protecția la depășire apare când conținutul lui A sau B este transferat peste XDB și YDB prin substituirea unei constante limită pentru date. Limitarea nu afectează conținutul lui A și B, doar valoarea transferată peste XDB și YDB e limitată. Această depășire pentru protecție decurge după ce conținutul acumulatorului a fost deplasat în concordanță cu modul de scalare. Deplasarea și limitarea apar doar când întregul acumulator pe 56 biți A sau B e specificat ca sursă pentru un transfer paralel de date peste XDB sau YDB. Când registrele individuale A0, A1, A2, B0, B1 sau B2 sunt specificate ca surse pentru un transfer paralel de date, deplasarea și limitarea nu sunt realizate.
Registrul de deplasare pentru acumulator
Registrul de deplasare pentru acumulator e un registru de deplasare pararel asincron cu 56 biți de intrare și 56 biți de ieșire ce sunt implementați imediat înainte de intrarea acumulatorului MAC.
Sursele regiștrilor de deplasare a acumulatorului sunt:
fără deplasare (nemodificat).
un bit stânga ( aritmetic sau logic) ASL, LSL, ROL.
un bit dreapta (aritmetic sau logic) ASR, LSR, ROR.
forțare pe zero.
Circuit de deplasare și limitare
Acest circuit furnizează o post procesare a datelor citite din registrele acumulatoare A și B ai DATA ALU spre XDB sau YDB. Sunt două circuite independente de deplasare/limitare (unul pentru XDB și unul pentru YDB), fiecare conținând fiecare conținând un circuit de deplasare urmat de un circuit de limitare.
Limitare (saturare aritmetică)
Registrele A și B servesc ca buffere între unitatea MAC și XDB și/sau YDB ele se comportă amândouă ca sursă și destinație pentru operanzi. Există un test logic în fiecare acumulator pentru a reține operațiile de deplasare și limitare. Acest proces e numit saturare aritmetică.
Registrele A și B au 8 biți de extensie. Limitarea decurge când biții de extensie sunt utilizați și fiecare din A sau B este sursă ce va fi citită peste XDB sau YDB. Dacă conținutul acumulatorului sursă selectat poate fi reprezentat fără depășire în depășire în mărimea operandului destinație (adică extensia acumulatorului nu e folosită), limitarea datelor e dezactivată și operandul nu e modificat. Dacă conținutul acumulatorului sursă selectat nu poate fi reprezentat fără depășiri în mărimea operandului destinație, limitarea datelor va substitui data limită cu amplitudine maximă și cu același semn ca și conținutul acumulatorului sursă: $7fffff pentru 24 de biți sau 7fffffffffff pentru 48 de biți, în cazul numerelor pozitive, $800000 pentru 24 de biți sau 80000000000 pentru 48 de biți în cazul numerelor negative. Acest proces este numit saturare aritmetică. Valoarea din acumulator nu este modificată și poate fi reutilizată. Când procesul de limitare apare un fanion este setat și memorat în registrul de stare.
Două limitări corespunzătoare la două cuvinte operand pot fi făcute independent în același ciclu instrucțiune. Două date limitate pot fi de asemenea combinate pentru a forma o dată limitată pe 48 biti pentru un operand lung.
Scalare
Deplasatorul de date poate deplasa datele cu un bit la stânga sau un bit la dreapta ,sau poate lăsa datele nemodificate. Fiecare din deplasatoare are la intrare 24 biti cu indicatori de depășire și sunt controlați de biții mod de scalare din registrul de stare. Acești regiștri de deplasare permit o scalare dinamica a datelor în virgula fixă fără a modifica codul programului.
Reprezentarea și rotunjirea datelor
Familia DSP56K utilizează reprezentarea fracționară a datelor pentru toate operațiile desfășurate în DATA ALU. Datele trebuie convertite într-un număr fracționar prin scalare, înainte de a fi utilizate de DSP sau utilizatorul va avea mare grijă cum să manipuleze datele. Un exemplu de scalare este convertirea tuturor numerelor întregi în numere fracționare prin shiftarea locațiilor cu 24 de poziții spre stânga. Astfel data nu s-a schimbat, doar poziția zecimalei s-a mutat.
Pentru cuvinte și cuvinte lungi, cel mai negativ număr ce poate fi reprezentat este -1, a cărui reprezentare internă este: $800000 și $800000000000, respectiv cel mai pozitiv cuvânt este $7fffff sau 1-2-23 și respectiv cel mai lung cuvânt pozitiv este $7fffffffffff sau 1-2-47 . Aceste limitări se aplică tuturor datelor stocate în memorie și datelor stocate în bufferele de intrare ale unității DATA ALU. Registrele de extensie asociate cu acumulatoarele permit o creștere a cuvintelor astfel încât cel mai mare număr pozitiv ce poate fi utilizat este aproximativ 256 și cel mai mic număr negativ ce poate fi utilizat este aproximativ -256. Cănd extensia acumulatorului e utilizată, data conținută în acumulator nu poate fi stocată exact în memorie sau alte regiștre. În aceste cazuri, datele trebuie limitate la cel mai mare număr pozitiv sau cel mai mic număr negativ corespunzător mărimii destinației și semnului acumulatorului. Pentru a menține aliniamentul punctelor binare când un cuvânt operant e scris în acumulatorul A sau B, operandul e scris în cel mai semnificativ registru acumulator (A1 sau B1) și MSB-ul corespunzător este trecut automat în registrul acumulator de extensie ca semn extins. Cel mai puțin semnificativ registru acumulator e automat șters. Când un operand cuvânt lung este scris în acumulator, cel mai puțin semnificativ cuvânt al operandului este scris în cel mai puțin semnificativ registru acumulator A0 sau B0 și cel mai semnificativ cuvănt este scris în A1 sau B1. Reprezentarea numerelor întregi este între -2(N-1) până la +2(N-1) , pe când reprezentare numerelor fracționale e limitată la -1 până la +1. Pentru a converti un număr întreg într-un număr fracțional, întregul trebuie multiplicat printr-un factor de scalare astfel încât rezultatul să fie cuprins întotdeauna între -1 și +1. Reprezentarea numerelor întregi sau fracționale este aceeași dacă numerele sunt adunate sau scăzute dar e diferită dacă sunt înmulțite sau înpărțite.
Cheia diferențelor este că acest extra bit din înmulțirea cu numerele întregi e utilizat ca bit de semn și ca cel mai puțin semnificativ LSB bit din înmulțirea cu numere fracționale.
Aceaste reprezentări a numerelor fracționare sunt:
MSP (jumătatea stângă ) are aceeași formă ca și data de intrare.
LSP (jumătatea dreaptă) poate fi rotunjită în MSP fără deplasare sau rescrierea exponentului.
nu este pierdut un bit semnificativ prin extensia de bit.
conversia în reprezentare în virgulă mobilă e mai ușoară deoarece formatul industrial standard al numărului în virgulă mobilă utilizează mantisă fracțională.
coeficienții pentru cele mai multe filtre digitale sunt derivații ca fracțiuni ai unui limbaj de programare de nivel înalt utilizat în proiectarea filtrelor digitale, ceea ce implică folosirea rezultatelor fără alte conversii externe ale datelor.
Dacă aritmetica numerelor întregi e cerută într-o aplicație, deplasând un unu sau un zero, depinzând de semn, în MSB se convertește un număr fracțional într-un număr întreg.
Unitatea DATA ALU MAC realizează rotunjirea registrului acumulator la precizie simplă dacă e solicitată într-o instrucțiune (registrul A1 sau B1 sunt rotunjite în concordanță cu conținutul registrului A0 sau B0). Rotunjirea este numită și rotunjirea la cel mai apropiat (egal) număr, sau rotunjire convergentă. Metoda uzuală de rotunjire, rotunjește în sus orice valoare peste jumătate și rotunjește în jos orice valoare sub jumătate. Întrebarea care rezultă este care jumătate să fie rotunjită. Dacă se rotunjește întotdeauna într-o singură parte, rezultatul va fi părtinitor spre acea direcție. Rotunjirea convergentă rezolvă problema prin rotunjirea în jos dacă numărul este impar (LSB= 0) și rotunjire în sus dacă numărul e par (LSB= 1).
Unitatea de generare a adreselor
Unitatea de generare a adreselor (AGU) este prezentată la nivel de schemă bloc în figura următoare.
XAB YAB PAB
MULTIPLEXOR
N0 M0 R0 R4 M4 N4
ADRESS ADRESS
N1 M1 ALU R1 R5 ALU M5 N5
N2 M2 R2 R6 M6 N6
N3 M3 R3 R7 M7 N7
MAGISTRALA GLOBALĂ DE DATE
ADRESA ALU INFEROARĂ ADRESA ALU SUPEROARĂ
16 biți
24 biți
Aceasta utilizează o aritmetică întreagă pentru realizarea calculelor efective a adrelelor necesare la adresarea operanzilor din memorie și conținutul registrelor utilizate pentru a genera adresele. Ea implementează o aritmetică liniară, modulo și cu bit revers și operează în paralel cu celelalte resurse ale cip-ului. AGU este divizată în două jumătăți identice, fiecare având o unitate aritmetică și logică de adresare (ALU) și patru seturi de registre. Aceștia sunt: registrele de adresare (R0-R3 și R4-R7), registrele de offset (N0-N3 și N4-N7) și registrele de de mod (M0-M3 și M4-M7). Cele șase registre Rn, Nn și Mn sunt tratatate ca registre triplete, de exemplu doar N2 și M2 pot fi utilizați pentru scrierea în R2.
Cele două unități aritmetice pot genera două adrese pe 16 biți în fiecare ciclu instrucțiune una pentru oricare două dintre XAB, YAB sau PAB. AGU poate adresa direct 65536 locații de memorie XAB, YAB sau PAB. Cele două unități aritmetice de adresă ALU lucrează cu două date din memorie pentru a alimenta DATA ALU cu doi operanzi într-un singur ciclu instrucțiune. Fiecare operand poate fi adresat de un triplet Rn, Nn și Mn.
Șirul de registre de adresă (Rn)
Fiecare din cele două șiruri de registre de adresare constau din patru registre pe 16 biți. Cele două șiruri conțin registrele de adresă R0-R3 și R4-R7, ce conțin adresele utilizate ca pointeri în memorie. Fiecare registru poate fi scris sau citit de magistrala de date globală GDB. Când sunt citiți de pe magistrala globală GDB, registrele pe16 biți sunt scrise în cele mai puțin semnificative două cuvinte ale GDB și cel mai semnificativ cuvânt este setat pe zero. Când scriem din GDB, doar cele mai puțin semnificative două cuvinte sunt citite și cel mai semnificativ cuvânt este trunchiat.
Fiecare registru poate fi utilizat ca intrare în asociație cu unitatea ALU corespunzătoare pentru o recalculare și scriere în registrul. Fiecare registru poate fi scris de către ieșirea unității ALU corespunzătoare lui. Un registru Rn din unitatea de calcul a adresei joase ALU și un registru Rn din unitatea de calcul a adresei înalte ALU pot fi aceeași într-un singur ciclu instrucțiune.
Șirul de registre de offset (Nn)
Fiecare din cele două șiruri de registre de offset constau din patru regiștre pe 16 biți. Cele două șiruri conțin registrele N0-N3 și N4-N7, ce conțin fiecare date sau valori de offset utilizate pentru a modifica adresa pointerilor. Fiecare registru poate fi scris sau citit de către magistrala globală de date GDB. Când se citesc de către magistrala globală de date, conținutul registrelor sunt plasate în cele mai puțin semnificative două cuvinte și cel mai mai semnificativ cuvânt al GDB este setat pe zero. Când un registru e scris, doar cei mai semnificativi 16 biți ai magistralei globale de date sunt utilizați, partea superioară fiind trunchiată.
Șirul de registre de mod (Mn)
Fiecare din cele două șiruri de registre de mod constau din patru registre pe 16 biți. Cele două șiruri de registre de mod M0-M3 și M4-M7, ce specifică tipul de aritmetică utilizat în recalcularea registrului de adresă sau modificarea datelor. Fiecare registru de mod poate fi citit sau scris de către magistrala globală de date. Când sunt citiți de magistrala globlă de date conținutul registrelor este plasat în cele mai puțin semnificative două cuvinte și cel mai semnificativ cuvânt al magistralei globale de date este setat la zero. Când un registru e scris, doar cei mai puțin semnificativi 16 biți ai GDB sunt utilizați, partea superioară fiind trunchiată. Fiecare registru de mod e adus la valoarea $fff în timpul procesului de reset.
Unitatea ALU de adresă
Cele două ALU de adresă sunt identice, fiecare conținând un sumator pe 16 biți (numit sumator de offset), care poate aduna +1, -1, conținutul respectivului registru de offset N sau adună împreună complementului lui N la conținutul registrului de adresă selectat. Un sumator secundar (numit sumator modulo) adună suma rezultatului primului sumator cu o valoare modulo, M sau -M, unde M-1 este stocat în respectivul registru de mod. Un al treilea sumator (numit sumator cu bit revers), poate aduna +1,-1 registre de offset N sau -N la registrul de adresă selectat cu bitul de carry propagat în direcție inversă, adică de la MSB la LSB. Sumatorul de offset și sumatorul de bit revers sunt în paralel și împart aceleași intrări. Singura diferență între ele este că bitul carry se propagă în direcții opuse. Testul logic determină care din cele trei sumatoare dau rezultatul adresei la ieșire.
Fiecare ALU de adresă poate modifica un registru de adresă Rn în timpul unui singur ciclu instrucțiune și poate realiza aritmetica liniară, modulo și cu bit revers. Conținutul registrului de mod selectat specifică tipul aritmeticii ce va fi utilizată în calcularea valorii registrului de adresă.
Modele de programare
AGU cuprinde trei seturi de câte 8 registre. Aceste registre se pot comporta ca registre de date temporale și ca pointeri indirecți la memorie.
Registrele de adresare R0-R3 și R4-R7
Cele 8 registre pe 16 biți de adresare, R0-R7, pot conține adresa generală a unei date. Cei 16 biți de adresă dintr-un registru de adresă selectat sunt utilizați în calculul adresei efective a unui operand. Când se produce un transfer paralel între memoria de date X și Y, registrele de adresă trebuie tratate ca două șiruri de registre separate R0-R3 și R4-R7. Conținutul unui registru Rn poate pointa direct la dată sau poate fi utilizat pentru modificarea adresei ce va pointa la o dată. În plus, Rn poate fi modificat înainte sau după adresare în concordanță cu modul de adresare slectat. Dacă Rn e modificat, registrul de mod, Mn, este întotdeauna folosit pentru a specifica tipul aritmeticii de modificare. Registrul de offset este utilizat pentru modul de adresare prin modificare cu offset. Modificarea registrului de adresare este realizată de către una dintre cele două unități de aritmetică modulo. De cele mai multe ori modul de adresare modifică registrul selectat sub forma citire-modificare-scriere; registrul de adresă este citit, conținutul lui este modificat în concordanță cu aritmetica modulo și apoi este scris corespunzător ieșirilor unităților de aritmetică modulo. Forma de modificare a registrului de adresă realizat de unitatea de aritmetică modulo este controlată de registrele de offset și de registrele de mod. Registrele de adresă nusunt afectate de resetul procesorului.
Registrele de offset (N0-N3 și N4-N7)
Cele 8 registre de offset pe16 biți, pot conține valori de modificare (offset) utilizate pentru incrementarea respectiv decrementarea registrelor de adresă în cazul calculării valorilor conținute de acestea sau pot fi utilizate pentru memorări propriu-zise de date pe 16 biți. Fiecare registru Rn, are asociat propriul său registru de offset Nn. Registrele de offset nu sunt afectate de resetul procesorului.
Registrele de mod (M0-M3 și M4-M7)
Cele 8 registre de mod pe 16 biți, definesc tipul de aritmetică de adresare care realizează calculele modului de adresare, sau pot fi folosite pentru memorări propriu-zise de date. ALU de adresare suportă tipurile de aritmetică liniară, modulo sau cu bit revers pentru toate modurile de adresare indirectă prin registrul de adresă. Pentru aritmetică modulo, conținutul lui Mn specifică și modulul. Fiecare registru de adresă, Rn, are propriul său registru de mod, Mn, asociat lui. Fiecare registru de mod este setat la $ffff la resetul procesorului, ceea ce specifică implicit modul de calcul a adreselor în aritmetica liniară.
Adresarea
DSP56K necesită trei moduri de adresare: directă indirectă, indirectă și specială. Adresarea directă și specială nu necesită utilizarea unității AGU, ele vor fi descrise înparagraful următor.
Adresarea indirectă cu ajutorul registrului de adresare
Când un registru de adresare e utilizat pentru a pointa la o locație de memorie, modul de adresare este numit “adresare indirectă cu ajutorul registrului de adresare”. Termenul indirect este folosit deoarece registrul nu conține operandul, dar mai exact adresa acestuia. Acest mod de operare specifică dacă un operand este în memorie și specifică adresa efectivă a acestui operand.
Conținutul registrelor specifice unității de generare a datelor ce determină adresa efectivă e modificat de operații aritmetice realizate de AGU. Tipul aritmetic utilizat la adresare e specificat de registrul de adresare de mod, Mn.
Adresarea indirectă este de mai multe feluri: fără modificare, post incrementare cu 1, post decrementare cu 1, post incremantare cu Mn, post decrementare cu Mn, indexare cu Mn, predecrementare cu 1.
fără modificare: adresa operandului se află în registrul de adresare Rn. Conținutul lui Rn rămâne neschimbat în urma execuției instrucțiunilor. Acest mod poate fi utilizat pentru referiri la memoria X și Y.
post incrementare cu 1: adresa operandului se află în registrul de adresare Rn. După ce operandul din adresa specificată e utilizat, conținutul registrului de adresă este incrementat cu 1 și stocat în același registru de adresare.
post decrementare cu 1: adresa operandului se află în registrul de adresare Rn. După ce operandul adresă este utilizat, el este decrementat cu 1 și stocat în același registru de adresare.
post incrementare cu conținutul lui Nn: adresa operandului se află în registrul de adresare Rn. După ce operandul adresă e utilizat, el este incrementat cu conținutului registrului Nn și stocat în același registru de adresă. Conținutul lui Nn nu se modifică.
post decrementare cu conținutul lui Nn: adresa operandului se află în registrul de adresare, Rn. După ce operandul adresă este utilizat, el este decrementat cu conținutul registrului Nn și stocat în același registru de adresare. Conținutul registrului Nn nu se modifică.
indexare cu conținutul lui Nn: adresa operandului se află prin însumarea registrelor de adresare Rn. Conținutul registrelor Rn și Nn nu se modifică.
predecrementare cu 1: adresa operandului este conținutul registrului de adresare Rn decrementat înainte ca operandul adresă să fie utilizat. Conținutul registrului Rn este decrementat și stocat în același registru de adresare Rn. Acest mod de adresare necesită un extra ciclu instrucțiune.
Adresarea cu modificare aritmetică
Unitatea ALU de adresare suportă o aritmetică binară, modulo și cu bit revers pentru toate adresările indirecte cu registre. Aceste tipuri de aritmetică permit cu ușurință crearea unei structuri de date în memorie de tip FIFO (coadă, rând), linii de întârziere, buffere circulare, stive și buffere cu bit revers.
Conținutul registrului de modificare Nn definește tipul aritmeticii ce e performantă pentru modul de calcul utilizatîn adresare. Pentru aritmetica modulo, conținutul lui Mn specifică modulul, sau mărimea bufferului de memorie la a cărui adresă ne referim.
Unitatea de control a programului
Generalități
Unitatea de control a programului este una din cele trei unități de execuție în modul central de procesare. Ea realizează generarea adrelelor de program, decodificarea instrucțiunilor, control hardware și interpretarea procesării. Programatorul vede unitatea de control a programului ca șase registre și un sistem stivă hard (SS). În plus față de posibilitățile standard de control a programului (PC), registrul de stare (SR) și unitatea de control a programului (SS) mai prezintă registrele dedicate pentru executarea buclelor (salturilor) hard și registrul numărător de buclă (salt).
Stiva (SS) este o memorie cu 15 niveluri separate intern pe 32 de biți ce memorează PC și SR pentru chemări de subrutine, întreruperi lungi și salturi de program. SS de asemenea stochează registrele LA și LC. Fiecare locație din SS este adresabilă ca un registru pe 16 biți, stiva intern superioară (SSH) și stiva intern inferioară (SSL).
Toate registrele sunt scrise/citite pentru a facilita depanarea de sistem. Cu toate că nici un registru nu este pe 24 de biți ei sunt citiți sau scriși pe magistrale de 24 de biți. Când sunt citiți cei mai puțin semnificativi biți (LSB), aceștia sunt cei mai importanți, iar cei mai semnificativi biți (MSB) sunt alocați ca zero.
PCU implementează trei stadii pipeline (extragere, decodare și execuție) și controlează cinci stări de procesare ale DSP: normală, excepție, rezervată, așteaptă și stop.
Arhitectura PCU
PCU conține trei blocuri hard: controlelul de decodare (PDC), generatorul adreselor de program (PAG) și controlelul întreruperilor de program (PIC).
Controlelul de decodare a programului (PDC)
PDC conține decodorul de program a șirului logic, registrul generator de adresă de magistrală, generatorul codului de condiții, stările de întrerupere. PDC decodează instrucțiunile pe 24 de biți încărcate în registrul de instrucțiuni și generează toate semnalele necesare pentru controlul pipeline.
Registrul de instrucțiuni de rezervă memorează duplicatul instrucțiunii extrase pentru a optimiza execuția instrucțiunilor de repetare (REP) și (JMP).
Generatorul adreselor de program (PAG)
PAG conține registrele PC, SP și SS, registrul mod de operare (OMR), SR, registrul LC și registrul LA. PAG furnizează structura hard dedicată în executarea diferitelor bucle de program, care sunt frecvent construite în buclele DSP. O instrucțiune DO încarcă registrul LC (numărător de buclă) cu numărul de timpi în care bucla trebuie executată, încarcă registrul LA (adresă buclă) cu adresa ultimei instrucțiuni din buclă (extrasă în timpul executării unei bucle) și asociază flagurile de buclă în registru de stare (SR). Instrucțiunea DO suportă de asemenea bucle ascunse prin stocarea conținuturilor registrelor LA, LC și SR înainte de executarea instrucțiunilor. Sub controlul PAG, adresa primei instrucțiuni din buclă este de asemenea memorată astfel încât bucla să se poată repeta fără a fi dată peste cap. Cât timp flagurile de buclă sunt asertate, în registrul SR stările mașină de buclă se vor compara conținutul PC cu conținutul LA, pentru a determina dacă ultimul cuvânt instrucțiune din buclă a fost extras. Dacă ultimul cuvânt a fost extras, conținutul lui LC este testat pe 1. Dacă este diferit de 1, atunci este decrementat și SS este citită pentru a încărca PC cu adresa primei instrucțiuni din buclă. Dacă LC este egal cu 1 atunci LA și flagurile de lucru din SR sunt restaurate cu conținutul din stuvă, în timp ce extragerile de instrucțiuni continuă să incrementeze valoarea PC (LA+1).
Instrucțiunea de repetare (REP) încarcă LC cu numărul de timpi a instrucțiunilor următoare ce vor fi repetate. Instrucțiunile ce se repetă sunt extrase doar o dată, astfel încât să crească viteza prin reducerea ciclurilor de magistrală externă. Oricum, instrucțiunile REP nu sunt întreruptibile din moment ce ele sunt extrase doar o dată. O singură instrucțiune DO poate fi utilizată în locul unei instrucțiuni REP dacă întreruperea trebuie să fie permisă (trebuie să se țină cont de ea).
Controlerul de întreruperi de program ( PIC )
PIC recepționeză toate cererile de întreruperi, le arbitreză și generează adresa vectorului de întrerupere. Întreruperule au o structură de prioritate flexibilă cu nivele ce se pot rândui de 0 la 3. Nivelul 0 (nivelul cel mai de jos este nivel mascabil ), nivelul 1 și 2 sunt mascabile. Nivelul 3 este cel mai înalt nivel de prioritate la întrerupere (IPL) și nu este mascabil. Doi biți mască de întrerupere din SR selectează nivelul priorității de întrerupere ( IPL ) și indică nivelul necesar pentru ca o sursă de întrerupere să întrerupă procesorul. Întreruperile sunt cauzate de intrarea DS în starea de procesare de excepție.
Cele patru surse de întreruperi externe includ trei intrări externe de cereri de întreruperi și pinul de RESET . Inreruperea nemascabilă este sensibil la margine și este întrerupere de nivelul 3. MODA/IRQA, MODB/IRQB și MODC/NMI sunt testați câne este neasociat . Valorile testate sunt stocate în biții registrului mod de operare ( OMR ) , MA , MB șI MC. Doar a patra întrerupere externă șI instrucțiunile ilegale au o prioritate mai mare decât .
PIC arbitrează de asemenea diferitele periferice I/O. Perifericul curent setat oferă adresa vectorului corect către PIC.
Formatul instrucțiunilor PIPELINE
Unitatea de control al programului utilizează o arhiectură pipeline pe trei nivele în care instrucțiunea curentă este extrasă, decodificată și executaă . Aceste operații pipeline rămân în esență ascunse utilizatorului și fac programarea mai ușoară. Pipeline este ilustrată în figura următoare ce arată ordinea operațiilor:
Execuția serială a instrucțiunilor
instrucțiunea
de extragere 1 2 3 4 5
instrucțiune
de decodare1 2 3 4
instrucțiune
de execuție 1 2 3
Procesarea paralelă a instrucțiunilor
Model de programare
PCU este caracterizată de registrele LA șI LC ce întrețin instrucțiunile de buclă DO și de resurse de control a programului standard cun sunt PC , SR șI SS. Cu excepția lui PC, toate registrele sunt citite sau scrise pentru a facilita depanarea sistemului .
Contorul de program ( Memoria de program , PC )
Acest registru pe 16 biți conține adresele unei locații ce trebuie extrasă din memoriade program. PC poate indica spre instrucțiuni operanzi date sau adrese ale operanzilor . Referirile la acest registru sunt întotdeauna ascunse șI simplifică majoritatea instrucțiunilor.
Acest registru cu scop special de adresare este stocat când o buclă e inițializată, când este inițializată o instrucțiune JSR sau cănd intervine o întrerupere ( exceptând întreruperile rapide ).
Registrul de stare SR
Acest registru de stare ( SR ) pe 16 biții conține un registru de mod ( MR ) în ordinea celor mai importanți 8 biții și un registru de condiții de cod CCR în ordinea celor mai puțin importanți 8 biții. MR este stocat când bucla de program este inițializată, când este inițializată o instrucțiune JSR, sau când intervine o întrerupere ( exceptând întreruperile rapide ) MR este un registru specializat de control ce definește starea unui procesor. Biții registrului MR sunt afectați de resetul procesorului, stările de procesare de excepție, instrucțiunea DO, sfârșitul buclei curente ENDDO, întoarcerile din întreruperi ( RTI ), și instrucțiunile SWI și de instrucțiunile ce se referă direct la registru MR ( cum sunt OR, ORI, AND șI ANDI ). În timpul resetului de procesor biții de întrerupere ai registrului MR vor fi setați biții mod de stare, fleg, buclă și de memorie vor fi șteși.
CCR este un regisrtru specializat de control ce definește starea curentă de utilizare o procesorului. Biții sunt afectați de operațiile unității aritmetice șI logice ( ALU ), în operațiile de transfer paralel și de instrucțiunile care fac referiri directe la registrul CCR ( ORI și ANDI ). Biții CCR nu sunt afectați de operații de transfer paralel numai când limitârile de date se citesc cu acumultoarele A șI B. În timpul resetului procesorului, toți biții CCR sunt șterși.
CARRY ( bit 0 )
Bitul de transport ( C ) este setat dacă se generează un transport din bitul MSB al rezultatului dintr-o adunare. Acest bit este de asemenea setat dacă un împrumut este generat într-o scădere. Transportul sau împrumutul sunt generate din bitul 55 al rezultatului. CARRY este de asemenea afectat de instrucțiunea de manipulare de biților de rotație și deplasare, altfel acest bit este șters.
OVERFLOW
( bit 1 ) Bitul de depășire ( V ) este setat când o depășire aritmetică intervine în rezultatul pe 56 de biții. Acest bit indică faptul că rezultatul nu poate fi reprezentat în registru acumulator, deci registrul este depășit (supraîncărcat), altfel acest bit este șters.
ZERO ( bit 2)
Bitul de zero ( Z ) este validat dacă rezultatul este egal cu 0, altfel acest bit este șters.
NEGATIVE
( bit 3 ) Bitul care indică negația ( N ) este setat dacă bitul MSB (55) al rezultatului este setat, altfel acet bit este șters.
UNNORMALIZED
( bit 4) Acest bit de eroare ( U ) este setat dacă cei doi MSB ai poziției celui mai semnificativ produs MSB sunt identici, altfel acest bit este șters.
EXTENSION
( bit 5 ) Bitul de extindere ( E ) este șters dacă toți biții porțiunii întregi a rezultatului pe 56 biți sunt toți 1 sau toți 0, altfel acest bit este setat. Dacă bitul E este șters atunci porțiunea fracțională, în ordine mai puțin importantă conține toți biții mai semnificatovi iar porțiunea întreagă în ordinea celor mai importanți biți reprezintă doar o exetensie de semn. În acest caz , extensia acumulatorului poate fi ignorată. Dacă bitul E este setat, el indică dacă extinderea ( extensia ) acumulatorului este în folosință.
LIMIT ( bit 6 )
Bitul de limitare ( L ) este setat dacă bitul de depășire este setat. Bitul L este de asemenea setat dacă circuitul de deplasare/limitare realizează o operație de limitare, altfel acest bit nu este afectat. Bitul L este șters numai de resetul procesorului sau de o instrucțiune ce specifică ștergerea sa, ceea ce permite ca bitul L să fie utilizat la “ zăvorârea “ bitului de depășire. L este afectat de operațiile de transfer de date ce citesc registrele acumulatorului A sau B.
SCALING BIT
( bit 7) Bitul de scalare ( S ) este utilizat în detectarea creșterii datelor, ce sunt cerute în blocul cu virgulă mobilă în operații FFT.
INTRERUPT
MASKS(biții 8,9) Biții mască de întrerupere I1 șI I0 reflectă nivelul de prioritate a întreruperii IPL a procesorului șI indică IPL cerută pentru o sursă de întrerupere necesară întreruperii procesorului. IPL curentă a procesorului poate fi schimbată sub control soft.
SCALLING MODE
( biții 10 , 11) Biții mod de scalare S1 și S0 specifică scalarea realizată în deplasarea/limitarea datelor din ALU șI de asemenea specifică valoarea rotunjită în instrucțiunea de înmulțire și acumulare ( MAC ) din ALU. Modul de scalare afectează citirea datelor din acumulatorii A sau B pe XDB sau YDB. Biții mod de scalare care sunt șterși la începutul unei deserviri de rutină de întrerupere lungă, sunt de asemenea șterși în timpul unui reset al procesorului.
RESERVED
STATUS ( bit 12 ) Acest bit este rezervat pentru expansiuni viitoare și sunt considerați zero în timpul citirii de către DSP.
TRACE MODE
( bit 13) Bitul mod de urmărire ( T ) specifică funcționarea cu urmărire doar a DSP 56000/DSP56001.
DOUBLE PRECISION
MULTIPLY MODE
( bit 14) Procesorul este în modul de lucru cu precizie dublă la înmulțire când acest bit este setat. Când DM este setat operațiile realizate în instrucțiunile MPI și MAC se schimbă astfel încât să se poată realiza o precizie dublă pe 48 de biți, în 6 instrucțiuni.
LOOP FLAG
( bit 15) Bitul indicator de buclă ( LF ) este setat când o buclă de program este în execuție. El indică sfârșitul buclei de program. Bitul LF este singurul bit al registrului SR ce este restaurat când o buclă de program este terminată stocând și restaurând bitul LF, când se inițiază sau se iese dintr-o buclă de program pentru inserarea altor bucle de program. La începutul unei rutine de întrerupere lungă registrul SR ( incluzând șI LF ) este stocat în SS și LF este șters. Când se revine din întreruperea lungă cu o instrucțiune RTI, LF este restaurat din SS. În timpul resetului procesorului LF este șters.
Registru mod de operare ( OMR )
Registrul OMR este un registru pe 24 de biți ( doar 6 biți sunt definiți ) ce setează modul de operare curent al procesorului. Fiecare cip din familia de procesoare DSP56K are propriul mod de operare ce determină harta memoriei pentru program și date și procedurile de start ce decurg când chipul părăsește starea de reset. Biții OMR sunt afectați doar de resetul procesorului sau de instrucțiunile ANDI, ORI și MOVEC ce se referă direct la registrul OMR.
Stiva sistem ( SS )
Stiva sistem este o memorie internă de 15×32 biți divizată în două blocuri SSH șI SSL. SSH memorează conținutul lui PC și SSL memorează conținutul lui SR pentru chemări de subrutine, întreruperi lungi șI bucle de program. Stiva sistem va stoca de asemenea și registrele LA șI LC. Stiva sistem este în stațiul de memorie stivă, adresarea ei este întotdeauna inerentă și implică instrucțiunea curentă.
Conținuturile registrelor PC și SR sunt introduse în locația de vârf a stivei sistem când este chemată o subrutină sau apare o întrerupere lungă. Când apare o returnare din subrutină ( RTS ) conținutul locației de vârf a stivei sistem este scoasă și pusă în PC ( SR nu este afectat ). Când apare o retunare dintr-o întrerupere lungă ( RTI ), conținutul locației de vârf a stivei sistem este introdusă în ambele registre : SR și PC. Stiva sistem este de asemenea utilizată pentru a impementa “bucle în bucle” DO hard. Când o instrucțiune DO este executată LA și LC sunt introduse în stiva sistem apoi PC și SR sunt și ele introduse în stiva sistem.
Stiva sistem poate “ găzdui “ ( asigura condiții ) de până la 5 întreruperi lingi, 7 bucle DO, 15 JSR sau combinații ale acestora. Conținutul lui PC va fi pierdut și nu va fi nici un SP din rutina de întrerupere de stivă, din programul ce era în execuție când aceasta a apărut.
Registrul indicator de stivă (SP)
Cei 6 biți ai registrului SP indică locația de referință a stivei sistem și starea stivei sistem ( sundepășită, plină, goală, supradepășită ). SP se referă implicit la câteva instrucțiuni ( REP, JSR, RTI ) sau direct la instrucțiunea MOVEC. Registrul SP lucrează ca un numărător pe 6 biți și adresează 15 locații ale stivei cu cei 4 LSB.
STACK
POINTER
( bitii 0-3) SP indică ultima locație utilizată în SS, imediat după resetul hard acești biți sunt șterși ( SP = 0), indicând că SS eset goală. Datele introduse în SS incerementează SP iar datele scoase din SS decrementează SP.
STACK EROR
FLAG ( bit 4 ) Indicatorul stare de stivă indică apariția unei erori a stivei și o tranziție a acestui indicator din 0 logic în 1 logic care cauzează o excepție de eroare cu nivel de prioritate. Când stiva este complet plină SP citește 001111 și orice operație ce introduce date în stivă va cauza apariția unei excepții de eroare de stivă. SP va fi citit 010000 ( sau 010001 ) dacă este implicată o dublă introducere de date în SS. Orice extragere cu SP egal cu zero va cauza o excepție de eroare de stivă și SP va citi 111111 ( sau 111110 ) dacă este implicată o dublă extragere de date din SS. Indicatorul de eroare de stivă este un bit de “ blocare ” care o dată setat rămâne setat până când este șters de utilizator. Există o secvență de instrucțiuni ce poate cauza o depășire a stivei și fără bitul de blocare, nu este detectată deoarece indicatorul de stivă este decrenentat înainte de prelucrarea întreruperii de eroare de stivă. Bitul de blocare menține bitul eroare de stivă setat până când utilizatorul îl șterge prin scrierea de 0 logic în bitul 4 al lui DSP.
UNDERFLON
FLAG (bit 5) Indicatorul de subdepășire este setat când apare o subdepășire a stivei. Indicatorul de subdepășire este un bit de blocare când indicatorul eroare de stivă este setat. Altfel spus, când indicatorul eroare de stivă este setat, indicatorul de subdepășire nu va schimba starea combinația “ subdepășire = 1 ” și “ eroare stivă = 0” este o combinație ilegală și nu va apare decât în cazul forțării de către utilizator. Dacă această condiție este forțată de utilizator hardwarerul va corecta el însuși bazîndu-se pe rezultatul următoarei operații din stivă.
Biții 6 – 23 ai SP sunt rezervați pentru expansiuni viitoare și vor fi citiți ca 0 în timpul operațiilor de citire.
Registrul adresă de salt (LA)
Registrul adresă este un registru pentru citire respectiv scriere ce este stocat în SSH la apariția unei instrucțiuni DO și este restaurat de o procesare, sfîrșit de buclă sau de o instrucțiune ENDDO. Conținutuil lui LA indică locația ultimului cuvânt instrucțiune din bucla de program. Când ultima instrucțiune este extrasă procesorul verifică conținutul registrului numărător de buclă LC. Dacă conținutul nu este 1, procesorul decrementeaza LC și preia urmatoarea instrucțiune din vârful stivei SS. Dacă LC este 1, PC este incrementat, indicatorul de buclă este resetat ( extras din SS ) și SS este curățată. LA șI LC sunt extrase din SS și resetate, execuția instrucțiunilor continuând normal.
Registrul numărător de buclă ( LC )
Registrul LC este un registru numărător pe 16 biți ce specifică numărul de timpi în care bucla de program hard va fi repetată. Acest registru este stocat în SSL de o instrucțiune DO și restaurat de o pocesare sfârșit de buclă sau de o instrucțiune ENDDO. Când sfârșitul buclei de program hard este atinsă, conținutul registrului este testat pentru 1. Dacă LC este 1, bucla de program este terminată, și registrul LC este încărcat cu conținutul anterior al lui LC, stocat în SS. Dacă LC nu este 1 atunci este decrementat și bucla de program se repetă. LC poate fi citit sub controlul programului ce permite numărul de timpi de buclă ce urmează a fi monitorizați sau schimbați în mod dinamic. LC este utilizat de asemenea în instrucțiunea REP.
Formatul instrucțiunilor
Instrucțiunile DSP56K constau din unu sau două cuvinte pe 24 de biți, un cuvânt operație și un cuvânt de extensie opțională a adresei efective.
Majoritatea instrucțiunilor specifică transferul datelor pe XDB, YDB și operațiile ALU de date în același cuvânt operație. DSP56K realizează fiecare din aceste operații în paralel.Câmpul de transfer dintre magistralele de date furnizează referirile la tipul operanzilor. El selectează memoria sau registrul de referință considerate efective pentru transferul datelor pe XDB șI YDB. Acest câmp mai poate cere în plus informații pentru a specifica complet operandul pentru un anumit mod de adresare. Un cuvânt de adresă extinsă urmează cuvântul operație furnizând o adresă de date imediate sau o adresă absolută dacă este necesar.
Mărimea operanzilor
Mărimea operanzilor sunt definite ca: un cuvănt pe 8 biți, un cuvânt pe 16 biți, un cuvânt pe 24 de biți, un cuvânt lung pe 48 de biți și un acumulator pe 56 de biți. Mărimea operanzilor pentru fiecare instrucțiune este coadată explicit în instrucțiune sau definită implicit de operația instrucțiunii.
Moduri de adresare
Setul de instrucțiuni al DSP conține un set complet de moduri de adresare a operanzilor. Pentru a minimiza timpul de execuție și revenirea buclelor, toate calculele adreselor sunt realizate concomitent cu unitatea ALU de adresare.
Modul de adresare specifică dacă operanzii sunt înregistrați în memorie șI furnizează adresa specifică acestora. O adresă efectivă dintr-o instrucțiune va specifica modul de adresare, și pentru câteva moduri de adresare, adresa efectivă va specifica în pus registrul de adresă. În plus modul de adreasre indirectă cu registrul necesită sulpimentar informații de modificare a adresei, aceasta nefiind codată în instrucțiune. Informațiile de modificare a adreselor sunt specificate în registrul selectat de modificare a adreselor. Toate referirile indierecte la memorie necesită un registru de modificare a adresei și referirile la memoriile X și Y necesită doar modificări de adresă. Definiția unei instrucțiuni create implică utilizarea registrelor specifice ș a modului de adresare.
Unele moduri de adresare indirectă cu registru, necesită un registru de modificare și un registru de offset pentru calculul adreselor. Aceste registre sunt implicate de registrul de adresare specificat în adresa respectivă din cuvântul instrucțiune. Fiecare registru de offset (Nn) și fiecare registru de modificare (Mn) sunt asociați unui registru de adresare ( Rn), având același număr de registre n, deci rezultă 8 tripleți de registre :
R0:N0:M0 ,…. , R7:N7:M7.
Modurile de adresare sunt grupate în trei categorii: direct cu registrul, indirect cu registrul și special.
Modul deadresare direct
Acest mod de adresare directă specifică faptul că sursa operand sau destinație este unul dintre regiștrii de date, control sau adresă în modul de program.
Adresarea directă cu registrul de date sau control
Operandul poate fi format din unu, doi sau trei regiștri de date din unitatea ALU de date ce sunt specificați în porțiunea câmpului de transfer a registrului de date din instrucțiune. Clasificat ca referire la registru acest mod de adresare este de asemenea utilizat în specificarea operandului din registrul de control pentru instrucțiuni speciale cum sunt SAU imediat cu registrul de control ( ORI ) respectiv ȘI imediat cu registrul de control ( ANDI ).
Adresare directă cu registrul de adresare
Operandul este unul din cale 24 de registre de adresare ( Rn ,Nn și Mn ) specificate de o adresă efectivă din instrucțiune.
Mod de adresare special
Modurile de adresare speciale nu utilizează registre specifice pentru a indica adresa efectivă. Aceste moduri specifică operandul sau adresa operandului în cadrul instrucțiunii sau se referă implicit la un operand .
Modurile de adresare specială sunt următoarele :
1.Data imediată.
Acest mod de operare necesită un cuvânt instrucțiune extins conținând data imediată.
2.Adresarea absolută.
Acest mod de adresare necesită un cuvânt instrucțiune extins conținând adresa absolută.
3.Imediată scurtă.
Data imediată este interpretată ca un întreg fără semn sau ca o fracție cu semn, depinzând de regiștrii destinație.
4.Adresă de salt scurt.
Operandul ocupă 12 biți în cuvântul operație al instrucțiunii, e permite ca adresele $0000-$0FFF ce pot fi accesate. Adresa este zero extinsă la 16 biții cândf se utilizează adresarea memoriei de program.
5.Absolută scurtă
Adresa operandului ocupă 6 biți în cuvântul operație al instrucțiunii, permițând accesul la adresele $0000-$00BF. Adresa este zero extinsă la 16 biți când utilizează adresarea unui operand sau a memoriei program.
6.I/O scurtă.
Modul de adresarescurtă I/O este similar cu adresarea absoută scurtă. Adresa operandului ocupă 6 biți în cuvântul operație al instrucțiunii. Acest mod de adresare este utilizat instrucțiunea MOVEP. Aceasta adresa este 1 extinsă la 16 biții pentru a adresa porturile de I/O ale memoriei X și Y.
7.Referire implicită.
Câteva instrucțiuni fac implicit referiri la PC, SS, LA, LC sau SR. De exemplu instrucțiunea de salt (JMP) se referă implicit la PC, sau instrucțiunea de repetare ( REP ) face referiri implicite la LC.
Portul A
Portul A furnizează o interfațâ multilaterală cu memoria externă, permițând o conectare economică cu memorii rapide, memorii sau componente încete și sisteme multimagistrală.
Interfața portului A
DSP56K poate accesa una sau mai multe din sursele sale de memorie ( memoie de date X, memorie de date Y și memorie de program ) cât timp el execută instrucțiunile. Sursele de memorie pot fi amândouă interne sau externe DSP-ului. Trei magistrale de adrese ( XAB, YAB și PAB ) și patru magistrale de date ( XDB, YDB, PDB și GDB ) sunt disponibile pentru accesul memoriei interne în timpul unui cilcu instrucțiune. O magistrală de adresă și o magistrală de date ale portului A sunt disponibile pentru a accesa memoria externă. Dacă toate sursele de memorie sunt interne DSP-ului, unul sau mai multe din trei surse ale memoiei pot fi accesate într-un cilcu instrucțiune.
Dacă un ciclu instrucțiune necesită mai mult de un acces extern, procesorul va face accesul în memorie în funcție de priorități : memoria X, memoria Y și memoria de program. Este necesar un ciclu instrucțiune pentru fiecare acces extern la memorie. Deoarece magistrala externă este doar de 24 de biți, un acces extern lung la X sau Y va dura două cicluri instrucțiune.
Semnale de magistrală ale portolui A
Semnale magistrale de adresă si date ale portului A
Pentru magistrala de adresa (A0-A15) există trei stări. Acești pini cu trei stări specifică adresele pentrul accesul la memoria externă de date sau program. Pentru a minimiza disiparea de putere A0-A15 nu-și schimbă starea când nu sunt accesate în spațiul de memorie.
Pentru magistrala de date ( D0-D23) acești pini reprezintă magistrala de date bidirecțională pentru accesul la memoria de date sau program exterioară D0-D23. Ele sunt în starea HI când este declanșat senmalul de admitere de magistrală.
Semnale magistrală de control a portului A
Semnalele magistrală de control realizează modul conectării adiționale a magistralei principale la magistrala portului A. Validarea citire acest pin de ieșire cu trei stări este folosit pentru citirea memoriei externe pe magistrala de date ( D0-D23 ). Validarea scrierii acest pin de ieșire cu trei stări este folosit pentru scrierea memoriei externe pe magistrala de date (D0-D23).
Semnale de acces al controlului ale portului A
Portul A prezintă un grup de pini configurați ce realizează arbitrarea de magistrale și controlul accesului la magistrală. Pinii sunt: sosire magistrală , cerere de magistrală , acceptare magistrală , magistrală în stare de așteptare și validare magistrală .
Stările de așteptare ale portului A
DSP56K prezintă două unități ce permit utilizatorului să adapteze memorie înceată prin schimbarea timpilor magistrală a portului A. Pentru aceasta se utilizează cei 16 biți ai registrului de control ai magistralei (BCR), ce se află în spațiul de memorie de date X. BCR permite fixarea unui număr de stări de așteptare ce sunt inserate în accesul memoriei la toate locațiile din oricare din cale 4 memorii: X, Y, P sau I/O. A doua unitate utilizează facilitațile validării sau așteptării magistralei , ce permite unității componente externe să insereze un număr arbitrar de stări de așteptare care se accesează. Instrucțiunile de așteptare sunt executate până când componenta externă eliberează DSP și termină ciclul extern de memorie. Un generator de stări de așteptare poate fi programat utilizând registrul BCR pentru a insera până la 15 stări de așteptatre dacă, sunt cunoscuți dinainte timpii de acces, curenți sau componentele de I/O. Un semnal de stare de așteptare de magistrală permite unei componente exterioare să controleze număul de stări de așteptare inserate în operația de acces la magistrală.
Portul B
Portul B al procesorului numeric de semnal DSP56002 este format din trei registre: PBC, PBDDR și PBD. Acestea sunt prezentate mai jos:
Registrul de control al portului B (PBC), care selectează portul B ca port I/O sau ca interfață host. Biții BC0 și BC1 sunt selectați pe zero pentru funcționarea portului B ca I/O.
Registrul direcție a datelor a portului B (PBDDR) cu care se programează individual biții portului ca ieșire sau ca intrare. Am folosit biții PB0-PB11 ca intrări iar bitul al 13-lea este folosit ca ieșire pentru codul de start al conversiei analog numerice.
Registrul de date al portului B notat PBD în care sunt scrise datele de la intrare precum și datele de ieșire înainte de a fi transmise.
Generatorul de tact
Familia DSP56K de procesoare prezintă un oscilator de tip PLL în modulul central de procesare. PLL permite procesorului să opereze la frecvențe înalte utilizând un senal de tact de frecvența joasă ceea ce oferă două beneficii imediate. Intrarea generatorului de tact de frecvența joasă reduce suprapunerile de interferență electromagnetică generate de sistem și posibilitatea oscilării la diferite frecvențe reduce costurile prin eleminarea oscilatoarelor adiționale necesare sistemului.
PLL realizează multiplicarea frecvenței pentru a pernite procesorului să utilizeze orice generator de tact extern disponibil pentru operații rapide, în timp ce de asemenea furnizează o ieșire a generatorului de tact pentru a sintetiza frecvența generatorului de tact intern.
DSP56K utilizează 4 faze de tact pentru execuția instrucțiunilor ce se derulează cu rata executării instrucțiunilor. Poate accepta un generator de tact extern prin intrarea EXTAL sau poate utiliza un oscilator extern ocolind funcționarea PLL. Când utilizatorul conectează un cristal intern sau extern XTAL sau EXTAL PLL nu trebuie dezactivată când procesorul acceptă un semnal de tact extern.
Detectorul de fază și filtrul
Detectorul de fază (PD) detectează orice diferență între faza generatorului de tact extern EXTAL și cea a generatorului de tact intern din multiplicatorul de frecvență. În momentul în care există o diferență de fază neglijabilă și frecvența celor două intrări sunt identice, PLL este în starea de ‘blocare‘. Filtrul recepționează semnalele din PD și fie crește fie descrește faza bazându-se pe semnalul de la PD. După închiderea buclei PLL indicată de fază respectiv de frecvență filtrul revine în modul cu lățime de bandă îngustă, ce este utilă pentru depistarea schimbărilor potrivite deplasărilor de frecvență de la pinul EXTAL.
Multiplicatorul de frecvență
In interiorul PLL, multiplicatorul de frecvență divide frecvența de la ieșirea oscilatorului comandat în tensiune cu factorul său de divizare (u). Dacă tensiunea de ieșire a multiplicatorului este diferită de frecvența EXTAL, filtrul generează un semnal de eroare ce determină VCO să ajusteze frecvența până ce cele două impulsuri de intrare în PD au aceeași fază și frecvență. În acest moment (calare pe fază ) VCO va funcționa u timpi ai frecvenței EXTAL, unde u este factorul de multiplicare pentru multiplicatorul de frecvență. Factorul programabil de multiplicare ia valori de la 1 la 4096.
Divizor de putere joasă (LPD)
Divizorul de frecvență joasă divide frecvența de ieșire a oscilatorului comandat în tensiune, cu orice putere a lui doi. Deoarece LPD nu este în bucla închisă a PLL, schimbările în factorul de divizare nu vor cauza o pierdere a condiției de calare. Acest factor este utilizat particular pentru folosirea LPD în modul de consum redus de putere când cip-ul nu este implicat în calcule intensive.
Registrul de control PLL
Registrul de control PLL este un registru pe 24 de biți ce poate fi scris sau citit. El se găsește în memoria de date X la adresa X:$FFFD.
Biții factorului de multiplicare (0-11)
Definesc factorul de multiplicare (MF) ce poate afecta frecvența de intrare în PLL. MF poate fi orice număr între 0 și 4096. Oscilstorul comandat în tensiune va oscila la frecvențe MFX Fext, unde Fext este frecvența generatorul semnalului de tact EXTAL. MF trebuie să fie ales pentru a se asigura că rezultatul ieșirii frecvenței oscilatorului comandat în tensiune se va încadra în rangul specificat de componentă. Oricând o nouă valoare MF este stivuită în MF0-MF11, PLL va pierde condiția de calare. Acești biți vor lua o valoare predefinită după resetul hard al procesorului.
Biții factor de divizare (DF0-DF3)
Acești biți definesc factorulul de divizare al (DF) al divizorului de joasă putere. Acești biți specifică orice putere a lui doi corespunzătoare, DF cuprins între 20 și 215. Schimbând valorile biților DF0-DF3 nu se va produce o pierdere a condițiilor de calare. Oricînd este posibil, schimbările frecvenței de operare a cip-ului (de ex emplu intrarea în modul de putere joasă), vor trebui făcute mai curând prin schimbarea valorilor biților DF0-DF3 decât prin schimbarea biților MF0-MF11. Pentru MF, schimbarea DF0-DF3 poate lungi ciclul instrucțiune memorând modificările registrului PCTL; aceasta este făcută pentru a ține sincronizarea între EXTAL șI generatorul intern al cipului. Pentru MFeste mai mare decât 4 această sincronizare nu este garantată și ciclul instrucțiune nu este lungit. De notat este faptul că CKOUT este sincronizat cu generatorul de tact intern în toate cazurile. Biții DF sunt șterși de resetul hard al procesorului.
Bitul de validare PCTL (XTLD)
Validarea XTAL, bitul controlează ieșijrea cristalului oscilator inclus în cip, XTAL . Când bitul XTLD este șters, ieșirea XTAL este activă permițând operrea normală a oscilatorului de cristal. Când XTAL este setat, ieșirea pinului XTAL este pus în starea 1 logic, dezactivând oscilatorul intern. Dacă oscilatorul cu cristal nu este folosit (EXTAL este adus la o sursă de tact externă ) este recomandabil ca XTLD să fie setat pentru a minimiza zgomotul de interferență de radio frecvență și disiparea de putere. Bitul XTLD este șters de resetul hard al procesorului.
Bitul de oprire a stării de procesare (PSTP)
Bitul PTSP controlează comportamentul buclei PLL și oscilatorului de cuarț intern în cadrul stării de procesare STOP. Când PSTP este setat, PLL și cristalul intern vor rămâne să opereze cât timp cip-ul este în starea de procesare STOP, validând recuperarea rapidă din starea STOP. Când PSTP este șters, PLL și cristalul intern vor fi dezactivate când cip-ul intern este în starea de procesare STOP. PSTP trebuie pus în starea de consum minim de putere chiar cu costul timpului lung de revenire. Pentru a permite revenirea rapidă din starea STOP, cu costul unui consum mai mare de putere în această stare, PSTS trebuie setat. PSTS este șters de resetul hard.
Bitul de validare a PLL (PEN)
Acest bit validează operarea PLL. Când acest bit este setat, PLL e validată și genneratorul de tact intern va fi luat de la ieșirea oscilatorului comandat în tensiune. Când acest bit este șters, PLL este dezactivată și generatorul intern de tact este luat direct de la o sursă de tact conectată la pinul EXTAL. Când PLL este dezactivată, oscilatorul comandat în tensiune nu va opera în scopul unei minimizări a consumului de putere. Pinul PLOCK este asociat când PEN este șters. Bitul PEN poate fi setat soft dar nu poate fi resetat prin soft. În timpul resetului hard acești biți recepționeavză valorile pinilor lui PINIT. Singurul mod de a șterge PEN este de a ține pinul PINIT în zero logic în timpul resetului hard. Există o relație între biții PSTP șI PEN, unde PEN ajustează controlul PSTP al operațiilor PLL.
Biții de validaree a ieșirii generatorului de tact (COD0-COD1)
Acești biți controlează bufferul de ieșire al generatorului de tact la pinul CKOUT. Când ambii biți COD0 și COD1 sunt setați, ieșirea pinului CKOUT este menținută pe 1. Dacă pinul CKOUT nu este conectat la nici un circuit exterior este recomandabil ca acești biți să fie setați pentru a minimiza zgomotul de interferență de radiofrecvență și puterea disipată. Dacă ieșirea CKOUT este joasă în momentul setării biților COD0- COD1, se va termina ciclul jos și apoi se va invalida ieșirea pentru unu logic. Dacă programatorul validează ieșirea CKOUT înaintea ajungerii nivelului logic 1 în timpul procesului de dezactivare, operația va fi neafectată. Acești biți sunt șterși de resetul hard.
Bitul generator de tact al cip-ului (CSRC)
Acest bit specifică dacă generatorul de tact al cip-ului este luat de la ieșirea oscilatorului comandat în tensiune sau este luat de la ieșirea LPD. Când CSRC este setat, generatorul de tact al cip-ului este luat de la oscilatorul comandat în tensiune, iar când CSRC este șters generatorul de tact este luat de la ieșirea LPD. CSRC este șters de resetul hard.
Bitul generator de tact extern (CKOS)
Acest bit specifică dacă ieșirea generatorului de tact CKOUT este luată de la ieșirea oscilatorului comandat în tensiune sau este luată de la ieșirea LPD. Când CKOS este setat, ieșirea CKOUT este luată de la oscilatorul comandat în tensiune, iar când CKOS este șters, generatorul de tact de la ieșirea CKOUT este luat de LPD. Dacă PLL este dezactivată (PEN=0) CKOUT este luat de la EXTAL. CKOS este șters de resetul hard.
Emulatorul intern (OnCE)
Emulatorul intern al cip-ului (OnCE) reprezintă un instrument sofisticat de depanare a magistralei ce permite accesul simplu și rapid la registrele și perifericele procesorului. OnCE spune utilizatorului exact care este starea registrului, locații de memorie, magistrale și chiar a ultimelor cinci instrucțiuni ce au fost executate. Componentele emulatorului intern OnCE sunt :
PDB PIL GDB
Informație Bloc de însumare
PIPELINE și urmărire logic
Controler și
interfața
XAB serială OnCE
YAB
PAB
PAB Registre și compara-
FIFO toare de întrerupere
Organizarea memoriei și modurile de operaree
Memoria lui DSP56002 poate fi utilizată pentru a realiza operarea paralelă de înaltă viteză și expansiunea ulterioară a memoriei externe. Memoriile de program șI de date sunt separate, iar memoria de date este și ea divizată în două spații de memorie separate: X și Y. Amândouă memoriile de date și program pot fi extinse în afara cip-ului. Există de asemenea două memorii de date interne ROM ce pot ocupa o porțiune a memoriei de date X și Y, și o memorie bootstrap ROM ce poate ocupa o porțiune din RAM. Memoria de date este divizată în două spații independente ce lucrează cu două unități ALU de adresare ce furnizează doi operanzi simultan unității ALU de date.
Modurile de operare ale DSP-ului determină harta memoriei de program și de date și începerea procedurii când DSP părăsește starea de reset.
Memoria de date și de program a lui DSP56002
DSP56002 are 512 cuvinte de program RAM, 64 cuvinte bootstrap ROM, 256 cuvinte RAM și 256 cuvinte ROM pentru fiecare din memoriile de date X și Y interne.
Memoria de program
DSP56002 are omemorie RAM de program de 512 cuvinte și un ROM programabil de 64 de cuvinte. ROM-ul boostrap este programat să realizeze operațiile bootstrap din portul A, interfața gazdă (HI) sau SCI. Activitatea memoriei ROM bootstrap este controlată de biții MA, MB și MC din registrul OMR.
Adresele sunt recepționate de logica controlului de program (de obicei de PC) din magistrala PB. Memoria de program poate fi scrisă utilizând instrucțiunile memoriei de program. Memoria de program poate fi extinsă la 64K extern.
Memoria de date X
Memoria de date X internă RAM este o memorie de 24 de biți, memorie statică internă ocupând primele 256 locații (0-255) din spațiul de memorie X. ROM-ul intern de date X ocupă locațiile 256-511 în spațiul memoriei de date și este controlat de bitul DE din OMR. Registrele periferice interne ocupă ultimele 64 de locații din memoria de date X (FFC0 – FFFF). Adresele de16 biți sunt recepționate de pe magistrala XAB și datele pe 24 de biți sunt transferate unității ALU de date găsindu-se pe magistrala XDB. Memoria X poate fi extinsă la 64K extern.
Memoria de date Y
Memoria de date Y internă RAM este o memorie de 24 de biți statică ocupând primele 256 de locații din memoriaY (0 – 255). ROM-ul intern de date Y ocupă locațiile 256 – 511 în spațiu memoriei de date Y și este controlat de biții DE și YD din registrul OMR. Adresele pe 16 biți sunt recepționate pe magistralele YAB, iar datele pe 24 de biți sunt transferate în unitatea aritmetivcă și logică de date găsindu-se pe magistrala YDB. Memoria poate fi extinsă extern la 64K.
Registrul mod de operare OMR
Procesorul testează pinii MODA, MODB și MODC cât timp părăsește resetul, stabilește modul inițial de operare și scrie informația modului de operare în registrul OMR. Când procesorul părăsește statrea de reset, pinii MODA și MODB devin pini cu scop general de întrerupere, și bitul MODC devine pin de întrerupere mascabilă .
Registrul OMR este un registru pe 24 de biți ( doar 6 biți sunt definiți) ce controlează modul curent de operare al procesorului și este localizat în unitatea PCU. Biții OMR sun afectați doar de resetul procesorului și de instrucțiunile: ANDI, ORI, MOVEC, BSET, BCLR și BCHG, ce se referă direct la registrul OMR.
Biții mod de
operare (biții 0,1) Biții mod de operare, MA și MB, înpreună cu MC definesc harta memoriei de program și modul de operare al DSP56002. În timpul resetului procesorului, MB și MA sunt încărcați de linii de selecție externă a modului de operare, MODB și MODA, respectiv după ce DSP-ul părăsește starea de reset, MB și MA pot fi schimbați sub control soft.
Bit de validare de
date ROM ( bit 2 )Bitul DE validează două ROM-uri de date intern de 256×24 biți localizate între adresele $0100-$01FF din spațiul memoriei de date X și Y.Când DE este șters spațiul de adresare $0100-$01FF face parte din spațiul de memorie de date externă X și Y șI ROM-ul intern este dezactivat. Bitul DE este șters de resetul hard.
Bit de dezactivare
a memoriei de
date Y internă
( bit 3 ) Când bitul de dezactivare a memoriei de date Y internă ( YD ) este setat toate adresele memoriei de date Y sunt considerate a fi externe, dezactivând accesul intern la memoria de date Y. Când bitul este șters, memoria de date Y poate fi accesată în concordanță cu bitul DE. Conținutul memoriei de date Y nu este afectat debitul YD. Bitul YD este șters în timpul resetului hard.
Bitul mod de
operare al cip-ului
( bit 4 ) Bitul mod de operare al cip-ului ( MC ) împrenuă cu biții MA și MB definesc harta memoriei de program și modul de operare al acestuia.
Bit rezervat
( bit 5) Acest bit este rezervat pentru extinderi ulterioare.
Bit de oprire
întârziere (bit 6) Bitul de oprire al întârzieri (SD) determină lungimea întârzierii stabilizării generatorului de tact, ce apare când procesorul părăsește starea de oprire de procesare. Dacă SD este în starea zero logic când cipul părăsește starea de stop, 64k cicluti de tact întârziere, este selectată înaintea continării ciclului instrucțiunii de stop. Dacă bitul DS este în starea de unu logic, întârzierea înaintea continuării ciclului instrucțiunii este suficien de lungă pentru a permite o perioadă de stabilizare a generatorului de tact și începerea oscilării oscilatorului intern. Când este utilizat un generator de tact, o întârziere scurtă permite o pornire rapidă a DSP-ului.
Modurile de operare ale lui DSP56002
Utilizatorul poate seta modul de operare al cip-ului prin modalități hard, punând pinii MODC, MODB și MODA pe unu logic și asociind corespunzător pinul RESET. După ce DSP părăsește resetul el testează pinii de mod și scrie în OMR pentru a seta modul inițial de operare. Modurile de operare de operare ale cip-ului pot fi de asemenea schimbte prin soft, scriind biții modului de operare (MC, MB și MA) în OMR. Schimbarea modului de operare nu resetează DSP-ul.
Modul 0
În acest mod, cu un singur cip sunt realizate toate memoriile RAM intern de date și program. Un reset hard conduce la saltul DSP-ului la locația de memorie internă de program $0000 și preluarea execuțiilor. Hărțiile de memorie pentru modul 0 și 2 sunt identice. Diferența între cele două moduri este că vectorul reset se află în memoria de program la locația $0000 în modul 0 și la locația $E000 în modul 2.
Modul 1
Modul boostrap permitee DSP-ului să încarce programului dintr-un ROM in memoria internă de program în timpului resetului cauzat de alimentarea cipului. La activarea cipului generatorului de stare de activare se impun 15 stări de așteptare la toate accesările memoriei extene astfel încât să se poată utiliza și memorii lente. Programul bootrstrap utilizează cuvintele din trei biți de memorii consecutive din ROM-ul extern pentru a construi un singur cuvânt în memoria internă de program. În modul bootstroap, cip-ul validează ROM-ul bootstrap și execută programul bootstrap.
Modul 2
În acest mod, RAM-ul intrare de program este validat și vectorul de reset hard indică locația $E000.
Modul 3
În acest mod, RAM-ul intern de programare este dezactivat și vectorul reset hard indică locația $000. Toate referirile la spațiu de memorie de program sunt legate de memoria de program externă.
Modul 4
Este rezervat pentru definiri viitoare.
Modul 5
În acest mod, ROM-ul bootstrap este validat și execută programul bootdtrap. Particularitatea acestui mod este aceea că programul este încărcat în memoria de program internă.
Modul 6
În acest mod, ROM-ul bootstrap este realizat și se execută programul bootstrap. RAM-ul de program intern și/sau extern este încărcat de interfața serială SCI. Numărul de cuvinte program de încărcat și adresele de start trebuie specificate. Codul bootstrap SCI așteaptă să recepționeze trei octeți specificând numărul de cuvinte program, trei octeți specifică adresa de unde se începe încărcarea cuvintelor și apoi trei octeți pentru fiecare din cuvântul program ce e încărcat. Numărul de cuvinte adresa de start și cuvîntul program sunt recepționate astfel: cel mai puțin semnificativ octet, urmat de octetul de mijloc și apoi de octetul cel mai semnificativ. După recepționarea cuvintelor program, execuția programului începe de la adresade unde primul cuvânt a fost recepționat. SCI e programată să lucreze asincron cu 8 biți de date. Sursa de tact externă și frecvența de tact trebuie să aibe 16 X16 bande de rate. După fiecare octet recepționat este repetat prin transmițătorul SCI.
Modul 7 Acest mod este rezervat pentru definiri ulterioare. Dacă este selectat de către DSP se comportă ca și modul 6.
Cap. 3 CONVERTORUL CS4215
Prezentarea convertorului CS4215
Convertorul analog-numeric și numeric-analogic, CS4215, numit și codec, este produs de firma Crystal Semiconductors Corporațion, și are următoarele caracteristici:
-frecvența de eșantionare de la 4KHz la 50KHz,
-codare pe 16 sau pe 8 biți liniar sau după legea sau A,
-programarea câștigului pentru intrarea analogică,
-oscilator intern
-tensiune de alimentare +5V,
-intrare analogică penrtru microfon, ȘI/SAU linie,
-ieșire pentru cască, difuzor și ieșire de linie,
-filtru antialias,
-interfață digitală serilă,
Circuitul CS4215 este format de fapt dintr-un convertor analog numeric și dintr-un convertor numeric analogic stereo realizate în tehnologie CMOS și poate fi folosit cu succes pentru prelucrarea srmnalelor audio la calitate de compact disc. Convertoarele sunt de tipul delta sigma și posedă un filtru antialias ce se adaptează la frecvența de eșantionare selectată. Faptul că are nevoie doar de alimentare la +5V face ca circuitul CS4215 să fie ideal pentru utilizarea în stații de lucru și PC-uri.
Descriere funcționară
Circuitul CS4215 are două canale de 16 biți pentru conversia analog numerică și două canale pentru conversia numeric analogică. Amândouă tipurile de convertoare sunt de tipul delta sigma. Intrarea convertoarelor analog numerice și ieșirea convertoarelor numeric analogice pot fi ajustate. Circuitul include intrare separată pentru microfon, cu câștig programabil în gama 20 dB, de asemenea opțional codare SAU/ȘI decodare după legea sau A (pe 18 biți). De asemenea mai sunt disponibile pinii pentru două cristale pentru a putea seta diferite frecvențe de eșantionare.
Controlul funcțiilor existemte în convertor și transmisia datelor se face prin comunicație serială. Există pini separați pentru datele de intrare și cele de ieșire astfel încât datele se înscriu și se citesc în acest timp. Datele de programare se înscriu și se citesc în continuu. Există posibilitatea conectării mai multor circuite CS4215 la aceeași linie de date.
Formatul datelor
Fiecare cuvânt conține 8 biți. MSB este transmis și recepționat primul . Pinul SDOUT pentru transmiterea datelor trece în starea de impedanță ridicată dacă convertorul nu are nimic de transmis. Formatul datelor acceptate de convertor este:
-16 biți în codul în codul complementului cu doi liniar.
-8 biți fără semn, liniar.
-8 biți după legea A.
-8 biți după legea .
În cazul în care avem transmisii de date pe 8 biți atunci numărul 128 (80 hexa) este considerat analog zero. Se transmit 8 pachete a câte 8 biți . Primele două cuvinte transmise de convertor reprezintă rezultatul codării semnalului primit la canalul stâng. Următoarele două cuvinte reprezintă rezultatul codării semnalului primit la canalul drept. Aceasta doar în modul de lucru stereo. În modul de lucru mono este folosit canalul stâng. Putem avea codare pe 16 biți sau pe 8 biți:
-stereo 16 biți canal stâng 16 biți canal drept
-mono 16 biți canal stâng
-stereo 8biți canal stâng 8 biți canal drept
-mono 8 biți canal stâng
În cazul în caare convertorul nu se folosește o anumită perioadă de timp se poate aduce în modul de lucru cu consum redus (Power Down Mode), rin aducerea pinului PDN în starea high. La revenirea în modul de lucru normal trebuie să se execute o calibrare a offsetului după o întârziere de 50 de ms pentru stabilizarea tensiunii intense de referință.
Calibrarea
Erorile de offset de intrare și ieșire sunt minimizate de un ciclu de calibrare intern. Cel puțin un ciclu de calibrare trebuie invocat după alimentarea ciruitului. Un ciclu de calibrare va fi inițializat imediat după părăsirea stării de reset. De asemenea un ciclu de calibrare va fi inițializat după trecerea din modul de lucru în modul de lucru data. Cînd CS4215 este alimentat, sau iese din modul de lucru cu consum redus, trebuie să execute o calibrare a offsetului după o întârziere de 50 ms pentru stabilizarea tensiunii interne de referință. Acest lucru este obținut prin menținerea pe zero logic a resetului sau stând în modul de lucru control pentru 50 ms de la pornirea alimentării sau ieșirea din modul de lucru cu consum redus.
Offsetul va fi calibrat pentru fiecare canal de intrare selectat. Astfel bitul IS va rămâne constant cât timp codecul este calibrat, pe când ceilalți biți de intrare ai codecului sunt ignorați.
Calibrarea va dura 194 de ciclii FSYNC și biții de date SDOUT vor fi pe zero logic pe acastă perioadă. Bitul de validare A/D, ADI va fi pe unu logic pe durata calibrării și va trece pe zero logic când calibrarea este sfârșită.
Generarea semnalului de tact
Generarea semnalului de tact se poate face folosind oscilatorul intern sau utilizând o sursă externă. În amândouă modurile semnalele SCLK și FSYNC trebuie să fie sincrone cu semnalul de tact selectat. Dacă generatorul de semnal de tact se oprește, filtru digital va trece în starea de consum redus după 5s pentru a prevenii supraâncălzirea. Dacă semnalul FSYNC se oprește filtrul digital va trece de asemenea în starea de consum redus după aproximativ o perioadă FSYNC. Cipul în întregime nu va intra în stare de putere redusă.
Două cristale externe pot fi atașate la pinii: XTL1IN, XTL1OUT,
XTL2IN, XTL2OUT. Utilizarea unui cristal extern cere în plus capacitoare de 40 pF legate la masă. Dacă XTAL1 sau XTAL2 nu sunt selectate ca și generatoare de tact principale, acel cristal particular va fi trcut în modul de lucru cu consum redus, pentru a minimiza interferențele. Dacă un cristal nu este necesar, pinii de intrare respectivi, XTALIN vor fi conectați la masă.
FSYNC și SCLK trebuie să fie sincronizați cu tactul principal. Când se utilizează codecul în modul de lucru sclav cu doar unul din cristale ca tact principal controlerul trebuie să ducă semnalele FSYNC și SCLK din cristale prin CLKOUT. De notat că CLKOUT se va opri în zero logic după două perioade după ce D/C va trece pe zero logic.
Ieșirea pentru difuzor
Ieșirea pentru difuzor, pinii MOUT1, MOUT2, poate fi conectată la un difuzor cu impedanță mai mare decât 32 . Semnalul de ieșire este o sumă a semnalelor disponibile la canalul drept și canalul stâng. Ieșirea poate fi dezactivată independent. Cu bitul OLB pe valoarea unu logic această ieșire are același nivel.
Interfața serială
Interfața serială transferă date digitale și audio spre și dinspre cip. Mai multe cipuri pot fi conectate la aceeași linie. Semnalul de tact al interfeței seriale, SCLK, este utilizat pentru transmiterea și recepționarea datelor. SCLK poate fi generat de unul din circuitele CS4215, sau poate fi adus de la o sursă externă. Când SCLK este generat de o sursă externă, el trebuie să fie sincron cu semnalul de tact principal. Datele sunt transmise pe frontul crescător al SCLK. Frecvența SCLK este întotdeauna egală cu rata de transfer a biților.
Semnalul de sincronizare de cuvinte, FSYNC, este utilizat pentru a indica începutul unui pachet de date. El poate de asemenea fi obținut de la unul din CS4215 sau generat de la un controler extern.
Dacă FSYNC este generat extern, el trebuie să fie pe unu logic pentru cel puțin o perioadă SCLK și trebuie să cadă până-n durata a cel puțin două perioade SCLK, înainte de a începe un nou pachet. FSYNC trebuie de asemenea să fie sincron cu generatorul de tact principal. Fiecare CS4215 are nevoie pentru a transfera datele de 64 SCLK perioade.
Frecvența lui SCLK poate fi selectată pe 64, 128 sau 256 de biți pe cuvânt corespunzând la 1, 2 sau 4 codecuri conectate la aceeași magistrală.
Modul de lucru control
Acest mod este utilizat pentru setarea convertorului prin încărcarea registrului intern de control. Se ajunge în acest mod prin setarea pinului D/C la zero logic. Dacă D/C este la zero logic la pornirea alimentării, el va intra în acest mod imediat. Pinii SCLK și FSYNC de la o sursă externă. Dacă convertorul esrte în modul de lucru stăpân și D/C este pe zero logic, atunci SCLK și FSYNC vor continua să meargă pentru minimum patru magistrale și maximum 12 cicluri SCLK, dacă bitul IFS este pe zero logic. Dacă bitul IFS este pe unu logic, SCLK și FSYNC vor trece pe înaltă impedanță imediat ce D/C trece pe zero logic.
Dacă D/C este adus pe zero logic când codecul este programat ca stăpân cu bitul ITS pe zero logic, codecul va aștepta și va elimina FSYNC și SCLK în mai puțin de 100 de s.
Valorile înscrise în registrul control pentru controlul porturilor seriale sunt ignorate în modul de lucru control.
Formatul datelor în modul de lucru control se realizează cu ajutorul registrelor de control a circuitului. Biții rezervați trebuie scriși ca să poată fi citiți ca zero sau ca unu. Când datele de comparare sunt recitite, biții rezervați trebuie să fie mascați.
Modul de lucru data
Aceast mod de lucru este folosit pentru transferul de date către convertor, urmând să fie convertite în semnal analogic și transferul datelor de la convertor către procesor după ce a fost cuantizat semnalul analogic de intrare. Rata de transfer a pachetelor de date este egală cu valoarea conversiei frecvenței setată de biții DFR2-DFR0 ai registrului ce controlează formatul datelor. Fiecare pachet are 64, 128 sau 256 biți depinzând de biții BSEL1-0 din registrul de control serial. Se poate controla de asemenea: câștigul, atenuarea intrărilor și ieșirilor.
Conectarea convertorului la placa DSP
Convertorul CS4215 este conectat la interfața serială sincronă (SSI) a procesorului DSP56002. Ca instrucțiune pentru semnal sunt folosite intrările pentru microfon MINL și MINR, instrucțiuni de linie și LINL și LINR fiind conectate la masă. Ca ieșire sunt folosite doar ieșirile de linie și cască, ieșirile pentru difuzor fiind fiind convertibile.
Pentru generarea frecvenței de eșantionare se folosește doar un cristal de 24, 56 de Hz. Cuplarea semnalului de intrare se face cu ajutorul unor amplificatoare de curent alternativ pentru eliminarea erorii de offset.
Ca dezavantaj se poate aminti faptul că nu se pot prelua semnale continue de ieșire în cazul în care se folosesc ca ieșiri pinii de linie deoarece până să ajungă la ieșirea de pe placă semnalul trece prin filtre trece sus și trece jos rezultând un filtru trece bandă.
Cap. 4 Prezentarea programelor
Schema de bază a acestui proiect este formată dintr-un calculator, un procesor numeric de semnal DSP56002, care în cazul nostru generează cu ajutorul unui program eșantioanele (în număr de 1024) unui semnal sinusoidal. Tot în cadrul schemei mai sunt prezente și un convertor numeric analogic precum și un convertor analog numeric ce urmează a fi testat. Convertorul numeric analogic din schemă face parte dintr-un circuit CS4215 (format din două convertoare unul numeric analogic și unul analog numeric). Semnalul sinusoidal de la ieșirea procesorului DSP este adus la intrarea convertorului numeric . Semnalul analogic de la ieșirea convertorului numeric analogic este adus la intrarea convertorului analog numeric de testat, iar semnalul numeric de la ieșirea convertorului analog numeric este aplicat la portul B al procesorului DSP, care achiziționează aceste semnale numerice și le aplică transformata Fourier rapidă.
Programul de generare a eșantioanelor unui semnal sinusoidal apelează și alte programe pentru a realiza acest lucru. Programele apelate de acesta sunt: 'sinus', 'ada_init.asm' și 'txrx_ssi.asm'.
La începutul programului sunt definite adresa de la care începe programul "START" și "points" respectiv "coef" constante care sunt necesare pentru a putea apela tabela de valori de sinus. În continuare se inițializează recepția de date a interfeței seriale (SSI) și apoi transmiterea de date a acestei interfețe. Urmează apoi programarea buclei PLL, care este definită și apelată din cadrul programului "ada _init.asm".
Recepția și transmiterea semnalelor de date se realizează de către DSP se realizează cu ajutorul buclei DO în care se apelează programul "txrx_ssi.asm" care realizează acest lucru.
În cadrul buclei DO se așteaptă semnalul de sincronizare a interfeței seriale sincrone. Semnalul sinusoidal se găsește la ieșirea pentru difuzor LOUTL.
Programul de achiziție a semnalului numeric provenit de la convertorul analog numeric de testat apelează și acesta alte programe. Aceste programe apelate sunt "ada_init.asm", "txrx_ ssi.asm" și datorită faptului că acest program realizează și transformata Fourier rapidă sunt apelate și programele "sincos", "sinus" și "fftr2cn".
Constantele care sunt utilizate în acest program sunt: points, coef, sintab, utilizate pentru apelarea tabelei de sinus. Alte constante utilizate sunt data și odata care reprezintă date de intrare și respectiv de ieșire.
Achiziția valorilor eșantioanelor obținute la ieșirea convertorului analog numeric testat se face în portul B. Portul B conține 15 pini I/O pentru scopuri generale, fiecare putând fi configurat ca intrare sau ieșire, sau poate fi configurat ca interfață gazde (host interface). Procesorul este format din trei registre descrise în rândurile următoare:
Registrul de control al portului B (PBC), care selectează portul B ca port I/O sau ca interfață host. Biții BC0 și BC1 sunt selectați pe zero pentru funcționarea portului B ca I/O.
Registrul direcție a datelor a portului B (PBDDR) cu care se programează individual biții portului ca ieșire sau ca intrare. Am folosit biții PB0-PB11 ca intrări iar bitul al 13-lea este folosit ca ieșire pentru codul de start al conversiei analog numerice.
Registrul de date al portului B notat PBD în care sunt scrise datele de la intrare precum și datele de ieșire înainte de a fi transmise.
În continuare sunt definite tabelele de sinus ce vor fi apelate precum și transformata Fourier rapidă, inițializarea recepției și transmisiei interfeței seriale sincrone (SSI), programarea buclei PLL, programarea portului B programând registrele PBC, PBDDR și PBD, inițializarea registrelor R1, R2 și R3 ce vor fi utilizate în cadrul buclei DO, bucla DO care face de fapt achiziția și apelarea programului de recepție și transmitere de date "txrx_ ssi.asm" și apelarea programului care aplică transformata Fourier rapidă semnalelor achiziționate "fftr2cn".
Generarea semnalului sinusoidal
START EQU $40 ;subrutina pentru sinus
points equ 256
coef equ 1024 ;400h
include 'sinus'
sinus points,coef
org p:$0
jmp START
org p:$000c
jsr ssi_rx_isr ;ssi receptie de date
jsr ssi_rx_isr ;ssi receptie de date cu exceptie
jsr ssi_tx_isr ;ssi transmitere de date
jsr ssi_tx_isr ;ssi transmitere de date cu exceptie
org p:START
movep #$261009,x:PLL ;acesta este definit in programul
movep #0000,x:BCR ;'ada_init.asm'
ori #3,mr ;masca de intrerupere
movec #0,sp
move #0,omr
move #$40,r7
move #-1,m7
include 'ada_init.asm'
TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN ;+(4*LEFT_ATTN)+(4*RIGHT_ATTN)
TONE_INPUT EQU MIC_IN_SELECT+(15*MONITOR_ATTN)
loop_p
move #coef,r1
do #points,loop_1
jset #2,x:SSISR,* ;asteapta sincronizarea pentru a trece
jclr #2,x:SSISR,* ;asteapta sincronizarea
move x:RX_BUFF_BASE,a ;receptie stinga
move x:RX_BUFF_BASE+1,b ;receptie dreapta
move x:(r1)+,a
move a,x:TX_BUFF_BASE ;transmite stinga
move b,x:TX_BUFF_BASE+1 ;transmite dreapta
move #TONE_OUTPUT,y0
move y0,x:TX_BUFF_BASE+2
move #TONE_INPUT,y0
move y0,x:TX_BUFF_BASE+3
loop_1
jmp loop_p
include 'txrx_ssi.asm'
end
Achiziția și realizarea FFT-ului
points equ 1024
coef equ 1024 ;400h
data equ 2048 ;800h ;definirea constantelor ce vor fi
odata equ 3072 ;c00h ;utilizate
sintab equ 4096 ;1000h
data_in equ $0012 ;de aici incepe tabela cu esantioane
PBDDR equ $ffe2
PBD equ $ffe4
START equ $0100
include 'sincos' ;definirea tabelelor de sinus
include 'sinus' ;ce vor fi apelate in program
include 'fftr2cn' ;este inclus in program si programul de
;transformata Fourier
sincos points,coef ;apelarea tabelelor de sinus
sinus sintab,coef
org p:$0
jmp START
org p:$000c
jsr ssi_rx_isr ;ssi receptie de date
jsr ssi_rx_isr ;ssi receptie de date cu exceptie
jsr ssi_tx_isr ;ssi transmite date
jsi ssi_tx_isr ;ssi transmite date cu o exceptie
org P:START
;incepe program ul bucla PLL
movep #$261009,x:PLL ;aceasta este definita in programul
;ada_init.asm
movep #0000,x:BCR
ori #3,mr ;masca de intrerupere
movec #0,sp ;curata hard pointerul
move #0,omr ;operatie mod 0
move #$40,r7 ;initializeaza pointerul
move #-1,m7 ;adresare liniara
;incepe programarea portului B
move #data_in,r1 ;adresa definita pentru data_in este incarcata in r1
move #$0000,a ;acumulatorul este incarcat cu valoartea 0000
move a,x:PBC ;valoarea acumulatorului este incarcata la
;adresa lui PBC
move #$1000,a ;acumulatorul este incarcat cu valoarea 1000
move a,x:PBDDR ;valoarea acumulatorului este incarcata la
;adresa lui PBDDR
include 'ada_init.asm' ;apelarea programului ada_init.asm
TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN;+(4*LEFT_ATTN)+(4*RIGHT_ATTN)
TONE_INPUT EQU MIC_INSELECT+(15*MONITOR_ATTN)
;in liniile de mai sus sunt selectate iesirile si intrarile difuzoarelor si
;respectiv microfonului
loop_p
move #data,r1 ;definim r1 ca data
move #odata,r2 ;definim r2 ca odata
move #sintab,r3 ;definim r3 drept coeficient pentru
;tabelul de sinus
do #points,loop1 ;inceputul buclei DO
jset #2,x:ssisr,* ;asteapta semnalul de sincronizare pentru a trece
jclr #2,x:ssisr,* ;asteapta semnalul de sincronizare
move x:Rx_BUFF_BASE,a ;receptie stanga
move x:Rx_BUFF_BASE+1,b ;receptie dreapta
move a,x:PBD ;incarcarea acumulatorului in memoria
;X la adresa lui PBD
nop ;neoperare
nop ;neorerare
clr a ;reimprospateaza ecranul
move a,x:PBD ;incarca acumulatorul in memoria X la
;adresa lui PBD
jclr #$e,x:PBD,* ;bucla de asteptare pina cind bitul 14
;al PBD este 0
nop
move x:PBD,a ;incarca valoarea de la adresa data de
;PBD din memoria X in acumulator
move #$000fff,x0 ;incarca valoarea 000fff in x0
and x0,a ;se realizeaza un si logic intre a s x0
move a,x:(r1)+ ;incarca a la adresa data de r1 si incrementeaza
nop
move x:(r3)+,a
move x:(r2)+,b
move a,x:Tx_BUFF_BASE ;transmite stanga
move b,x:Tx_BUFF_BASE+1 ;transmite dreapta
move #TONE_OUTPUT,y0
move y0,x_BUFF_BASE+2
move TONE_INPUT,y0
move y0,x:Tx_BUFF_BASE+3
loop1 ;sfarsitul buclei loop1
fftr2cn points,data,odata ;apelarea programului fftr2cn
jmp loop_p
include 'txrx_ssi.asm' ;este inclus programul txrx_ssi.asm
end ;sfirsitul programului
Generator de sin-cos pentru FFT
sinus macro points,coef
;sinus ident1,2
; sincos- macro care genereaza tabelul de coeficienti sinus si cosinus.
; points- numar de puncte (2-32768,putere a lui 2).
; coef- adresa de baza pentru tabelul de sinus si cosinus,
; valorile negative ale cosinusului in memoria X,
; valorile negative ale sinusului in memoriaY.
pi equ 3.141592654
freq equ 2.0*pi/@cvf(points)
org x:coef
count set 0
dup points
dc -@sin(@cvf(count)*freq)
count set count+1
endm
; org y:coef
;count set 0
; dup points
; dc -@sin(@cvf(count)*freq)
;count set count+1
; endm
endm ;sfirsitul programului de generare a tabelului sincos
; ADA_INIT.ASM
; Configurația portului C:
; bit8: SSI TX (de la DSP ls Codec)
; bit7: SSI RX (de la Codec la DSP)
; bit6: SSI tact
; bit5: SSI semnal de sincronizare
; bit4: resetarea codecului (de la DSP la Codec)
; bit3: rezervat
; bit2: bit pentru data/control
; 0=control
; 1=data
NO_PREAMP equ $100000 ;0 == validează 20 dB pre-amp
LO_OUT_DRV equ $080000 ;0 == 2.8 Vp-p line (1V rms)
;0 == 4.0 Vp-p căști
;1 == linie și căști 2.0Vp-p
HI_PASS_FILT equ $008000 ;0 == HPF este dezactivat
SAMP_RATE_9 equ $003800 ; 9.6 kHz frecvență de eșantionare
SAMP_RATE_48 equ $003000 ;48 kHz frecvență de eșantionare
SAMP_RATE_32 equ $001800 ;32 frecvență de eșantionare
SAMP_RATE_27 equ $001000 ;27.4 kHz frecvență de eșantionare
SAMP_RATE_16 equ $000800 ;16 kHz frecvență de eșantionare
SAMP_RATE_8 equ $000000 ; 8 kHz frecvență de eșantionare
STEREO equ $000400 ;1 == stereo, 0 == mono
DATA_8LIN equ $200300 ; 8-bit unidirecțional
DATA_8A equ $200200 ; 8-bit legea A
DATA_8U equ $200100 ; legea u
DATA_16 equ $200000 ;16-bit 2s complement linear
IMMED_3STATE equ $800000 ;1=SCLK & FS 3-stare imediată
XTAL2_SELECT equ $200000 ;acesta este singurul semnal de tact
BITS_64 equ $000000 ; 64 biți pe perioadă
BITS_128 equ $040000 ;128 bițipe perioadă
BITS_256 equ $080000 ;256 bitți pe perioadă
CODEC_MASTER equ $020000 ;1 == codecul generează SCLK & FS
;0 == codecul recepționează SCLK & FS
CODEC_TX_OFF equ $010000 ;0 == activează TX de la codec la DSP
;1 == dezactiveazăieșirea codecului (Hi-Z)
HEADPHONE_EN equ $800000 ;1 == activează ieșirea căștilor,0 =mutat
LINEOUT_EN equ $400000 ;1 == validează ieșirea de linie, 0 == mutat
LEFT_ATTN equ $010000 ;63 pași * 1.5 dB = -94.5 dB
SPEAKER_EN equ $004000 ;1 == transmite ieșirea validată, 0 == mutat
RIGHT_ATTN equ $000100 ;63 pași * 1.5 dB = -94.5 dB
MIC_IN_SELECT equ $100000 ;1 == ieșirile de linie ae microfon
LEFT_GAIN equ $010000 ;15 pași * 1.5 dB = 22.5 dB
MONITOR_ATTN equ $001000 ;15 pași * 6.0 dB = 90.0 dB (mute)
RIGHT_GAIN equ $000100 ;15 pași * 1.5 dB = 22.5 dB
CTRL_WD_12 equ NO_PREAMP+HI_PASS_FILT+SAMP_RATE_48+STEREO+DATA_16 ;CLB=0
CTRL_WD_34 equ IMMED_3STATE+XTAL2_SELECT+BITS_64+CODEC_MASTER
CTRL_WD_56 equ $000000
CTRL_WD_78 equ $000000
OUTPUT_SET equ HEADPHONE_EN+LINEOUT_EN+(LEFT_ATTN*4)
INPUT_SET equ MIC_IN_SELECT+(15*MONITOR_ATTN)+(RIGHT_ATTN*4)
; adresele pentru periferice a cipului DSP56002
IPR equ $FFFF ;registru de prioritate a intreruperii
BCR equ $FFFE ;registru de comandă a magistralei
PLL equ $FFFD ;registru de control al PLL
SSIDR equ $FFEF ;registru de date al SSI
SSISR equ $FFEE ;registru de stare al SSI
CRB equ $FFED ;registrul B de control SSI
CRA equ $FFEC ;registrul A de control SSI
PCD equ $FFE5 ;registrul de date al portului C
PCDDR equ $FFE3 ;registru direcție de date al portului C
PCC equ $FFE1 ;registrul de control al portului C
PBC equ $FFE0 ;registrul de control al portului B
org x:0
RX_BUFF_BASE equ *
RX_data_1_2 ds 1 ; slotul dată de timp 1/2 pentru RX ISR
RX_data_3_4 ds 1 ; slotul dată de timp 3/4 pentru RX ISR
RX_data_5_6 ds 1 ; slotul dată de timp 5/6 pentru RX ISR
RX_data_7_8 ds 1 ; slotul dată de timp 7/8 pentru RX ISR
TX_BUFF_BASE equ *
TX_data_1_2 ds 1 ; slotul dată de timp 1/2 pentru TX ISR
TX_data_3_4 ds 1 ; slotul dată de timp 3/4 pentru TX ISR
TX_data_5_6 ds 1 ;slotul dată de timp 5/6 pentru TX ISR
TX_data_7_8 ds 1 ; slotul dată de timp 7/8 pentru TX ISR
RX_PTR ds 1 ; pointer pentru bufferul rx
TX_PTR ds 1 ; Pointer pentru bufferul tx
; inițializarea codecului CS4215
org p:
codec_init
move #RX_BUFF_BASE,x0
move x0,x:RX_PTR ; inițializarea pointerului rx
move #TX_BUFF_BASE,x0
move x0,x:TX_PTR ; inițializarea pointerului tx
; inițializrază SSI
movep #$0000,x:PCC ; inchide portul SSI
movep #$4303,x:CRA ; 40MHz/16 = 2.5MHz SCLK, WL=16 bits, 4W/F
movep #$FB30,x:CRB ; RIE,TIE,RE,TE, NTWK, SYN, FSR/RSR->bit
movep #$14,x:PCDDR ; setează pc2 și pc4 ca ieșiri
movep #$0,x:PCD ; D/C~ și RESET~ = 0 ==> în modul control
;–-reset întârziat pentru codec –-
do #500,_delay_loop
rep #2000 ; 100 intârzieri
nop
_delay_loop
bset #4,x:PCD ; RESET~ = 1
movep #$3000,x:IPR ; setează nivelul de priorități de întreruperel
movep #$01E8,x:PCC ; activează portul SSI
;– setează bufferul TX cu controlul de date
move #CTRL_WD_12,x0
move x0,x:TX_BUFF_BASE
move #CTRL_WD_34,x0
move x0,x:TX_BUFF_BASE+1
move #CTRL_WD_56,x0
move x0,x:TX_BUFF_BASE+2
move #CTRL_WD_78,x0
move x0,x:TX_BUFF_BASE+3
andi #$FC,mr ; activarea întreruperii
; CLB == 0 în bufferul TX, așteaptă până CLB == 1 în bufferul RX
jclr #3,x:SSISR,* ; așteaptă până bitul lui rx este 1
jset #3,x:SSISR,* ; așteaptă pînă bitul lui rx este 0
jclr #3,x:SSISR,* ; așteaptă până bitul lui rx este 1
jset #18,x:RX_BUFF_BASE,* ; buclă până când CLB este setat
bset #18,x:TX_BUFF_BASE ;setează CLB
do #4,_init_loopB ; întârzir vu 4 ciclii
jclr #2,x:SSISR,* ; așteaptă până bitul tx este 1
jset #2,x:SSISR,* ; așteaptă până bitul tx este 0
_init_loopB
movep #0,x:PCC ;resetează portul SSI
movep #$FB00,x:CRB
1st
movep #$14,x:PCD ; D/C~ pin = 1 ==> data mode
movep #$01E8,x:PCC ; activează portul ssi
TXRX_SSR.ASM
ssi_rx_isr
move r0,x:(r7)+ ; salvează r0 în stivă
move m0,x:(r7)+ ; salvează m0 în stivă
move #3,m0 ; buffer nodulo 4
move x:RX_PTR,r0 ; încarcă pointerul de la bufferul rx
jclr #3,x:SSISR,next_rx ; dacă nu este sincronizat sare la recepție.
move #RX_BUFF_BASE,r0 ; dacă nu are sincr reseteaza pointerul
nop
next_rx
movep x:SSIDR,x:(r0)+ ; citește datele recepționate de la buffer
move r0,x:RX_PTR ;citelte datele de la rx
move x:-(r7),m0 ; restaurează m0
move x:-(r7),r0 ; restaurează r0.
rti
ssi_tx_isr
move r0,x:(r7)+ ; salvează r0 în stivă.
move m0,x:(r7)+ ; salvează m0 în stivă.
move #3,m0 ; buffer modulo 4
move x:TX_PTR,r0 ; incarcă pointerii de la bufferul tx.
jclr #2,x:SSISR,next_tx ;dacă nu are semnal de sincro sare la output
move #TX_BUFF_BASE+1,r0 ; dacă nu este semnal de sincronizare
;resetează pointerul
nop
next_tx
movep x:(r0)+,x:SSIDR ; registrul transfer de date
move r0,x:TX_PTR ;citește datele de la tx
move x:-(r7),m0 ; restaurează m0.
move x:-(r7),r0 ; restaurează r0.
rti
; points numărul de puncte (16-32768, putere a lui doi 2)
; data data de intrare
; odata data de ieșire
; coef coeficienții de sinus și cosinus din tabelă
;
; registrele data ALU utilizați
; x1 x0 y1 y0
; a2 a1 a0 a
; b2 b1 b0 b
;
; registrele de adrese
; r0 n0 m0
; r1 n1 m1
; n2
;
; r4 n4 m4
; r5 n5 m5
; r6 n6 m6
move #data,r0 ;inițializează pointerul de intrare
move #points/4,n0 ;iinițializează intrarea și ieșirea pointerului de offset
move n0,n4 ;
move n0,n6 ;iniializează coeficientul de offset
move #points-1,m0 ;inițializează modificarea adresei
move m0,m1 ;pentru adresare în modulo
move m0,m4
move m0,m5
move x:(r0)+n0,x0
tfr x0,a x:(r0)+n0,y1
do n0,_twopass
tfr y1,b x:(r0)+n0,y0
add y0,a x:(r0),x1 ;ar+cr
add x1,b r0,r4 ;br+dr
add a,b (r0)+n0 ;ar'=(ar+cr)+(br+dr)
subl b,a b,x:(r0)+n0 ;br'=(ar+cr)-(br+dr)
tfr x0,a a,x0 y:(r0),b
sub y0,a y:(r4)+n4,y0 ;ar-cr
sub y0,b x0,x:(r0) ;bi-di
add a,b y:(r0)+n0,x0 ;cr'=(ar-cr)+(bi-di)
subl b,a b,x:(r0) ;dr'=(ar-cr)-(bi-di)
tfr x0,a a,x0 y:(r4),b
add y0,a y:(r0)+n0,y0 ;bi+di
add y0,b x0,x:(r0)+n0 ;ai+ci
add b,a y:(r0)+,x0 ;ai'=(ai+ci)+(bi+di)
subl a,b a,y:(r4)+n4 ;bi'=(ai+ci)-(bi+di)
tfr x0,a b,y:(r4)+n4
sub y0,a x1,b ;ai-ci
sub y1,b x:(r0)+n0,x0 ;dr-br
add a,b x:(r0)+n0,y1 ;ci'=(ai-ci)+(dr-br)
subl b,a b,y:(r4)+n4 ;di'=(ai-ci)-(dr-br)
tfr x0,a a,y:(r4)+
_twopass
move #points/8,n1
move #4,n2
move #-1,m2
move #0,m6
do #@cvi(@log(points)/@log(2)-2.5),_end_pass ;example: 7 passes for 1024 pt. FFT
move #data,r0 ;inițializează pointerul A ca intrare
move r0,r1
move n1,r2
move r0,r4 ;inițializează pointerul A ca ieșire
move (r1)+n1 ;inițializează pointerul B ca intrare
move r1,r5 ;inițializează pointerul B ca ieșire
move #coef,r6 ;inițializează pointerul C ca intrare
lua (r2)+,n0 ;inițializează pointerul offset
move n0,n4
move n0,n5
move (r2)-
move x:(r1),x1 y:(r6),y0
move x:(r6)+n6,x0 y:(r0),b
mac x1,y0,b y:(r1)+,y1
macr -x0,y1,b y:(r0),a
do n2,_end_grp
do r2,_end_bfy
subl b,a x:(r0),b b,y:(r4)
mac -x1,x0,b x:(r0)+,a a,y:(r5)
macr -y1,y0,b x:(r1),x1
subl b,a b,x:(r4)+ y:(r0),b
mac x1,y0,b y:(r1)+,y1
macr -x0,y1,b a,x:(r5)+ y:(r0),a
_end_bfy
move (r1)+n1
subl b,a x:(r0),b b,y:(r4)
mac -x1,x0,b x:(r0)+n0,a a,y:(r5)
macr -y1,y0,b x:(r1),x1 y:(r6),y0
subl b,a b,x:(r4)+n4 y:(r0),b
mac x1,y0,b x:(r6)+n6,x0 y:(r1)+,y1
macr -x0,y1,b a,x:(r5)+n5 y:(r0),a
_end_grp
move n1,b1
lsr b n2,a1
lsl a b1,n1
move a1,n2
_end_pass
;
; Do last FFT pass
;
move #2,n0 ;inițializează pointerul de offset
move n0,n1
move #points/4,n4 ;ieșirea pointerului A de offset
move n4,n5 ;ieșirea pointerului B de offset
move #data,r0 ;inițializarea intrării pointerului A
move #odata,r4 ;inițializarea ieșirii pointerului A
move r4,r2 ;salvează ieșirea pointerului A
lua (r0)+,r1 ;inițializarea intrării pointerului B
lua (r2)+n2,r5 ;inițializarea ieșirii pointerului B
move #0,m4 ;bit-revers de adresare a ieșirii ptr. A
move m4,m5 ;bit-revers de adresare ptr. B
move #coef,r6 ;inițializarea intrării pointerului B
move (r5)-n5
move x:(r1),x1 y:(r6),y0
move x:(r5),a y:(r0),b
do n2,_lastpass
mac x1,y0,b x:(r6)+n6,x0 y:(r1)+n1,y1
macr -x0,y1,b a,x:(r5)+n5 y:(r0),a
subl b,a x:(r0),b b,y:(r4)
mac -x1,x0,b x:(r0)+n0,a a,y:(r5)
macr -y1,y0,b x:(r1),x1 y:(r6),y0
subl b,a b,x:(r4)+n4 y:(r0),b
_lastpass
move a,x:(r5)+n5
endm
Cap. 5 Instrucțiuni de utilizare
Instalarea softului pe calculator
Se introduce discheta cu programul Debug EVM în unitatea de flopydisc, se selectează corect unitatea folosită (de exemplu unitatea A) și se tastează instal *, unde * reprezintă unitatea de disc pe care se dorește să se facă instalarea (de exemplu unitatea C). Astfel se creează directoarele EVM ce conțin fișierele necesare pentru lucrul cu sistemul de dezvoltare DSP56002EVM. În programul Debug se intră din DOS tastând EVM56K.
Dacă comunicația cu procesorul DSP56002 este este stabilită pe ecran apar mai multe ferestre ce vor fi prezentate în paragraful următor. Dacă nu se poate stabili comunicația atunci pe ecran va apărea un mesaj de eroare prin care se atenționează acest lucru.
Ferestrele disponibile
Dacă intrarea în programul Debug EVM s-a făcut cu succes, apar pe ecran mai multe ferestre. Inițial sunt patru ferestre dar dacă s-au făcut modificări (de exemplu s-au adus și alte ferestre) acestea sunt salvate la ieșirea din program și la o reapelare a sa aceste modificări sunt disponibile. Cele patru ferestre de care am amintit sunt: o fereastră de date, o fereastră program, o fereastră cu registrele mai importante ale DSP și o fereastră de comandă.
Fereastra de date are pe prima linie numele ferestrei modul de afișare a datelor, eticheta primului element afișat în fereastră (pot fi aduse în total patru ferestre de date). In interiorul ferestrei pe prima coloană sunt afișate adresele de memorie (în hexa) al căror conținut se poate vizualiza și este disponibil pe coloanele următoare.
Fereastra program conține programul ce se dorește a fi rulat și în funcție de modul de afișare și adresa instrucțiunii. Se pot face modificări în program cu ajutorul acestei ferestre, de asemenea se poate urmări execuția pas cu pas a câte unei instrucțiuni la comanda utilizatorului.
Fereastra cu regiștrii interni conține unitatea aritmetică și logică (ALU) ca regiștrii întregi (A, B, X, Y) și separarați în subregiștrii (X0, X1, Y0, Y1, A0, A1, A2, B0, B1, B2). De asemenea mai conține și registrele de adresare (R0-R7, N0-N7, M0-M7) și încă șase registre mai importante (LA, SR, LC, PC, SP, OMR).
Fereastra de comandă este folosită pentru introducerea comenzilor de lucru asupra programului Debug EVM.
Ultima linie de pe ecran conține niște “butoane” și de asemenea este afișat și numele programului ce se rulează. De asemenea dacă cursorul se află într-o fereastră de date care este în mod grafic este afișată și valoarea în hexa a conținutului locației de memorie și adresa locației de memorie la care este poziționat cursorul.
Mutarea dintr-o fereastră în alta se face cu ajutorului mousului sau prin combinarea de taste: alt+tastă (R pentru registre, C pentru comenzi ) Schimbarea valorii unei locații de memorie sau a unui registru se poate face cu ajutorul comenzii CHANGE sau modificând direct pe ecran după ce se tastează tasta enter. Încărcarea unui program se face folosind tasta load sau folosind meniul (alt+M). Extensia programului trebuie să fie CLD. Alte ferestre disponibile sunt: fereastra stivă, fereastra indicatorilor, I/O, Watch Window unde se pot afișa anumite locații de memorie, fereastra registrelor OnCE. O locație de memorie poate fi afișată ăn fereastra Watch astfel: se introduce cursorul în interiorul ferestrei, se tastează tasta INS și se scrie valoarea (simbolul locației de memorie) ce se dorește a fi afișată. Pentru ștergere se folosește tasta DEL.
Modurile de afișare a datelor în interiorul ferestrelor este următoarea:
-fereastra de date în mod normal HEX, DEC, FRA, ASC, BIN.
-fereastra de date în mod grafic HEX, DEC, FRA.
-fereastra regiștrilor HEX, DEC, FRA.
-fereastra de comandă HEX, DEC, FRA, BIN
-alte ferestre HEX.
În cazul ferestrei regiștrilor doar pentru registrele X, X0, X1, Y, Y0, Y1, A, B se poate schimba modul de afișare. Restul sunt în hexa.
Taste calde
In acest paragraf se descriu tastele cu care se pot executa operații rapide:
F1 Help, se afișează ecranul de help.
F2 Schimbarea modului de afișare a datelor din cadrul ferestrei în care este poziționat cursorul.
F3 Intrarea sau ieșirea în sau din modul grafic de afișare a datelor în cadrul perestrei de date.
F4 Repoziționarea ferestrei (cu ajutorul săgeților) și modificarea dimensiunii (cu shift + săgeți) și tastarea tastei enter pentru acceptarea modificărilor făcute.
Alt+F4 Afișarea ferestrei pe tot ecranul respectiv revenirea la forma inițială.
F5 Rularea programului până când contorul de program ajunge la instrucțiunea pe care este poziționat cursorul.
F6 Reâmprospătarea ecranului în cazul în care programul se rulează. Rularea programului este întreruptă regulat și se reâmprospătează ecranul .
F7 Execuția unei instrucțiuni din cadrul programului.
Shift F7 Execuția programului instrucțiune cu instrucțiune. După fiecare instrucțiune ecranul este reâmprospătat.
F8 Salt. Se execută o instrucțiune. În cazul în care instrucțiunea este o instrucțiune de salt la o subrutină, aceasta este tratată ca o instrucțiune simplă și se execută întreaga subrutină.
F9 Setarea și ștergerea unui Breakpoint soft în poziția în care se află cursorul în program.
F10 Start sau stop. Pornirea respectiv oprirea din execuție a programului.
Alt +M Aducerea meniului pe ecran.
Alt +X Ieșirea din programul Debug și revenirea în MS-DOS.
Chei pentru selectarea ferestrei
Alt+C Selectarea ferestrei de comenzi
Alt+1, 2, 3, 4 Selectarea ferestrei de date 1, 2, 3 sau 4.
Alt+D Selectarea ultimei ferestre de date selectate anterior.
Alt+S Selectarea ferestrei ce afișează stiva
Alt+R Selectarea ferestrei ce conține registrele interne.
Alt+F Selectarea ferestrei cu indicatori.
Alt+O Selectarea ferestrei cu registrele OnCE.
Alt+T Selectarea ferestrei de text.
Alt+I Selectarea ferestrei cu registre de intrare ieșire.
Alt+W Selectarea ferestrei Watch.
Instrucțiuni pentru rularea programelor
Programele realizate în limbaj de asamblare trebuie să fie urmate de o extensie “asm”. Pentru asamblarea acestui program utilizăm programul “asm bat”. În urma asamblăriâi se va obține un fișier cu extensia “lst” care este de fapt o listă cu erorile din program cu ajutorul căreia vom depana programul. Dacă nu avem nici o eroare vom obține un nou fișier cu extensia “cld” care de fapt se poate rula. Pentru al rula încărcăm programul care prezintă extensia “cld” cu ajutorul programului “evm56 exe”. Apoi apar automat pe ecran ferestrele de date și se poate rula efectiv programul.
Cap. 6 Rezultate experimentale
După studierea materialului bibliografic, MANUALUL FAMILIEI DSP56K și a codecului CS4215 precum și a programului Debug EVM am reușit relizarea programului de generare a sinulului. Acest program nu poate fi utilizat singur deoarece el apelează și alte programe cum sunt: “ada_init.asm”, “txrx_ssi.asm”, și “sinus.asm”. Sinusul obținut cu acest program poate fi observat cu ajutorul unui osciloscop.
Programul de achiziție și de realizare a FFT-ului realizează așa cum rezultă și din titlu său achiziția semnalelor numerice provenite de la convertorul analog numeric precum și transformata Fourier rapidă a acestora.
În urma realizării transformatei Fourier rapide a acestor semnale numerice am obținut mai multe valori ale diferenței de zgomot, (diferența între nivelul mediu de zgomot și valoarea efectivă a zgomotului), în funcție de numărul N de eșantioane. De asemenea raportul semnal/zgomot depinde și el liniar de numărul de eșantioane N.
Aceste valori sunt:
numărul de eșantioane N 128 256 512 1024 2048 4096
valoarea DZ 18dB 21dB 24dB 27dB 30dB 33dB
Se observă că la fiecare dublare a numărului de eșantioane valoarea distanței de zgomot crește cu 3dB, ceea ce reprezintă și o scădere a nivelului de zgomot tot cu 3dB.
În concluzie cu cât numărul de eșantioane este mai mare cu atât semnalul de zgomot care afectează CAN-ul este mai mic.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Determinarea Caracteristicilor Convertoarelor Analog Numerice cu Ajutorul Procesorului Numeric de Semnal Dsp56002 (ID: 161702)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
