Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Memoria EEPROM


Memoria EEPROM


Memoria EEPROM

Microcontrolerele ATMEL AVR 90S8535 dispun de o memorie EEPROM integrata pe chip avand dimensiunea de 512 octeti. Registrele de acces ale EEPROM-ului sunt plasate in spatiul I/O.

In functie de valorile tensiunii Vcc, timpul de acces la scriere este in intervalul 2,5 - 4 ms. Utilizatorul poate sa detecteze prin software momentul in care poate fi scris urmatorul octet. De asemenea, s-a prevazut o posibilitate de intrerupere la terminarea scrierii intr-o locatie a memoriei EEPROM.

Daca programul contine secvente care scriu EEPROM-ul, trebuie luate unele masuri de precautie. In cazul unor alimentari cu condensatori mari de filtrare, Vcc creste sau scade incet la conectarea/deconectarea de la sursa. Aceasta conduce la functionarea dispozitivului pentru o perioada de timp la o tensiune mai scazuta decat cea specificata ca minima. Operarea CPU-ului in astfel de conditii este nesigura si este posibil apara salturi neintentionate si eventual sa se execute codul de scriere al EEPROM-ului. Pentru a asigura integritatea EEPROM-ului, este util sa se foloseasca in acest caz un circuit extern de mentinere in reset la valori scazute de tensiune (cu un circuit de tip Brown-out Detector).



Pentru a preveni scrierile neintentionate ale EEPROM-ului, a fost prevazuta o procedura specifica de scriere (vezi descrierea registrului de control al EEPROM-ului) care trebuie urmata intotdeauna. Cand EEPROM-ul este citit sau scris, CPU-ul este oprit pe perioada a doua cicluri ale ceasului, inainte ca urmatoarea instructiune sa fie executata.

2. Registrele asociate EEPROM

Registrul de adrese al EEPROM- EEAR.

EEAR

Bit

7

6

5

4

3

2

1

0

$1F

EEAR8

$1E

EEAR7

EEAR6

EEAR5

EEAR4

EEAR3

EEAR2

EEAR1

EEAR0

Citeste/Scrie

C

C

C/S

C/S

C/S

C/S

C/S

C/S

Val. initiala

Registrul de adrese EEPROM - EEAR 8.0 - specifica adresele in spatiul de 512 - octeti ai EEPROM-ului. Octetii datelor EEPROM-ului sunt adresati liniar intre 0 si 511.

Registrul de date EEPROM - EEDR.

EEDR

Bit

7

6

5

4

3

2

1

0

$1D

MSB

LSB

Citeste/Scrie

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

Valoare initiala

0

0

0

0

0

0

0

0

Bitii 7.0 - EEDR 7.0: Bitii de date din EEPROM.

Pentru operatia de scriere a EEPROM-ului, registrul EEDR contine octetul de date ce trebuie scris in EEPROM la adresa specificata de registrul EEAR. Pentru operatia de citire a EEPROM-ului, EEDR contine octetul de date citit din EEPROM de la adresa specificata de EEAR.

Registrul de control al EEPROM - EECR.

EECR

Bit

7

6

5

4

3

2

1

0

$1C

-

-

-

-

EERIE

EEMWE

EEWE

EERE

Citeste/Scrie

C

C

C

C

C/S

C/S

C/S

C/S

Valoare initiala

0

0

0

0

0

0

0

0

Bitii 7.4 - Res: Biti rezervati.

Bit 3- EERIE: Validare intrerupere EEPROM gata pentru scriere. Cand acest bit este in 1 si intreruperile globale sunt activate, la terminarea unei operatii de scriere in EEPROM se va genera o intrerupere (cu vector $000F) care semnaleaza ca EEPROM-ul este gata pentru o noua scriere. Aceasta intrerupere este generata constant atunci cand bitul EEWE este 0.

Bit 2 - EEMWE: Controlul validarii scrierii in EEPROM.

Acest bit specifica daca setarea in 1 a bitului EEWE produce scrierea in EEPROM. Daca este in 1 , punerea in 1 a bitului EEWE va efectua scrierea din registrul EEDR in EEPROM la adresa specificata de EEAR. Daca acest bit este in 0, punerea in 1 a bitului EEWE nu va avea nici un efect. Dupa ce acest bit este pus in 1 prin software, el este readus in 0 automat, prin hardware, dupa 4 cicluri de ceas, pentru a preveni scrieri neintentionate.

Bit 1 - EEWE: Activarea scrierii EEPROM.

Atunci cand adresele si datele sunt corect alese, punerea in 1 a bitului EEWE produce scrierea acestora in EEPROM. Cand operatia de scriere s-a terminat (in mod obisnuit dupa 2,5 ms la Vcc=5V si dupa 4ms la Vcc=2,7V), bitul EEWE este sters (adus la 0) de catre hardware. Programatorul poate citi intr-o bucla acest bit (procedeu denumit polling) pana cand este gasit in 0, inainte de a scrie urmatorul byte. Pentru ca scrierea sa aiba loc efectiv este necesar ca bitul EEMWE sa fie deja in 1 in momentul cand EEWE este trecut in 1. Va trebui deci respectata urmatoarea procedura la scriere:

- Se asteapta in polling pana cand EEWE devine 0,

- Se scrie noua adresa in EEARL si EEARH (acest punct este optional, nefiind necesar daca nu se schimba adresa),

- Se scrie noul octet in EEDR (acest punct este optional, nefiind necesar daca nu se schimba octetul),

- Se aduce in 1 logic bitul EEMWE din EECR,

- In urmatoarele 4 cicluri dupa setarea lui EEMWE se pune in 1 logic EEWE.

Se recomanda ca intreruperile globale sa fie dezactivate pe durata acestui ciclu, pentru a nu se prelungi accidental intervalul de timp dintre ultimii doi pasi.

Cand EEWE a fost setat, CPU-ul este oprit pentru doua cicluri inainte ca urmatoarea instructie sa fie executata.

Bit 0 - EERE: Activarea citirii EEPROM.

Cand in registrul EEAR este setata adresa corecta, punerea in 1 logic a bitului EERE va genera citirea octetului de la adresa respectiva. Cand bitul EERE este sters (0) de catre hardware, datele solicitate se gasesc in registrul EEDR. Accesul de citire al EEPROM-ului dureaza cat o instructiune, deci nu este necesar ca bitul EERE sa fie investigat intr-o bucla de asteptare (polling). Totusi, programul trebuie sa citeasca bitul EEWE inainte de a se incepe o operatie de citire, pentru a se asigura ca nu este in curs o operatie de scriere. Cand EERE a fost setat, CPU-ul este oprit pentru doua cicluri inainte de a fi executata urmatoarea instructie.

3. Modul de lucru

Se va executa un program care sa incarce in EEPROM numere crescatoare de la 0 la $7f, in locatii adiacente incepand cu adresa 0.

Indicatii:

In bucla principala se va incrementa un registru (initializat in prealabil cu 0), si continutul sau va fi scris in EEPROM in locatii consecutive, incepand de la adresa 0 pana la adresa $7F. Scrierea se va face dupa o bucla de verificare a valorii 0 a bitului EEWE de tipul:

main: in r18,$1c

andi r18,2

cpi r18,

brne main

.

.

.

Secventa de reluare a buclei va testa valoarea registrului care contine adresa inferioara, de exemplu r16:

.

.

.

inc r16

cpi r16,$80

brne main

.

.

Un exemplu de realizare a programului este urmatorul:

.equ Bdir=$17 ; directia la reg. B (LED)

.equ leds=$18 ; reg. B

.equ Ddir=$11 ;directia la reg. D

.equ Dport=$12 ; portul D (push-button)

.equ Dpin=$10 ;pinii D (push-button)

;RESET

rjmp Reset

.ORG $0020

Reset:

;initializare stiva

ldi r16,$5f

out $3d,r16

;Initializare registri

clr r16

Loop1:    out $1E,r16 ;Adresa inferioara EEPROM ;(Adresa superioara e 0 la ;Reset)

out $1D,r16 ;Octet de scris in EEPROM

sbi $1C,2 ;Initializeaza scrierea

sbi $1C,1

;Aici se face o temporizare fara verificare a ;scrierii in EEPROM (varianta nerecomandata)

Wait: sbic $1C,2 ;Asteapta finalizarea ;scrierii

rjmp Wait

inc r16

cpi r16,$80

brlo Loop1 ;Verifica finalizarea ;scrierii blocului de date

;Initializare In-Out

ldi r16,$ff ;B ca iesire

out Bdir,r16

Loop2:    ;Bucla principala a ;programului

rjmp Loop2

2. Programul anterior va fi modificat astfel ca de la adresa 0 la $7F sa se scrie numere crescatoare cu 1 (0, 1, 2 $7F), iar de la adresa $80 la adresa $FF sa se scrie numere descrescatoare incepand de la $7F ($7f,$7E,$7D,.., 1, 0). Se va avea grija ca scrierea in EEPROM sa se faca cu verificarea finalizarii la fiecare octet.

Se va modifica programul astfel ca la aparitia intreruperii externe 0, rutina de deservire a acestei intreruperi sa citeasca o valoare din EEPROM si sa o afiseze la leduri. La prima intrerupere se va citi de la adresa 0, la a doua intrerupere de la adresa 1, s.a.m.d de la adrese consecutive.

Acelasi program ca la punctul 3, dar folosind intreruperea de depasire a T/C1.

Observatie: La programarea microcontrolerului cu ISP se va avea grija ca optiunile Write EEPROM si Verify EEPROM sa nu fie bifate.

5. Se va scrie un program care sa afiseze ciclic la leduri informatia urmatoare din EEPROM, introdusa prin directive DB (v. indicatiile):

00011000

00100100

01000010

10000001

01000010

00100100

00011000

Citirea se va face cu viteza data de T/C0 pus pe constanta de divizare maxima, folosind intreruperea de depasire.

6. Se va modifica programul anterior prin adaugarea a inca 3 secvente de afisat (la alegere), si care sa poata fi alternate prin intreruperea externa 0

7. Acelasi program ca la punctul 2, dar folosind pentru alternarea secventelor intreruperi de la T/C1.

Indicatii:

Scrierea constantelor de un octet in EEPROM sau in memoria de program se face cu directiva de asamblare DB. Constantele care urmeaza dupa aceasta expresie vor fi scrise, la programarea dispozitivului, in EEPROM daca directiva DB este precedata de directiva .ESEG sau in memoria de program daca este precedata de directiva .CSEG. Referirea la constantele respective se obtine prin intermediul unei etichete pusa in linia directivei .DB. Aceasta eticheta va fi vazuta de restul programului ca o adresa de memorie, de 2 octeti, octetul inferior fiind obtinut cu functia low(eticheta) iar cel superior cu functia high(eticheta).

Sintaxa este deci urmatoarea:

ETICHETA: .DB listadeexpresii

Exemplu:

.ESEG

econst: .DB 0xaa, $35, 211

.CSEG

const: .DB 0,255,0b01010101, -128, 0xaa

.

.

.

ldi r30, low(econst) ;Adresa inferioara a constantei ;din EEPROM

ldi r31, high(econst) ;si adresa superioara

out $1F, r31 ;se scriu in registrul de ;adrese

out $1E, r30 ;al EEPROM

ldi r16, $01 ;Comanda de citire

out $1c, r16 ;catre registrul de control al ;EEPROM

in r20, $1d ;Citirea in r20 a constantei ;din EEPROM

In memoria de program constantele (avind 8 biti) sunt impachetate cate doua intr-o locatie





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate