Procesoare Numerice de Semnal - CURS

1

4. Structura hardware a generaţiei TMS320C2x
4.1 Descrierea semnalelor 4.2 Privire generală asupra arhitecturii 4.3 Structura internă 4.4 Organizarea memoriei 4.5 Unitatea centrală aritmetică şi logică 4.6 Controlul sistemului 4.7 Memoria externă şi interfaţa I/O 4.8 Întreruperile 4.9 Portul serial 4.10 Multiprocesare şi accesul direct la memorie

Procesoare Numerice de Semnal - CURS

2

4.9 Portul serial

Un port serial full-duplex asigură comunicarea cu dispozitive seriale externe (codec, convertoare A/D seriale). Portul serial poate fi folosit la intercomunicarea între procesoare în aplicaţiile multiprocesor. Atât recepţia cât şi transmisia sunt dublu bufferate la TMS320C25, asigurându-se un flux continuu de biţi chiar dacă FSX (frame syncronisation) este ieşire. Utilizarea modului FSM (frame sync mode) asigură continuitatea operaţiei, care odată începută, nu mai necesită impulsuri de sincronizare. Frecvenţa de ceas poate fi oricât de mică (fmin = 0).

Procesoare Numerice de Semnal - CURS

3

4.9 Portul serial
Pentru controlul comunicaţiei seriale sunt prevăzuţi următorii biţi, pini şi registre:

Pin / Registru / port serial
FO - bitul de format TXM - bitul mod transmisie FSM - bitul mod sincronizare CLKX - ceas pentru transmisie CLKR - ceas pentru recepţie DX - semnal transmisie serială a datelor FSX - semnal de sincronizare cadru pentru transmisie FSR - semnal de sincronizare cadru pentru recepţie DXR - registru date transmise DRR - registru date recepţionate XSR - registru de deplasare la transmisie RSR - registru de deplasare la recepţie

Procesoare Numerice de Semnal - CURS

4

4.9 Portul serial
Portul serial are două registre: DXR, care păstrează datele ce vor fi transmise şi DRR, care păstrează datele recepţionate, la adresele 0000h, respectiv la 0001h. Ambele registre pot lucra pe 8 sau 16 biţi şi pot fi accesate ca orice locaţie de memorie. Fiecare registru are un ceas extern, impuls de sincronizare şi registrele de deplasare aferente. Orice instrucţiune care accesează memoria de date poate fi utilă la scrierea / citirea lor, în afară de BLKD. Registrele DXR şi DRR pot fi utilizate ca registre generale, caz în care CLKR şi FSR trebuie conectaţi la "0" pentru a preveni o posibilă iniţiere a unei operaţii de recepţie.

Procesoare Numerice de Semnal - CURS

5

4.9 Portul serial
În registrul de stare ST1 există 3 biţi care controlează funcţionarea portului serial. Bitul FO = 0 stabileşte efecuarea operaţiilor portului serial pe 16 biţi, iar FO = 1, pe 8 biţi. În modul de lucru pe 8 biţi sunt folosiţi cei mai puţin semnificativi 8 biţi ai registrelor. Bitul poate fi încărcat prin instrucţiunea FORT. FO = 0 se stabileşte în urma unui reset. Bitul TXM este utilizat la stabilirea generării interne sau extern a impulsului de sincronizare pentru transmisie. Dacă TXM = 1, pinul FSX este ieşire şi impulsul este generat pe FSX de fiecare dată când registrul DXR este încărcat, impuls sincronizat cu frontul crescător al ceasului CLKX. Dacă TXM = 0, atunci FSX este intrare şi procesorul aşteaptă să primească un impuls de sincronizare înainte să înceapă transmisia. La reset, TXM = 0 şi FSX este configurat ca intrare. TXM poate fi încărcat cu instrucţiunile LST1, STXM şi RTXM.

Procesoare Numerice de Semnal - CURS

6

4.9 Portul serial
Bitul FSM (frame syncronisation mode) este utilizat pentru indicarea modului de sincronizare cerut de fiecare transfer al portului serial. Dacă FSM = 1, impulsul de sincronizare este necesar, dacă FSM = 0, impulsul nu este necesar. Bitul este setat de instrucţiunea RFSM. Când FSM = 1, un impuls pe linia FSX va duce la încărcarea registrului XSR cu data din DXR şi va începe transmisia. Dacă FSX apare înainte de transmisia ultimului bit, XSR va fi reîncărcat cu conţinutul lui DXR, se abandonează transmisia în curs şi se va începe o alta.

Procesoare Numerice de Semnal - CURS

7

4.9.1 Operaţiile de transmisie şi recepţie
Sunt implementate separat, deci se asigură independenţa lor. Interfaţa portului serial este implementată utilizând 6 pini externi. Figura arată registrele şi pinii utilizaţi în transmisie şi recepţie.

Procesoare Numerice de Semnal - CURS

8

4.9.1 Operaţiile de transmisie şi recepţie
Datele de pe liniile DX şi DR sunt recepţionate sau transmise în XSR sau RSR, pe fronturile CLKX sau CLKR. La TMS32020 datele sunt recepţionate în DRR, respectiv sunt extrase din DXR. Ceasurile CLKX şi CLKR sunt cerute a fi prezente doar în timpul transferului efectiv şi pot fi oprite când nu se mai transferă date. Biţii de date se transferă câte 8 sau câte 16. Transmisia se face pe frontul crescător al CLKX, iar recepţia se face pe frontul crescător al CLKR. Cel mai semnificativ bit este transferat primul. Pentru a se începe o nouă transmisie, conţinutul registrului DXR este transferat în XSR, iar după ce au fost recepţionaţi toţi biţii, conţinutul lui RSR este transferat în DRR (la TMS320C25). Transferurile la TMS320C25 sunt în general iniţializate de un impuls de sincronizare, excepţie de la acest mod fiind transferul continuu, selectat prin punerea în "0" a bitului FSM. Impulsul de sincronizare este aplicat pe FSX pentru transmisie şi pe FSR pentru recepţie.

Procesoare Numerice de Semnal - CURS

9

4.9.1 Operaţiile de transmisie şi recepţie
Operaţia de transmisie începe când datele sunt scrise în registrul DXR odată cu trecerea impulsului FSX în low când CLKX este în high sau trece în high. Datele sunt deplasate şi transmise pe DX pe frontul crescător al CLKX. Când toţi biţii s-au transmis, se generează întreruperea internă XINT pe frontul negativ al ceasului. Dacă portul serial nu transmite, linia DX este trecută în înaltă impedanţă. DX şi FSX nu sunt afectate de linia /HOLD, orice transmisie în desfăşurare este terminată înainte de trecerea în înaltă impedanţă a pinului DX, dacă linia /HOLD este activată în timpul unei transmisii. Pinul FSX va rămâne în aceeaşi configuraţie (intrare sau ieşire), iar dacă este ieşire, va rămâne în low.

Procesoare Numerice de Semnal - CURS

10

4.9.1 Operaţiile de transmisie şi recepţie
Operaţia de recepţie este similară transmisiei. Diagrama de timp pentru recepţie este cea din figură. Recepţia este iniţiată de un impuls pe FSR. Dacă FSR trece în low, datele de pe DR sunt trecute în RSR pe frontul negativ al CLKR. Primul bit recepţionat este cel MSB. După recepţia tuturor biţilor, se generează întreruperea RINT pe frontul negativ al CLKR şi conţinutul registrului RSR se transferă în DRR. Dacă DRR este citit înainte de a se genera întreruperea, biţii ce n-au fost introduşi până în momentul citirii vor fi formaţi din datele transferului precedent. Pentru a preveni o posibilă depăşire a registrului DRR, acesta trebuie citit înainte de următorul impuls FSR.

Procesoare Numerice de Semnal - CURS

11

4.9.2 Semnalul de ceas şi controlul sincronizării
După un transfer complet pe portul serial, se generează o întrerupere, RINT sau XINT, pe frontul crescător al CLKR, respectiv CLKX, după ce ultimul bit a fost transferat. Dacă DRR se citeşte înainte ca RINT să apară, datele citite vor fi cele corespunzătoare recepţiei anterioare. Dacă DXR se va încărca încă o dată după ce XINT a fost generată, doar ultima înscrisă în el va fi înscrisă şi în XSR pentru următoarea operaţie de transmisie. Când TMS320C2x este resetat, TXM = 0, DX este trecut în înaltă impedanţă şi orice operaţie de transfer existentă în momentul apariţiei resetului va fi terminată. Impulsul de sincronizare pentru transmisie poate fi generat intern sau extern. Ceasul pentru portul serial are frecvenţa maximă de 5MHz. Transferurile portului serial la TMS320C25 sunt în general iniţiate de un impuls de sincronizare, excepţie fiind modul continuu de lucru selectat cu FSM = 0. Impulsul intră pe FSX la transmisie şi pe FSR la recepţie. Impulsul este cerut doar dacă FSM = 1. FSM este setat de instrucţiunea SFSM şi resetat de instrucţiunea RFSM.

Procesoare Numerice de Semnal - CURS

12

4.9.3 Modul de funcţionare în salve (BURST)
În acest mod, transferurile sunt separate în timp de perioade de inactivitate ale portului serial şi pentru a lucra în acest mod se programează FSM = 1. Funcţionarea transmisiei pe portul serial în mod salvă

Procesoare Numerice de Semnal - CURS

13

4.9.3 Modul de funcţionare în salve (BURST)
Funcţionarea recepţiei pe portul serial în mod salvă

Procesoare Numerice de Semnal - CURS

14

4.9.3 Modul de funcţionare în salve (BURST)
Când TXM = 1 şi DXR este încărcat, este generat un impuls pe următorul front crescător al CLKX. XSR este încărcat cu conţinutul curent al DXR când FSX este în high şi CLKX în low. Transmisia începe când FSX trece în low şi CLKX trece în high sau este în high. XINT este generată pe frontul crescător al CLKX după ce 8 sau 16 biţi au fost transmişi Si DX este trecut în înaltă impedanţă. Dacă DXR este reîncărcat înainte de frontul crescător al CLKX ce urmează după XINT, pe FSX vi fi generat un impuls şi XSR va fi reîncărcat.

Recepţia se desfăşoară asemănător cu transmisia. Conţinutul lui RSR este încărcat în DRR când CLKR este în low, imediat după recepţia ultimului bit. RINT este generată la următorul front crescător al CLKR şi DRR poate fi citit în orice moment înainte de recepţia ultimului bit al următoarei recepţii. Când se lucrează pe 8 biţi, cei mai semnificativi 8 biţi ai registrului DRR sunt iniţial trecuţi în partea de LSB şi la recepţia următorilor 8 biţi, ei vor fi trecuţi în partea de MSB, iar cei nou recepţionaţi sunt trecuţi în partea de LSB.

Procesoare Numerice de Semnal - CURS

15

4.10 Multiprocesare şi accesul direct la memorie
Flexibilitatea lui TMS320C2x permite configuraţii multiple astfel încât să satisfacă o gamă largă de arhitecturi de sisteme. Câteva din configuraţiile de sistem folosind TMS320C2x sunt următoarele: sistem de sine stătător (un singur procesor); un multiprocesor gazdă / sclav cu spaţiu de memorie globală de date distribuită; un multiprocesor cu circuite în paralel; un procesor periferic interfaţat cu alte circuite prin folosirea semnalelor de control ale procesorului. Aceste configuraţii de sisteme sunt posibile pe baza a trei facilităţi ale procesorului TMS320C2x: funcţia de sincronizare folosind intrarea /SYNC; interfaţa la memoria globală; funcţia hold, implementată folosind pinii /HOLD şi /HOLDA.

Procesoare Numerice de Semnal - CURS

16

4.10.1 Sincronizarea
Într-un sistem cu mai multe procesoare, intrarea /SYNC poate fi folosită pentru a uşura mult interfaţarea între procesoare. Această intrare este folosită pentru a determina fiecare circuit TMS320C2x din sistem să-şi sincronizeze ceasurile interne, permiţând astfel rularea de tip "lock-step". Sincronizarea între mai multe circuite TMS320C2x se face folosind semnalul comun /SYNC şi intrările de ceas externe. O tranziţie negativă /SYNC setează fiecare procesor la primul sfert de fază intern (Q1). Această tranziţie trebuie să fie sincronă cu frontul crescător al lui CLKIN. La TMS320C25 există două cicluri de întârziere CLKIN care urmează ciclului în care /SYNC trece în zero, înainte ca faza Q1 sincronizată să apară. La TMS32020 nu există această întârziere.

Procesoare Numerice de Semnal - CURS

17

4.10.1 Sincronizarea
Timingul semnalelor de sincronizare (TMS32020)

În mod normal, /SYNC este cerut când /RS este activ. Dacă /SYNC este activat după un reset, atunci pot avea loc următoarele acţiuni: 1) Ciclul maşină al procesorului este resetat la Q1, dacă condiţiile de timp pentru /SYNC sunt îndeplinite. Dacă /SYNC este activat la începutul lui Q1, Q3 sau Q4, atunci instructiunea curentă este incorect executată. Dacă /SYNC este activat la începutul lui Q2, instrucţiunea curentă este executată corect. 2) Dacă /SYNC nu îndeplineşte condiţiile de timp pot apare operaţii imprevizibile ale procesorului. Pentru a readuce procesorul într-o stare cunoscută, trebuie realizată o resetare.

Procesoare Numerice de Semnal - CURS

18

4.10.2 Memoria globală
Pentru aplicaţiile cu multiprocesoare, TMS320C2x are posibilitatea de a aloca spaţiul de memorie globală de date şi de a comunica cu acest spaţiu prin cererea de memorie globală /BS (bus request) şi a semnalelor de control READY. Memoria globală este memoria împărţită la mai mult de un procesor, de aceea accesul la ea trebuie să poată fi arbitrat. Când procesorul foloseşte memoria globală, spaţiul de memorie al procesorului este împărţit în: secţiunea locală, folosită de procesor pentru efectuarea funcţiilor sale individuale; secţiunea globală, folosită în comunicarea cu alte procesoare. Registrul GREG specifică părţi din memoria de date a lui TMS320C2x ca o memorie externă globală. GREG (locaţia 5 din memoria de date) este un registru pe 8 biţi conectat la cei mai puţin semnificativi 8 biţi ai magistralei de date interne restul biţiilor fiind citiţi în "1". Conţinutul registrului GREG determină mărimea spaţiului de memorie globală; valorile permise şi spaţiile corespunzătoare memoriei globale sunt prezentate în tabelul următor:

Procesoare Numerice de Semnal - CURS

19

4.10.2 Memoria globală
Valoare GREG 000000XX 10000000 11100000 11110000 11111000 11111100 11111110 11111111 Memoria locală Sp. Adrese Nr. cuvinte 0 - FFFF 0 - 7FFF 0 - DFFF 0 - EFFF 0 - F7FF 0 - FBFF 0 - FDFF 0 - FEFF 65536 32768 57344 61440 63488 64512 65024 65280 Memoria globală Sp. adrese Nr. cuvinte 8000 - FFFF E000 - FFFF F000 - FFFF F800 - FFFF FC00 - FFFF FE00 - FFFF FF00 - FFFF 0 32768 8192 4096 2048 1024 512 256

Observaţie: Alte valori decât acestea conduc la o fragmentare a memoriei.

Procesoare Numerice de Semnal - CURS

20

4.10.2 Memoria globală
Când o adresă de memorie de date, fie ea directă sau indirectă, corespunde unei adrese a memoriei globale de date, /BR este trecut în "0" împreună cu /DS pentru a indica faptul că procesorul doreşte accesul la memoria globală. Arbitrarea controlului asupra memoriei globale se realizează printr-o logică externă, care activează READY când TMS320C2x cere acces la memoria globală. Lungimea unui ciclu de memorie este controlată prin READY. Diagrama de timp pentru o stare de aşteptare:

Procesoare Numerice de Semnal - CURS

21

4.10.3 Funcţia HOLD
TMS320C2x acceptă accesul direct la memoria sa locală de programe (externă), memoria locală de date şi la spaţiile de I/O. Cele două semnale, /HOLD şi /HOLDA, au rolul de a permite altui dispozitiv să preia controlul asupra magistralelor procesorului. După primirea unui semnal /HOLD de la un circuit extern, procesorul răspunde trecând /HOLDA în "0", după care procesorul îşi trece în stare de înaltă impedanţă magistralele de adrese şi date precum şi semnalele de control /PS, /DS, /IS, R//W, /STRB. Pinii de ieşire ai portului serial nu sunt afectaţi de /HOLD (DX şi FSX). Semnalizările între procesorul extern şi TMS320C2x pot fi realizate folosind întreruperile. Diagramele de timp sunt:

Procesoare Numerice de Semnal - CURS

22

4.10.3 Funcţia HOLD

Procesoare Numerice de Semnal - CURS

23

4.10.3 Funcţia HOLD

Procesoare Numerice de Semnal - CURS

24

4.10.3 Funcţia HOLD
/HOLD are acelaşi timp de tranziţie din low în high ca şi READY şi este testat la începutul lui Q3. După îndeplinirea condiţiei de tranziţie în high, sunt necesare trei cicluri maşină înainte ca magistralele şi semnalele de control să fie trecute în stare de înaltă impedanţă. Spre deosebire de întreruperile externe, /INT2 - /INT0, /HOLD nu e o intrare ce poate fi memorată. Circuitul extern trebuie să menţină /HOLD activ până când primeşte un /HOLDA de la TMS320C2x. Dacă procesorul se află la mijlocul execuţiei unui ciclu multi-instrucţiune, înainte de a trece magistralele şi semnalele de control în stare de înaltă impedanţă, va termina execuţia instrucţiunii. După terminarea execuţiei instrucţiunii magistralele sunt trecute în starea a treia. Aceasta este valabil şi pentru instrucţiunile multiciclu, devenite astfel în urma inserării unor stări de aşteptare sau prin folosirea instrucţiunilor RPT / RPTK. După ce /HOLD este dezactivat, se reia execuţia programului din acelaşi punct unde s-a oprit. /HOLDA este trecut în "1" sincron cu /HOLD. După tranziţia din low în high sunt necesare 2 cicluri maşină înainte ca magistrala şi semnalele de control să devină valide. /HOLD nu este tratat ca o întrerupere.

Procesoare Numerice de Semnal - CURS

25

4.10.3 Funcţia HOLD
Dacă TMS320C2x execută instrucţiunea IDLE înainte de a trece în starea de hold, după părăsirea stării de hold se revine la această instrucţiune. Funcţia hold are două moduri distincte de funcţionare la TMS320C25: 1) modul de execuţie ca la TMS32020 în care se suspendă execuţia programului pe timpul activării lui /HOLD; 2) modul DMA concurent, caracteristic TMS320C25, în care DSP-ul continuă săşi execute programul cât timp se operează din RAM-ul sau ROM-ul intern, ceea ce îi măreşte mult aplicabilitatea. Aceste moduri sunt selectate cu bitul HM din registrul de stare al TMS320C25. Când HM = 1, procesorul opreşte execuţia programului şi intră în starea de hold. Când HM = 0, atunci: dacă programul este executat din memoria externă sau dacă este accesată memoria externă de date, procesorul intră direct în starea de hold; dacă programul se execută din memoria internă şi dacă nu există cereri externe pentru accesarea memoriei de date, atunci procesorul este trecut extern în starea hold, dar execuţia programului continuă intern.

Procesoare Numerice de Semnal - CURS

26

4.10.3 Funcţia HOLD
Astfel se permite o operare mai eficientă prin faptul că se poate continua execuţia unui program simultan cu executarea unei operaţii DMA externe. Execuţia programului este întreruptă până când /HOLD este dezactivat, dacă procesorul este într-o stare de hold cu HM = 1 şi dacă execuţia internă a programului necesită un acces extern sau dacă programul se ramifică la o adresă externă. Dacă o execuţie repetitivă care necesită accesul la magistrala externă este executată (cu HM = 0) şi apare o cerere hold, se trece în această stare după ciclul de magistrală curent. Dacă situaţia apare pentru HM = 1, nu se intră în stare de hold până când instrucţiunea repetitivă este executată complet. HM este setat / resetat cu SHM / RHM. Toate întreruperile sunt dezactivate cât timp /HOLD este activ cu HM = 1. Dacă se primeşte o întrerupere pe timpul stării de hold, întreruperea este memorată şi păstrată pe durata lui /HOLD. /HOLD nu afectează nici unul din flagurile de întreruperi sau registrul de întreruperi. Dacă HM = 0, întreruperile funcţionează normal.