Sunteți pe pagina 1din 7

Capitolul 2

8
U UN NI IT TA AT TE EA A C CE EN NT TR RA AL L D DE E P PR RO OC CE ES SA AR RE E
C CP PU U1 12 2
2.1. Introducere
Unitatea central de procesare CPU12 este o unitate de procesare de
mare vitez de 16 bii. Instruciunile pentru CPU12 sunt o extindere a setului de
instruciuni ale microcontrolerelor M68HC11 bazate pe unitatea central de
procesare de 8 bii CPU11. Orice program scris pentru CPU11 poate fi reasamblat
pentru CPU12 fr modificri. Exista dou implementri pentru CPU12, varianta
original M68HC12 si varianta nou HCS12.
Ambele variante au acelai set de instruciuni, diferena dintre acestea este
dat de modul de implementare a cozii de instruciuni. Din acest motiv exist mici
diferene n ceea ce privete numrul i ordinea diverselor cicluri de execuie a
instruciunilor, aspect transparent pentru majoritatea utilizatorilor. Aceast lucrare
este direcionat spre microcontrolerele HCS12.
n ceea ce privete microcontrolerele HCS12, exist dou versiuni de
implementare:
- versiunea MC9S12C, la care frecvena maxim f
CPU
la care funcioneaz
CPU12 este de 32MHz i opional 50MHz;
- versiunea MC9S12CG, la care frecvena maxim f
CPU
la care funcioneaz
CPU12 este de 50MHz.
Facem urmtoarele observaii:
- frecvena de magistral f
BUS
(frecvena la care funcioneaz blocurile
periferice), care fixeaz i durata unui ciclu CPU, este jumtate din
frecvena f
CPU
;
- la versiunile MC9S12CG nu este implementat blocul CAN (Controller
Area Network).
2.2. Registrele ataate blocului CPU12
Unitii centrale de procesare CPU12 i sunt ataate registrele din figura
2.1.
Acumulatoarele de 8 bii A i B sunt utilizate de instruciuni pentru
meninerea operanzilor i a rezultatelor operaiilor. Modul de utilizare a
acumulatoarelor depinde strict de tipul instruciunilor. Pe de alt parte exist
instruciuni care utilizeaz combinaia A:B ca un acumulator de 16 bii denumit
acumulator D (A octet superior, B - octet inferior).
Registrele index de 16 bii IX i IY sunt folosite la adresarea indexat
pentru calcularea adresei. n acest caz o constant de 5, 9 sau 16 bii sau coninutul
2.2. Registrele ataate blocului CPU12
9
unui acumulator este adunat la coninutul unui registru index pentru formarea
adresei efective a unui operand.

7 A 0 7 B 0
15 D 0
Registrele acumulator de 8 bii A i B
Registrul acumulator de 16 bii D
15 IX 0 Registrul index de 16 bii IX
15 IY 0 Registrul index de 16 bii IY
15 SP 0 Registrul indicator de stiv de 16 bii SP
15 PC 0 Registrul numrtor de programe de 16 bii PC

Registrul de paginare de 8 bii PPAGE
S X H I N Z V C Registrul indicator de condiii de 8 bii CCR

Figura 2.1. Registrele unitii centrale de procesare CPU12.

Numrtorul de programe de 16 bii PC (Program Counter) are acelai rol
ca la orice microprocesor i anume pstreaz adresa instruciunii care se va
executa. Registrul PC se incrementeaz automat dup fiecare citire din memoria de
programe. Coninutul registrului PC se modific forat n cazul execuiei
instruciunilor de salt i ramificaie, a chemrilor i revenirilor din subrutine, a
execuiei ntreruperilor etc. Capacitatea de adresare a registrului PC este de 64K de
memorie, n cazul utilizrii memoriei de programe paginate, adresa paginii va fi
dat de coninutul registrului PPAGE (Program Page).
Unitatea central CPU12 funcioneaz mpreun cu o memorie stiv
organizat n memoria de date RAM. n consecin, dimensiunea memoriei stiv i
zona de adresare depind de dimensiunea memoriei RAM i modul de alocare a
acesteia n spaiul de adresare de 64K.
n memoria stiv se salveaz adresa de revenire RTN (valoarea curent a
registrului PC) n cazul instruciunilor de chemare de subrutin (JSR Jump to
Subroutine) i chiar i coninutul registrului PPAGE la chemarea de subrutin
(CALL) n modul extins de memorie. Stiva este folosit automat n cazul
ntreruperilor, caz n care pe lng adresa de revenire se salveaz i coninuturile
celorlalte registre ataate CPU (IY, IX, B, A, CCR). Toate registrele ataate CPU
se salveaz i n cazul execuiei instruciunilor: SWI (Software Interrupt)
ntrerupere software, WAI (Wait for Interrupt) punere CPU n stare de ateptare
i STOP punerea CPU n modul de oprire. La fel, n stiv se pot salva date cu
instruciunile de tip PUSH (de exemplu PSHB salveaz acumulatorul B in
stiv). Registrul de 16 bii SP (Stack Pointer), ncrcat iniial cu adresa de RAM de
la care ncepe stiva, memoreaz adresa ultimei locaii din memoria stiv la care a
fost fcut o salvare. Aceast locaie se numete vrful stivei. Stiva lucreaz n sens
descresctor. Astfel dac se face o salvare, nti SP se decrementeaz (cu 1 dac se
va salva un octet i cu 2 dac se vor salva doi octei) dup care se realizeaz
UNITATEA CENTRAL DE PROCESARE CPU12
10
salvarea. Refacerile din stiv se realizeaz la execuia instruciunilor RTS (Return
from Subroutine), RTC (Return from Call), RTI (Return from Interrupt) sau a
instruciunilor de tip PUL (de exemplu PULB reface acumulatorul B din stiv).
Refacerile din stiv se fac n ordinea invers salvrilor, nti se face refacerea dup
care SP se incrementeaz (cu 1 dac s-a refcut un octet i cu 2 dac s-au refcut
doi octei).
n figura 2.2 este indicat modul de salvare n stiv nainte de intrare n
ntrerupere.
Adrese pare
RTN
L



Y
L

RTN
H

X
L

Y
H

A


X
H

CCR


B







SP+7
SP+5
SP+3
SP+1
SP-1
SP+8
SP+6
SP+4
SP+2
Vrful stivei SP
SP-2




RTN
H

RTN
L

Y
H

Y
L

X
H

X
L

B


A




CCR

SP+10
SP+8
SP+6
SP+4
SP+2
SP Vrful stivei
SP+7
SP+5
SP+3
SP+1
SP-1
Adrese impare
Adrese pare a) b)
SP+9 Adresa iniial SP SP+9
Salvare
n stiv
Refacere
din stiv
Adrese impare
Figura 2.2. Modul de salvare n stiv: a) adresa iniial SP impar, b) adresa
iniial SP par.

Registrul indicator de condiii de 8 bii CCR (Condition Code Register)
conine: 5 bii indicatori de condiii, 2 bii de mascare a ntreruperilor i un bit de
control a instruciunii STOP. Biii indicatori de condiii sunt: CCR_H (Half
Carry), CCR_N (Negative), CCR_Z (Zero), CCR_V (Overflow) i CCR_C
(Carry/Borrow). Pentru a vedea efectul instruciunilor asupra acestor bii trebuie
inspectat descrierea setului de instruciuni.
Bitul CCR_H este folosit de instruciunea de ajustare zecimal DAA n
urma operaiilor de adunare pe 8 bii cu operanzi codai BCD. Acest bit este afectat
numai de instruciunile de adunare ABA, ADD i ADC.
Bitul CCR_N indic semnul unui rezultat i este util n special la operaii
aritmetice cu operanzi exprimai n complement fa de 2. n acest caz, CCR_N = 1
nseamn rezultat negativ iar CCR_N = 0 nseamn rezultat pozitiv.
Bitul CCR_V, cnd este setat, arat depirea domeniului de reprezentare a
rezultatului n urma unei operaii cu operanzi exprimai n complement fa de 2.
Bitul CCR_Z, cnd este setat, indic valoarea 0 a unui rezultat. Acest bit
este utilizat i de instruciunile de comparare, incrementare i decrementare i salt
condiionat.
Un bit foarte important este bitul CCR_C. Acest bit indic un eventual
transport (carry) n cazul operaiilor de adunare sau mprumut (borrow) n cazul
operaiilor de scdere. Acest bit mai este folosit i ca bit de eroare pentru
instruciunile de multiplicare i divizare. Pe baza acestui bit se pot realiza i
instruciunile de deplasare i rotire multipl precizie.
Prin tergerea bitului CCR_S este permis introducerea instruciunii
STOP. Aceasta oprete funcionarea CPU i eventual a oscilatorului de tact. Pentru
a preveni introducerea nedorit a acestei instruciuni, la ntlnirea instruciunii
2.3. Coada de instruciuni
11
STOP se verific nti starea bitului CCR_S i dac acesta este setat instruciunea
STOP va fi ignorat i n locul ei va fi executat o instruciune NOP.
Prin tergerea bitului CCR_I cu ajutorul unei instruciuni va fi validat
execuia ntreruperilor mascabile, valoarea de reset a acestui bit este 1. Dac acest
bit este setat, ntreruperile care apar sunt memorate i vor fi lansate n execuie
dup tergerea bitului CCR_I. La tratarea unei ntreruperi, dup salvarea n stiv a
registrului CCR, bitul CCR_I va fi setat automat pentru a preveni intrarea n
ntrerupere de la alte surse. Acest bit poate fi ters n cadrul subrutinei de
ntrerupere n curs de execuie, metod neindicat. La revenirea din ntrerupere i
refacerea din stiv a registrului CCR, ntreruperile mascabile sunt din nou validate.
tergerea bitului CCR_X valideaz introducerea ntreruperilor nemascabile
de la intrarea extern XIRQ. Dup cuplarea tensiunii de alimentare bitul CCR_X
este setat (ntreruperea nemascabil invalidat !) pentru a permite stabilizarea
tensiunii de alimentare i a oscilatorului de tact i iniializarea corect a
microcontrolerului. tergerea bitului CCR_X se va realiza cu ajutorul unei
instruciuni i din acel moment nicio alt instruciune nu poate seta acest bit. La
tratarea ntreruperilor nemascabile, dup salvarea n stiv a registrului CCR, biii
CCR_X i CCR_I sunt setai automat pentru a preveni tratarea altor ntreruperi.
Refacerea acestor bii va avea loc dup ieirea din subrutina de ntrerupere.
Deoarece ntreruperile mascabile nu afecteaz bitul CCR_X, ntreruperile
nemascabile pot ntrerupe pe cele mascabile.
2.3. Coada de instruciuni
Pentru a crete viteza de execuie a instruciunilor unele CPU utilizeaz
metoda pipelining-ului, caz n care se execut simultan mai multe instruciuni.
Metoda se preteaz la procesoarele care au magistrale separate pentru memoriile de
programe i date (arhitecturi Harvard) i n acest caz ciclurile de achiziie a
instruciunilor se pot suprapune cu cele de execuie efectiv.
Tot pentru a crete viteza de execuie a instruciunilor CPU12 utilizeaz
coada de instruciuni (instruction queue) cu avantaje n ceea ce privete depanarea
programelor. Instruciunile sunt executate secvenial, nceperea execuiei unei
instruciuni urmeaz dup terminarea instruciunii precedente. Coada de
instruciuni se organizeaz ntr-o memorie FIFO cu trei nivele de 16 bii (6 octei).
Instruciunile intr n coad n nivelul 1 si o prsesc prin nivelul 3. Orice
instruciune reface coada cu un numr de octei egal cu cel utilizat. Deoarece
instruciunile sunt codificate cu un numr variabil de octei, par sau impar (1, 2, 3,
4, 5, 6 octei) sunt necesare cicluri de achiziie a unui cuvnt (2 octei, Program
fetch - P) i a unui octet (Optional fetch - O). n anumite situaii ciclul de achiziie
O va fi nlocuit cu un ciclu F (F Free Cycle, ciclu liber n care CPU nu are nevoie
s acceseze magistrala microcontrolerului).
O problem apare cnd se modific fluxul normal al programului: execuia
instruciunilor de salt i ramificaie condiionate sau necondiionate, execuia
subrutinelor, execuia excepiilor (ntreruperi, resetare, coduri neimplementate
opcode trap). n principiu, ori de cte ori se prsete fluxul normal al programului,
UNITATEA CENTRAL DE PROCESARE CPU12
12
adic se foreaz o nou adres, la noua adres se reface coada de instruciuni prin
trei cicluri P. Dac se revine n programul prsit (execuia subrutinelor, a
ntreruperilor), la fel, se reface coada de instruciuni prin trei cicluri P. Un caz
aparte apare la tratarea buclelor de program realizate cu instruciuni de test
incrementare/decrementare i salt. Pentru a crete viteza de execuie a buclei, la
tratarea acestor instruciuni se execut n avans un ciclu P de la adresa de salt. Dac
saltul se execut coada va fi remprosptat numai cu dou cicluri P. Dac saltul nu
se execut, cuvntul citit n avans va fi ignorat iar coada va fi remprosptat cu un
ciclu P i un ciclu O.
Funcionarea cozii de instruciuni este transparent pentru utilizator, totui
din motive de depanare, funcionarea cozii i execuia instruciunilor poate fi
urmrit prin demultiplexarea semnalelor generate la conexiunile externe
IPIPE[1:0] ale microcontrolerului. Pentru urmrirea execuiei instruciunilor i
trasare este prevzut i un mecanism de urmrire (tagging mechanism) accesibil la
conexiunile externe TAGLO i TAGHI ale microcontrolerului.
2.4. Setul de instruciuni
Unitatea de procesare CPU12 admite peste 300 de instruciuni, adic este o
unitate de procesate de tip CISC (Complex Instruction Set Computer). Pentru
codificarea mnemonicelor instruciunilor (op-code) se utilizeaz fie un octet (n
acest mod sunt codificate 255 de instruciuni din prima pagin) fie doi octei (n
acest mod sunt codificate restul instruciunilor din pagina a doua). Pentru
instruciunile codificate cu doi octei, primul octet este totdeauna $18. Pagina a
doua conine 54 de instruciuni valide restul instruciunilor sunt neimplementate
(TRAP). La apariia unui cod corespunztor instruciunilor neimplementate se
genereaz o cerere de ntrerupere. Pentru codificarea instruciunilor se utilizeaz un
numr variabil de octei (ntre 1 i 6 octei) iar execuia acestora dureaz un numr
variabil de cicluri CPU.
Setul de instruciuni CPU12 lucreaz att cu operanzi de 8 bii (pentru
compatibilitate cu setul de instruciuni CPU11) ct i cu operanzi de 16 bii. Pentru
localizarea rapid a operanzilor, instruciunile utilizeaz un numr mare de moduri
de adresare (inerent, imediat, direct, indirect, indexat etc.). Aceasta permite o
implementare eficient a limbajelor de nivel nalt.
ntr-un program, scris n limbaj de asamblare, peste jumtate din
instruciunile care se utilizeaz sunt instruciuni de transfer de date. Din acest
motiv, setul de instruciuni CPU12 conine instruciuni de transfer de date de tip
load (copierea unui operand din memorie ntr-un registru CPU), store (copierea
unui registru CPU n memorie), transfer (copierea coninutului unui registru CPU
n alt registru), exchange (schimbarea coninuturilor ntre registrele CPU) i move
(copierea unei locaii de memorie n alt locaie de memorie).
Pentru efectuarea operaiilor aritmetice, setul de instruciuni CPU12 este
prevzut cu o mare diversitate de instruciuni de adunare, scdere, incrementare,
decrementare, nmulire i mprire. Operaiile se pot efectua cu operanzi de 8 sau
2.4. Setul de instruciuni
13
16 bii codai binar cu sau fr semn. n plus, se pot efectua operaii de adunare n
cod BCD i mpriri cu demprit de 32 de bii i mpritor de 16 bii.
Pentru efectuarea operaiilor logice, exist instruciuni pentru realizarea
complementului fa de 1 i fa de 2, instruciuni de realizarea a operaiilor logice
I, SAU i SAU EXCLUSIV, instruciuni de deplasare aritmetice i logice la
dreapta i la stnga.
Ca un aspect mai deosebit, setul de instruciuni CPU12 are n componena
sa i instruciuni utilizate n logica fuzzy. n acest sens, exist instruciuni folosite
n faza de fuzzyficare, instruciuni de evaluare a regulilor MIN-MAX, instruciuni
de calculare a mediilor ponderate folosite n faza de defuzzyficare, instruciuni de
determinare a minimumului sau a maximumului dintre doi operanzi, instruciuni de
multiplicare i acumulare, instruciuni de interpolare etc.
n ceea ce privete instruciunile de control ale programului i CPU, setul
de instruciuni CPU12 utilizeaz instruciuni de salt condiionat i necondiionat, de
chemare i revenire din subrutine, instruciuni de operare cu ntreruperile,
instruciuni de operare cu memoria stiv. Din aceast categorie fac parte i
instruciunile TRAP (instruciune neimplementat), STOP (trecere CPU n modul
de oprire Stop), WAI (trecere CPU n modul de ateptare - Wait), BGND (trecerea
CPU n modul Background), NOP ( null operation) etc.


Figura 2.3. Descrierea detaliat a instruciunii NEGB.

Descrierea n detaliu a instruciunilor CPU12 este dat n materialul de
referin S12CPU emis de Freescale Semiconductors. In figura 2.3 este luat ca
UNITATEA CENTRAL DE PROCESARE CPU12
14
exemplu descrierea n detaliu a instruciunii NEGB, iar n figura 2.4 numai o
prezentare sintetic a informaiilor referitoare la aceast instruciune.
50 1
NEGB
IH 1
Numr de cicluri CPU
Mnemonica instruciunii
Numrul octeilor de codificare
Codul instruciunii - opcode
Modul de adresare (IH - inerent)

Figura 2.4. Descrierea sintetic a instruciunii NEGB.

Note bibliografice
[1] S12CPUV2 Reference Manual, Rev 4.0, 03/2006, Freescale Semiconductors.
[2] MC9S12C Family/MC9S12GC Family Reference Manual, Rev 01.24, 05/2010,
Freescale Semiconductors.

S-ar putea să vă placă și