luni, 15 noiembrie 2010

Memoria externa

Lucrareade loborator Nr. 3


Tema: Utilizarea memoriei externe

Scopul lucrarii:  Deprinderea metodelor de lucru cu memoria RAM. Studiul principiului de conectare a memoriei interne. Studiul şi principiul de conectare a memoriei externe.
Expunerea problemei: În cadrul acestui laborator ne propunem sa realizăm un program cu ajutorul AVR Studio care ar permite testarea volumului de memorie accesibil la sistem.
Consideraţii teoretice:
Organizarea memoriei.
Tmega 16 AVR are două spaţii de memorie principală, spaţiul pentru Memoria de Date şi pentru Memoria de Program. În plus, ATmega16 are şi o memorie nevolatilă EEPROM  ce oferă posibilitate pentru memorarea datelor. Toate cele trei tipuri de memorie sunt cu adresare liniară. ATmega 16 conţine o memorie flash reprogramabilă (In-system On-chip) de 16 Ko pentru programe. Deoarece toate comenzile pentru AVR sunt de 16 şi 32 biţi, Flash-ul este organizat ca 8Kx16. Pentru securitatea software-ului, spaţiul pentru memoria de programe Flash este împărţit în două secţiuni: secţiunea de program boot şi secţiunea pentru programe de aplicaţie. Memoria Flash suportă cel puţin 10000 de cicluri de scriere/ ştergere. Counter-ul programului de la ATmega 16 (PC) are o lungime de 13 biţi, ceea ce permite adresarea unei memorii de 8*1024 locaţii de 16 biţi.
Organizare specifică a memoriei reprezintă:
  • Bloc (fişier) de registre: Registre interne UCP ce pot fi utilizate pentru memorare temporară, sau pentru funcţii de configurare a unităţilor funcţionale.
  • Memorie de date: memorie volatilă internă sau externă. Memoria internă are o capacitate redusă de stocare. Memoria externă cere hardware suplimentar pentru acces şi transfer date.
  • Memorie de program: Memorie ne-volatilă internă sau externă pentru stocarea codului (ROM, PROM, EPROM, EEPROM, FLASH, NV-RAM)
Fig. 1 Organizarea memoriei

Acces la memorie.
Fiecare tip de memorie adresat separat:
  • Domeniul adreselor pentru diferitele tipuri de memorie pot fi suprapuse;
  • Programatorul specifică tipul memoriei la care se face acces prin utilizarea de moduri de adresare diferite.
Memoria de date SDRAM.
Figura de mai jos arată cum este organizată memoria SDRAM ATmega 16. Primele 96 de locaţii se referă la Fişierul de Registre, şi următoarele 1024 de locaţii sunt dedicate datelor interne SDRAM.
Registrele generale 26, 27, 28, 29, 30, 31 pot fi utilizate cu denumiri specifice:
R26
X octet inferior
R27
X octet superior
R28
Y octet inferior
R29
Y octet superior
R30
Z octet inferior
R31
Z octet superior

Fig.2 Organizarea SDRAM

Memoria de date EEPROM.
ATmega 16 conţine 512 octeţi de memorie de date EEPROM. Este organizată ca spaţiu separat de date, în care pot fi citiţi şi scrişi biţi individuali. EEPROM-ul are o durată de viaţă de cel puţin 10.000 de cicluri scriere/ştergere.
Accesul citire/scriere EEPROM
Regiştrii de acces EEPROM sunt în spaţiul I/O. Biţii 9 – 15 sunt biţi rezervaţi în Atmega 16 şi vor lua întotdeauna valoarea "0". Biţii 0 - 8 sunt biţi de adresa (total 9 biţi, deci se adresează 0.5 KB) Regiştrii de adresă, EEARH şi EEARL – specifică adresa EEPROM pentru cele 512 locaţii ale spaţiului EEPROM.


Fig. 3 Organizarea EEPROM


Locaţiile de memorie se adresează liniar de la 0 la 511. Pentru operaţia de scriere a EEPROM, registrul EEDR conţine date care urmează să fie scrise în EEPROM la adresa dată de registrul EEAR. Pentru operaţia de citire a EEPROM, EEDR conţine date citite de pe EEPROM la adresa data de EEAR. Când se citeşte EEPROM, CPU este oprit timp de patru perioade de ceas înainte ca următoarea comandă să fie executată. Când se scrie EEPROM, CPU este oprit timp de două perioade de ceas înainte ca următoarea comandă sa fie executată.
Utilizarea semnalului ALE.
Principala funcţie a semnalului este de a oferi o informaţie de timp pentru memorarea, într-un latch extern, a octetului inferior de adresă prezent pe port în timpul preluării codului din memoria externă. În acest scop ALE este activat de două ori pe durata fiecărui ciclu de maşină. Activarea are loc chiar şi atunci când ciclul nu presupune preluarea unui cod instrucţiune din memoria de program externă.
Mersul lucrării:
1) Pentru a scrie programul, este nevoie de un algoritm. În cazul dat algoritmul este foarte simplu: Modul de testare a memoriei este bazat pe principiul regăsirii datelor recent înscrise în locaţia dată, efectuând ciclic această operaţie putem detecta volumul de memorie accesibilă. După setările iniţiale ale porturilor şi a bitului SRE din MCUCR, microcontrollerul trebuie ca în ciclul main să verifice toate locaţiile de memorie disponibile. Verificarea se va face în felul următor: se va scrie pe rând în fiecare locaţie „1” şi apoi se va citi informaţia din locaţia respectivă. Dacă ceea ce s-a scris nu va fi egal cu ceea ce s-a citit, se va întrerupe ciclul şi se va începe de la început. Acelaşi lucru se va mai repeta odată, numai că de acum se va scrie „0” în fiecare locaţie şi se va verifica.
Astfel ca urmare a familiarizăii cu scopurile propuse şi formulării unui algoritm de funcţionare, se creează schema bloc a programului:


2) Următorul pas este crearea ciruitului în programul de simulare PROTEUS, unde se demonstrează cum funţionează porturile de I/O şi respectiv programul microcontrolerului.


Fig. 4 Schema electrică
3) Scriem programul propriu-zis, conform schemei bloc create.
          ...

4)  Programul se compilează şi se verifică funcţionarea acestuia (executarea) pas cu pas cu scopul de a găsi şi elimina erorile.
5)  Ultimul pas este  simularea circuitul în PROTEUS, în urma căreia se poate convinge că programul funţionează corect şi că microcontrolerul execută toate comenzile cu exactitate, obţinînd rezultatul dorit.
Descrierea instrucţiunilor utilizate:
CPI - această instrucţiune efectuează comparaţia între un registru şi o constantă. Registrul nu suferă modificări. Toate instrucţiunile de ramificări pot fi utilizate după această instrucţiune.
Modifică flagurile: Z, C, N, V, H
Sitaxa
     Operanzii
  Program counter
CPI Rd, K
    16≤A≤31, 0≤K≤255
    PC←PC+1
BRNE - Ramificare condiţională relativă. Testează flagul Z (flagul zero) şi dacă nu este setat programul se remifică relativ lui PC în orice direcţie (PC-64≤destinaţia≤PC+63).
Nu modifică nici un flag.
Sitaxa
 Operanzii
     Program counter
BRNE    k
-64≤k≤+63
      PC←PC+k+1
      PC←PC+1, dacă condiţia e falsă
LD - încarcă indirect, cu sau fără postincrementare/predecrementare un octet din spaţiul de date într-un registru.
Nu modifică nici un flag.
Sitaxa
  Operanzii
    Program counter
LD Rd, Y
    0≤d≤31
      PC←PC+1
ST - salvează indirect, cu sau fără postincrementare/predecrementare un octet din registru în spaţiul de date.
Nu modifică nici un flag.
Sitaxa
Operanzii
   Program counter
ST Rd, Y    
0≤d≤31
      PC←PC+1