-
SISTEME CU MICROPROCESOARE note de curs
1
3. ORGANIZAREA MEMORIEI
Cuprins
Introducere
Obiective
3.1 MEMORIA PROGRAM
3.1.1 Structura memoriei program
3.1.2 Numrtorul de program
3.1.3 Stiva adreselor de revenire
3.2 MEMORIA DE DATE RAM
3.2.1 Utilizarea Bank-urilor
3.2.2 Utilizarea Access Bank-ului
3.2.3 Utilizarea instruciunii MOVFF
3.3 MEMORIA DE DATE EEPROM
Concluzii
Teste de autoevaluare
Bibliografie
Dicionar
Teste de evaluare
-
ORGANIZAREA MEMORIEI
2
Introducere
Buna nelegere a organizrii memoriei permite realizarea unor
programe
care utilizeaz eficient memoria. n cazul microcontrolerelor,
aceast
problem este deosebit de important din cauza limitrilor impuse
de
resursele fizice disponibile. Microcontrolerele din familia
PIC18 cuprind
de regul n arhitectura lor trei tipuri de memorie:
- memorie program; - memorie de date RAM; - memorie de date
EEPROM.
Obiective
Dup parcurgerea acestui capitol cursantul va trebui:
- s cunoasc structura i harta memoriei program i a memoriei de
date, dar i rolul pe care aceste memorii l ndeplinesc n cadrul
microcontrolerului PIC18F4455;
- s neleag mecanismul de adresare implementat prin bank-uri
i
legtura sa cu registrul de selecie al bank-urilor BSR - s
cunoasc rolul i structura Access Bank-ului - s cunoasc rolul i
structura stivei - s cunoasc rolul i structura numrtorului de
program i a
regitrilor asociai
3.1 MEMORIA PROGRAM
3.1.1 Stuctura memoriei program
Rolul pe care l ndeplinete memoria program este de a furniza un
spaiu de stocare
pentru instruciunile care formeaz programul executat de
microcontroler.
Capacitatea total de adresare a microcontrolerelor din familia
PIC18 este de 2MByte.
n aceste condiii magistrala de adrese a memoriei program va avea
limea de 21 de bii
(2MByte=221Byte), iar numrtorul de program, asupra cruia se va
reveni n paragraful
urmtor, va avea i el dimensiunea de 21 de bii. Din cei 2MBytes,
n cazul
microcontrolerului PIC18F4455 este implementat fizic o memorie
program de tip Flash cu
dimensiunea de 24KBytes. Acest lucru permite ca memoria s poat
fi tears i rescris de
foarte multe ori, datele tehnice menionnd un numr de 100000 de
tergeri/scrieri posibile.
-
SISTEME CU MICROPROCESOARE note de curs
3
Din punct de vedere al dimensiunii programului care poate fi
stocat n aceast
memorie, o scurt analiz ne conduce la concluzia conform creia n
24kB de memorie
program se poate stoca un program format din pn la 12268 de
instruciuni scurte (de 16
bii).
Accesarea unei locaii de memorie cuprins ntre limita superioar a
memoriei
implementate fizic i limita maxim a spaiului de adresare de
2MByte va ntoarce valoarea
zero, fiind echivalent execuiei instruciunii NOP (No OPeration).
Microcontrolerele din familia PIC18 dispun de doi vectori de
ntrerupere care se
gsesc la adresele 0008h i 0018h. La apariia unor nteruperi vor
fi executate n mod automat instruciunile care se vor regsi n
memorie la aceste adrese. Asupra acestei chestiuni
se va reveni n capitolul dedicat sistemului de ntreruperi.
Adresa de reset a
microcontrolerului se gsete la locaia 0000h. Aceasta este adresa
la care se reseteaz numrtorul de program. n afara acestor trei
locaii de memorie mai speciale, restul locaiilor
memoriei program sunt echivalente.
n Fig. 3.1 se prezint harta memoriei program pentru
microcontrolerul PIC18F4455.
Fig. 3.1. Harta memoriei program
Dup cum s-a putut vedea n capitolul anterior, din punct de
vedere al dimensiunii,
instruciunile pot fi mprite n dou categorii: instruciuni scurte
(16 bii) i instruciuni lungi
(32 bii). Instruciunile scurte vor ocupa dou locaii de memorie
succesive, iar instruciunile
lungi vor ocupa patru locaii de memorie. n ambele cazuri octetul
cel mai puin semnificativ
-
ORGANIZAREA MEMORIEI
4
al instruciunii va ocupa o adres par. Urmtorul exemplu prezint
modul de reprezentare al
instruciunilor n memoria program.
Exemplu
Se consider o seciune de cod format din trei instruciuni scurte
a cror
codificare n memoria program are forma prezentat n Fig. 3.2.
Fig. 3.2. Reprezentarea instruciunilor n memoria program
Citirea si scrierea memoriei program a microcontrolerelor (fr a
lua n considerare
execuia propriu-zis a codului) se realizeaz de regul utiliznd un
circuit extern de
programare i un set de pini bine definii pentru acest scop.
Microcontrolerul PIC18F4455
permite citirea i scrierea memoriei program i prin intermediul
instruciunilor de sciere/citire
tabelar de tip TBLRD/TBLWT. Utiliznd aceste instruciuni, se
poate citi codul, se pot efectua programatic modificri asupra
codului, se pot stoca date i se pot citi date din
memoria program.
3.1.2 Numrtorul de program
Numrtorul de program (en. PC=Program Counter) conine adresa
urmtoarei
instruciuni care va fi extras din memorie. Pentru a putea adresa
ntreaga memorie,
numrtorul de program are dimensiunea de 21 de bii mprii n trei
regitri de 8 bii: PCL, PCH i PCU.
Registrul PCL (en. Program Counter Low) conine primii opt bii ai
numrtorului program PC, registrul PCH (en. Program Counter High)
conine urmtorii opt bii ai numrtorului program PC, iar registrul
PCU (en. Program Counter Upper) conine cei cinci bii superiori ai
numrtorului program PC.
-
SISTEME CU MICROPROCESOARE note de curs
5
n mod normal, numrtorul de program se incrementeaz de dou ori,
automat, dup
fiecare faz de extragere a unei instruciuni din memorie,
funcionnd n esen asemenea
unui numrtor binar uzual. Totui, instruciuni precum GOTO, care
permit efectuarea de salturi la diverse instruciuni din memoria
program, intervin n incrementarea obinuit
realizat de numrtorul de program prin modificndu-i valoarea.
Chiar dac modificarea
valorii numrtorului program este lsat de obicei n seama
instruciunilor specializate,
exist posibilitatea de a accesa regitrii numrtorului program i
de a interveni n evoluia sa
normal. n general, acest lucru este util atunci cnd se dorete
accesul la elementele unor
tablouri implementate n memoria program, dup cum se va vedea n
unul din capitolele
urmtoare.
Accesul la regitrii numrtorului de program este ntr-o oarecare
msur problematic,
din cauza faptului c regitrii si au dimensiunea de opt bii, iar
toate modificrile
numrtorului de program trebuie s afecteze simultan toi cei 21 de
bii ai si, pentru a
realiza modificarea atomic a valorii sale.
Dintre regitrii numrtorului de program, doar PCL poate fi scris
i citit direct, fiind mapat sub forma unui registru special n
memorie. Pentru PCH i PCU s-au introdus doi regitri tampon PCLATH
(en. PC LATch High) i PCLATU (en. PC LATch Upper).
Pentru a rezolva problema modificrii coninutului numrtorului de
program, scrierea
unei valori n registrul PCL (ex. MOVWF PCL) transfer simultan i
coninutul regitrilor tampon PCLATU:PCLATH n regitrii PCU:PCH. La
citirea registrului PCL (ex. MOVF PCL,W) se transfer simultan i
coninutul regitrilor PCU:PCH n regitrii tampon PCLATU:PCLATH. n
acest fel, scrierea i citirea valorii efective a numrtorului de
program se realizeaz ntr-un singur pas.
Structura numrtorului de program i modul n care se face accesul
la regitrii si se
prezint n Fig. 3.3.
Fig. 3.3. Structura numrtorului de program i accesul la regitrii
si
Pentru a ilustra procesul de modificare a valorii numrtorului de
program se
consider exemplul urmtor
-
ORGANIZAREA MEMORIEI
6
Exemplu
Se analizeaz cazul creterii valorii numrtorului de program cu
24
(PC+24) realizndu-se astfel un salt peste urmtoarele 12
instruciuni (24 octei) ale programului fr a se utiliza instruciuni
de control al execuiei.
Presupunnd c a fost declarat n prealabil un registru de uz
general denumit
TEMP, atunci urmtoarea poriune de cod va realiza cele propuse.
MOVF PCL,W ; se salveaz PCL n registrul TEMP MOVWF TEMP MOVLW d24 ;
se mut constanta 24 n WREG ADDWF TEMP,F ; se adun la valoarea din
PCL MOVLW 0 ; se pune valoarea 0 n WREG ADDWFC PCLATH,F ; se adun
bitul de transport la PCLATH MOVLW 0 ; se pune valoarea 0 n WREG
ADDWFC PCLATU,F ; se adun bitul de transport la PCLATU MOVF TEMP,W
; se nscrie noua valoare n PCL pentru aMOVWF PCL ; actualiza i
restul regitrilor PC
Depirea cu o unitate a valorii maxime stocate ntr-unul din
regitrii
numrtorului program nu conduce la incrementarea automat a
valorii
registrului superior.
Codul prezentat mai sus ofer o soluie la aceast problem.
Astfel,
deoarece nu se cunoate valoarea iniial a PC, adunarea valorii 24
la PCL poate conduce la depirea valorii maxime care poate fi stocat
pe 8 bii
(255) n acest registru. Prin utilizarea bitului de transport
care se adun la
valoarea din PCLATH, i apoi la valoarea din PCLATU se asigur
modificarea corect a valorii PC.
Ca o msur de protecie suplimentar, bitul 0 al numrtorului
program va avea tot
timpul valoarea 0 (PC=0). n acest fel se evit obinerea de adrese
invalide ca urmare a modificrii valorii numrtorului de program, iar
acesta va indica ntotdeauna spre adresa de
nceput a unei instruciuni.
3.1.3 Stiva adreselor de revenire
Apelul unei subrutine este echivalent cu salvarea adresei primei
instruciuni a
subrutinei n numrtorul de program (PC), efectund practic un
GOTO. Astfel, dac subrutina noastr ar ncepe la adresa 0400h din
memoria program, atunci GOTO 0x400 ar fi
-
SISTEME CU MICROPROCESOARE note de curs
7
echivalent cu apelul subrutinei. Presupunnd c programatorul a
plasat eticheta Delay_1ms naintea primei instruciuni a subrutinei,
atunci am avea GOTO Delay_1ms.
Apare totui o problem n mecanismul prezentat. Procesorul trebuie
s i aduc
aminte din ce loc al programului s-a efectuat apelul subrutinei,
pentru a se putea ntoarce cu
execuia la instruciunea imediat urmtoare apelului de subrutin.
Acest lucru este pus n
eviden n Fig. 3.4 unde apelul de subrutin se poate produce din
dou locuri diferite ale
programului principal sau chiar dintr-o alt subrutin, dup cum se
va vedea n Fig. 3.6.
Fig. 3.4. Apelul de subrutin
O soluie la aceast problem este de a salva, nainte de a efectua
apelul/saltul, adresa
de revenire ntr-un registru de adrese sau ntr-o locaie de
memorie. La sfritul subrutinei,
adresa salvat poate fi mutat napoi n numrtorul de program,
realizndu-se astfel
ntoarcerea din subrutin. Din pcate, aceast abordare nu va
funciona n cazul apelului a
dou subrutine imbricate, deoarece la apelul celei de-a doua
subrutine se va suprascrie adresa
de revenire a primei subrutine i evoluia programului nu va mai
fi cea dorit. Prin utilizarea
unui numr mai mare de regitri de adres sau locaii de memorie,
care vor forma o stiv de
tip LIFO (Last In First Out) i care va stoca adresele de
revenire s-ar rezolva i aceast
problem.
Microcontrolerele din seria PIC18 implementeaz o stiv format din
31 de regitri cu
dimensiunea de 21 de bii utilizat pentru stocarea adreselor de
revenire a subrutinelor i
rutinelor de tratare a ntreruperilor. n Fig. 3.5 se prezint
aceast structur cunoscut sub
denumirea de stiva adreselor de revenire. Aceast stiv reprezint
un spaiu de memorie
distinct, nefiind mapat n spaiul de adrese al memoriei de date,
iar structura ei permite
efectuarea unui numr maxim de 31 de apeluri de subrutine
imbricate.
-
ORGANIZAREA MEMORIEI
8
Fig. 3.5. Utilizarea stivei adreselor de revenire
Stiva are asociat un indicator de stiv (en. Stack Pointer) cu
dimensiunea de 5 bii,
care se gsete n registrul STKPTR, biii . La fiecare apel de
subrutin (CALL) indicatorul de sitv se incrementeaz automat i
starea numrtorului de program este copiat
n registrul din stiv spre care acesta indic. Adresa salvat
reprezint adresa instruciunii
imediat urmtoare (dup CALL). Dup ce PC a fost pus pe stiv,
acesta este suprascris cu adresa instruciunii destinaie. La fel ca
i n cazul instruciunii GOTO, i instruciunea CALL este tot o
instruciune lung, lucru care permite subrutinelor implementate s
fie plasate
oriunde n spaiul memoriei program.
Fig. 3.5-a prezint configuraia stivei la reset, atunci cnd
indicatorul de stiv are
valoarea 0. Adresa 0 a stivei nu este utilizat niciodat,
deoarece ntotdeauna indicatorul de
stiv se incrementeaz nainterea punerii PC pe stiv. n situaia
prezentat n Fig. 3.5-b se arat configuraia stivei dup apelul unei
subrutine cu eticheta Delay_1ms.
Apelul subrutinei CALL Delay_1ms determin urmtoarele: 1.
Indicatorul de stiv se incrementeaz;
2. Cei 21 de bii ai PC se copiaz n locaia din stiv spre care
indic indicatorul de stiv. Datele stocate reprezint adresa
instruciunii care urmeaz dup CALL;
-
SISTEME CU MICROPROCESOARE note de curs
9
3. Adresa instruciunii de destinaie, marcat prin eticheta
Delay_1ms, care corespunde primei instruciuni a subrutinei, va
suprascrie PC. Acest lucru determin transferul execuiei ctre
subrutin.
Revenirea din subrutin, prezentat n Fig. 3.5-c, se produce la
execuia instruciunii
RETURN, i determin urmtoarele operaii: 1. Se copiaz n PC adresa
de 21 de bii din registrul stivei spre care indic indicatorul
de stiv;
2. Se decrementeaz indicatorul de stiv.
Mecanismul implementat de stiv i prezentat n Fig. 3.5 permite
execuia corect a
apelurilor de subrutin, dar avantajul oferit de stiv este mult
mai evident n cazul subrutinelor
imbricate. Petru a exemplifica acest lucru se consider situaia
prezentat n Fig. 3.6, unde
programul principal apeleaz subrutina SR1, care apeleaz la rndul
ei subrutina SR2, revenindu-se apoi pe rnd la programul principal.
Structura de tip LIFO a stivei permite
rezolvarea oricrei situaii de imbricare de pn la 31 de
subrutine.
Fig. 3.6. Subrutine imbricate
Pe lng funcionarea automat a stivei, care a fost prezentat pn
acum, exist i
posibilitatea de a accesa manual coninutul stivei. n Fig. 3.7 se
prezint structura stivei care
poate utiliza, pe lng indicatorul de stiv din registrul STKPTR,
i tripletul format din regitrii de la vrful stivei: TOSU:TOSH:TOSL
(Top Of Stack Upper/High/Low). La orice moment dat, regitrii TOS
conin cei 21 de bii de date de pe poziia din stiv spre care
indic
-
ORGANIZAREA MEMORIEI
10
indicatorul de stiv STKPTR. Modificarea regitrilor TOS va
conduce la modificarea coninutului de pe poziia corespunztoare a
stivei. n acest fel se permite examinarea sau
chiar modificarea valorilor adreselor de revenire stocate n
stiv.
Fig. 3.8. Structura stivei adreselor de revenire
Prin deplasarea indicatorului de stiv n sus i n jos pot fi
accesate datele localizate pe
diferite poziii n stiv. Astfel, indicatorul de stiv STKPTR poate
lua valori de la 0 la 31. n momentul n care ajunge la valoarea 31,
bitul STKFUL (en. STAcK FuLl) este pus pe 1 indicnd stiva plin, iar
n momentul n care ajunge la valoarea 0, bitul STKFUNF (en. STAcK
UNderFlow) este pus pe 1. Structura registrului STKPTR care conine
indicatorul de stiv i cei doi bii de stare se prezint n Fig.
3.8.
7 0 STKFUL STKUNF - SP4 SP3 SP2 SP1 SP0
Fig. 3.8. Structura registrului STKPTR
n afara instruciunilor de apel i revenire din subrutin, setul de
instruciuni al
microcontrolerelor din seria PIC18 mai curpinde dou instruciuni:
PUSH i POP special concepute pentru manipularea indicatorului de
stiv fr a produce saltul spre sau revenirea
dintr-o subrutin.
Instruciunea PUSH, prezentat n Fig. 3.9-a, incrementeaz
indicatorul de stiv i copiaz coninutul numrtorului de program (care
indic spre instruciunea care urmeaz
dup PUSH) pe stiv, care va fi apoi accesibil prin regitrii TOS.
Instruciunea este asemntoare lui CALL fr a suprascrie ns PC cu
adresa de nceput a unei subrutine. Instruciunea POP, prezentat n
Fig. 3.9-b, decrementeaz indicatorul de stiv, iar TOS se modific
pentru a reflecta coninutul stivei de pe noua poziie spre care
indic indicatorul de stiv.
-
SISTEME CU MICROPROCESOARE note de curs
11
Fig. 3.8. Instruciunile PUSH i POP
3.2 MEMORIA DE DATE RAM
Acest tip de memorie este utilizat de regul pentru stocarea
datelor temporare necesare
rulrii programelor (ex. variabile i constante de program).
Capacitatea total de adresare a memoriei RAM pentru
microcontrolerele din familia
PIC18 este de 4096 de octei, fiecare octet purtnd denumirea de
registru. Aceti regitri pot fi
mprii n dou categorii: regitri destinai stocrii datelor denumii
Regitri de Uz General
(en. GPR = General Purpose Registers), respectiv regitri cu
anumite funcii de configurare /
monitorizare cunoscui sub denumirea de Regitri Speciali (en. SFR
= Special Function
Registers). Maparea regitrilor GPR i SFR n acelai spaiu de
adrese permite accesarea lor
prin intermediul unui singur set de instruciuni. Din cei 4096
octei de memorie RAM,
microcontrolerul PIC18F4455 implementeaz un total de 2048 de
octei.
Un spaiu de stocare de 4kBytes necesit o adres de 12 bii (4096
Bytes = 212 Bytes).
Dup cum s-a putut vedea n capitolul anterior, pentru marea
majoritate a instruciunilor,
cmpul prevzut pentru adres n codul instruciunii este de doar 8
bii. Exist patru modaliti
de a ocoli acest inconvenient pentru a putea accesa ntreaga
memorie:
- utilizarea Bank-urilor; - utilizarea Access Bank-ului;
- utilizarea instruciunii MOVFF; - utilizarea pointerilor (vezi
capitolul urmtor).
-
ORGANIZAREA MEMORIEI
12
3.2.1 Utilizarea Bank-urilor
Pentru a asigura adresarea pe un octet a ntregii zone de memorie
(utiliznd
instruciuni scurte), memoria de date este mprit n bank-uri (Fig.
3.9). O asemenea
mprire nseamn c nu este necesar specificarea ntregii adrese (de
12 bii) pentru fiecare
operaie de scriere sau citire a memoriei, ci doar a unei pri a
acesteia (8 bii din cei 12).
Fig. 3.9. Structura memoriei RAM la microcontrolerul
PIC18F4455
Numrul de bank-uri pentru seria PIC18 este de 16, fiecare bank
coninnd 256 de
octei. Din aceste 16 bank-uri, microcontrolerul PIC18F4455
implementeaz doar 8. Regitrii
SFR sunt implementai n partea superioar a bank-ului 15 (160 de
octei), iar n rest regitrii
sunt de uz general. Dac se utilizeaz comunicarea prin USB,
bank-urile 4-7 sunt folosite
pentru a asigura transferul de date USB.
-
SISTEME CU MICROPROCESOARE note de curs
13
Pentru formarea adresei complete de 12 bii se va utiliza un
octet care specific adresa
n cadrul bank-ului (cei 8 bii inferiori ai adresei complete) i 4
bii reprezentnd numrul
bank-ului accesat (restul de 4 bii ai adresei complete).
Majoritatea instruciunilor din familia PIC18 utilizeaz cei 4 bii
pentru selecia bank-
ului, acetia fiind accesibili prin intermediul registrului
special BSR (en. Bank Select Register). Acest registru conine biii
cei mai semnificativi ai adresei de 12 bii (BSR), ceilali 8 bii ai
adresei fiind specificai n cadrul instruciunii.
Pentru modificarea coninutului acestui registru este disponibil
o instruciune
special: MOVLB (en. Move Literal to BSR). De exemplu, selectarea
bank-ului 2 se poate realiza cu urmtoarea instruciune:
MOVLB 0x02 sau, lund n considerare c BSR este un simplu registru
ca oricare altul, valoarea sa se poate modifica i pe baza urmtoarei
secvene de instruciuni:
MOVLW 0x02 MOVWF BSR
Trebuie menionat faptul c toate instruciunile de lucru cu
regitrii se aplic i asupra
registrului BSR.
n exemplul urmtor se prezint modul de adresare al memoriei
folosind bank-urile.
Exemplu
Pentru a modifica valoarea registrului de la adresa 0x20 din
Bank-ul 2
trebuie parcuri urmtorii pai:
- se mut constanta 2 n registrul BSR - se acceseaz registrul de
la adresa 0x20 asigurndu-ne c bitul a din
codul instruciunii are valoarea 1 (a=1 sau a=BANKED) Urmtoarea
secven de cod terge coninutul registrului de la adresa 0x202.
;selectare Bank 2 (BSR = 2) MOVLB 0x02
;accesare registrul 0x20 din Bank 2 CLRF 0x20, BANKED
Avnd n vedere c pn la 16 regitri pot avea aceeai adres
inferioar, utilizatorul
trebuie s se asigure c a selectat bank-ul de lucru potrivit
nainte de a realiza operaii de
scriere sau citire. Aceast situaie este exemplificat n
continuare:
-
ORGANIZAREA MEMORIEI
14
Exemplu
;selectare Bank 2 (BSR = 2) MOVLB 0x02
;accesare registrul 0x00 din Bank 2. CLRF 0x00, BANKED
;selectare Bank 3 (BSR = 3) MOVLB 0x03
;accesare registrul 0x00 din Bank 3 INCF 0x00, BANKED
n exemplul anterior se observ faptul c cei doi regitri accesai,
unul din
bank-ul 2 i cellalt din bank-ul 3, dispun de aceeai adres
inferioar
(0x00) introdus prin intermediul instruciunilor. n Fig. 3.10 se
prezint modul de formare al adresei complete n cazul
accesrii directe a memoriei prin intermediul bank-urilor i a
registrului
BSR.
Fig. 3.10. Formarea adresei n vederea accesrii memoriei RAM prin
Bank-uri
3.2.2 Utilizarea Access Bank-ului
Utilizarea registrului BSR mpreun cu adresa de 8 bii specificat
prin intermediul instruciunilor permite adresarea ntregii memorii,
dar ridic i anumite inconveniente pe care
utilizatorul trebuie s le ia n considerare. Acesta trebuie s se
asigure ntotdeauna c este
selectat bank-ul de lucru corect, pentru a accesa datele din
zona dorit de memorie. Aceste
inconveniente sunt mai evidente atunci cnd se dorete accesul la
regitrii speciali (care se
gsesc n Bank 15) pentru anumite configurri, lucru care presupune
schimbarea bank-ului de
lucru, iar apoi revenirea la bank-ul curent de lucru n vederea
utilizrii regitrilor de uz
general. Astfel, verificarea i/sau modificarea coninutului
registrului BSR pentru fiecare operaie de scriere sau citire a
memoriei poate deveni foarte ineficient din cauza creterii
-
SISTEME CU MICROPROCESOARE note de curs
15
numrului de instruciuni utilizate, care conduce, n mod evident,
spre creterea timpului de
execuie al programului, i predispune frecvent la erori.
Aceast problem a fost rezolvat prin introducerea unei zone
virtuale de memorie
denumit Access Bank, accesibil fr modificarea bank-ului. Aceast
zon de memorie
mapeaz primii 96 de regitri GPR (din Bank 0) i cei 160 de
regitri SFR (din Bank 15).
Pentru a accesa zona de memorie mapat n Access Bank,
utilizatorul va fi nevoit s
reseteze bitul de acces (a=0 sau a=ACCESS) existent n cadrul
instruciunilor. Astfel, cnd bitul de access (a) al instruciunilor
va avea valoarea 1 (BANKED), la
formarea adresei se va lua n considerare coninutul registrului
BSR, iar operandul f al instruciunilor va reprezenta locaia accesat
din cadrul bank-ului selectat. Cnd bitul de
access (a) al instruciunilor va avea valoarea 0 (ACCESS),
coninutul registrului BSR este ignorat, iar operandul f al
instruciunilor va reprezenta adresa unei locaii din Access
Bank.
n exemplul urmtor se prezint modul de adresare al memoriei prin
intermediul
Access Bank-ul.
Exemplu
Se consider cazul accesului la registrul special TRISA, aflat n
Bank-ul 15 la adresa 0xF92, precum i accesul la registrul de uz
general de la adresa 0x007 din Bank-ul 0, ambii regitri utilizai
fiind mapai n Access Bank:
CLRF TRISA, ACCESS BSF TRISA, 4, ACCESS INCF 0x07, ACCESS
3.2.3 Utilizarea instruciunii MOVFF
Instruciunea MOVFF permite mutarea unui octet de date dintr-un
loc n orice alt loc al memoriei RAM de date. MOVFF este una din
cele doar patru instruciuni lungi (avnd 32 bii) disponibile n setul
de instruciuni al microcontrolerului, lucru care i permite s
stocheze, de
una singur, adresele complete de 12 bii ale regitrilor surs i
destinaie. Astfel, dac se
dorete, de exemplu, s se mute un octet din registrul de la
adresa 0xF81 (PORTB) n locaia de memorie de la adresa 0x220 se
poate utiliza MOVFF 0xF81, 0x220, fr a recurge la Access Bank sau
Bank-uri. Totui, avnd n vedere c MOVFF este o instruciune lung,
aceasta va necesita dou cicluri instruciune pentru a fi extras din
memoria program, avnd
astfel un timp de execuie dublu fa de instruciunile simple.
-
ORGANIZAREA MEMORIEI
16
3.3 MEMORIA DE DATE EEPROM
Memoria EEPROM este o memorie nevolatil utilizat de regul pentru
stocarea
datelor program persistente. De exemplu, aceast zon de memorie
poate fi util la
memorarea configurrilor unui proces, astfel nct acestea s nu se
piard cnd sistemul nu
este alimentat. Numrul de octei EEPROM disponibili pentru
P18F4455 este de 256. Datele
se citesc i se scriu pe un octet. Specificaiile tehnice
menioneaz un numr de 1.000.000 de
stergeri/scrieri posibile.
Memoria EEPROM nu este mapat n spaiul de memorie RAM sau
program. n
schimb, se acceseaz indirect utiliznd un set de regitri
speciali: EECON1, EECON2, EEDATA i EEADR.
Concluzii
n acest capitol s-a prezentat modul de organizare a memoriei
microcontrolerului PIC18F4455. Acest microcontroler dispune de
trei
tipuri diferite de memorie.
Memoria program este utilizat pentru stocarea programului,
avnd o capacitate total de adresare de 2MB, din care sunt
implementai
fizic 24kB. Pentru a putea adresa ntreaga memorie,
microcontrolerul
dispune de un numrtor de program cu dimensiunea de 21 de bii,
care
poate fi accesat prin intermediul a trei regitri mapai n spaiul
de
memorie RAM. Stiva adreselor de revenire este implementat sub
forma
unei structuri LIFO cu 31 de nivele.
Memoria RAM de date are rolul de a stoca datele temporare
necesare rulrii programelor. Are dimensiunea de 4kB, fiind mprit
n
16 Bank-uri de 256B. Primii 96 de regitri GPR din Bank 0 i cei
160 de
regitri SFR din Bank 15 pot fi accesai prin intermediul unei
zone
virtuale de memorie denumit Access Bank.
Memoria EEPROM este o memorie nevolatil utilizat pentru
stocarea datelor program persistente care poate fi accesat
prin
instuciunile cunoscute cu ajutorul unor regitri SFR mapai n
memoria
RAM.
-
SISTEME CU MICROPROCESOARE note de curs
17
1. Cum se formeaz adresa complet n cazul utilizrii Access
Bank-
ului?
2. De ce este necesar modificarea atomic a regitrilor
numrtorului
de program?
3. Care este diferena ntre instruciunile GOTO i CALL din punct
de vedere al stivei i al numrtorului de program?
4. Care este rolul Access Bank-ului?
5. Cum se poate modifica manual coninutul stivei?
6. Ce rol ndeplinete parametrul a n codul instruciunii? 7. Cum
se formeaz adresa complet n cazul utilizrii Bank-urilor?
Teste de autoevaluare
8. Ce rol ndeplinete registrul BSR?
[1] Sid Katzen The Essential PIC18 Microcontroller, Springer
Verlag
London, 2010
[2] Genge Bela, Haller Piroska Proiectarea sistemelor dedicate
i
ncorporate cu microcontrolerul PIC, Editura universitii
Petru
Maior din Tg. Mure, 2008
[3] Microchip PIC18F2455/2550/4455/4550 Data Sheet,
Microchip
Technology Inc. 2006
Bibliografie
[4] www.microchip.com
-
ORGANIZAREA MEMORIEI
18
Dicionar
Access Bank
Zon virtual de memorie prin intermediul creia se pot accesa
primii 96
de regitri GPR din Bank 0 i cei 160 de regitri SFR din Bank
15.
Bank
Zon de memorie format din 256 de octei utilizat ca diviziune
a
memoriei RAM de date.
BSR
Bank Select Register. Registru de selecie a Bank-urilor
EEPROM
Electrically Erasable Programmable Read-Only Memory. Memorie
nevolatil utilizat pentru a stoca mici cantiti de date care
trebuie
pstrate n lipsa alimentrii.
Etichet
Identificator introdus n codul surs pentru a marca adresa de
nceput a
unei instruciuni
GPR
General Purpose Registers. Regitri de uz general
LIFO
Last In First Out. Mod n care sunt stocate i scoase datele din
stiv.
Memorie de date
Spaiu de stocare temporar (RAM) pentru datele cu care
lucreaz
programul
Memorie program
Spaiu de stocare pentru program
Memorie virtual
Tehnic de gestiune a memoriei care virtualizeaz diferite forme
de
stocare a datelor (ex. RAM) care pot fi accesate din program n
mod
asemntor memoriei fizice.
Numrtor de program
Numrtor binar utilizat pentru adresarea instruciunilor. Conine
adresa
instruciunii care urmeaz a fi executat
Octet
1 Byte = 8 bii. Capacitatea de stocare a unui registru
PCL
Program Counter Low. Registrul care conine biii ai
numrtorului
-
SISTEME CU MICROPROCESOARE note de curs
19
de program.
PCLATH
Program Counter Latch High. Registru tampon asociat PCH
PCLATU
Program Counter Latch Upper. Registru tampon asociat PCU PCH
Program Counter High. Registrul care conine biii ai
numrtorului de program. Este un registru ascuns i nu poate fi
accesat
direct.
PCU
Program Counter Upper. Registrul care conine biii ai
numrtorului de program. Este un registru ascuns i nu poate fi
accesat
direct.
Registru
Spaiu de stocare . Locaie de memorie. Octet n memoria RAM de
date
SFR
Special Function Registers. Regitri cu funcii speciale
STKPTR
Stack Pointer Register. Registrul care conine indicatorul de
stiv i doi
bii care indic starea stivei.
Stiv
Spaiu de memorie n care se salveaz adresele de revenire n
cazul
apelurilor de subrutin
TOS
Top of stack. Regitrii de la vrful stivei (TOSU:TOSH:TOSL) care
conin imaginea datelor din stiv spre care indic indicatorul de
stiv