c03-organizarea memoriei

19
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 Numărătorul 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 instrucţiunii MOVFF 3.3 MEMORIA DE DATE EEPROM Concluzii Teste de autoevaluare Bibliografie Dicţionar Teste de evaluare

Upload: florea-dan-valeriu

Post on 19-Oct-2015

75 views

Category:

Documents


6 download

TRANSCRIPT

  • 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