Sunteți pe pagina 1din 3

ASC2 – Lucrări de laborator 1/3 Lucrarea nr.

Interogarea

1. Scopul lucrării

Această lucrare are drept scop prezentarea interogării (în engleză – polling) ca posibilă
metodă de comunicare între procesor și periferice.

2. Mersul lucrării

Când procesorul are la dispoziție mai multe periferice, trebuie implementat un protocol de
comunicare care să țină cont de prioritatea pe care o au. O metodă posibilă este interogarea.
Principiul care stă la baza acestei metode este următorul: procesorul testează periodic perifericele
pentru a detecta dacă au de transmis date sau dacă sunt disponibile pentru a recepționa date.
Ordinea în care sunt interogate perifericele sau frecvența cu care sunt verificate depinde de
prioritatea pe care o au fiecare.
În această lucrare se va utiliza o altă componentă disponibilă în sistemele bazate pe Nios II:
modulul JTAG UART. Această componentă este o interfață între sistem și calculatorul gazdă.
Conține două buffer-e de date (unul pentru intrare, altul pentru ieșire). În spațiul adreselor, acest
modul utilizează două cuvinte de câte 32 biți (dintre cele 4 posibile), conform figurii de mai jos:

Prima locație este registrul de date, iar a doua este registrul de control.

În registrul de date, câmpurile au următoarea semnificație:


 DATA (8 biți) conține informația transmisă/recepționată.
 RV (1 bit) precizează dacă datele din câmpul DATA sunt valide sau nu.
 RAVAIL (16 biți) precizează numărul de locații libere în buffer-ul de citire (în care sunt
stocate datele pe care JTAG UART le transmite procesorului).

În registrul de control, câmpurile au următoarea semnificație:


 RE (1 bit) permite citirea datelor (numai dacă are valoarea „1”).
 WE (1 bit) permite înscrierea datelor (numai dacă are valoarea „1”).
 RI (1 bit) indică dacă există date de intrare care așteaptă să fie citite.

Daniel FILIPAȘ 1/3 dfilipas@uoradea.ro


ASC2 – Lucrări de laborator 2/3 Lucrarea nr. 4

 WI (1 bit) indică dacă există date de ieșire care așteaptă să fie înscrise.
 AC (1 bit) precizează dacă a existat vreo activitate la nivelul JTAG UART (de exemplu,
testarea perifericului de către procesor). Înscrierea cifrei „1” în acest câmp îl resetează (îl
pune din nou pe „0”).
 WSPACE (16 biți) precizează numărul de locații libere în buffer-ul de scriere (în care
sunt stocate datele pe care procesorul le transmite către JTAG UART).

2.1 Crearea proiectului și elaborarea sistemului

În primul rând se creează un nou proiect în Quartus II Web Edition (după modelul din
Anexa A).

Urmează construirea sistemului (după exemplul din Anexa C). Sistemul trebuie să cuprindă:
 un procesor NIOS II (varianta economică Nios II/e)
 un modul de memorie (se va alege un modul de 8 KB de memorie on-chip de tip RAM)
 un port de ieșire (PIO) de 8 biți (corespunzător LED-urilor verzi LEDG)
 un modul JTAG UART

După creare, instanțiere și compilare, sistemul trebuie descărcat pe placa Altera DE1.
Etapele care trebuie parcurse pentru acest lucru sunt prezentate în Anexa D.

E important să fie notate adresele alocate componentelor, întrucât ele trebuie accesate
din programul care va fi executat.

2.2 Compilarea și încărcarea unui program

Se consideră următorul program (scris în limbajul C):

volatile int *Jtag_Uart = (int *) 0x ... ; // adresa registrului de date al JTAG UART

void main (void)


{
volatile int c, var = 'Z';

*(Jtag_Uart + 1) = 0x2; //permite scrierea

while(1)
{
if(*(Jtag_Uart + 1) & 0xffff0000) // dacă există spatiu în buffer-ul de iesire
*Jtag_Uart = var; // înscrie caracterul din variabila „var”

for(c=1000000; c!=0; --c);


}
}

Execuția programului are ca efect trimiterea (ciclică) de către procesor înspre JTAG UART a
caracterului „Z” și, implicit, afișarea lui în fereastra Terminal a aplicației Altera Monitor Program.
Adresa de pe prima linie trebuie să fie adresa generată pentru JTAG UART la crearea sistemului.

Daniel FILIPAȘ 2/3 dfilipas@uoradea.ro


ASC2 – Lucrări de laborator 3/3 Lucrarea nr. 4

Tipul variabilelor e precedat de directiva volatile pentru a-i preciza compilatorului că


valorile asociate variabilelor se pot modifica în orice moment și, astfel, să nu optimizeze codul
obiect.
Codul de mai sus trebuie să fie salvat într-un fișier cu extensia .c și reprezintă sursa care va
fi compilată, încărcată în memoria RAM a sistemului de pe placa DE1 și apoi executată.

Pentru a putea lansa în execuție programul, e necesar ca acesta să fie inclus, la rândul lui,
într-un proiect. Pentru crearea proiectului se utilizează Altera Monitor Program.
Etapele care trebuie parcurse pentru acest lucru sunt prezentate în Anexa MP.

2.3 Aplicații în cadrul ședinței de laborator

a. Să se completeze adresa de pe prima linie a programului în așa fel încât programul să se


execute corect. Ce rost are instrucțiunea for în programul dat și ce s-ar întâmpla dacă linia
respectivă ar fi ștearsă?

b. Să se modifice codul sursă în așa fel încât să permită nu numai scrierea caracterelor, ci și
recepționarea lor de la tastatură. Textul introdus de la tastatură trebuie să apară în fereastra Terminal
(ca într-un editor de text).

c. Să se completeze programul astfel încât, la fiecare caracter introdus de la tastatură, pe


LED-urile verzi să apară codul ASCII asociat acestuia.

d. Să se completeze sistemul cu încă un port de intrare de 3 biți (asociat butoanelor


KEY[3..1]) și apoi să se modifice sursa astfel încât afișarea șirului de caractere (maxim 20) să se
realizeze doar în momentul în care se apasă butonul KEY[1].

Bibliografie:

http://www.altera.com/education/univ/materials/comp_org/labs/unv-labs.html

Daniel FILIPAȘ 3/3 dfilipas@uoradea.ro