Documente Academic
Documente Profesional
Documente Cultură
2.1. INTRODUCERE
Unitatea central de prelucrare CPU12 este component a unui microcontroler din familia HCS12X. Principalele componente ale microcontrolerului MC9S12XDP512 din familia HCS12X, fig. 2.1, sunt: - unitate central de prelucrare CPU12; - generator pentru tact i iniializare; - stabilizator de tensiune; - memorie RAM, 32 Koctei; - memorie EEPROM, 4 Koctei; - memorie flash EEPROM, 512 Koctei; - logic de control ntreruperi, EMIM; - interfa cu un sistem gazd pentru dezvoltarea aplicaiilor, BDM; - ase interfee de comunicaie serial asincron, SCI; - trei interfee de comunicaie serial sincron SPI; - temporizator cu funcii de numrare, comparare i captur, ECT; - temporizator pentru ntreruperi periodice, PIT; - modulator de impulsuri n durat, PWM; - dou convertoare analog numerice de 10 bii, ATD; - dou porturi seriale I2C, IIC; - cinci porturi seriale de comunicaie conform protocolului CAN 2.0A/B; - procesor pentru prelucrare i transfer de date ntre perifericele i memoriile interne ale microcontrolerului, XGATE; - interfa cu magistrale externe, EBI; - porturi paralele. Unitatea central de prelucrare (UCP) CPU12 conine: - unitate aritmetic i logic de 16 bii; - registre interne; - memorie de instruciuni; - logic de decodificare, generare adrese i control.
13
512/384/256/128/64-Kbyte Flash 32/20/16/14/10/8/4-Kbyte RAM 4/2/1-Kbyte EEPROM VDDR VSSR VREGEN VDD1,2 VSS1,2 BKGD XFC VDDPLL VSSPLL EXTAL XTAL RESET TEST PE0 PE1 PE2 PE3 PE4 PE5 PE6 PE7 PK0 PK1 PK2 PK3 PK4 PK5 PK6 PK7 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0 Voltage Regulator Single-Wire Background Debug Module Clock and Reset Generation Module
ATD0
VRH VRL VDDA VSSA PAD00 PAD01 PAD02 PAD03 PAD04 PAD05 PAD06 PAD07 DDRAD0 & AD0
ATD1
VRH VRL VDDA VSSA PAD08 PAD09 PAD10 PAD11 PAD12 PAD13 PAD14 PAD15 PAD16 PAD17 PAD18 PAD19 PAD20 PAD21 PAD22 PAD23 PT0 PT1 PT2 PT3 PT4 PT5 PT6 PT7 PS0 PS1 PS2 PS3 PS4 PS5 PS6 PS7 PM0 PM1 PM2 PM3 PM4 PM5 PM6 PM7
CPU12X Enhanced Multilevel Interrupt Module Periodic Interrupt COP Watchdog Clock Monitor Breakpoints XGATE Peripheral Co-Processor
PLL
UDS
ADDR16 ADDR17 ADDR18 ADDR19 ADDR20 ADDR21 ADDR22 EWAIT ADDR15 ADDR14 ADDR13 ADDR12 ADDR11 ADDR10 ADDR9 ADDR8 ADDR7 ADDR6 ADDR5 ADDR4 ADDR3 ADDR2 ADDR1 ADDR0 DATA15 DATA14 DATA13 DATA12 DATA11 DATA10 DATA9 DATA8 DATA7 DATA6 DATA5 DATA4 DATA3 DATA2 DATA1 DATA0
XI R Q IRQ R/W/WE LSTRB/LDS/EROMCTL ECLK MODA/RE/TAGLO MODB/TAGHI ECLKX2/XCLKS IQSTAT0 IQSTAT1 IQSTAT2 IQSTAT3 8-Bit PPAGE ACC0 Allows 4-MByte ACC1 Program space ACC2 ROMCTL/EWAIT Timer 4-Channel 16-Bit with Prescaler for Internal Timebases SCI3 RXD TXD
DDRE
PTE
SCI0 SCI1 MISO MOSI SCK SS RXCAN TXCAN RXCAN TXCAN RXCAN TXCAN RXCAN TXCAN RXCAN TXCAN RXD TXD SDA SCL SDA SCL PWM0 PWM1 PWM2 PWM3 PWM4 PWM5 PWM6 PWM7 MISO MOSI SCK SS MISO MOSI SCK SS
DDRK
PTK
SPI0
DDRA
PTA
DDRB
PLL Supply 2.5 V VDDPLL VSSPLL Analog Supply 3-5 V VDDA VSSA I/O Supply 3-5 V VDDX1,2 VSSX1,2 Voltage Regulator 3-5 V VDDR1,2 VSSR1,2 SCI4 SCI5 RXD TXD RXD TXD
IIC1 IIC0
PWM
DDRD
SPI1
SPI2
KWJ0 KWJ1 KWJ2 KWJ4 KWJ5 KWJ6 KWJ7 KWP0 KWP1 KWP2 KWP3 KWP4 KWP5 KWP6 KWP7 KWH0 KWH1 KWH2 KWH3 KWH4 KWH5 KWH6 KWH7
PTM
CAN1
CAN0
PTS
PTT
AN8 AN9 AN10 AN11 AN12 AN13 AN14 AN15 AN16 AN17 AN18 AN19 AN20 AN21 AN22 AN23 IOC0 IOC1 IOC2 IOC3 IOC4 IOC5 IOC6 IOC7 RXD TXD RXD TXD
PJ0 CS3 PJ1 PJ2 CS1 PJ4 CS0 PJ5 CS2 PJ6 PJ7 PP0 PP1 PP2 PP3 PP4 PP5 PP6 PP7 PH0 PH1 PH2 PH3 PH4 PH5 PH6 PH7
PTB
DDRC
PTC
PTD
PTH
PTP
PTJ
Registrele acumulator A i B de cte 8 bii sunt utilizate pentru operanzi surs i destinaie n multe instruciuni. n unele instruciuni se utilizeaz registrul acumulator D de 16 bii, format din registrele A i B (A : B). Registrele index X i Y de cte 16 bii sunt utilizate pentru adresarea indexat a operanzilor. Registrul indicator de stiv SP de 16 bii este utilizat pentru adresarea memoriei stiv. Registrul numrtor de adrese PC de 16 bii este utilizat pentru adresarea programului. Registrul de condiii CCRW = CCRH : CCRL/CCR (condition code register) de 16 bii conine bii indicatori de stare i bii de control. Biii nivel de prioritate ntrerupere IPL (Interrupt Priority Level) Biii IPL se utilizeaz pentru controlul execuiei subrutinelor de ntrerupere n varianta nesting of interrupts (ntreruperea execuiei unei subrutine de ntrerupere pentru execuia unei alte subrutine de ntrerupere corespunztoare unei surse de nivel de prioritate mai ridicat). Biii IPL conin nivelul de prioritate alocat sursei n curs de deservire prin execuia subrutinei de ntrerupere corespunztoare.
15
Bitul de mascare ntreruperi X (X Masc Bit) ntreruperile externe prin pinul /XIRQ al microcontrolerului sunt destinate unor evenimente majore privind funcionarea necorespunztoare a sistemului, de exemplu probleme de alimentare a unor componente din sistem. Aceste ntreruperi se valideaz numai dup alimentarea complet i iniializarea sistemului (funcionarea stabil). Astfel, la iniializarea procesorului, bitul X este (activat) poziionat la nivel logic 1 ceea ce invalideaz ntreruperile /XIRQ. Dup funcionarea stabil a sistemului, bitul X este pus la nivel logic 0 cu o instruciune corespunztoare, de exemplu ANDCC #$BF, prin care se valideaz ntreruperile /XIRQ. Bitul X nu poate fi poziionat la nivel logic 1 prin program. Rezult c pe durata funcionrii stabile a sistemului ntreruperile /XIRQ sunt nemascabile. Bitul de mascare ntreruperi I (I Masc Bit) Bitul I are rolul de rolul de invalidare/validare a ntreruperilor mascabile, corespunztor strilor activ/inactiv (nivel logic1/nivel logic 0). Prin iniializarea procesorului bitul I este poziionat la nivel logic 1. n starea de invalidare (mascare), cererile de ntrerupere sunt memorate i n asteptare (procesorul nu accept intreruperi mascabile). Validarea ntreruperilor mascabile se obine prin poziionarea bitului I la nivel logic 0, de exemplu cu instruciunea ANDCC #$EF. La acceptarea unei cereri de ntrerupere mascabil, se salveaz n memoria stiv registrele UCP (inclusiv registrul CCR) i apoi bitul I este activat nainte de execuia primei instruciuni din subrutina de ntrerupere pentru prevenirea suprapunerii ntreruperilor. Prin instruciunea RTI de revenire dintr-o subrutin de ntrerupere, plasat la sfritul acesteia se restabilesc din memoria stiv coninuturile registrelor UCP i implicit se valideaz ntreruperile mascabile. Bitul de control S (S Control Bit) La nivel logic 0, bitul S valideaz instruciunea STOP prin execuia creia se salveaz registrele UCP n memoria stiv, se blocheaz generatorul (generatoarele) de tact i procesorul trece n stare de ateptare minimiznd consumul de la sursa de alimentare. Activarea unei linii /RESET, /XIRQ sau /IRQ determin ieirea procesorului din starea de ateptare. n cazul unei cereri de ntrerupere nemascabil /XIRQ, procesorul trece din stare de ateptare la execuia subrutinei de ntrerupere dac bitul X este la nivel logic 0 sau la execuia instruciunii urmtoare instruciunii STOP dac bitul X este la nivel logic 1. Bitul indicator de transport/mprumut C (C Status Bit) Bitul C se poziioneaz la nivel logic 1 n urma execuiei unei instruciuni de adunare care a produs transport din poziia bitului cel mai semnificativ al rezultatului i n urma execuiei unei instruciuni de scdere care a necesitat mprumut n poziia bitului cel mai semnificativ al desczutului. Bitul indicator de transport H (H Status Bit) Bitul H se poziioneaz la nivel logic 1 n urma execuiei unei instruciuni de adunare care a produs transport din poziia bitului 3 al acumulatorului A. Indicatorul H se utilizeaz pentru aplicaii n aritmetic cu operanzi n format zecimal codat binar,
16
BCD, preciznd un transport ntre cele dou grupe de cte 4 bii ale unui octet reprezentnd dou ranguri zecimale. Rezultatul adunrii din acumulatorul A se corecteaz conform formatului BCD prin execuia instruciunii DAA care utilizeaz informaia dat de bitul H. Bitul indicator de depire V (V Status Bit) Bitul V se poziioneaz la nivel logic 1 n urma execuiei unei operaii al crei rezultat depete domeniul de valori corespunztor reprezentrii n cod complementul lui doi. Bitul indicator de zero Z (Z Status Bit) Bitul Z se poziioneaz la nivel logic 1 n urma execuiei unei instruciuni al crei rezultat este zero. De exemplu, o instruciune de comparare a doi operanzi implic o operaie de scdere al crei rezultat se concretizeaz prin poziionarea unor bii ai registrului de condiii CCR, inclusiv a bitului Z. Bitul indicator de semn N (N Status Bit) Bitul N se poziioneaz n urma execuiei unei instruciuni, la nivelul logic corespunztor bitului de semnificaie maxim al rezultatului. Considernd operanzii n cod complementul lui doi, rezult c indicatorul N precizeaz semnul rezultatului unei operaii aritmetice sau logice.
Aplicaie
Se consider operaiile de adunare a cte doi operanzi reprezentai prin octei: a. 50h + 2Dh b. 69h + 2Dh c. 2Dh + F6h d. 88h + F6h e. 96h + 6Ah Se cere: - s se indice rezultatele n hexazecimal ale operaiilor de adunare cu o unitate aritmetic de 8 bii; - s se indice valorile zecimale ale operanzilor i rezultatelor adunrilor n cod binar natural CBN i n cod complementul lui doi CCD; - s se indice i s se justifice modurile n care se poziioneaz, prin operaiile de adunare, biii indicatori de transport C, de depire V, de semn N i de zero Z. a. 50h + 2Dh = 7Dh 80 + 45 = 125 C=0 V=0 N=0 Z=0 ;n CBN i CCD ;nu este depire n CBN ;nu este depire n CCD ;rezultatul este cu valoare pozitiv n CCD ;rezultatul nu este zero
17
b.
69h + 2Dh = 96h 105 + 45 = 150 105 + 45 = -106 C=0 V=1 N=1 Z=0 2Dh + F6h = 23h 45 + 246 = 35 45 + (-10) = 35 C=1 V=0 N=0 Z=0 88h + F6h = 7Eh 136 + 246 = 126 (-120) + (-10) = 126 C=1 V=1 N=0 Z=0 96h + 6Ah = 0h 150 + 106 = 0 (-106) + 106 = 0 C=1 V=0 N=0 Z=1
;n CBN ;n CCD ;nu este depire n CBN ;este depire n CCD ;rezultatul este cu valoare negativ n CCD ;rezultatul nu este zero ;n CBN ;n CCD ;este depire n CBN ;nu este depire n CCD ;rezultatul este cu valoare pozitiv n CCD ;rezultatul nu este zero ;n CBN ;n CCD ;este depire n CBN ;este depire n CCD ;rezultatul este cu valoare pozitiv n CCD ;rezultatul nu este zero ;n CBN ;n CCD ;este depire n CBN ;nu este depire n CCD ;rezultatul este cu valoare zero (pozitiv) n CCD ;rezultatul este zero
c.
d.
e.
succesive, prima adres fiind par) care se introduce n etajul 1 al memoriei de instruciuni. UCP poate accesa orice octet din memoria de instruciuni. Acest acces se realizeaz dup decodificarea octetului cod operaie al unei instruciuni.
When an Interrupt Occurs: Start Interrupt Sequence (INT)
Pipe Stage 3
Pe durata execuiei unei instruciuni, UCP efectueaz cicluri de acces la memorie pentru extragere coduri instruciuni prin care se actualizeaz coninutul memoriei de instruciuni cu coduri main ale instruciunilor ce urmeaz a fi executate. Numrul acestor cicluri este egal cu numrul de etaje eliberate n memoria de instruciuni prin execuia instruciunii corespunztoare. Rezult ca acest numr este funcie de numrul de octei din codul main al instruciunii executate i de plasarea n memorie a acesteia (primul octet din codul main este la o adres par sau impar) (even/odd instruction).
19
Immediate
IMM
Operand is included in instruction stream 8- or 16-bit size implied by context Operand is the lower 8 bits of an address in the range $0000$00FF Operand is a 16-bit address An 8-bit or 16-bit relative offset from the current pc is supplied in the instruction 5-bit signed constant offset from X, Y, SP, or PC Auto pre-decrement x, y, or sp by 1 ~ 8 Description Auto pre-increment x, y, or sp by 1 ~ 8 Auto post-decrement x, y, or sp by 1 ~ 8 Auto post-increment x, y, or sp by 1 ~ 8 Indexed with 8-bit (A or B) or 16-bit (D) accumulator offset from X, Y, SP, or PC 9-bit signed constant offset from X, Y, SP, or PC (lower 8 bits of offset in one extension byte) 16-bit constant offset from X, Y, SP, or PC (16-bit offset in two extension bytes) Pointer to operand is found at... 16-bit constant offset from X, Y, SP, or PC (16-bit offset in two extension bytes) Pointer to operand is found at... X, Y, SP, or PC plus the value in D
Indexed (5-bit offset) Indexed (pre-decrement) Addressing Mode Indexed (pre-increment) Indexed (post-decrement) Indexed (post-increment) Indexed (accumulator offset) Indexed (9-bit offset) Indexed (16-bit offset) Indexed-Indirect (16-bit offset) Indexed-Indirect (D accumulator offset)
IDX IDX Abbreviation IDX IDX IDX IDX IDX1 IDX2 [IDX2]
INST [D,xysp]
[D,IDX]
20
- registrul index X este destinaia prin adresare inerent. Instruciunea LDY #$67 (Load Index Register Y), cod main CD 00 67 - $0067 Y; - operandul surs obinut prin adresare imediat este cuvntul de 16 bii $0067, octeii doi i trei din codul maina al instruciunii; - registrul index Y este destinaia prin adresare inerent.
comparaie cu varianta de adresare direct extins, aceast variant prezint avantaje privind ncrcarea memoriei de program i timpul de execuie. Exemple: Instruciunea LDAA $55 (Load Accumulator A), cod main 96 55 - ((DIRECT) : $55) A; - operandul surs obinut prin adresare direct scurt este octetul din locaia de memorie cu adresa efectiv $xy55, unde octetul xy este coninutul registrului DIRECT i octetul 55 este al doilea din codul maina al instruciunii; - registrul acumulator A este destinaia prin adresare inerent. Instruciunea LDX $20 (Load Index Register X ), cod main DE 20 - ((DIRECT) : $20) XH, ((DIRECT) : $20 + 1) XL; - operandul surs obinut prin adresare direct scurt este cuvntul de 16 bii din locaiile de memorie cu adresele efective $xy20 i $xy21, octetul mai semnificativ i respectiv octetul mai puin semnificativ. Octetul xy este coninutul registrului DIRECT i octetul 20 este al doilea din codul maina al instruciunii; - registrul index X este destinaia prin adresare inerent. Adresarea direct extins n varianta de adresare direct extins (extended) EXT, codul main al instruciunii conine doi octei care reprezint cei 16 bii ai adresei efective. Exemplu: Instruciunea LDAA $F03B (Load Accumulator A), cod main B6 F0 3B - ($F03B) A - operandul surs obinut prin adresare direct extins este octetul din locaia de memorie cu adresa efectiv $F03B dat prin octeii doi i trei din codul maina al instruciunii; - registrul acumulator A este destinaia prin adresare inerent.
pentru adresa index, modul de modificare a coninutului acestui registru i deplasamentul, conform tabelului 2.2.
Tabelul 2.2
Postbyte Code (xb) rr0nnnnn Source Code Syntax ,r n,r n,r n,r n,r Comments rr; 00 = X, 01 = Y, 10 = SP, 11 = PC 5-bit constant offset n = 16 to +15 r can specify X, Y, SP, or PC Constant offset (9- or 16-bit signed) z- 0 = 9-bit with sign in LSB of postbyte(s)256 n 255 1 = 16-bit if z = s = 1, 16-bit offset indexed-indirect (see below) r can specify X, Y, SP, or PC 16-bit offset indexed-indirect rr can specify X, Y, SP, or PC
111rr0zs
32,768 n 65,535
111rr011 rr1pnnnn
32,768 n 65,535
Auto predecrement, preincrement, postdecrement, or postincrement; p = pre-(0) or post-(1), n = 8 to 1, +1 to +8 r can specify X, Y, or SP (PC not a valid choice) +8 = 0111 +1 = 0000 1 = 1111 8 = 1000 Accumulator offset (unsigned 8-bit or 16-bit) aa-00 = A 01 = B 10 = D (16-bit) 11 = see accumulator D offset indexed-indirect r can specify X, Y, SP, or PC Accumulator D offset indexed-indirect r can specify X, Y, SP, or PC
111rr1aa
111rr111
[D,r]
n funcie de modul de obinere a deplasamentului, variantele de adresare indexat fr modificarea coninutului registrului utilizat pentru adresa index sunt: - adresare indexat cu deplasament de 5 bii (indexed 5-bit offset) IDX; - adresare indexat cu deplasament de 9 bii (indexed 9-bit offset) IDX1; - adresare indexat cu deplasament de 16 bii (indexed 16-bit offset) IDX2; - adresare indexat cu deplasament dat de un registru acumulator (indexed accumulator offset) IDX. n funcie de modul de modul de modificare a coninutului registrului utilizat pentru adresa index, variantele de adresare indexat sunt: - adresare indexat cu predecrementare (indexed pre-decrement) IDX; - adresare indexat cu preincrementare (indexed pre-increment) IDX; - adresare indexat cu postdecrementare (indexed post-decrement) IDX; - adresare indexat cu postincrementare (indexed post-increment) IDX;
24
Adresarea indexat cu deplasament de 5 bii Adresarea indexat cu deplasament de 5 bii (indexed 5-bit offset) IDX utilizeaz pentru adresa index unul dintre registrele X, Y, SP sau PC i un deplasament cu semn de 5 bii n cod complementul lui doi. Registrul utilizat i valoarea deplasamentului sunt indicate n al doilea octet din codul main al instruciunii, conform tabelului 2.2. Exemple: Instruciunea LDAA 0,X (Load Accumulator A), cod main A6 00 - ((X)) A; - operandul surs obinut prin adresare indexat cu deplasament de 5 bii este octetul din locaia de memorie cu adresa efectiv egal cu adresa index din registrul X deoarece deplasamentul este 0; - registrul acumulator A este destinaia prin adresare inerent. Instruciunea STAB -8,Y (Strore Accumulator B), cod main 6B 58 - (B) ((Y) + (-8)) ; - operandul surs este coninut n registrul acumulator B i se obine prin adresare inerent; - destinaia obinut prin adresare indexat cu deplasament de 5 bii este locaia de memorie cu adresa efectiv calculat prin adunarea la adresa index din registrul Y a deplasamentului cu valoarea -8. Adresarea indexat cu deplasament de 9 bii Adresarea indexat cu deplasament de 9 bii (indexed 9-bit offset) IDX1 utilizeaz pentru adresa index unul dintre registrele X, Y, SP sau PC i un deplasament cu semn de 9 bii n cod complementul lui doi. Registrul utilizat i bitul de semn al deplasamentului sunt indicate n al doilea octet din codul main al instruciunii, conform tabelului 2.2. Cei 8 bii mai puin semnificativi ai deplasamentului sunt n al treilea octet din codul main al instruciunii. Exemple: Instruciunea LDAA $FF,X (Load Accumulator A), cod main A6 E0 FF - ((X) + $00FF) A; - operandul surs obinut prin adresare indexat cu deplasament de 9 bii este octetul din locaia de memorie cu adresa efectiv calculat prin adunarea la adresa index din registrul X a deplasamentului cu valoarea 255; - registrul acumulator A este destinaia prin adresare inerent. Instruciunea STAB -20,Y (Strore Accumulator B), cod main 6B E9 EC - (B) ((Y) + (-20));
25
- operandul surs este coninut n registrul acumulator B i se obine prin adresare inerent; - destinaia obinut prin adresare indexat cu deplasament de 9 bii este locaia de memorie cu adresa efectiv calculat prin adunarea la adresa index din registrul Y a deplasamentului cu valoarea -20. Adresarea indexat cu deplasament de 16 bii Adresarea indexat cu deplasament de 16 bii (indexed 16-bit offset) IDX2 utilizeaz pentru adresa index unul dintre registrele X, Y, SP sau PC indicat n al doilea octet din codul main al instruciunii, conform tabelului 2.2. Deplasamentul de 16 bii este dat prin doi octei suplimentari n codul main al instruciunii i poate fi considerat cu semn sau fr semn deoarece este dat prin acelai numr de bii ca i adresa efectiv. Exemple: Instruciunea LDAA $102,X (Load Accumulator A), cod main A6 E2 01 02 - ((X) + $0102) A; - operandul surs obinut prin adresare indexat cu deplasament de 16 bii este octetul din locaia de memorie cu adresa efectiv calculat prin adunarea la adresa index din registrul X a deplasamentului cu valoarea 258; - registrul acumulator A este destinaia prin adresare inerent. Instruciunea STAB 256,Y (Strore Accumulator B), cod main 6B EA 01 00 - (B) ((Y) + 256); - operandul surs este coninut n registrul acumulator B i se obine prin adresare inerent; - destinaia obinut prin adresare indexat cu deplasament de 16 bii este locaia de memorie cu adresa efectiv calculat prin adunarea la adresa index din registrul Y a deplasamentului cu valoarea 256. Adresarea indexat cu deplasament dat de un registru acumulator Adresarea indexat cu deplasament dat de un registru acumulator (indexed accumulator offset) IDX utilizeaz pentru adresa index unul dintre registrele X, Y, SP sau PC i un deplasament fr semn dat de un registru acumulator A, B sau D. Registrele utilizate pentru adresa index i pentru deplasament sunt indicate n al doilea octet din codul main al instruciunii, conform tabelului 2.2. Exemple: Instruciunea LDAA B,X (Load Accumulator A), cod main A6 E5 - ((X) + (B)) A; - operandul surs obinut prin adresarea indexat cu deplasament dat de un registru acumulator este octetul din locaia de memorie cu adresa efectiv calculat prin
26
adunarea la adresa index din registrul X a deplasamentului coninut in registrul acumulator B; - registrul acumulator A este destinaia prin adresare inerent. Instruciunea STAB A,Y (Strore Accumulator B), cod main 6B EC - (B) ((Y) + (A)); - operandul surs este coninut n registrul acumulator B i se obine prin adresare inerent; - destinaia obinut prin adresarea indexat cu deplasament dat de un registru acumulator este locaia de memorie cu adresa efectiv calculat prin adunarea la adresa index din registrul Y a deplasamentului coninut n registrul acumulator A. Adresarea indexat cu pre/post decrementare/incrementare Variantele de adresare indexat pre/post decrementare/incrementare (pre/post decrement/increment indexed adressing) IDX utilizeaz pentru adresa index unul dintre registrele X, Y sau SP al crui coninut se modific n cadrul execuiei instruciunii corespunztoare prin incrementare sau decrementare pentru accesul secvenelor de date. ntr-o instruciune care utilizeaz adresarea indexat cu predecrementare sau preincrementare, se modific corespunztor coninutul registrului utilizat pentru adresa index care, dup modificare, conine adresa efectiv utilizat pentru accesul locaiei de memorie. ntr-o instruciune care utilizeaz adresarea indexat cu postdecrementare sau postincrementare, modificarea coninutului registrului utilizat pentru adresa index se face dup generarea adresei efective. Registrul utilizat pentru adresa index, modul de modificare pre/post decrementare/incrementare a coninutului registrului utilizat pentru adresa index i valoarea ntreag de la 1 la 8 cu care se face decrementarea/incrementarea sunt indicate n al doilea octet din codul main al instruciunii, conform tabelului 2.2. Exemple: Instruciunea LDAA 4,-X (Load Accumulator A), cod main A6 2C - (X) 4 X; ((X)) A; - operandul surs se obine prin adresare indexat cu predecrementare; - coninutul registrului index X este decrementat cu 4; - operandul surs este octetul din locaia de memorie cu adresa efectiv coninut n registrul index X dup decrementare; - registrul acumulator A este destinaia prin adresare inerent. Instruciunea STAB 4,Y+ (Strore Accumulator B), cod main 6B 73 - (B) ((Y)); (Y) + 4 Y; - operandul surs este coninut n registrul acumulator B i se obine prin adresare inerent; - destinaia se obine prin adresare indexat cu postincrementare;
27
- destinaia este locaia de memorie cu adresa efectiv coninut de registrul index Y; - coninutul registrului index Y este incrementat cu 4.
28
Adresarea indexat-indirect cu deplasament dat de registrul acumulator D Adresarea indexat-indirect cu deplasament dat de registrul acumulator D (indexed-indirect accumulator D offset) [D,IDX] utilizeaz pentru adresa index unul dintre registrele X, Y, SP sau PC indicat n al doilea octet din codul main al instruciunii, conform tabelului 2.2. Deplasamentul este dat de registrul acumulator D. Exemple: Instruciunea LDAA [D,X] (Load Accumulator A), cod main A6 E7 - (((X) + (D))) A; - operandul surs obinut prin adresare indexat-indirect cu deplasament dat de registrul acumulator D este octetul din locaia de memorie de la adresa indicator coninut n memorie la adresa calculat prin adunarea la adresa index din registrul X a deplasamentului coninut in registrul acumulator D; - registrul acumulator A este destinaia prin adresare inerent. Instruciunea STAB [D,Y] (Strore Accumulator B), cod main 6B EF - (B) (((Y) + (D))); - operandul surs este coninut n registrul acumulator B i se obine prin adresare inerent; - destinaia obinut prin adresare indexat-indirect cu deplasament dat de registrul acumulator D este locaia de memorie cu adresa indicator coninut n memorie la adresa calculat prin adunarea la adresa index din registrul Y a deplasamentului coninut in registrul acumulator D. Instruciunea JMP [D,PC] (Jump), cod main 05 FF - (((PC) + 2 + (D))) PC; - operandul surs obinut prin adresare indexat-indirect cu deplasament dat de registrul acumulator D este cuvntul de 16 bii din memorie de la adresa indicator coninut n memorie la adresa calculat prin adunarea la adresa index din registrul PC a deplasamentului coninut in registrul acumulator D; - registrul numrtor de adrese PC este destinaia prin adresare inerent.
29
2.5.1. SALTURI
Un salt se poate obine prin execuia unei instruciuni corespunztoare care realizeaz ncrcarea registrului PC cu adresa de salt. Transferul controlului ntr-o instruciune de salt poate fi n variantele absolut sau relativ i necondiionat sau condiionat. Instruciunea de salt JMP (Jump Instruction) Execuia instruciunii de salt absolut necondiionat JMP const n ncrcarea registrului PC cu adresa de salt care coincide cu adresa efectiv obinut prin una dintre tehnicile de adresare direct extins, indexat sau indexat-indirect. Instruciuni de salt relativ scurt (Short Branch Instructions) Saltul relativ se realizeaz prin adunarea la coninutul registrului numrtor de adrese PC a unui deplasament reprezentat printr-un octet cu valori n cod complementul lui doi. Deplasamentul este dat prin al doilea octet din codul main al instruciunii de salt relativ scurt, conform tehnicii de adresare relativ. Saltul se realizeaz n intervalul de adrese deplasate cu -128 127 locaii fa de adresa care urmeaz dup cea corespunztoare deplasamentului.
30
Instruciunile de salt relativ scurt n variant condiionat utilizeaz pentru condiiile de salt biii de stare din registrul de condiii CCR, conform tabelului 2.3. Dac instruciunea de salt este precedat de o instruciune de scdere sau comparare a doi operanzi R i M, condiiile de salt reprezint relaii de tipul >, , <, ntre cei doi operanzi considerai fr semn sau cu semn, conform tabelului 2.3.
Tabelul 2.3
Mnemonic Function Unary Branches BRA BRN BCC BCS BEQ BMI BNE BPL BVC BVS Branch always Branch never Simple Branches Branch if carry clear Branch if carry set Branch if equal Branch if minus Branch if not equal Branch if plus Branch if overflow clear Branch if overflow set Unsigned Branches Relation BHI BHS BLO BLS Branch if higher Branch if higher or same Branch if lower Branch if lower or same R>M RM R<M RM C+Z=0 C=0 C=1 C+Z=1 C=0 C=1 Z=1 N=1 Z=0 N=0 V=0 V=1 1=1 1=0 Equation or Operation
Signed Branches BGE BGT BLE BLT Branch if greater than or equal Branch if greater than Branch if less than or equal Branch if less than RM R>M RM R<M NV=0 Z + (N V) = 0 Z + (N V) = 1 NV=1
Instruciuni de salt relativ lung (Long Branch Instructions) Saltul relativ se realizeaz prin adunarea la coninutul registrului numrtor de adrese PC a unui deplasament reprezentat printr-un cuvnt de 16 bii cu valori n cod complementul lui doi. Deplasamentul este dat prin doi octei din codul main al
31
instuciunii de salt relativ lung, conform tehnicii de adresare relativ. Saltul se realizeaz n intervalul de adrese deplasate cu -32768 32767 locaii fa de adresa care urmeaz dup cea corespunztoare deplasamentului. Rezult c saltul se poate face la orice locaie corespunztoare unei memorii de 64 Koctei. Instruciunile de salt relativ lung utilizeaz aceleai condiii de salt ca i instruciunile de salt relativ scurt, conform tabelului 2.4.
Tabelul 2.4
Mnemonic Function Unary Branches LBRA LBRN Long branch always Long branch never Simple Branches LBCC LBCS LBEQ LBMI LBNE LBPL LBVC LBVS Long branch if carry clear Long branch if carry set Long branch if equal Long branch if minus Long branch if not equal Long branch if plus Long branch if overflow clear Long branch if overflow set Unsigned Branches LBHI LBHS LBLO LBLS Long branch if higher Long branch if higher or same Long branch if lower Long branch if lower or same Signed Branches LBGE LBGT LBLE LBLT Long branch if greater than or equal Long branch if greater than Long branch if less than or equal Long branch if less than NV=0 Z + (N V) = 0 Z + (N V) = 1 NV=1 C+Z=0 C=0 Z=1 C+Z=1 C=0 C=1 Z=1 N=1 Z=0 N=0 V=0 V=1 1=1 1=0 Equation or Operation
Instruciuni de salt condiionat de bii din memorie (Bit Condition Branch Instructions) Aceste instruciuni, tabelul 2.5, sunt de salt relativ scurt n care condiiile de salt sunt date de nivelurile logice ale unor bii dintr-o locaie de memorie obinut prin una dintre tehnicile de adresare direct scurt, direct extins sau indexat. Codul
32
main al unei instruciuni de salt condiionat de bii din memorie conine un octet masc mm care selecteaz prin niveluri logice 1 biii octetului din memorie care sunt testai pentru condiia de salt. Condiia de salt se realizeaz dac toi biii selectai sunt la nivel logic 0, instruciunea BRCLR sau la nivel logic 1, instruciunea BRSET. De asemenea, codul main al unei instruciuni de salt condiionat de bii din memorie conine deplasamentul n poziia ultimului octet.
Tabelul 2.5
Mnemonic BRCLR BRSET Function Branch if selected bits clear Branch if selected bits set Equation or Operation (M) (mm) = 0 (M) (mm) = 0
Instruciuni de salt pentru bucle (Loop Primitive Branch Instructions) Aceste instruciuni, tabelul 2.6, sunt de salt relativ scurt (deplasament pe 9 bii n cod complementul lui doi) n care condiia de salt este dat de coninutul zero sau diferit de zero al unui registru al unitii centrale de prelucrare A, B, D, X, Y sau SP. Coninutul registrului testat pentru condiia de salt poate fi modificat nainte de testare prin decrementare sau incrementare cu o unitate ceea ce permite contorizarea execuiilor unei bucle (unui grup de instruciuni). Al doilea octet din codul main al unei instruciuni de salt pentru bucle conine bii pentru selecia registrului testat i bitul de semn al deplasamentului. Ceilali opt bii ai deplasamentului sunt dai n al treilea octet din codul main al instruciunii.
Tabelul 2.6
Mnemonic DBEQ Function Decrement counter and branch if = 0 (counter = A, B, D, X, Y, or SP) Decrement counter and branch if 0 (counter = A, B, D, X, Y, or SP) Increment counter and branch if = 0 (counter = A, B, D, X, Y, or SP) Increment counter and branch if 0 (counter = A, B, D, X, Y, or SP) Test counter and branch if = 0 (counter = A, B, D, X,Y, or SP) Test counter and branch if 0 (counter = A, B, D, X,Y, or SP) Equation or Operation (counter) 1 counter If (counter) = 0, then branch; else continue to next instruction (counter) 1 counter If (counter) not = 0, then branch; else continue to next instruction (counter) + 1 counter If (counter) = 0, then branch; else continue to next instruction (counter) + 1 counter If (counter) not = 0, then branch; else continue to next instruction If (counter) = 0, then branch; else continue to next instruction If (counter) not = 0, then branch; else continue to next instruction
DBNE
IBEQ
IBNE
TBEQ TBNE
33
CALL
JMP JSR
RTC
RTS
Instruciunea de apel de subrutin JSR (Jump to Subroutine) Instruciunea de apel de subrutin JSR, tabelul 2.7, realizeaz transferul absolut al controlului prin ncrcarea registrului PC cu adresa de nceput a subrutinei care coincide cu adresa efectiv obinut prin una dintre tehnicile de adresare direct scurt, direct extins, indexat sau indexat-indirect.
34
Instruciunea de apel de subrutin CALL (Call Subroutine in Expanded Memory) Instruciunea CALL, tabelul 7, realizeaz apelul unei subrutine a crei adres de nceput este plasat n memoria de program extins adresabil cu registrul PC i cu registrul de 8 bii PPAGE (Program Page Index Register). Rezult c salvarea adresei de revenire i ncrcarea adresei de nceput a subrutinei se refer la registrul PC precum i la registrul PPAGE. Apelul subrutinei de tipul transfer absolut al controlului se realizeaz prin ncrcarea registrului PC cu adresa efectiv obinut prin una dintre tehnicile de adresare direct extins, indexat sau indexat-indirect i ncrcarea registrului PPAGE cu adresa paginii de memorie. n cazul utilizrii tehnicilor de adresare direct extins i indexat, adresa paginii este coninut ntr-un octet din codul main al instruciunii. n cazul utilizrii tehnicii de adresare indexat-indirect, adresa paginii este coninut n memorie dup adresa efectiv care se ncarc n registrul PC.
2.5.4. EXCEPII
Excepiile sunt evenimente externe contextului programului n curs de execuie care sunt precizate prin iniializri i cereri de ntrerupere. Tratarea unei excepii se realizeaz prin transferul controlului. Astfel, fiecrei excepii i corespunde un vector excepie de 16 bii care reprezint adresa de nceput a subrutinei de tratare a excepiei. Aceti vectori sunt coninui n memorie la adresele indicate n tabelul 2.8, unde IVBR (Interrupt Vector Base Register) este registrul baz vectori ntrerupere al microcontrolerului. Rezult c tratarea unei excepii se realizeaz prin apelul i execuia subrutinei a crei adres de nceput este dat de vectorul excepie corespunztor.
35
Tabelul 2.8
Adresele vectorilor excepie [h] FFFE FFFC FFFA (IVBR) : F8 (IVBR) : F6 (IVBR) : F4 (IVBR) : F2 (IVBR) : (F0 12) (IVBR) : 10
Excepie Iniializri sistem Iniializare monitor tact Iniializare temporizator watchdog ntrerupere prin instruciunea TRAP ntrerupere prin instruciunea SWI ntrerupere nemascabil. Pinul /XIRQ ntrerupere mascabil. Pinul /IRQ ntreruperi mascabile. Perifericele interne ntrerupere mascabil spurious
Iniializri
Iniializrile corespunztoare unitii centrale de prelucrare CPU12 sunt: - inializri sistem; - iniializare monitor tact; - iniializare execuie incorect aplicaie. Iniializrile sistem se genereaz la conectarea tensiunii de alimentare (poweron reset), prin pinul /RESET, la scderea tensiunii de alimentare (low voltage reset) i la generarea unei adrese incorecte (illegal address reset). Iniializarea monitor tact (clock monitor reset) se genereaz la scderea frecvenei de tact sub o anumit valoare. Iniializarea execuie incorect aplicaie (Computer Operating Properly watchdog reset) se genereaz de un circuit temporizator (watchdog timer) la anularea coninutului numrtorului. Programul aplicaie trebuie s ncarce periodic numrtorul pentru evitarea anulrii coninutului acestuia, deci pentru evitarea iniializrii. Rezult c o astfel de iniializare se genereaz n cazul execuiei incorecte a aplicaiei.
ntreruperi
Tratarea unei ntreruperi ncepe dup execuia complet a unei instruciuni dintr-un program i se realizeaz prin apelul i execuia subrutinei a crei adres de nceput este dat de vectorul ntrerupere (excepie) corespunztor, tabelul 2.8. Subrutina de ntrerupere se termin cu o instruciune de revenire din ntrerupere RTI (Return from Interrupt) care determin reluarea execuiei programului ntrerupt cu instruciunea urmtoare celei dup a crei execuie a nceput tratarea ntreruperii. Pentru reluarea corect a execuiei programului ntrerupt este necesar salvarea contextului acestuia, nainte de execuia subrutinei de ntrerupere i respectiv restaurarea contextului acestuia, inainte de reluarea execuiei programului ntrerupt. Pentru unitatea central de prelucrare CPU12, contextul programului este dat de coninuturile registrelor UCP, inclusiv a registrului numrtor de adrese PC care conine adresa de revenire. Salvarea i restaurarea registrelor UCP se face n/din memoria stiv. Astfel, tratarea unei ntreruperi ncepe cu generarea de ctre logica de
36
control ntreruperi a microcontrolerului a adresei vectorului ntrerupere. De la aceast adres UCP extrage vectorul ntrerupere i continu cu operaii de salvare a registrelor UCP n memoria stiv. Aceste operaii se ntreptrund cu extrageri de cuvinte coduri instruciuni din subrutina de ntrerupere pentru completarea memoriei de instruciuni. n tabelul 2.9 se prezint coninutul memoriei stiv dup salvarea registrelor UCP, unde (SP) este coninutul registrului indicator de stiv dup salvarea registrelor UCP i RTN este adresa de revenire. Restaurarea registrelor UCP se realizeaz prin execuia instruciunii de revenire din ntrerupere RTI.
Tabelul 2.9
ntreruperile corespunztoare unitii centrale de prelucrare CPU12 sunt: - ntrerupere prin instruciunea TRAP; - ntrerupere prin instruciunea SWI; - ntrerupere nemascabil prin pinul /XIRQ; - ntrerupere mascabil prin pinul /IRQ; - ntreruperi mascabile de la perifericele interne.
37
UCP la memorie, acest octet este considerat ca o instruciune special cu un octet n codul main. Exemple Execuia instruciunii TAB (Transfer from Accumulator A to Accumulator B) care are codul main din doi octei cu primul octet 18h se realizeaz n dou cicluri opionale O, deoarece, din punctul de vedere al accesului UCP la memorie, se consider execuia a dou instruciuni succesive de cte un octet n codul main. Dac instruciunea TAB este plasat n memorie ncepnd de la o adres impar, primul ciclu opional este un ciclu de extragere coduri instruciuni P i al doilea ciclu opional este un ciclu inactiv f. Dac instruciunea TAB este plasat n memorie ncepnd de la o adres par, primul ciclu opional este un este un ciclu inactiv f i al doilea ciclu opional ciclu de extragere coduri instruciuni P. r -ciclu de citire dat de 8 bii (8-bit data read) R -ciclu de citire dat de 16 bii (16-bit data read) w -ciclu de scriere dat de 8 bii (8-bit data write) W -ciclu de scriere dat de 16 bii (16-bit data write) Exemple Execuia instruciunii LDAA opr16a (Load Accumulator A) care are codul main din trei octei se realizeaz n trei cicluri: rPO. Execuia instruciunii LDD opr16a (Load Double Accumulator) care are codul main din trei octei se realizeaz n trei cicluri: RPO. Execuia instruciunii STAA opr16a (Store Accumulator A) care are codul main din trei octei se realizeaz n trei cicluri: PwO. Execuia instruciunii STD opr16a (Store Double Accumulator) care are codul main din trei octei se realizeaz n trei cicluri: PWO. s -ciclu de scriere dat de 8 bii n stiv (stack 8-bit data) S -ciclu de scriere dat de 16 bii n stiv(stack 16-bit data) u -ciclu de citire dat de 8 bii din stiv(unstack 8-bit data) U -ciclu de citire dat de 16 bii din stiv(unstack 16-bit data) Exemple Execuia instruciunii PSHB (Push B onto Stack) care are codul main dintrun octet se realizeaz n dou cicluri: Os. Execuia instruciunii PSHD (Push Double Accumulator onto Stack) care are codul main dintr-un octet se realizeaz n dou cicluri: OS. Execuia instruciunii PULB (Pull B from Stack) care are codul main dintrun octet se realizeaz n trei cicluri: ufO. Execuia instruciunii PULD (Pull Double Accumulator from Stack) care are codul main dintr-un octet se realizeaz n trei cicluri: UfO.
39
2.7. MEMORIA
Unitatea central de prelucrare CPU12 utilizeaz tehnica paginrii cu posibilitatea adresrii unei memorii globale de 8 Moctei corespunztoare unei magistrale de adresare de 23 de bii. Pentru adresarea paginilor memoriei, microcontrolerul conine registre index de pagin. Coninuturile acestor registre se pot stabili prin programare pentru configurarea unei memorii locale de 64 Koctei corespunztoare unei magistrale de adresare de 16 de bii. Harta memoriilor locale i globale ale unui microcontroler din familia HCS12X este prezentat n figura 2.4. Aceast figur indic intervalele de adresare corespunztoare memoriilor fereastr (window) care se selecteaz prin paginare i registrele index de pagin corespunztoare. Registrul index de pagin RAM, de 8 bii, RPAGE (RAM Page Index Register) selecteaz n intervalul de adresare 1000h1FFFh de 4 Koctei din memoria local a uneia dintre cele 256 de pagini de cte 4 Koctei din intervalul de adresare 00FFFFFh corespunztor memoriei globale. Pagina 0 a memoriei RAM (RPAGE=0) include zona de memorie cu registrele microcontrolerului. Paginile 254 i 255 ale memoriei RAM (RPAGE=FEh i RPAGE=FFh) coincid cu cele dou pagini din intervalul de adresare 2000h3FFFh ale memoriei locale (8K RAM). Prin iniializare registrul RPAGE se ncarc cu octetul FDh pentru selecia paginii 253 din memoria global. Generarea adresei globale din adresa paginii RPAGE i adresa local dat de UCP se realizeaz prin concatenare, conform figurii 2.5. Registrul index de pagin EEPROM, de 8 bii, EPAGE (EEPROM Page Index Register) selecteaz n intervalul de adresare 0800h0BFFh de 1 Koctet din memoria local a uneia dintre cele 256 de pagini de cte 1 Koctet din intervalul de adresare 100000h13FFFFh corespunztor memoriei globale. Pagina 255 a memoriei EEPROM (EPAGE=FFh) coincide cu pagina din intervalul de adresare 0C00h0FFFh a memoriei locale (1K EEPROM). Prin iniializare registrul EEPAGE se ncarc cu octetul FEh pentru selecia paginii 254 din memoria global. Generarea adresei globale din adresa paginii EEPAGE i adresa local dat de UCP se realizeaz prin concatenare, conform figurii 2.6. Registrul index de pagin FLASH, de 8 bii, PPAGE (Program Page Index Register) selecteaz n intervalul de adresare 8000hBFFFh de 16 Koctei din memoria local a uneia dintre cele 256 de pagini de cte 16 Koctei din intervalul de adresare 4000007FFFFFh corespunztor memoriei globale. Paginile 253 i 255 ale memoriei FLASH (PPAGE=FDh i PPAGE=FFh) coincid cu cele dou pagini din intervalele de adresare 4000h7FFFh respectiv C000hFFFFh ale memoriei locale (unpaged 16K FLASH). Prin iniializare registrul PPAGE se ncarc cu octetul FEh pentru selecia paginii 254 din memoria global. Generarea adresei globale din adresa paginii PPAGE i adresa local dat de UCP se realizeaz prin concatenare, conform figurii 2.7.
40
0x0F_E000 2K REGISTERS 1K EEPROM window 1K EEPROM 4K RAM window 8K RAM RPAGE EEPROM 255*1K paged EPAGE 0x10_0000 8K RAM
0x13_FC00 0x14_0000
1K EEPROM
0x8000
External Space
PPAGE 0x40_0000
0xC000 Unpaged 16K FLASH 0xFFFF Reset Vectors 0x7F_4000 16K FLASH (PPAGE 0xFD) 16K FLASH (PPAGE 0xFE) 16K FLASH (PPAGE 0xFF) FLASH 253 *16K paged
0x7F_8000
0x7F_C000 0x7F_FFFF
Fig. 2.4. Harta memoriilor locale i globale ale unui microcontroler HCS12X.
41
Bit19 Bit18
Bit12 Bit11
Bit0
Address [11:0]
Bit17 Bit16
Bit10 Bit9
Bit0
Address [9:0]
Bit21
Bit14 Bit13
Bit0
Address [13:0]
Memoria global a microcontrolerului MC9S12XDP512, figura 2.8, cuprinde: - memorie RAM, 32 Koctei, n intervalul de adresare RAM_LOW=0F8000h 0FFFFF, 8 pagini de cte 4 Koctei, RPAGE= F8hFFh; - memorie EEPROM, 4 Koctei, n intervalul de adresare EEPROM_LOW= 13F000h13FFFF, 4 pagini de cte 1 Koctet, EPAGE=FChFFh; - memorie flash EEPROM, 512 Koctei, n intervalul de adresare FLASH_LOW=780000h7FFFFF, 32 pagini de cte 16 Koctei, PPAGE=E0hFFh.
42
Unimplemented RAM
RAM_LOW RAM 2K REGISTERS 1K EEPROM window 1K EEPROM 4K RAM window 8K RAM 0x4000 0x13_FFFF Unpaged 16K FLASH 0x1F_FFFF 0x8000 External Space CS1 16K FLASH window PPAGE 0x3F_FFFF Unimplemented FLASH Unpaged 16K FLASH 0xFFFF Reset Vectors FLASH_LOW FLASH 0x7F_FFFF RPAGE EEPROM_LOW EEPROM Unimplemented EEPROM EEPROMSIZE CS2 FLASHSIZE CS0 CS2 EPAGE 0x0F_FFFF RAMSIZE
0xC000
43
CS3
n general, pentru accesul la memorie, UCP genereaz adrese efective (locale) de 16 bii utilizate pentru accesul memoriei locale configurat cu registrele index de pagin RPAGE, EPAGE i PPAGE. Microcontrolerele HCS12X permit accesul la memoria global prin tehnica de adresare numit global care utilizeaz registrul index de pagin memorie global, de 8 bii, GPAGE (Global Page Index Register). Aceast tehnic de adresare este utilizat n instruciuni specifice de transfer ntre registrele UCP i memorie. Aceste instruciuni au mnemonice ncepnd cu litera G. Generarea adresei globale din adresa paginii GPAGE i adresa local dat de UCP se realizeaz prin concatenare, conform figurii 2.9.
Global Address [22:0]
Bit22
Bit16 Bit15
Bit 0
.
Fig. 2.9. Generarea adresei globale cu registrul GPAGE.
Aplicaie
1. S se calculeze intervalele de adresare global corespunztoare paginilor 253 din memoria RAM, EEPROM i FLASH. S se indice coninuturile registrului GPAGE pentru accesul n aceste intervale cu instruciunile specifice care tehnica de adresare global. - RAM: 0FD000h 0FDFFFh; GPAGE = 0Fh; - EEPROM: 13F400h 13F7FFh; GPAGE = 13h; - RAM: 7F4000h 7F7FFFh; GPAGE = 7Fh.
44