+ All Categories
Home > Documents > 01 Structura Hardware a Microcontrolerului PIC 18LF4520

01 Structura Hardware a Microcontrolerului PIC 18LF4520

Date post: 27-Jan-2016
Category:
Upload: ionut-stanciu
View: 18 times
Download: 4 times
Share this document with a friend
Description:
Descrierea completa a structurii hardware a microcontrolerului PIC18LF.Hardware description of PIC1LF includin voltage range and periferic capabilities.
39
1. STRUCTURA HARDWARE A MICROCONTROLERULUI PIC 18LF4520 Scopul lecţiei: Prezentarea succintă a arhitecturii şi componentelor de bază ale microcontrolerului PIC 18LF4520, componenta centrală în sistemul de dezvoltare PICDEM 2 Plus folosit pentru lecţiile practic e din acest manual. Familiarizarea cu documentaţia şi pagina de internet a firmei Microchip. 1.1. Introducere Microcontrolerele sunt de fapt structuri de microcalculator special concepute pentru aplicaţii de comandă şi control ale unor sisteme dedicate (embedded). În esenţă, un microcontroler integrează pe acelaşi chip următoarele componente de bază ale unui microcalculator: unitatea centrală de prelucrare (CPU), memoria de date, memoria program şi funcţii periferice cum ar fi: porturi, timere, comunicaţii serie, interfeţe analogice (convertor analog– digital, comparatoare analogice), memorie suplimentară de date de tip EEPROM etc. Arhitectura microcontrolerelor PIC ale firmei Microchip (Fig. 1 .1) este bazată pe un set modificat de instrucţiuni Harvard Fig. 1.1. Arhitectura microcontrolerelor PIC pe 8 biţi 7
Transcript
Page 1: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

1. STRUCTURA HARDWARE A MICROCONTROLERULUI PIC 18LF4520

Scopul lecţiei:Prezentarea succintă a arhitecturii şi componentelor de bază ale microcontrolerului PIC 18LF4520, componenta centrală în sistemul de dezvoltare PICDEM 2 Plus folosit pentru lecţiile practice din acest manual. Familiarizarea cu documentaţia şi pagina de internet a firmei Microchip.

1.1. Introducere

Microcontrolerele sunt de fapt structuri de microcalculator special concepute pentru aplicaţii de comandă şi control ale unor sisteme dedicate (embedded). În esenţă, un microcontroler integrează pe acelaşi chip următoarele componente de bază ale unui microcalculator: unitatea centrală de prelucrare (CPU), memoria de date, memoria program şi funcţii periferice cum ar fi: porturi, timere, comunicaţii serie, interfeţe analogice (convertor analog–digital, comparatoare analogice), memorie suplimentară de date de tip EEPROM etc.

Arhitectura microcontrolerelor PIC ale firmei Microchip (Fig. 1.1) este bazată pe un set modificat de instrucţiuni Harvard RISC care asigură o cale de migrare uşoară de la 6 la 80 de pini şi de la 384 bytes la 128 Kbytes de memorie program. Un set de instrucţiuni simple şi o migraţie lină între familiile de produse fac din microcontrolerele PIC o alegere bună pentru cei care au nevoie de flexibilitate şi performanţă.

Instrucţiunile cu lăţimea de 12 biţi (gama de bază), de 14 biţi (gama medie şi medie îmbunătăţită) şi de 16 biţi (PIC18) sunt compatibile în sus şi sunt adaptate pentru a maximiza eficienţa procesării şi pentru creşterea performanţei.

Instrucţiunile şi datele sunt transferate pe magistrale diferite pentru evitarea blocajelor în prelucrare (arhitectură Harvard). Aceasta creşte viteza şi performanţa globală a sistemului. Tehnica pipeline cu două etaje permite ca în timp ce o instrucţiune este executată o alta să fie preluată.

Fig. 1.1. Arhitectura microcontrolerelor PIC pe 8 biţi

7

Page 2: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Instrucţiunile având un singur cuvânt cresc eficienţa codului şi reduc memoria de program necesară.

Sistemul de dezvoltare PICDEM 2 Plus, folosit pentru lecţiile din prezenta lucrare, este echipat cu microcontrolerul de înaltă performanţă 18LF4520 având următoarele caracteristici:

Este un microcontroler de 8 biţi cu arhitectură RISC; Are un set redus de instrucţiuni (77); Instrucţiunile se execută într-un singur ciclu maşină, cu excepţia celor de salt care

necesită două cicluri; Este realizat într-o tehnologie CMOS de tip nano–watt, ceea ce permite o reducere

substanţială a consumului de energie; Este special conceput pentru aplicaţii de tip comandă şi control necesitând un număr

minim de componente suplimentare în exterior, ceea ce permite reducerea costurilor cu creşterea concomintentă a fiabilităţii;

Are o structură flexibilă pentru oscilatorul de ceas; Memorie program proprie de tip flash de 32 Kbytes; Memorie de date de 1536 bytes de tip SRAM şi 256 bytes de tip EEPROM; Cinci porturi paralele; Convertor analog–digital (A/D) de 10 biţi cu 13 canale analogice de intrare; Două module Captură/Comparare/Modulare în durată a impulsurilor

(Capture/Compare/Pulse Width Modulation – CCP); Patru circuite timer (unul pe 8 biţi şi trei pe 16 biţi); Un modul receptor/transmiţător universal sincron/asincron (Universal Synchronous

Asynchronous Receiver Transmitter – USART); Port serial sincron master (Master Synchronous Serial Port – MSSP) pentru

comunicaţii de tipul SPI sau I2C; Două comparatoare analogice; Circuit de multiplicare hardware de 8 x 8 biţi; Circuit de detectare a tensiunii de alimentare prea coborâte (Low Voltage Detect); Circuit de supraveghere de tip Watchdog Timer – WDT; Dispune de numeroase posibilităţi de lucru în întreruperi pe două nivelurie de prioritate; Circuit de programare în–circuit serial integrat (In Circuit Serial Programming – ICSP); Circuit de depanare în–circuit serial integrat (In Circuit Debug – ICD); Are o gamă largă de tensiuni de alimentare de la 2 V la 5,5 V.În cadrul prezentului manual se va descrie şi prezenta pe scurt structura hardware a

microcontrolerului doar cu acele detalii care sunt necesare înţelegerii aplicaţiilor prezentate.Pentru detalii sumplimentare se recomandă consultarea foii de catalog a microcontrolerului

PIC18F4520 [???DS] – fişierul LAB PICDEM 2 Plus\Datasheets\PIC18F4520 Data Sheet – precum şi manualul de referinţă al familiei de microcontrolere PIC18 de la firma Microchip [???RM] – fişierul LAB PICDEM 2 Plus\Datasheets\PICmicro 18C MCU Reference Manual.

1.2. Structura internă a microcontrolerului

Componentele structurii interne ale microcontrolerului pot fi incluse într-una din următoarele categorii:

Componente de bază (core)Componentele de bază asigură funcţionarea sistemului şi sunt următoarele: oscilatorul,

circuitul de reset, concepţia arhitecturală, unitatea centrală de prelucrare, circuitul de multiplicare hardware, memoria internă, magistralele de sistem, suportul pentru lucrul în întreruperi şi setul de instrucţiuni.

Componente care asigură funcţii periferice (peripherals)

8

Page 3: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Componentele care asigură funcţii periferice diferenţiază microcontrolerul de un microprocesor. Acestea asigură, pe de o parte, interfaţarea cu mediul exterior (porturi, comunicaţia serie, intrările analogice), iar pe de altă parte, asigură îndeplinirea unor funcţii interne cum ar fi generarea unor baze de timp diferite (circuitele timer). Din această categorie fac parte următoarele circuite: porturile paralele de intrare/ieşire, circuitele timer, modulul CCP (Compare/Capture/ PWM), Parallel Slave Port (PSP), Serial Slave Port (SSP), Master Synchronous Serial Port (MSSP), Adressable USART, comparatoare analogice şi convertorul A/D.

Componente cu funcţii speciale (special feature)La microcontrolerele aparţinând unor structuri evoluate se găsesc şi următoarele circuite

care îndeplinesc funcţii speciale: Low Voltage Detect, Watchdog Timer, biţi de configurare a microcontrolerului, In–Circuit Serial Programming (ICSP).

Schema bloc a microcontrolerului

Schema bloc a microcontrolerului 18F4520 este prezentată în Fig. 1.2.Arhitectura RISC a microcontrolerului presupune existenţa unor memorii interne de date şi

de program separate. Memoria program de 32 Kbytes este de tip flash, existând posibilitatea scrierii şi ştergerii pe cale electrică de către sistemul în care este încorporată. Acest tip de memorie este foarte potrivit pentru un sistem de dezvoltare. Pentru sisteme dedicate consacrate sunt folosite, din considerente de cost, variante de microcontroler având memoria program programabilă o singură dată (One–Time Programmable – OTP) de tip ROM sau EPROM.

Memoria program este adresabilă fie din contorul de instrucţiuni printr-o magistrală de 20 biţi (Programm Counter – PC), fie din tabela de pointeri (Table Pointer – TP) printr-o magistrală de 21 de biţi.

Contorul de instruncţiuni specifică adresa instrucţiunii care urmează a fi extrasă şi este împărţit în trei entităţi: PCU, PCH şi PCL. Octetul inferior aflat în PCL poate fii citit sau scris direct de către sistem pe când PCU şi PCH pot fi scrise sau citite doar indirect prin intermediul registrelor PCLATU şi PCLATH.

Pentru a asigura alinierea instrucţiunilor (cuvintelor) de doi octeţi la adresă pară, contorul de instrucţiuni adresează octeţii în memoria program având bitul cel mai puţin semnificativ fixat pe valoarea zero, ceea ce înseamnă că PC incrementează adresele instrucţiunilor din doi în doi iar în schema bloc magistrala corespunzătoare figurează ca fiind de 20 de biţi.

Memoria program mai poate fi adresată printr-o adresă de 21 biţi generată de Table Pointer prevăzut şi cu un hardware de incrementare/ decrementare propriu (mai multe detalii vor fi prezentate la descrierea memoriei).

Microcontrolerul este prevăzut şi cu o memorie stivă cu 31 de niveluri (care poate stoca până la 31 de cuvinte de adresă având 21 de biţi) care este organizată într-o zonă de memorie RAM. Adresa vârfului stivei este gestionată de un indicator de stivă de 5 biţi (Stack Pointer).

Memoria de date este realizată ca o memorie de tip SRAM de 4096 bytes adresată prin cuvinte de adresă de 12 biţi. Memoria este organizată în 16 blocuri (banks) a câte 256 bytes fiecare. Pentru a facilita o accesare rapidă a tuturor acestor blocuri, este utilizat un pointer de 4 biţi (Bank Select Register – BSR) iar pentru o accesare rapidă într-un singur ciclu maşină a locaţiilor cele mai frecvent utilizate este implementată o structură numită Acces Bank. Acesta conţine prima jumătate a blocului zero de memorie RAM cu registre generale şi a doua jumătate a blocului 15 cu registre cu funcţtii speciale (Special Function Registers – SFR). Acces Bank este gestionată la rândul ei de un Pointer Acces Bank.

Anumite instrucţiuni apelează la o adresare indirectă a memoriei de date prin intermediul unor pointer-i (File Select Registers – FSRs – FSR0, FSR1, FSR2) aflaţi în zona registrelor speciale. Aceşti pointer-i (Indirect Data Memory Access Pointer) sunt prevăzuţi şi cu un hardware special care asigură decrementarea sau incrementarea acestora.

9

Page 4: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Adresarea memoriei de date mai poate fi făcută şi cu un cuvânt de adresă de 12 biţi direct din registrul de instrucţiuni (Instruction Register – IR).

Fig. 1.2. Schema bloc a microcontrolerului 18F4520

10

Page 5: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Memoria program este organizată pe cuvinte de 16 biţi, iar memoria de date pe 8 biţi. Citirea memoriei program se face octet cu octet, scrierea în memoria program se face pe blocuri de 32 de octeţi, iar stergerea pe blocuri de 64 de octeţi.

Pentru a scrie sau citi date din memoria program sunt utilizate operaţiile Table Read (TBLRD) respectiv Table Write (TBLWT). Cum memoria program este organizată pe 16 biţi iar cea de date pe 8 biţi, operaţiile Table Read respectiv Table Write vor transfera octeţii între cele două memorii prin intermediul unui registru de 8 biţi numit Table Latch (TABLAT). Astfel, la citirea memoriei program, aceasta va fi adresată de un pointer de 21 de biţi (Table Pointer), octetul citit va fi depus în registrul TABLAT iar de acolo în memoria de date RAM. La scrierea memoriei program datele din memoria de date RAM vor fi depuse în registrul intermediar TABLAT iar de acolo în memoria program la adresa indicată de pointerul Table Pointer (detalii legate de aceste operaţii vor fi prezentate ulterior).

Instrucţiunea citită din memoria program (cuvânt de 16 biţi) este interpretată într-o memorie de tip ROM (ROM Latch) din care se obţin, pe de- o parte, comenzile pentru decodorul de adresă al setului de registre cu funcţtii speciale (Special Function Registers – SFR), şi pe de altă parte, instrucţiunea propriu zisă care este depusă în registrul de instrucţiuni (Instruction Register – IR) în vederea decodării şi interpretării.

Unitatea aritmetico–logică (Arithmetic Logic Unit – ALU) este organizată pe 8 biţi. Una din intrările sale este legată direct la magistrala internă de date, iar pe cealaltă intrare se poate selecta fie registrul de lucru W (Working Register), fie registrul BITOP.

Registrul W poate stoca rezultatul unei operaţii, este utilizat şi pentru a furniza operanzi către multiplicatorul hardware de 8 biţi, respectiv de a prelua rezultatul multiplicării. Registrul BITOP este de fapt un tabel de 8 octeţi adresabil cu 3 biţi direct din codul instrucţiunii.

Schema mai conţine: Blocul oscilatorului având o arhitectură care permite o manieră flexibilă de generare a

semnalului de tact; Cirucuitele timer pentru întârzierea la alimentare (Power On Timer) şi întârzierea

pornirii oscilatorului (Oscilator Start Up Timer); Circuite de iniţializare (reset) la pornire (Power–On Reset) şi la căderea tensiunii de

alimentare (Brown–Out Reset – BOR); Circuitul de supraveghere a bunei funcţionări (Watchdog Timer); Circuitul de programare a dispozitivului folosind o singură sursă de tensiune (Single

Supply Programming); Circuitul de depanare în-circuit a programelor încărcate (In Circuit Debugger); Circuitul de supraveghere a generatorului de tact (Fail Safe Clock Monitor);Restul de circuite din categoria de periferice sunt conectate direct la magistrala internă de

date: Cinci porturi paralele de intrare/iesire cu terminale multifuncţionale (PORTA, …,

PORTE); Patru circuite de tip timer (Timer0, …, Timer3); Convertorul A/D de 10 biţi (ADC 10-bit); Memoria suplimentară de date EEPROM; Blocurile Compare/Capture/PWM (ECCP1 şi CCP2); Comparatoarele analogice; Circuitele pentru comunicaţie serie (EUSART şi MSSP); Circuitul de detectare a schimbării stării logice High to Low Voltage Detect (BOR

HLVD).

În continuare, vor fi descrise succint doar componentele de bază. Componentele pentru funcţii periferice şi pentru cele speciale fac obiectul lecţiilor propuse în continuare şi vor fi prezentate în cadrul acestora.

11

Page 6: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

1.3. Componentele de bază ale microcontrolerului

1.3.1. OscilatorulProiectantul dispozitivului a conceput o structură de oscilator extrem de flexibilă, capabilă

să lucreze în zece moduri diferite împărţite în trei categorii: oscilator primar, oscilator secundar şi oscilator intern. Schema de selectare a surselor semnalelor de tact este prezentată în Fig. 1.3.

Cele zece configuraţii ale oscilatorului sunt:1. LP – Oscilator cu cristal de cuarţ de joasă putere (Low Power Crystal);2. XT – Oscilator cu cristal de cuarţ sau rezonator ceramic (Crystal/Resonator);3. HS – Oscilator cu cristal de cuarţ sau rezonator ceramic de frecvenţă ridicată

(High–Speed Crystal/Resonator);4. HSPLL – Oscilator cu cristal de cuarţ sau rezonator ceramic de frecvenţă ridicată cu

circuitul PLL activat (High–Speed Crystal/Resonator with PLL enabled);5. RC – Oscilator cu circuit Rezistor–Condensator extern cu ieşire Fosc/4 pe RA6

(External Resistor/Capacitor with Fosc/4 output on RA6);6. RCIO – Oscilator cu RC extern cu pin I/O pe RA6 (External Resistor/Capacitor

with I/O on RA6);7. INTIO1 – Oscilator intern cu ieşire pe RA6 şi pin I/O pe RA7 (Internal Oscilator with

output on RA6 and I/O on RA7);8. INTIO2 – Oscilator intern cu pini I/O pe RA6 şi RA7 (Internal Oscilator with I/O on

RA6 and RA7);9. EC – Ceas extern şi ieşire Fosc/4 (External Clock with Fosc/4 Output);10. ECIO – Ceas extern cu pin I/O pe RA6 (External Clock with I/O on RA6).

Oscilatoare cu cristal de cuarţ sau rezonator ceramicÎn modurile LP, XT, HS şi HSPLL, un cristal de cuarţ sau un rezonator ceramic este

conectat între terminalele OSC1/CLK1/RA7 şi OSC2/CLK0/RA6. Valori tipice de frecvenţă pentru aceste configuraţii de oscilator sunt: LP – 32 KHz, XT – 1 MHz sau 4 MHz şi HS – 4 MHz, 10 MHz, 20 MHz şi 25 MHz.

Fig. 1.3. Schema de selectare a surselor semnalelor de tact

12

Page 7: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Schema hardware a blocului oscilator mai conţine şi un circuit de multiplicare a frecvenţei semnalului de ieşire a oscilatorului, un circuit bazat pe o buclă cu calare de fază (Phase Locked Loop – PLL), proiectat să multiplice cu 4 frecvenţa de oscilaţie. În felul acesta, în modul de lucru HSPLL, cu un cuarţ de 10 MHz, se poate obţine o frecvenţă a semnalului de tact de 40 MHz.

Oscilatorul cu sursă externă de semnalModurile de oscilaţie EC şi ECIO presupun conectarea din exterior pe borna OSC1/RA7 a

unui semnal provenit de la un oscilator extern. În modul EC, pe borna OSC2/RA6 se va genera un semnal Fosc/4 (util pentru teste sau pentru sincronizarea altor circuite digitale externe), iar în modul ECIO borna OSC2/RA6 poate fi folosită ca pin de intrare/ieşire digitală obişnuită a portului A (RA6).

Oscilatorul RCO soluţie ieftină pentru sursa de oscilaţie este oscilatorul RC obţinut prin conectarea din

exterior a unui grup rezistor–condensator pe borna OSC1/RA7. În configuraţia RC, pe borna OSC2/RA6 va fi disponibilă o oscilaţie având Fosc/4, iar în configuraţia RCIO borna OSC2/RA6 va putea fi utilizată ca un pin obişnuit de intrare/ieşire digitală a portului A (RA6).

Această structură de oscilator este recomandată pentru aplicaţii la care stabilitatea oscilaţiilor generate nu este critică, frecvenţa tactului fiind alterată de variaţiile tensiunii de alimentare VDD, de dispersia componentelor RC externe, precum şi de variaţiile de temperatură.

Blocul oscilator internAcest bloc este capabil de a genera două semnale de tact diferite, ambele putând fi utilizate

de către microcontroler ca sursă pentru tact fără a mai fi necesare componente suplimentare din exterior.

Ieşirea principală INTOSC generază un semnal de tact de 8 MHz care poate fi folosit direct sau prin intermediul unui circuit de postscalare. Astfel se poate obţine o gamă largă de frecvenţe de tact de la 31 KHz la 4 MHz.

A doua sursă internă de oscilaţie este un oscilator RC care generează o frecvenţă nominală de 31 KHz şi care este activată dacă este selectată ca sursă pentru tact sau dacă sunt activate funcţii de temporizare care îl folosesc ca semnal de tact.

Cele două configuraţii pentru blocul de oscilator intern sunt: INTIO1 în care pe borna OSC2/RA6 se generează semnalul Fosc/4 iar borna

OSC1/RA7 este folosită ca pin de intrare/ieşire digitală a portului A (RA7); INTIO2 în care terminalele OSC1/RA7 şi respectiv OSC2/RA6 sunt folosite ca pini de

intrare/ieşire digitală a portului A (RA6 şi RA7).Microcontrolerul 18F4520 are şi o sursă secundară de oscilaţie, şi anume oscilatorul intern

al circuitului Timer1 care este utilizat ca semnal de tact în modurile de lucru Power Managed Mode ale microcontrolerului. Cel mai adesea, acest oscilator se realizează prin conectarea unui cristal de cuarţ de frecvenţă 31,768 KHz între terminalele RC0/T10S0 şi RC1/T10S1.

Selectarea modului de oscilaţie, a frecvenţei, precum şi posibilitatea de ajustare a acesteia se realizează prin configurarea corespunzătoare a biţilor de control din registrul de comandă ale blocului oscilator aflat în zona SFR.

1.3.2. Managementul Puterii (Power Management Mode)Microcontrolerul 18F4520 oferă utilizatorului un total de şapte moduri de lucru diferite

pentru realizarea unui consum eficient de energie. Aceste moduri oferă posibilitatea reducerii substanţiale a energiei consumate în aplicaţii în care acest lucru este deosebit de important (de exemplu, cazul alimentării de la baterie).

Există trei categorii ale modului de lucru din punct de vedere al managementului puterii: Moduri active (Run modes); Moduri în asteptare (Idle modes); Mod inactiv (Sleep mode).

13

Page 8: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Aceste categorii stabilesc care subsisteme ale microcontrolerului vor fi funcţionale, şi uneori vor stabili frecvenţa de lucru a acestora. Cele şapte moduri de lucru sunt prezentate în Tabelul 1.1. Selectarea modurilor se face cu biţii 7,1 şi 0 din registrul de comandă OSCCON.

Consumul de curent tipic este de 11 µA pentru modurile active (Run), 2,5 µA pentru modurile în asteptare (Idle) şi 100 nA în modul inactiv (Sleep).

1.3.3. Circuitul de iniţializare hardwareMicrocontrolerul 18F4520 are prevăzute mai multe posibilităţi de iniţializare (reset) utile în

aplicaţii. Schema bloc simplificată a mecanismului de iniţializare este prezentată în Fig. 1.4.

Power–On Reset (POR)POR reprezintă iniţializarea sistemului la pornire (alimentare) atunci când tensiunea de

alimentare VDD depăşeşte un anumit prag. Acest lucru permite microcontrolerului să pornească de fiecare dată dintr-o anumită stare predefinită numai atunci când tensiunea de alimentare a atins valoarea prescrisă care asigură o funcţionare stabilă şi previzibilă a sa.

Brown–Out Reset (BOR)Orice scădere a tensiunii de alimentare VDD sub un anumit nivel de prag VBOR (controlabil)

pe un interval de timp mai mare decat TBOR (controlabil) va declanşa generarea unui semnal de iniţializare. Circuitul va rămâne în această stare (Brown–Out Reset) atâta timp cât tensiunea de alimentare VDD nu depăşeşte valoarea de prag VBOR.

Proiectantul a prevăzut mai multe opţiuni de configurare pentru BOR utilizabile în soluţiile de reducere a consumului de energie (vezi secţiunea 4.4 Brown–Out Reset din foaia de catalog a microcontrolerului PIC18F4520 [??? DS]).

Master Clear ( )Terminalul permite utilizatorului să declanşeze o iniţializare a circuitului printr-o

comandă Reset aplicată din exterior. Această comandă poate fi aplicată atât în regimul de funcţionare normală cât şi în regimul de funcţionare Power Managed Mode.

Watchdog Timer ResetÎn multe aplicaţii dedicate (Embedded Systems) se impune o supraveghere a bunei

funcţionări a sistemului. Microcontrolerul are încorporat un circuit de supraveghere (Watchdog Timer) care în esenţă este un numărător invers, încărcat cu o anumită valoare iniţială şi care apoi este decrementat la fiecare ciclu maşină. În momentul în care ajunge la zero numărătorul generează

Tabelul 1.1. Modurile de lucru

14

Page 9: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

o comandă de Reset. Într-o funcţionare normală, în programul aplicaţiei sunt prevăzute instrucţiuni de reiniţializare periodică a acestui timer, evitându-se în felul acesta ajungerea lui în starea zero.

Stack Full/Underflow ResetMicrocontrolerul este prevăzut cu o memorie stivă de 31 de niveluri folosită pentru

memorarea stării unor registre interne în cazul apariţiei unei întreruperi. Depăşirea capacităţii acestei memorii stivă, atât la scriere cât şi la citire, va genera o comandă Reset.

Iniţializare softwareExistă posibilitatea aducerii la zero a microcontrolerului şi printr-o comandă software cu

instrucţiunea RESET.

Iniţializare cu timere specialeMicrocontrolerul 18F4520 are încorporate trei circuite timer speciale care gestionează

corectitudinea procesului de iniţializare la pornire (Power On Reset) pentru a asigura condiţii iniţiale corecte în momentul în care începe execuţia programului. Acestea sunt:

Power–up Timer (PWRT) Oscillator Start–up Timer (OST) PLL Lock Time–out TimerTimer-ul PWRT este un numărător de 11 biţi care numără impulsurile oscilatorului RC

intern INTRC şi generează, la pornire, un interval de timp de 2048 · 32 s = 65,6 ms. Pe durata numărării microcontrolerul este menţinut în starea de Reset.

Fig. 1.4. Schema bloc a mecanismului de iniţializare

15

Page 10: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Timer-ul OST este realizat cu un numărător de 10 biţi şi asigură o întârziere suplimentară de 1024 cicluri maşină după terminarea perioadei de numărare a timer-ului PWRT. Acest lucru va v-a asigura că oscilatorul cu cuarţ sau rezonatorul ceramic a intrat în regimul normal de lucru. Întârzierea generată de timer-ul OSC este utilizată numai în modurile de lucru LP, XT, HS sau HSPLL ale oscilatorului, numai la pornire (POR) sau la ieşirea din majoritatea situaţiilor de Power Managed Mode.

Timer-ul PLL Lock Time–out este necesar pentru a asigura întârzierea necesară în regimul normal de lucru al blocului PLL pentru calarea sa pe frecvenţa oscilatorului principal. Această întârziere are o valoare tipică de 2 ms după întârzierea generată de timer-ul OST.

Mecanismul de generare a semnalului de Reset este de asemenea controlat de anumiţi biţi din registrele de comandă asociate acestei funcţii (vezi foaia de catalog a microcontrolerului PIC 18F4520 [??? DS]).

1.3.4. Circuitul de multiplicareMicrocontrolerul 18F4520 conţine şi un multiplicator hardware de 8 x 8 biţi ca parte a

unităţii ALU. Rezultatul pe 16 biţi al multiplicării este stocat în registrele interne PRODH şi PRODL asociate multiplicatorului. Realizarea operaţiei de multiplicare printr-o structură hardware specializată permite realizarea acestei operaţii într-un singur ciclu maşină. În exemplele de mai jos sunt indicate rutine de multiplicare pentru numere fără semn respectiv cu semn:

; 8 x 8 UNSIGNED MULTIPLY ROUTINEMOVF ARG1, W ;MULWF ARG2 ; ARG1 * ARG2 ->

; PRODH:PRODL

; 8 x 8 SIGNED MULTIPLY ROUTINEMOVF ARG1, WMULWF ARG2 ; ARG1 * ARG2 ->

; PRODH:PRODLBTFSC ARG2, SB ; Test Sign BitSUBWF PRODH, F ; PRODH = PRODH - ARG1MOVF ARG2, WBTFSC ARG1, SB ; Test Sign BitSUBWF PRODH, F ; PRODH = PRODH - ARG2

În Tabelul 1.2 este făcută o comparaţie între operaţiile de multiplicare efectuate hardware respectiv software, atât din punct de vedere al spaţiului de memorare ocupat cât şi al vitezei de execuţie.

Tabelul 1.2. Comparaţia performanţelor unor operaţii de multiplicare

16

Page 11: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

1.3.5. ÎntreruperileÎntreruperea este un mecanism extrem de util în aplicaţii permiţând o reacţie rapidă a

sistemului la situaţii neprevăzute precum şi o tratare ierarhizată după priorităţi a acestora.Microcontrolerul 18F4520 are prevăzute un mare număr de surse de întreruperi cărora li se

poate asocia o prioritate superioară (adresa vectorului de întrerupere se află la adresa 0008H) respectiv o prioritate inferioară (adresa vectorului de întrerupere se află la adresa 0018H). Întreruperile se află sub controlul unor registre cu funcţii speciale (se recomandă consultarea secţiunii 9.0 Interrupts din foaia de catalog a microcontrolerului PIC 18F4520 [??? DS]). Logica întreruperilor este prezentată schematic în Fig. 1.5.

În principiu, mecanismul de generare a unei întreruperi se derulează astfel: Circuitul gândit să poată genera întreruperi (de exemplu un timer), la apariţia

fenomenului generator (depăşirea capacităţii de numărare în cazul circuitului timer), va seta un bit numit fanion (flag) într-un anumit registru special (bitul TMR0IF în cazul timer-ului T0). Acest bit semnifică o solicitare de întrerupere.

Proiectanţii microcontrolerului au prevăzut şi un mecanism de validare, în general în două trepte, a acestei solicitări. Acest lucru înseamnă că există, într-un anumit registru cu funcţii speciale, un bit de validare a întreruperilor pentru timerul în cauză, în cazul exemplului nostru (Timer 0 Interrupt Enable – TMR0IE), precum şi un bit de validare generală a întreruperilor (General Interrupt Enable – GIE).

Cum în cazul acestui microcontroler sunt prevăzute şi două niveluri de prioritate pentru tratarea întreruperilor, v-a trebui setat şi bitul corespunzător nivelului de prioritate alocat respectivei solicitări (TMROIP în cazul exemplului nostru).

Fig. 1.5. Logica întreruperilor

17

Page 12: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

În concluzie, o cerere de întrerupere, solicitată de un anumit circuit, v-a fi declanşată acceptată doar dacă sunt îndeplinite concomitent (funcţia logică ŞI) condiţiile de mai sus: TMROIF · TMROIE · TMROIP · GIE.

1.3.6. Organizarea memoriei

Microcontrolerul 18F4520 este prevăzut cu trei tipuri de memorie internă: memoria program, memoria de date şi o memorie suplimentară de date de tip EEPROM.

Memoria de date şi memoria program sunt conectate la magistrale interne separate, ceea ce permite folosirea simultană a acestora (arhitectură Harvard). Memoria EEPROM de date este accesată, din considerente practice, ca un dispozitiv periferic.

1.3.6.1. Organizarea memoriei programÎn cadrul descrierii organizării memoriei program, se impune abordarea următoarelore

subiecte principale: harta memoriei program, contorul de instrucţiuni PC, memoria stivă, modul de execuţie a instrucţiunilor şi organizarea cuvintelor în memoria program.

Contorul de instrucţiuni PC generează adrese de 21 de biţi, ceea ce permite accesarea unui spaţiu de memorie de 2 Mbytes. La microcontrolerul 18F4520, memoria program este de tip flash

Fig. 1.6. Harta memoriei program

18

Page 13: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

şi are o capacitate de 32 Kbytes. Accesarea unei locaţii inexistente fizic în dispozitiv întoarce „0” peste tot (instrucţiunea NOP).

Harta memoriei programHarta memoriei program este prezentată în Fig. 1.6. Se observă că zona memoriei stivă cu

31 de locaţii nu face parte din spaţiul memoriei program. La adresa 0000H se află vectorul subrutinei de RESET iar la adresele 0008H respectiv 0018H se află vectorii de întrerupere pentru prioritatea superioara respectiv inferioară, urmate de zona propriu-zisă de memorie program.

Contorul de instrucţiuniContorul de instrucţiuni este de 21 biţi şi se împarte în următoarele trei registre separate

(Fig. 1.7): PCL pentru biţii <7:0>, PCH pentru biţii <15:8> şi PCU pentru biţii <21:16>. Registrul inferior PCL poate fi accesat pentru scriere sau citire directă pe când registrele

PCH şi PCU nu pot fi accesate direct, ci doar prin intermediul unor registre intermediare PCLATH şi PCLATU.

Conţinutul registrelor PCLATH şi PCLATU este transferat în PCH respectiv în PCU la orice operaţie de scriere în PCL şi, în mod similar, conţinutul registrelor PCH şi PCU se transferă în registrele PCLATH şi PCLATU la orice operaţie de citire a lui PCL.

Memoria stivă pentru adrese de întoarcere (Return Address Stack)Această memorie stivă este destinată memorării conţinutului contorului de instrucţiuni în

cazul apariţiei unei instrucţiuni de salt la o subrutină sau a unei întreruperi. Memoria stivă este de tip RAM şi poate stoca 31 de cuvinte a câte 21 de biţi, ceea ce înseamnă că permite gestionarea a până la 31 de salturi sau întreruperi. Memoria stivă nu face parte din spaţiul de adresare a memoriei interne sau de date fiind o entitate complet separată.

Pentru adresarea memoriei stivă este utilizat un registru de 5 biţi numit Stack Pointer (STKPTR). Acest registru este iniţializat la baza stivei 0000H (după reset) şi v-a conţine în permanenţă adresa vârfului stivei. La apariţia unei instrucţiuni de tip CALL sau a unei întreruperi, conţinutul registrului STKPTR este incrementat cu o unitate iar apoi conţinutul lui PC este depus la adresa respectivă (în vârful stivei). La apariţia unor instrucţiuni de tip RETURN, mai întâi este citită locaţia din vârful stivei indicată de conţinutul registrului STKPTR iar apoi este decrementat conţinutul acestuia. În ceea ce priveşte memoria stivă propriu-zisă, doar locaţia aflată în vârful stivei (adresată de STKPTR) este accesibilă pentru scriere sau citire prin intermediul unui registru cu funcţii special numit Top Of the Stack (TOS) format tot din trei registre TOSU, TOSH respectiv TOSL, similare cu structura registrului PC (vezi Fig. 1.8).

Fig. 1.7. Structura contorului de instrucţiuniFig. 1.8. Memoria stivă pentru adrese de întoarcere şi registrele asociate

19

Page 14: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Observaţie:Existenţa registrului TOS permite utilizatorului să-şi construiască, prin soft, propria sa memorie stivă. De exemplu, în cazul apariţiei unei instrucţiuni de tip CALL, are loc o operaţie de scriere în stivă şi deci în registrul TOS, conţinut ce poate fi preluat şi plasat în stiva de tip soft.

Pointer-ul STKPTR este prevăzut şi cu o logică de sesizare a depăşirii capacităţii memoriei stivă şi de generare a unei cereri de întrerupere într-o astfel de situaţie. De exemplu, după 31 de scrieri consecutive şi fără nici o citire, se setează bitul STKFUL (Stack Full). În mod similar, în cazul a 31 de citiri consecutive, se setează bitul STKUNF (Stack Underflow). În cazul în care bitul de validare STVREN (Stack Overflow Reset Enable) este la rândul său setat, apariţia depăşirilor menţionate anterior va duce la generarea unui semnal de Reset.

Cum vârful memoriei stivă este accesibil pentru operaţii de scriere respectiv citire de date în anumite situaţii (salvarea respectiv refacerea contextului unui program în cazul apariţiei unei cereri de întrerupere), este utilă scrierea sau citirea în sau din vârful stivei fără a perturba prin aceasta desfăşurarea normală a derulării programului. Proiectanţii au prevăzut în setul de instrucţiuni al microcontrolerului două instrucţiuni cu ajutorul cărora se poate scrie (PUSH) respectiv citi (POP) din vârful stivei. Deoarece, în cazul apariţiei unei cereri de întrerupere, în registrele interne ale procesorului se află date importante ale programului întrerupt, se impune salvarea conţinutului acestora înaintea încărcării subrutinei de servire a întreruperii care le poate altera. Salvarea se face în memoria stivă, iar la revenirea în programul principal, pentru a putea continua programul principal din punctul în care el a fost întrerupt, trebuie refăcute conţinuturile registrelor interne prin citiri din memoria stivă. Deoarece aceste operaţii de scriere respectiv citire în şi din memoria stivă sunt mari consumatoare de timp, proiectanţii microcontrolerului au prevăzut o memorie stivă specială (Fast Register Stack) pentru stocarea temporară a conţinutului celor mai importante trei registre: STATUS, WREG şi BSR. Stiva pentru fiecare dintre aceste trei registre are doar un singur nivel.

La apariţia unei cereri de întrerupere, conţinutul acestor trei registre este salvat în mod automat în această memorie stivă specială, iar la revenirea în programul principal, după derularea rutinei de servire a întreruperii, tot în mod automat, are loc reîncărcarea acestor registre din această memorie stivă specială.

Modul de execuţie al instrucţiunilorLa acest microcontroler, durata unui ciclu maşină este de patru perioade de tact, notate cu

Q1, Q2, Q3 şi Q4. Pentru a mări viteza de execuţie a instrucţiunilor, proiectanţii microcontrolerului au implementat o variantă de execuţie prin suprapunerea ciclurilor (tehnica pipeline), ceea ce permite ca majoritatea instrucţiunilor să se execute într-un singur ciclu maşină.

20

Page 15: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Execuţia unei instrucţiuni are loc în felul următor (vezi Fig. 1.9): în faza Q1 a ciclului maşină unu se extrage codul operaţiei care apoi se depune în registrul de instrucţiuni IR în faza Q4 a ciclului maşină unu. Decodarea şi execuţia instrucţiunii se fac în fazele Q1 la Q4 ale ciclului maşină doi. Se realizează astfel o suprapunere a fazei de extragere a instrucţiunii curente cu faza de execuţie a instrucţiunii precedente (vezi Fig. 1.10).

Organizarea instrucţiunilor în memoria programMemoria program este adresată pe octeţi iar instrucţiunile sunt de doi sau patru octeţi.

Pentru a asigura alinierea instrucţiunilor stocate, octetul cel mai puţin semnificativ al instrucţiunii este stocat de fiecare dată la adresă pară (LSb = 0). Pentru a menţine alinierea, contorul de instrucţiuni PC este incrementat de fiecare dată cu 2 pentru a asigura că întotdeauna LSb = 0.

1.3.6.2. Memoria program de tip flashÎn principiu, memoria program trebuie să fie o memorie nevolatilă, ceea ce se poate realiza

prin utilizarea unor circuite de memorie de tipul ROM, EPROM sau flash. Memoriile de tip ROM (Read–Only Memory) sunt recomandate în cazul unor produse bine

puse la punct, realizate într-un număr foarte mare de exemplare, caz în care acest tip de memorie asigură costuri minime.

Realizarea cu memorii de tip EPROM (Erasable Programmable Read Only Memory) oferă facilitatea de a putea fi şterse (nu pe cale electrică), ceea ce oferă inginerului proiectant o anumită flexibilitate, dar costul acestor memorii este ceva mai mare deoarece capsula circuitului trebuie prevăzută cu o fereastră de cuarţ pentru a permite ştergerea cu raze ultraviolete.

Memoriile flash sunt de tipul EEPROM (Electrically Erasable Programmable Read–Only Memory) putând fi scrise, citite şi şterse pe cale electrică de către sistemul care le utilizează. Sunt încapsulate într-un material plastic, ceea ce permite realizarea lor la costuri mici avantajoase, fiind foarte potrivite în activitatea de proiectare sau de realizare a unor sisteme de dezvoltare.

Din punct de vedere constructiv, memoriile de tip flash pot fi citite octet cu octet, scrise doar pe blocuri de 32 de octeţi şi şterse pe blocuri de 64 de octeţi. Operaţiile de scriere respectiv citire pe blocuri sunt realizate de un hardware încorporat în memorie şi pe durata acestor operaţii memoria program nu poate fi accesată.

Operaţiile de scriere, respectiv citire, în şi din memoria program presupun un transfer de date cu memoria şi sunt gestionate de microcontroler prin intermediul a două operaţii numite Table Read (Fig. 1.11), respectiv Table Write (Fig. 1.12).

Fig. 1.9. Ciclul instrucţiune

Fig. 1.10. Fluxul pipeline al instrucţiunilor

21

Page 16: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Deoarece memoria program este organizată pe cuvinte de 16 biţi şi memoria de date pe cuvinte de 8 biţi, operaţiile de transfer dintre cele două memorii se realizează prin intermediul unui registru de 8 biţi (Table Latch – TABLAT) iar adresarea memoriei program pentru această operaţie se face printr-un pointer (Table pointer – TBLPTR).

Registrele TABLAT respectiv TBLPTR fac parte din setul de registre SFR aile microcontrolerului. Structura pe biţi a pointer-ului TBLPTR şi modul de utilizare a acestor secvenţe de biţi pentru operaţiile de citire, scriere şi ştergere este dată în Fig. 1.13.

Mecanismul exact de citire a memoriei program este ilustrat în Fig. 1.14.

Scrierea în memoria program se face pe blocuri de 32 de octeţi cu ajutorul unui hardware special implementat (Fig. 1.15). Operaţia de scriere în memoria propriu-zisă se face din 32 de registre auxiliare (Holding Register) care trebuie încărcate din registrul TABLAT prin 32 de operaţii de scriere consecutive. Aceste scrieri sunt operaţii scurte, deoarece sunt scrise doar Holding Register. După actualizarea tuturor acestor 32 de registre, registrul EECON1 trebuie scris pentru a declanşa operaţia de programare a blocului de memorie, care este scrierea propriu-zisă a memoriei flash şi este o scriere de lungă durată.

În aplicaţii este recomandat ca operaţia de scriere să fie urmată de o operaţie de verificare a corectitudinii scrierii (Write Verify). Gestionarea memoriei program flash se face prin intermediul unui număr de registre cu funcţii speciale (pentru detalii se recomandă consultarea secţiunii 7.0 DATA EEPROM MEMORY din foaia de catalog a microcontrolerului PIC18F4520 [??? DS]).

Observaţie:Mediile de programare elaborate de firmele producătoare pentru produsele pe care le comercializează, conţin programe speciale pentru a facilita utilizatorului operaţiile de scriere, citire, verificare şi ştergere a memoriei program fără ca utilizatorul sa fie nevoit a gestiona la nivel de amănunt aceste operaţii (de exemplu mediul MPLAB al firmei Microchip).

Fig. 1.11. Operaţia Table Read

Fig. 1.12. Operaţia Table Write

Fig. 1.13. Structura pointer-ului TBLPTR şi limitele lui în funcţie de operaţia efectuată

Fig. 1.14. Mecanismul de citire din memoria flash de program

Fig. 1.15. Mecanismul de scriere în memoria flash de program

22

Page 17: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

1.3.6.3. Organizarea memoriei de date

GeneralităţiMemoria de date a microcontrolerului este de tip SRAM şi are o capacitate de 4096 octeţi.

Fiecare locaţie de memorie (denumită şi registru) este adresabilă printr-un cuvânt de cod de adresă de 12 biţi. Pentru o gestionare eficientă şi pentru un acces rapid la informaţie, acest spaţiu de memorie este împărţit în 16 blocuri a câte 256 de octeţi fiecare. Registrele de memorie din acest spaţiu sunt de două categorii: registre de memorie de uz general (General Purpose Register) şi registre cu funcţii speciale (Special Function Register). Acestea din urmă ocupă ultima parte a zonei adresabile. Harta memoriei de date este prezentată în Fig. 1.16.

Bank Select RegisterDatorită modului de organizare a memoriei de date, o anume locaţie de memorie (registru)

va putea fi adresată în doua moduri diferite: prin generarea unei adrese de 12 biţi (adresare absolută); printr-o adresare care să permită mai întâi selecţia blocului în care se află locaţia dorită

– printr-un pointer de 4 biţi cu Bank Pointer, iar apoi accesul registrului dorit din blocul selectat prin cei mai puţin semnificativi 8 biţi (adresare indexată).

Cea de-a doua modalitate de adresare este mai rapidă deoarece, în general, în cadrul majorităţii programelor aplicative, se lucrează cu un număr mic de registre care pot fi accesate într-un singur bloc. În felul acesta, adresa blocului rămâne practic neschimbată, modificându-se doar offset-ul (cei mai puţin semnificativi 8 biţi ai adresei) care face parte din instrucţiune. Pointer-ul pentru aceste blocuri poartă numele de Bank Select Register (BSR).

Access BankCu ajutorul pointer-ului BSR şi a celor mai puţin semnificativi 8 biţi incluşi în instrucţiuni

există posibilitatea accesării rapide a întregului spaţiu al memoriei de date. Dar în majoritatea aplicaţiilor este necesar accesul doar la setul de registre speciale şi la un număr redus de registre generale pentru stocarea unor date curente ale programului. Pentru acest gen de aplicaţii, proiectanţii au realizat o structură de memorie numită Acces Bank care cuprinde un număr redus de 128 de locaţii de memorie pentru date curente (locaţiile 00H–7FH din blocul 0) şi 128 de locaţii de memorie pentru registrele cu funcţii speciale (locaţiile 80–FFH din blocul 15) – vezi Fig. 1.17.

Această structură de memorie poate fi utilizată de toate instrucţiunile de bază ale microcontrolerului şi este adresată cu 8 biţi direct din instrucţiune.

23

Page 18: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Adresarea memoriei de date este gestionată suplimentar şi cu un parametru „a” cuprins de asemenea în instrucţiune. Pentru a = 1, instrucţiunea utilizează pointer-ul BSR şi poate fi accesat întreg spaţiul memoriei de date, iar pentru a = 0 instrucţiunea utilizează doar spaţiul de memorie din Acces Bank.

Fig. 1.16. Harta memoriei de date

Fig. 1.17. Utilizarea Bank Select Register (adresare directă)

24

Page 19: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Regristrele care compun memoria de dateÎn memoria de date se întâlnesc două tipuri de registre: registre generale de date (GPR); registre cu funcţii speciale (SFR).Registrele cu funcţii speciale, la rândul lor, se pot împărţi în două categorii: – cele care sunt asociate cu structura de bază a microcontrolerului (ALU, întreruperi etc.);– registre cu care se gestionează funcţionarea perifericelor.

Moduri de adresare a memoriei de dateDacă pentru adresarea memoriei program se foloseşte exclusiv contorul de instrucţiuni

(Program Counter), pentru adresarea memoriei de date exista următoarele patru posibilităţi: Adresarea implicită

O astfel de instrucţiune care nu necesită argumente suplimentare, afectează în general tot sistemul sau lucrează implicit cu un singur registru. Exemplu: RESET.

Adresarea explicităÎn acest caz, instrucţiunea conţine în mod explicit registrul cu care se lucrează precum şi operandul. Exemplu: MOVLW 7FH.

Adresarea directăÎn acest caz, cel de-al doilea octet al instrucţiunii este o adresă care poate fi, de exemplu, adresa locaţiei în cadrul unui bloc de date selectat. Exemplu: ADDWF f,d,a.Instrucţiunea adună la conţinutul registrului W, conţinutul registrului selectat f. Cei doi parametrii suplimentari aflaţi în argumentul instrucţiunii sunt folosiţi astfel:

o Cu parametrul a se selectează sursa pentru f: Pentru a = 1 registrul f este selectat, din tot spaţiul memoriei de date, cu

pointer-ul BSR şi cu cei 8 biţi din octetul inferior al instrucţiunii (practic cu 12 biţi de adresă),

Pentru a = 0 registrul f este selectat doar din spaţiul de memorie delimitat de Acces Bank;

o Cu parametrul d se selectează destinaţia pentru rezultatul operaţiei: Pentru d = 1 rezultatul este stocat înapoi în registrul f, Pentru d = 0 rezultatul este stocat înapoi în registrul W.

Adresarea indirectăAdresarea indirectă permite utilizatorului să acceseze o anumită locaţie de memorie fără a-i

preciza în mod concret adresa acesteia.Acest lucru este realizat prin utilizarea unor pointer-i (notaţi cu FSRs) pentru adresarea

locaţiei de memorie ce urmează a fi accesată.Pointer-ii FSR fac parte din setul de registre speciale SFR, în consecinţă se află în memoria

de date şi vor putea fi, la rândul lor, accesaţi cu uşurinţă de programul aplicativ. În felul acesta, aceşti pointer-i FSR vor fi foarte utili pentru implementarea unor tabele sau structuri de date.

Microcontrolerul 18F4520 conţine trei pointer-i de tipul FSR notaţi cu FSR0, FSR1 şi FSR2. Fiecare din aceşti pointer-i este realizat cu câte doua registre a câte 8 biţi (FSRnH şi FSRnL) şi va conţine un cuvânt de adresă de 12 biţi (cei mai semnificativi 4 biţi din registrul FSRnH nu sunt folosiţi).

Registrele pentru adresarea indirecta (FSR) sunt implementate prin intermediul Indirect File Operands (INDF) care va permite o manipulare a pointer-ului pentru incrementare şi decrementare automată, precum şi încărcarea automată a unui offset, ceea ce va duce la eficientizarea programelor, de exemplu, în cazul unor bucle.

Adresarea indirectă (Fig. 1.18) presupune existenţa a Indirect File Operands (de asemenea în număr de 3 – INDF0, INDF1, INDF2). Aceştia pot fi imaginaţi ca nişte registre „virtuale” care fac parte din registrele speciale (SFR) fără însă a fi implementate în mod fizic.

25

Page 20: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Scrierea sau citirea unui registru de tip INDFn accesează de fapt perechea de registre SFRnH şi SFRnL asociate acestuia. Folosirea lui INDFn ca operand va utiliza de fapt conţinutul pointer-ului aferent FSRnH şi FSRnL.

Observaţie:Deoarece adresarea indirectă foloseşte o adresă de 12 biţi, mecanismul de împărţire în 16 blocuri a câte 256 de locaţii (RAM–Banking) nu este luat în considerare.

Pointer-ului FSRn, îi mai sunt asociaţi, pe lângă registrul INDFn, alţi patru registre–operanzi suplimentari. Ca şi INDFn, şi aceşti registre–operanzi vor reprezenta de fapt nişte registre „virtuale”. Accesarea acestor registre–operanzi înseamnă de fapt accesarea pointer-ului asociat FSRn, dar şi efectuarea, suplimentara, a unei anumite operaţii asupra conţinutului acestora.

Aceste registre–operanzi sunt: POSTDEC – accesează pointer-ul FSR, după care îl decrementează în mod automat; POSTINC – accesează pointer-ul FSR, după care îl incrementează în mod automat; PREINC – incrementează conţinutul lui FSR iar apoi îl foloseşte pe acesta ca operand; PLUSW – adună la conţinutul pointer-ului FSR un număr (offset) cu semn (–127 la 128)

stocat în registrul W, după care foloseşte noua valoare calculată în operaţie.

Observaţii:

Accesarea registrului INDFn permite utilizarea conţinutului pointer-ului asociat FSRn fără modificarea valorii acestuia.

Accesarea registrului PLUSW permite calculul unui offset (ca mai sus) şi folosirea acestei valori într-o operaţie fără însă ca prin aceasta să se modifice conţinutul pointer-ului FSRn sau a registrului W.

Folosirea unei tehnici de adresare indirectă pentru a accesa registrele virtuale mai sus menţionate poate duce la rezultate imprevizibile (pentru detalii se recomandă consultarea secţiunii 5.4.3.3 Operations by FSRs on FSRs din foaia de catalog a microcontrolerului PIC18F4520).

Fig. 1.18. Adresarea indirectă

26

Page 21: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Folosirea setului extins de instrucţiuni presupune şi o anumită schimbare în organizarea şi folosirea memoriei de date (pentru detalii se recomandă consultarea secţiunii 5.5 Data Memory and the Extended Instruction Set din foaia de catalog a microcontrolerului PIC18F4520).

1.3.6.4. Memoria de date EEPROMMemoria de date EEPROM este o memorie separată de memoria program sau de memoria

de date SRAM şi este folositabilă pentru stocarea pe termen lung a unor date de program. Nu face parte din spaţiul de adresare al memoriilor program sau de date şi este accesibilă doar printr-o adresare indirectă prin intermediul unor registre speciale (SFR).

Controlul memoriei EEPROM se realizeaza prin intermediul urmatoarelor registre speciale: EECON1, EECON2, EEDATA şi EEADR.

Operaţiile de citire şi scriere din şi în memoria EEPROM se efectuează pe octet prin intermediul registrelor EEDATA resprectiv EEADR.

Octetul citit sau cel care urmează a fi scris se afla în registrul de 8 biţi EEDATA, iar adresa la care se face operaţia de citire/scriere se afla în registrul de 8 biţi EEADR (spaţiul memoriei EEPROM este de 256 de octeţi).

Accesul la datele din memoria EEPROM este controlat de registrele EECON1 respectiv EECON2, aceleaşi care controlează şi accesul la datele memoriei program.

Semificaţia biţilor registrului de control EECON1 este prezentată în Fig. 1.19. Registrul EECON2 nu este fizic realizat şi este folosit de către microcontroler exclusiv pentru operaţiile de scriere şi ştergere a memoriei EEPROM.

Operaţia de citire a memoriei EEPROMPentru o operaţie de citire, utilizatorul trebuie să scrie adresa operandului în registrul

EEADR, să şteargă bitul EEPG0 şi să seteze bitul RD. Data adresată va fi depusă în registrul EEDATA şi va fi disponibilă pentru citire în ciclul maşină următor. Registrul EEDATA va păstra data citită până la o nouă întrebuinţare a acestuia de către utilizator pentru o operaţie de scriere sau citire.

27

Page 22: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

Fig. 1.19. Registrul 1 EEPROM de control (EECON1)

28

Page 23: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

O secvenţă tipică de program pentru citirea memoriei EEPROM este următoarea:

MOVLW DATA_EE_ADDR ;MOVWF EEADR ; Data Memory Address to readBCF EECON1, EEPGD ; Point to DATA memoryBCF EECON1, CFGS ; Access EEPROMBSF EECON1, RD ; EEPROM ReadMOVF EEDATA, W ; W = EEDATA

Operaţia de scriere în memoria EEPROMScrierea unui octet în memoria EEPROM va determina în mod automat ştergerea prealabilă

a respectivei locaţii de memorie şi apoi scrierea noului octet (aplicaţie de tipul erase – before – write).

La scriere, octetul care urmează a fi scris se depune în registrul EEDATA iar adresa la care se face scrierea în registrul EEADR. Pentru a iniţia un ciclu de scriere, trebuie urmată cu stricteţe secvenţa din următorul exemplu:

MOVLW DATA_EE_ADDR ;MOVWF EEADR ; Data Memory Address to writeMOVLW DATA_EE_DATA ;MOVWF EEDATA ; Data Memory Value to writeBCF EECON1, EEPGD ; Point to DATA memoryBCF EECON1, CFGS ; Access EEPROMBSF EECON1, WREN ; Enable writesBCF INTCON, GIE ; Disable Interrupts

; Required sequence ===================================MOVLW 55h ;MOVWF EECON2 ; Write 55hMOVLW 0AAh ;MOVWF EECON2 ; Write 0AAhBSF EECON1, WR ; Set WR bit to begin write

; Required sequence ===================================BSF INTCON, GIE ; Enable Interrupts

; User code executionBCF EECON1, WREN ; Disable writes on write complete

; (EEIF set)

Ciclul de scriere nu poate să înceapă dacă nu se respectă următoarea secvenţă: scrierea valorii 55H în EECON2 urmată de scrierea valorii 0AAH în EECON2 iar apoi setarea bitului WR – operaţie ce trebuie repetată pentru fiecare octet ce urmează a fi scris.

Observaţii:

Pe durata acestei secvenţe, întreruperile trebuie dezactivate. După aceasta se va seta bitul de validare a scrierii (bitul WREN din registrul EECON1) pentru a permite desfăşurarea operaţiei de scriere.

Prezenţa mecanismului de validare a scrierii prin bitul WREN permite prevenirea unor operaţii de scriere accidentale, motiv pentru care acest bit trebuie menţinut la valoarea zero cu excepţia situaţiilor de scriere sau a reîmprospătării memoriei.

După iniţierea procedurii de scriere, conţinutul registrelor EEADR, EEDATA şi EECON1 nu vor putea fi modificate. Timpul de scriere este controlat de hardware-ul microcontrolerului printr-un timer special destinat acestei operaţii.

Operaţia propriu-zisă de scriere începe prin setarea bitului de comanda WR.

Observaţie:Bitul WR nu va putea fi setat dacă în prealabil WREN nu a fost setat.

29

Page 24: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

După terminarea ciclului de scriere, bitul WR este resetat de hardware iar fanionul (flag) de întrerupere a memoriei EEPROM – bitul EEIF – va fi setat. Programatorul poate lua în considerare sau nu această solicitare de întrerupere prin setarea sau nu a biţilor de validare corespunzători.

Observaţie:Bitul EEIF trebuie şters prin soft. De regulă este bine ca operaţia de scriere să fie urmată şi de o operaţie de verificare a corectitudinii scrierii.

Mecanisme de protecţieMemoria EEPROM este prevăzută cu un mecanism de protecţie prin setarea unor biţi din

cuvântul de cod de configurare (vezi secţiunea 23.0 Special Features of the CPU din foaia de catalog a microcontrolerului PIC18F4520 [??? DS]).

Odată mecanismul activat, operaţiile de scriere sau citire din exterior a memoriei EEPROM nu vor mai fi posibile dar microcontrolerul însuşi va putea citi sau scrie această memorie internă EEPROM.

Un mecanism suplimentar de protecţie împotriva unor operaţii de scriere accidentale şi nedorite este asigurat de bitul de validare WREN (pus pe zero la POR) împreună cu secvenţa obligatorie ce precede o operaţie de scriere a unui octet.

Folosirea memoriei de date EEPROMMemoria de data EEPROM este o memorie de înaltă fiabilitate (permite circa 1.000.000 de

operaţii de scriere/ştergere şi garantează calitatea informaţiei stocate pentru circa 100 de ani). Este recomandată utilizarea ei pentru informaţii supuse unor modificări frecvente (de exemplu variabile de program sau date supuse unor update-uri frecvente). În astfel de situaţii, se impune o operaţie de reîmprospătare a datelor din memorie. O rutină simplă de reîmprospătare a memoriei EEPROM este următoarea:

CLRF EEADR ; Start at address 0BCF EECON1, CFGS ; Set for memoryBCF EECON1, EEPGD ; Set for Data EEPROMBCF INTCON, GIE ; Disable interruptsBSF EECON1, WREN ; Enable writes

Loop ; Loop to refresh arrayBSF EECON1, RD ; Read current addressMOVLW 55h ;MOVWF EECON2 ; Write 55hMOVLW 0AAh ;MOVWF EECON2 ; Write 0AAhBSF EECON1, WR ; Set WR bit to begin writeBTFSC EECON1, WR ; Wait for write to completeBRA $-2INCFSZ EEADR, F ; Increment addressBRA LOOP ; Not zero, do it againBCF EECON1, WREN ; Disable writesBSF INTCON, GIE ; Enable interrupts

30

Page 25: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

1.4. Desfăşurarea lecţiei

ACTIVITATEA 1.1 Studiul altor materiale informative

Studiaţi manualele de utilizare, foile de catalog şi documentele informative incluse în următoarele directoare: LAB Picdem 2 Plus\User's Guide, LAB Picdem 2 Plus\Datasheets şi LAB PICDEM 2 Plus\Documents.

ACTIVITATEA 1.2 Studiul structurii paginilor WEB ale firmei Microchip

Studiaţi structura paginilor de internet oferite de firma Microchip pentru documentare suplimentară: www.microchip.com/tools şi http://forum.microchip.com.

ACTIVITATEA 1.3 Sintetizarea structurilor de memorie implementate în microcontrolerul PIC 18LF4520

Faceţi un tabel cu memoriile prezente în microcontrolerul PIC18LF4520 precizând pentru fiecare tipul, rolul, capacitatea, pe câţi biţi este organizat, cu câţi biţi este adresat şi modalităţile de citire, scriere şi ştergere a memoriei.

ACTIVITATEA 1.4 Comparaţie între posibilităţile a două sisteme de dezvoltare

Faceţi o comparaţie a dotărilor şi facilităţilor celor două sisteme de dezvoltare disponibile în laborator: PICKIT 1 FLASH Starter Kit şi PICDEM 2 Plus.

1.5. Activităţi propuse

[1] Faceţi o comparaţie din punct de vedere al caracteristicilor şi funcţionalităţilor între următoarele două microcontrolere: PIC18LF4520 şi PIC18LF4620.

[2] Comparaţi caracteristicile şi facilităţile celor două dispozitive de programare/depanare disponibile în laborator: ICD2 şi ICD3.

[3] Studiaţi şi celelalte sisteme de dezvoltare oferite de firma Microchip. Alegeţi unul şi precizaţi care sunt componentele şi posibilităţile suplimentare ale sale care nu sunt prezente la cele din laborator. Imaginaţi şi descrieţi două aplicaţii didactice bazate pe sistemul de dezvoltare ales.

[4] Faceţi o organigramă (schemă logică) care să descrie sugestiv desfăşurarea evenimentelor şi acţiunilor în cadrul mecanismului de generare şi tratare a întreruperilor în cazul microcontrolerului PIC 18LF4520.

1.6. Întrebări

[1] Care este diferenţa principală între microcontrolerele PIC18LF4520 şi PIC18F4520? Ce consecinţe practice înseamnă acest lucru pentru aplicaţiile în care se utilizează respectivele microcontrolere? (Indicaţie: vezi secţiunea 26.0 Electrical Characteristics din fişierul LAB PICDEM 2 Plus\Datasheets\PIC18F4520 Data Sheet [??? DS])

31

Page 26: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

[2] Care credeţi că sunt utilizările principale în aplicaţiile practice ale memoriei EEPROM prezente la microcontrolerul PIC18LF4520?

[3] Care sunt modalităţile de adresare ale memoriei de date?

[4] Care sunt motivele pentru care proiectantul a introdus structura de memorie Access Bank în microcontrolerele PIC?

[5] Pentru un automat de vânzare, ce fel de oscilator şi de gestionare a consumului de energie aţi alege?

[6] Daţi un exemplu în care supravegherea programului aplicativ prin intermediul unui Watchdog Timer este necesară.

[7] De ce au fost introduse în schema microcontrolerului memorii de date şi de program distincte?

32

Page 27: 01 Structura Hardware a Microcontrolerului PIC 18LF4520

33


Recommended