Sunteți pe pagina 1din 115

1.

ELEMENTE DE ARITMETIC
BINAR I CIRCUITE DIGITALE
ELEMENTARE

1.1. Elemente de algebr boolean

Algebra logic sau algebra boolean a fost conceput ca o metod simbolic


de tratare a funciilor logice formale, fiind ulterior extins i n alte domenii.
Deoarece ntre logica formal i circuitele de comutaie (cu dou stri) exist o
coresponden direct (logica formal studiaz valoarea de adevr sau de fals a
unor afirmaii ce pot fi numai adevrate sau false, iar circuitele de comutaie sunt
realizate prin interconectarea unor comutatoare ce au dou stri: nchis sau
deschis), algebra boolean s-a impus ca cea mai important modalitate de analiz i
sintez a circuitelor de comutaie.
Algebra boolean se definete axiomatic astfel: fie (M, , +) o mulime cu
dou operaii i M={0, 1} cu urmtoarele proprieti (axiome):
a) pentru orice elemente x1, x2 M exist relaiile (parte stabil):
x1 x2M i x1 + x2 M
b) operaiile i + sunt comutative
x1 x2 = x2 x1 i x1 + x2 = x2 + x1
c) operaiile i + sunt asociative
(x1 x2 ) x3 = x1 (x2 x3 ) i (x1 + x2) + x3 = x1 + (x2 + x3)
d) operaiile i + sunt distributive una fa de alta:
x1 (x2 + x3) = x1 x2 + x1 x3;
x1 + (x2 x3) = (x1 + x2) (x1 + x3);
e) exist element neutru pentru fiecare operaie
x 1 = x i x+0 = x;
f) exist element invers (complementar) pentru fiecare operaie
x x = x i x+x = 1;
Valorile 0 i 1 modeleaz logic strile circuitelor logice (digitale) care au
dou stri. O funcie f: M -> Mn, M = {0, 1} se numete funcie boolean. Mn
reprezint produsul cartezian M x M x M x ... x M.
Funciile logice sunt reprezentate cu ajutorul simbolurilor din figura 1.1:
2 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 1.1. Reprezentarea funciilor logice

1.2 Coduri numerice


1.2.1 Reprezentri n virgul fix

Codurile numerice se mpart n coduri binare i coduri binar-zecimale.


Codurile binare sunt reprezentri ale numerelor utilizate n sistemele digitale.
Exist urmtoarele tipuri de coduri binare:

1.2.1.1 Reprezentarea n modul i semn (MS)

Fie (bn-1 bn-2 ... b0 b-1 ... b-m) = (N)2

Valoarea numrului n baza 10 este:


n2
N = (-1) bn-1 b
i = m
i 2i

Gama dinamic a numerelor reprezentate n MS este ( 2n-1 - 2-m) (valoarea


maxim, n modul este atins pentru bi=1, i = - m, n-2, adic
n2
2 m ( 2 n 1+ m 1)
2i =
i = m 2 1
= 2 n 1 2 m

Uzual m=0 (numere ntregi). n acest caz - numere ntregi reprezentate n MS


pe n bii - gama dinamic devine (2 n-1 -1). n multe cazuri domeniul (2 n-1 -
1) se scaleaz cu 2n-1, adic
N ' = N/ 2 n-1, deci virgula va fi plasat imediat dup bitul de semn; se reprezint
pe n bii numere fracionare cu semn. Gama dinamic pentru reprezentarea MS a
numerelor fracionare este (1-1/2n-1).
ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 3
ELEMENTARE
1.2.1.2 Reprezentarea n complement de 1 (C1)

Dac N>0 atunci valoarea lui zecimal este (n reprezentarea MS):


n2
(N)MS = 02n-1 + b
n
i 2i
Numrul negativ (-N) se reprezint n complement de 1 prin (-N)C1 = 1 bn-
2...b-m, unde bi=1-bi (complement fa de 1).
Pentru a reprezenta n C1 un numr negativ se consider valoarea lui absolut
i n reprezentarea acesteia se complementeaz toi biii.

Exemplu: (9)C1 = 00001001 = 9H


(-9)C1 = 11110110 = F6H = 15x16+6 = 246 = 255-9 = (2n -1)- 9
Rezult o a doua regul pentru obinerea reprezentrii valorilor negative ale
unui numr ntreg n C1: scderea din 2n-1 a valorii sale absolute.
Gama dinamic pentru reprezentarea C1 este (2n-1 - 2-m) (la fel ca n cazul
reprezentrii MS).
Dezavantajul reprezentrilor MS i C1 este acela c valoarea 0 se exprim n 2
moduri diferite; de exemplu pentru (MS) valoarea 0 este 000...0 sau 1000...0.

1.2.1.3. Reprezentarea n complement de 2 (C2)

Pentru numere pozitive reprezentarea este identic cu cea din (C1) i (MS).
Dac numrul este negativ atunci (N)C2 = 2n - |N| = valoarea zecimal a codului
numrului negativ N. Regula general pentru N # 0 este (-N)C2 = 2n -N.
Dac numrul binar are reprezentarea n C2: bn-1, bn-2, ..., b0.b-1...b-m,
atunci valoarea sa n zecimal este dat de relaia:
n2
N = ( 1) b n 1 2 n 1
+ b
i = m
i 2i

Gama dinamic pentru reprezentarea n C2 este: -2n-1 <= N <= 2n-1 - 2-m
deoarece pentru N>=0 bn-1=0 i valoarea maxim se obine pentru bi=1, i = -m, n-
n2
2, deci N max = b
i = m
i 2 i = 2 n 1 2 m , iar pentru N<0 bn-1=1 i valoarea

minim se obine pentru bi=0, i = -m,n-2, deci Nmin = -2n-1


Prin scalare cu 2n-1 se obine reprezentarea n C2 a numerelor fracionare.
1
Gama dinamic (pentru m=0) este: -1 <= N <= 1-
2 n1
Exist dou moduri de obinere a reprezentrii lui (-N) n (C2):
4 MICROCONTROLERE - ARHITECTUR I APLICAII

1) Se adaug 1 la reprezentarea binar n C1 alui (-N)


2) Se scade din 2n valoarea zecimal a lui N i apoi se reprezint n binar (ca
numr fr semn).

n tabelul 1 sunt prezentate implementrile MS, C1 i C2 pentru numerele


ntregi pe 8 bii. Se observ c n reprezentarea C2 numrul 0 se exprim ntr-un
singur mod spre deosebire de reprezentrile MS i C1.

1.2.2. Reprezentri n virgul mobil (flotant)

Un numr N real se reprezint n virgul mobil prin dou numere binare: un


numr fracionar cu semn pe m bii numit mantis (M) i un numr ntreg cu semn
pe n bii numit exponent (E), conform relaiei N=M2E. Dac exponentul este
reprezentat n C2 atunci: -2n-1 E 2n-1-1, mantisa respect inegalitatea
1
0 |M| 1- m1
<1.
2
Rezult gama dinamic pentru reprezentarea n virgul mobil (numere
1 n 1 1 n 1 n1
diferite de 0): m 1
2 2 | N| (1 m1
) 22 1
< 22 1
2 2
1
(deoarece dac N#0 cea mai mic mantis este m1
, iar cel mai mic exponent este
2
-2n-1). Uzual n=8, m=24 (exponent pe un octet, iar mantisa pe 3 octei). Gama
dinamic este mult mai mare dect n cazul reprezentrilor n virgul fix. Pentru
n=8 rezult o gam cuprins ntre 10-38 i 1038.

Tabelul 1
Valoarea fr semn a codului de Valoarea obinut prin interpretarea
reprezentare a numrului codului binar ca numr cu semn
zecimal binar hexazecima (MS) (C1) (C2)
l
0 00000000 00 0 0 0
1 00000001 01 1 1 1
2 00000010 02 2 2 2
... ... ... ... ... ...
127 01111111 7F 127 127 127
128 10000000 80 0 - 127 - 128
... ... ... ... ... ...
254 11111110 FE -126 -1 -2
255 11111111 FF -127 0 -1
ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 5
ELEMENTARE

1.3. Elemente de aritmetic binar


1.3.1. Adunarea i scderea numerelor binare

Adunarea i scderea numerelor binare de 1bit se realizeaz conform tabelului


2. in care T - transport n rangul superior i I - mprumut din rangul superior.
Suma numerelor de 1bit se realizeaz cu ajutorul sumatorului de 1bit
repreyentat n figura 1.2; pentru numere de n bii, suma se efectueaz cu un
sumator de n bii care reprezint o extensie a sumatorului de 1bit.

Tabelul 2
x y x+y T x-y I
0 0 0 0 0 0
0 1 1 0 1 1
1 0 1 0 1 0
1 1 0 1 0 0

Figura 1.2. Sumatorul binar

Funcionarea sumatorului de n bii, asociat bitului de rang i este ilustrat in


tabelul 3.
6 MICROCONTROLERE - ARHITECTUR I APLICAII

Tabelul 3
Intrri Ieiri
xi yi Ci Si Ci+1
0 0 0 0 0 0
1 0 0 1 1 0
2 0 1 0 1 0
3 0 1 1 0 1
4 1 0 0 1 0
5 1 0 1 0 1
6 1 1 0 0 1
7 1 1 1 1 1

1.3.2. Adunarea i scderea n C2

n reprezentarea n complement de 2 adunarea i scderea se pot realiza cu


aceeai unitate aritmetic (sumatorul pe n bii); acest lucru constituie un avantaj
important. Scderea lui Y din X se realizeaz prin adunarea la X a complementului
de 2 al lui Y.
Fie X,Y doi operanzi, R rezultatul operaiei de adunare (scdere) i (X)C2,
(Y)C2, (R)C2 reprezentarea n complement de 2 a lui X,Y, respectiv R. Exist
urmtoarea relaie: ( X+Y)C2 = (X)C2 + (Y)C2 , cu condiia s nu existe depiri
de gam. Depirea (overflow) reprezint, n cazul operaiilor aritmetice,
modificarea bitului de semn datorit faptului c rezultatul operaiei este mai mare
dect limitele gamei dinamice admise de reprezentarea numeric.
Suma algebric se poate efectua n (C2) prin adunarea reprezentrilor n (C2)
ale operanzilor. Rezultatul, pozitiv sau negativ va fi corect cu condiia s nu existe
depiri de gam.

Exemplu: n=8; G = (-128,127)

1. a>0, b>0; a=10, b=4; a+b=14; (a)C2=10; (b)C2=4; (a)C2+(b)C2=14

2. a<0, b<0; a = -1; b = -3; a+b = -4; (a)C2 = 256 - 1 = 255 = FFH
(b)C2 = 256-3=253=FDH deci (-1)C2+(-3)C2 = FF+FD=1|FCH = FCH =
= (-4)C2

3. a 0 b<0

3.1. a = 1; b = -3; a+b = -2; (a)C2 = 1; (b)C2 = 256 - 3 = FDH


ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 7
ELEMENTARE

(1)C2 + (-3)C2 = 1+FD = FEH = (-2)C2

3.2. a = 3; b = -1; a+b = 2; (a)C2 = 3; (b) = FFH


(3)C2 + (-1)C2 = 3+FF = 1|02 =2

1.3.3. Depirea aritmetic (overflow)

Depirea aritmetic poate apare numai dac operanzii sunt de acelai semn i
rezultatul este mai mare dect M sau mai mic dect (-M '), unde gama dinamic
G=[-M ', M]. Pentru numere ntregi pe n bii reprezentarea n C2 poate fi ilustrat
ca n figura 1.3.

Figura 1.3. Depirea aritmetic

De exemplu (pentru n=8): 127+2 = 129>127 deci rezult depire aritmetic.


Efectund adunarea n (C2) se obine: (127)C2 + (2)C2 = 7FH + 2H = 81H =
10000001 = (-127)C2
S-a alterat bitul de semn, deci a aprut depire aritmetic.

1.3.4. Detectarea depirii aritmetice

Fie a, b G.

1. Dac a i b sunt de semne contrare, nu apare depire aritmetic deoarece


|a+b| G.
2. Dac a i b sunt de acelai semn poate apare depire aritmetic. n tabelul
asociat operaiei de adunare se observ, pentru cazurile 1 i 6, dac considerm c
8 MICROCONTROLERE - ARHITECTUR I APLICAII

Xi i Yi reprezint biii de semn ai operanzilor, iar Si reprezint bitul de semn al


operaiei, c:

Xn-1 = 0, Yn-1 = 0, Cn-1 = 1 --> Sn-1 = 1, Cn = 0


Xn-1 = 1, Yn-1 = 1, Cn-1 = 0 --> Sn-1 = 0, Cn = 1

Deoarece semnul rezultatului a fost alterat rezult c a aprut overflow. Se


observ c exist relaia (n ambele cazuri):
Cn-1 Cn = 1. Notm cu OVF depirea aritmetic, deci:
OVF = Cn-1 Cn, unde reprezint suma modulo 2 (SAU EXCLUSIV).

1.3.5. nmulirea numerelor binare

Se va prezenta algoritmul de nmulire a numerelor ntregi cu semn


n2
reprezentate n C2 pe n bii. Fie (X)C2 = ( 1) x n 1 2 n 1 + x 2
i=0
i
i
i
n2
(Y)C2 = ( 1) y n 1 2 n 1 + y 2 .
i=0
i
i

Se noteaz produsul numerelor X i cu P, deci P=XY. Dac X i Y sunt


reprezentai pe n bii, produsul P va avea lungime dubl, 2n bii.
Produsul P se poate calcula prin mai muli algoritmi; viteza de execuie (de
calcul) depinde de tipul algoritmului utilizat.
Exist algoritmi de nmulire cu un pas (nmulitor cu n+n intrri i 2n ieiri -
analog cu tabla nmulirii - la ieire se obine imediat produsul) i algoritmi n n
pai (n este numrul de bii pentru operanzii ce se inmulesc) secveniali. n acest
caz viteza de lucru este mai mic, dar complexitatea circuitelor utilizate este mai
redus dect n cazul algoritmilor cu un pas.
n continuare se va studia un algoritm secvenial de nmulire a numerelor
binare ntregi reprezentate pe n bii.
Lund n considerare modul de scriere a lui X rezult:

P = XY = {(-1) Xn-12n-1 + Xn-2 2n-2 +...+X0 20}Y =


= (-1) Xn-12n-1Y + Xn-2 2n-2Y +...+ X0 20Y =
= {2-1 [(-1)Xn-1(Y2n) + 2-1(Xn-2Y2n + ... +2-1(X0Y2n)]}

nmulirea cu 2n este echivalent cu o deplasare la stnga cu n bii, iar


nmulirea cu 2-n este echivalent cu o deplasare la dreapta cu n bii.
Denmulitul Y, nmulit succesiv cu biii nmulitorului X, xi, se adun la
produsul P (care iniial va lua valoarea 0), dupa care are loc o deplasare spre
dreapta a lui P cu 1 bit, .a.m.d.
ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 9
ELEMENTARE
Rezult algoritmul de nmulire din figura 1.4.
n implementarea fizic a algoritmului, nmulirile cu 2n i 2-1 se realizeaz
prin deplasri la stnga sau la dreapta. Deplasarea la dreapta se execut cu
conservarea bitului de semn (deplasare aritmetic). Dac la adunarea anterioar a
rezultat OVF=1 atunci nseamn c bitul de semn deja s-a alterat, deci trebuie
inversat.
Deci deplasarea la dreapta se face dup urmtoarea regul:
pn-1 OVF --> pn-1, pi+1 --> pi, i=0,..., n-2, unde pi sunt biii produsului P.

Figura 1.4. Algoritmul de inmultire binar

1.4. Circuite logice


1.4.1. Introducere

Circuitele logice (digitale) se pot clasifica n circuite combinaionale (CLC) i


circuite secveniale (CLS). Circuitele combinaionale sunt caracterizate de faptul c
ieirea depinde de intrare prin intermediul unor funcii boolene; n cazul circuitelor
secveniale, ieirea depinde de intrare i de starea circuitului (care conine istoria
intrrilor). Circuitele combinaionale nu au "memorie" spre deosebire de circuitele
secveniale.
Circuitele digitale reprezint fizic (electric) variabile boolene (n tensiune sau
curent). n figura 1.5 sunt prezentate principalele caracteristici ale circuitelor
logice. Orice circuit logic este caracterizat de tensiunile de ieire VOH, VOL i de
tensiunile acceptate la intrare VIH, VIL corespunztoare nivelelor logice de "1" logic
(high) i de "0" logic (low). Aceste valori sunt alese astfel nct s se asigure
interconectarea ntre circuitele logice (domeniu VOH domeniu VIH i domeniu
10 MICROCONTROLERE - ARHITECTUR I APLICAII

VOL domeniu VIH). Exist o stare special de ieire numit starea de nalt
impedan (high-Z) care permite conectarea mai multor ieiri mpreun.

1.4.2. Circuite combinaionale (sisteme de ordin 0)

Sistemul de ordin 0 nu are memorie; modificarea intrrii produce modificarea


ieirii, impus de funcia f, aproape simultan (dup un timp de propagare mic).
Circuitele combinaionale sunt realizate cu pori logice.

Figura 1.5. Caracteristicile circuitelor logice

Dintre circuitele combinaionale uzuale se remarc: decodificatorul


(demultiplexorul), multiplexorul, sumatorul binar, comparatorul, buffer-ul,
codificatorul, memoria ROM i ariile logice programabile.

1.4.3. Circuite secveniale (sisteme de ordin 1)


ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 11
ELEMENTARE
Un sistem de ordin 1 este realizat din sisteme de ordin 0 conectate printr-o
bucl de reacie. Sistemul de ordin 1 are memorie. Ca exemple de sisteme de ordin
1 se pot enumera: latch-ul asincron, latch-ul sincron, latch-ul adresabil, memoria
RAM i registrele.

1.4.4. Automate secveniale (sisteme de ordin 2)

Se noteaz X = mulimea semnalelor de intrare, Y = mulimea semnalelor de


ieire, Q = mulimea strilor. Se definete funcia :X x Q --> Q - funcia de
tranziie a strilor (funcia de tranziie intern) i :X x Q --> Y - funcia de ieire
(funcia de tranziie extern). Mulimea semnalelor de intrare este X={x1,x2,...xn},
mulimea semnalelor de ieire este Y={y1,y2,...ym}, iar mulimea strilor este
Q={q1,q2,...,qp}. n figura 1.6 sunt reprezentate dou modele de automate
secveniale:

Figura 1.6. Automate secventiale

Vom nota Qk+1, Qk vectorii de stare ai automatului la momentele k+1,


respectiv k, Xk vectorul de intrare la momentul k i Yk+1 vectorul de ieire la
momentul k+1. Pentru automatul de tip Mealy exist relaiile Qk+1 = (Xk, Qk)
i Yk+1 = (Xk, Qk). Pentru un automat Moore Qk+1 = (Xk, Qk) i Yk+1 =
(Qk).
12 MICROCONTROLERE - ARHITECTUR I APLICAII

Modelele Mealy i Moore nu reprezint clase de sisteme diferite, ci modele


diferite. Un acelai automat poate fi modelat ca automat Moore (pentru numr
mare de stri) sau ca automat Mealy (pentru numr mic de stri). Descrierea
automatelor se poate face prin tablouri (tabele) sau prin grafuri de tranziii ca n
figura 1.7.

Figura 1.7. Descrierea automatelor secventiale

Ca exemple de automate secventiale se pot enumera: bistabilul T, bistabilul D,


numrtorul.
Automatele secveniale vor fi structurate astfel nct s se simplifice circuitele
CLC, din structura acestora i s se poat modifica evoluia automatului prin citirea
unor informaii din exterior. Se ajunge la un nou concept automat secvenial
programabil care st la baza arhitecturii unui procesor sau microcontroler.
2. AUTOMATE SECVENTIALE
PROGRAMABILE. UNITI DE
PROCESARE I COMAND
2.1. Reducerea complexittii automatelor secveniale prin
serializare (structurarea spaiului strilor)

Un automat secvenial este modelat conform figurii 24a (model Mealy) i este
descris de S = (X,Y,Q,,) (notaiile fiind definite anterior).Fie q Q; la un
semnal de tact starea q se modific n q' prin legea de tranziie a strii . Dac
numrul de stri este mare, funcia conduce la un CLC complicat (complex).
Dac funcia se poate descompune n mai multe funcii mai simple i astfel nct
s existe relaia de compunere =0o...om-1 , cu i: X x Q --> Q, circuitul
combinaional complex se nlocuiete cu un circuit combinaional mai simplu (de
dimensiune mai mic).
Funcia de tranziie a strii este serializat n m pai de tact. Din punct de
vedere formal aceast serializare este echivalent cu modificarea la fiecare pas
numai a unui subvector al lui Qi. Spunem c spaiul strilor este structurat n Q =
Q0 x Q1 x ...x Qm-1, unde Qi reprezint o mulime de subvectori de stare.
Vom presupune c exist 0, 1,...m-1 astfel nct i modific numai un
subvector Qi.
Ipoteza 1. Evoluia automatului ntr-un singur pas astfel:

Q = Qm-1 Qm-2 Q1 Q0

= m-1 m-2 10

Q = Qm-1 Qm-2 Q1 Q0

Semnul ' reprezint strile modificate prin aplicarea funciei . Circuitul


combinaional este complex. Toate funciile i acioneaz simultan asupra
vectorului Qi.
Ipoteza 2. Evoluia automatului se face n m pai astfel:
Q = Qm-1 Qm-2 Q1 Q0

m-1 - modific Qm-1

Q = Qm-1 Qm-2
B B B
Q1 Q0
B B B B
14 MICROCONTROLERE - ARHITECTUR I APLICAII

Q = Qm-1 Qm-2 Q1 Q0

m-2 - modific Qm-2

Q = Qm-1 Qm-2 Q1 Q0

.....

Q = Qm-1 Qm-2 Q1 Q0

0 - modific Q0

Q = Qm-1 Qm-2 Q1 Q0

Circuitele combinationale ce implementeaza funciile i sunt mai simple.


Este necesar selectarea funciei i la fiecare pas. Acest lucru se realizeaz
prin adugarea la intrrile X a unor intrri suplimentare F F (numite funcii);
intrarea F va selecta funciile i la fiecare pas.
De asemenea este necesar selectarea la fiecare pas a subvectorului care se
modific Qi. Se adaug o intrare numit adres A A (mulimea de adrese).
Funcia i se aplic lui Qm-1 Qm-2 Qi+1 Qi Q1 Q0 , unde Qm-1 Qm-2
Qi+1 reprezint subvectori de stare modificai la paii anteriori. n mod echivalent
putem spune c i se aplic numai lui Qi, dar alegerea lui i este influenat
(eventual) de rezultatele obinute la pasul anterior prin ieiri speciale, numite
indicatori I I.
Automatul secvenial devine: S = (X x F x A, Y x I, q, i, i) i
i: Qi x X --> Qi, i: Qi x X --> Y
n figura 2.1 este reprezentat un automat secvenial serializat (cu structurarea
spaiului strilor).
Fiecare circuit al memoriei RAM, cu n/m bii, reprezint un subvector de
stare. Se selecteaz funcia CLC (prin F i eventual I); apoi se selecteaz prin
adresa A subvectorul de stare asupra cruia se va opera (se citete din RAM locaia
de adres A).
n continuare se calculeaz subvectorul de stare modificat , iar rezultatul este
stocat temporar n latch-ul L1. La sfritul semnalului de tact se scrie n RAM (prin
circuitul CLC1, funcie i de intrarea X) la adresa A subvectorul de stare modificat
(se actualizeaz subvectorul de stare).Ieirea Y se calculeaz tot cu ajutorul
circuitului CLC utiliznd toate strile automatului i intrarea X.
ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 15
ELEMENTARE

Figura 2.1. Automat secvenial cu structurarea spaiului strilor

Dac valorile vectorului X se pot introduce tot succesiv n subvectorii de


lungime p/k, atunci circuitul CLC se simplific i mai mult. Pentru situaia n care
vectorul X este introdus succesiv n subvectorii de lungime p/k, iar spaiul strilor
este structurat n subvectori de lungime n/m, complexitatea circuitului CLC se
reduce de aproximativ 2m+k ori n raport cu varianta nestructurat a automatului
secvenial.
n continuare se vor prezentare exemple de automate secveniale ce deriv din
schema din figura 2.1.
16 MICROCONTROLERE - ARHITECTUR I APLICAII

2.2. Exemple de automate structurate

1. Automat RALU (unitate aritmetic i registre)

Un circuit logic combinaional care execut operaii aritmetice i logice


elementare se numete unitate aritmetic i logic (ALU).

Schema automatului RALU este ilustrat n figura 2.2.

Figura 2.2. Automat RALU (Register and Arithmetic Logic Unit)

n figura 2.2 DI reprezint intrarea X, iar DO este ieirea Y. Restul notaiilor


sunt cele definite anterior.

2. Unitate RALU complex

n figura 2.3 este prezentat o unitate RALU complex.


n comparaie cu unitatea RALU din figura 2.2 (RALU - elementar) schema
din figura 2.3 are urmtoarele perfecionri:
- extrage doi operanzi simultan;
- ieirea este fie de la ALU, fie de la RAM;
ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 17
ELEMENTARE
- exist dou circuite suplimentare de deplasare (SHIFT).
Diagramele de timp asociate unitii RALU complexe sunt prezentate n
figura 2.4.

Figura 2.3. Unitate RALU complex


18 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 2.4. Diagrama de timp pentru funcionarea unitii RALU complexe

Un ciclu de tact TCY trebuie s ndeplineasc urmtoarea condiie:

ta + tPL + tMUX + tALU + tSHIFT + tsetup < TCY , unde:


ta - timpul de acces n RAM
tPL - timp de propagare latch
tMUX - timp de propagare multiplexor
tALU - timp de calcul n ALU
tSHIFT - timp de deplasare
tsetup - timp de set-up necesar memoriei RAMDatele apar la nceputul la
ieirea elementului cu memorie (de pe bucl) i se nscriu la sfritul ciclului n
elementul cu memorie.
Condiia general de funcionare este:

TCY > suma timpilor de propagare pe bucl


ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 19
ELEMENTARE
Comenzile circuitului sosesc din exterior, de la un alt automat (automat de
comand) care genereaz AA, AB, S1, S2, S3, DI, F, OE, CLK.
Reuniunea acestor comenzi reprezint o instruciune a RALU.

2.3. Principiul "pipe - line" (paralelism temporal)


Timpul de propagare pe bucl este suma timpilor de propagare a circuitelor
combinaionale din structura buclei.
Principiul "pipe - line" (conduct, band rulant) presupune introducerea n bucl a unor
elemente de memorare suplimentare; bucla este divizat n mai multe tronsoane. La fiecare
tact datele circul ntre dou elemente cu memorie - asemntor cu circulaia produselor pe o
band rulant de asamblare). Aciunile (operaiile) se fac simultan, asupra unor date diferite.
Condiia de funcionare este alimentarea n flux continuu a "conductei" cu date, astfel
nct toate circuitele logice combinaionale s fie ocupate.
n figura 2.5 este ilustrat principiul "pipe - line" pentru un automat secvenial divizat n
patru tronsoane de prelucrare.
Elementele de memorare sunt notate cu M1, M2, M3 i M4, circuitele logice
combinaionale cu CLC1, CLC2, CLC3 i CLC4, iar operaiile efectuate de fiecare circuit sunt
notate cu O1, O2, O3 i O4.
Fiecare CLC efectueaz o operaie specific astfel:

- CLC1 execut operaia O1 asupra datelor Data1, Data2, Data3, Data4,...;


- CLC2 execut operaia O2 asupra datelor de la ieirea lui CLC1;
- CLC3 execut operaia O3 asupra datelor de la ieirea lui CLC2;
- CLC4 execut operaia O4 asupra datelor de la ieirea lui CLC3.

Ieirea lui CLC4 se memoreaz n elementul de memorare M1. Dac se noteaz cu Ti


timpul de prelucrare pentru fiecare CLCi, i = 1,4, atunci ciclul de prelucrare al automatului
secvenial este TCY > T1 + T2 + T3 + T4 = 4T, dac Ti = T, i = 1,4, n cazul automatului fr
pipe - line. Pentru automatul cu pipe - line, la fiecare tact T se obine un rezultat (cu o
ntrziere de 4T); viteza de execuie este mai ridicat dect n cazul automatului fr pipe -
line.

2.4. Automatul de comand de tip CROM (controler + ROM)


Descrierea automatului de comand prin cvintetul (X, Y, Q, , ) este complicat. Pentru
schemele complexe se prefer o descriere funcional. Funcia va determina structura. Scopul
automatului de comand este generarea unei secvene de comenzi spre un alt obiect (de
exemplu RALU), astfel nct s se realizeze o aciune complex prin serializarea unor aciuni
elementare. Evoluia automatului de comand va fi determinat de starea proprie i de intrri
(care sunt ordine externe sau condiii externe testate de automat). Aceast evoluie, n n tacte,
poate fi modelat cu un arbore cu n nivele, n care se parcurge un anumit drum (i se
genereaz o secven de comenzi spre exterior) ca n figura 2.6.
20 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 2.5. Tehnica pipe-line

Figura 2.6. Funcionarea uni automat de comand

Forma simplificat a automatului de comand de tip CROM (Controller and ROM) este
prezentat n figura 2.7.
Registrul de stare este scris la fiecare tact. Adresa cuvntului urmator din ROM poate fi
selectat, prin MXA, ca fiind (AU, YC) sau O (ordin exterior). Selecia adresei urmtoare este
dat de coninutul registrului de stare (bitul S). Cmpul de bii STC selecteaz condiia de test
care va modifica adresa urmtoare.
Dintr-o stare dat caracterizat de (CO, STC, S, AU) se poate trece ntr-o alt stare
determinat de adresa generat ctre ROM. Circuitul ROM realizeaz un CLC cu n intrri i k
ieiri; un cuvnt din ROM se numete microinstruciune. Iniializarea automatului se face cu
semnalul CLR ceea ce implic tergerea registrului de stare i deci adresa iniial egal cu 0.
ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 21
ELEMENTARE

Figura 2.7. Automatul CROM

Timpul de propagare pe bucl, n cazul cel mai defavorabil este:

tRDout + tMXC + tMXA + taccROM + tsetupR < TCY


unde:
tRDout - timp de stabilire a ieirii registrului (de ncrcare)
tMXC, tMXA - timpi de propagare prin multiplexoare
taccROM - timp de acces la ROM
tsetupR - timp de set-up registru

Prin introducerea unor registre suplimentare (varianta "pipe - line") se poate micora
timpul TCY (vezi figura 2.8).
"Divizarea" buclei are efecte asupra secvenrii; astfel dac notm R(n), RA(n) coninutul
registrelor R, RA la tactul n, se poate scrie (pentru tactul n):

1) CO <-- R(n) = microinstruciunea n


2) R <-- ROM (RA(n)) = microinstruciunea (n+1)
3) RA <-- f (R(n)) = adresa microinstruciunii (n+2)

(Se face mai nti citirea registrului i apoi scrierea sa).


22 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 2.8. Automat CROM cu pipe-line

2.4.1. Perfecionri ale automatului de comand

1) n cazul unei secvene liniare de aciuni, comenzile se plaseaz n ROM la adrese


succesive, deci este util a avea un numrtor de adres i un circuit de incrementare (contor de
microprogram) conectat la MXA. Acesta poate fi utilizat ca generator al adresei urmtoare. n
cazul n care secvena de aciuni trebuie continuat la un moment dat de la alt adres din
ROM (salt), n loc de a selecta adresa urmtoare de la acest numrtor, o vom selecta din
cmpul de adrese al ROM.
2) Posibilitatea de a efectua "subrutine" - adic secvene de aciuni specifice, utilizabile
(apelabile) din alte secvene cu posibilitatea rentoarcerii n secvena iniial (apelant) dup
execuia aciunilor subrutinei.
n cazul utilizrii subrutinelor este necesar memorarea adresei de revenire n secvena
apelant. n cazul unor apeluri de subrutine din alte subrutine este necesar memorarea
adreselor de revenire. Acest lucru se realizeaz cu ajutorul unei stive adresat cu un numrtor
(stack-pointer - SP) care indic "vrful" stivei i este de obicei decrementat la introducerea
unui element n stiv (PUSH) i incrementat la scoaterea unui element din stiv (POP).

n figura 2.9 este ilustrat un automat de comand cu numrtor i stiv.


Notaiile utilizate sunt:
R1 - registru auxiliar;
CLK - tact;
SP - contor de stiv (stack pointer);
STACK - memorie stiv;
uPC - microprogram counter (numrtor);
INC - circuit de incrementare;
MXA - multiplexor de adrese;
LCAU - logica de control a adresei urmtoare (CLC2);
ELEMENTE DE ARITMETIC BINAR I CIRCUITE DIGITALE 23
ELEMENTARE
MXC - multiplexor de comand;
ROM - memorie de microprograme (CLC1);
RMI - registru de microinstruciuni (de stare);
CT - condiie de test.
Cmpurile de comand n registrul RMI sunt urmtoarele:
ADR - adresa microinstruciunii urmtoare (adres de salt);
SCT - selecie condiie de test;
CAU - control adres urmtoare;
T/F - true/false pentru selecia condiiei de test.

Figura 2.9. Automat CROM perfecionat

La fiecare tact se citete RMI i se genereaz comenzile specifice microinstruciunii


curente, se selecteaz condiia de test i adresa instruciunii urmtoare; aceast adres poate fi:
direct (ADR sau alte adrese de salt din exterior), din registrul R1 (scris la un pas anterior),
ieirea stivei (POP) sau ieirea PC. Adresa urmtoare este o funcie de: alte adrese de salt din
exterior, adresa scris n RMI (AA), condiia de test (CAU, SCT, T/F), adresa scris anterior
n R1, ieirea stivei, ieirea PC. La sfritul tactului curent registrul de stare RMI conine
microinstruciunea urmtoare extras din ROM de la una din adresele posibile (D/R/S/PC).
3. UNITI CENTRALE DE
PRELUCRARE. ETAPE ALE
FUNCIONRII
MICROPROCESORULUI
3.1. Sisteme de procesare de ordin 3. (Procesorul)
Un automat de ordin 2 mpreun cu o bucl de reacie (printr-un circuit logic
combinaional) formeaz un automat de ordin 3. Un sistem microprogramabil este constituit
din dou automate de ordin 2 interconectate: un automat de procesare (AP) i un automat de
comand (AC). Automatul de comand genereaz o secven de comenzi (microinstruciuni)
spre automatul de procesare.
Automatul de procesare prelucreaz datele de intrare n funcie de comenzile primite i
prin indicatori ai rezultatelor (de condiii) influeneaz evoluia ulterioar a automatului de
comand.
Un automat de procesare (sau automat aritmetic) (de exemplu unitatea RALU) poate fi
reprezentat ca n figura 3.1.

Figura 3.1. Automat de procesare

Lrgimea cuvntului binar prelucrat n paralel este n = 4,8,16,32,64. Dac intrrile i


ieirile sunt conectate pe aceleai linii fizice de semnal (acces bidirecional) sensul de
circulaie a informaiei este comandat prin bii suplimentari.
Automatul de comand (de exemplu CROM) va fi numit unitate de comand (UC);
aceast unitate genereaz ordine pentru automatul de procesare (RALU). O mulime succesiv
de ordine reprezint un program de comand pentru RALU.
Procesorul reprezint un sistem digital format din RALU i UC (ordinul sistemului este
3) n bucla de reacie. n figura 3.2 este prezentat schema general a procesorului.
Notaiile din figura 3.2 sunt urmtoarele:

DI, DO - date de intrare, ieire;


FL - indicatori (flag-uri);
C - comenzi;
I - instruciuni (ordine din exterior);
SI - semnale de intrare (pentru sincronizare cu evenimente externe);
2 MICROCONTROLERE - ARHITECTUR I APLICAII

SO - semnale de ieire (comenzi spre alte dispozitive, sincronizri)

Figura 3.2. Procesorul structura general

Unitatea RALU modific evoluia unitii de comand UC prin flaguri (FL); unitatea de
comand influeneaz evoluia RALU prin generarea de comenzi n funcie de instruciunea (I)
primit din exterior. Sistemul este caracterizat prin flexibilitate datorit posibilitii modificrii
funciei sale prin instruciuni exterioare.
Se adaug n plus semnale de intrare (SI) pentru sincronizarea procesorului cu
evenimente externe i semnale de ieire (SO) care pot reprezenta comenzi spre alte subsisteme
externe sau semnale de sincronizare cu alte dispozitive externe.
La fiecare instruciune primit se declaneaz n UC o secven de aciuni, numit
microprogram, asociat instruciunii I.
Ordinea de introducere a instruciunii I este determinat de elemente din exteriorul
procesorului; n acest mod se simplific substanial unitatea de comand. Secvena de
instruciuni introdus se numete program de comand al procesorului.
Funcionarea procesorului este ciclic dup cum urmeaz:

1) Unitatea de comand (UC) primete instruciunea curent, iar unitatea de procesare


(RALU) primete data de intrare curent.
2) Unitatea de comand (UC) genereaz secvena de comenzi asociat spre unitatea
RALU.
3) Unitatea de procesare RALU execut comenzile. Unitatea de comand evolueaz ca
automat cu numr finit de stri, influenat de unitatea aritmetic i logic (ALU) din
componena RALU, prin flaguri. n cazul n care sunt necesare transferuri de date cu
exteriorul, se comand citiri pe DI, respectiv ieiri pe DO.
4) Unitatea de comand trece la recepionarea instruciunii urmtoare.

Etapele 3) i 4) se pot desfura n paralel (tehnica pipe - line).

3.2. Microcalculatorul elementar. Arhitectura von Neumann


Procesorul din figura 3.2 permite (datorit separrii fizice a liniilor DI, DO i I) execuia
unei instruciuni curente (pe DI i DO) n paralel cu extragerea instruciunii urmtoare (pe
liniile I). Datorit acestui paralelism temporal, viteza de lucru a procesorului este mare.
Aceast structur este folosit n procesoarele rapide (de exemplu procesoare pentru
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 3
PROIECTAREA APLICAIILOR

prelucrarea semnalelor). Arhitectura unui astfel de procesor, cu linii de date separate de liniile
de instruciuni, se numete arhitectur Harvard.
Dac se renun la paralelismul temporal, atunci se pot unifica liniile DI, DO i I ntr-o
singur magistral (bus) bidirecional pe care circul date sau instruciuni denumit
magistral de date sau bus de date (BD).

Implicaiile acestei unificri sunt:

- extragerea i execuia instruciunilor au un caracter secvenial;


- apare necesitatea comandrii sensului de circulaie al informaiei pe busul de date, de
ctre unitatea de comand;
- pe busul de date trebuie conectate circuite cu posibilitatea strii de high-Z la ieire
pentru a invalida blocurile inactive.

Avantajele unificrii liniilor DI, DO i I ntr-un bus comun sunt:

- din punct de vedere structural: datele i instruciunile pot fi memorate pe un suport fizic
unic numit memorie principal (MP).
- din punct de vedere funcional: flexibiltatea devine foarte mare deoarece informaia
fizic poate fi interpretat de procesor ca dat sau ca instruciune.

O secven de instruciuni se numete program. Programele pot fi memorate de procesor


ca date oarecare (pot fi transferate, modificate). Datele rezultate n urma unor prelucrri pot fi
interpretate ca instruciuni. Dispar principial orice restricii privind amplasarea instruciunilor
i datelor n memoria principal.
Aceast arhitectur cu bus unic de date i instruciuni se numete arhitectura von
Neumann
Unitatea de comand trebuie s interpreteze corect cuvintele citite din memoria
principal, ca fiind coduri de instruciuni sau date numerice; rezult o funcie nou - funcia de
adresare. Rezult c unitatea de comand trebuie completat cu o nou structur, numit
unitatea de comand a programelor (UCPG) sau automat de adresare (AA); UCPG controleaz
ordinea extragerii instruciunii i a datelor din memoria principal.
n final unitatea de comand este privit ca un ansamblu format din interconectarea
UCPG cu o unitate de control a microprogramelor (vezi anterior) notat cu UC care
pstreaz funcia unitii de comand din schema de principiu. UC genereaz o secven de
comenzi asociate fiecrei instruciuni (o instruciune reprezint o secven de aciuni sau
microinstruciuni) pentru RALU i se sincronizeaz cu semnale externe pe o magistral de
comenzi (C). Magistrala de comenzi conine linii de intrare (pentru sincronizarea cu
evenimentele externe) i linii de ieire (pentru generarea comenzilor).
n figura 3.3 este prezentat modul de conectare al procesorului la memoria principal.
Procesorul se va denumi prin definiie unitate central de prelucrare (UCP). Dac UCP este
integrat monolitic, atunci se numete microprocesor. Un procesor mpreun cu memoria
principal, circuitele de interfa (porturi de intrare - ieire) i alte circuite auxiliare formeaz
4 MICROCONTROLERE - ARHITECTUR I APLICAII

un microcontroler. Configuraia elementar de baz a unui microcontroler cu un singur


microprocesor (n arhitectura von Neumnann - caracterizat de bus unic de instruciuni i date)
este ilustrat n figura 3.4.

Figura 3.3. Conectarea procesorului la memoria principal

Notaiile utilizate sunt:

- UCP - unitatea central de prelucrare;


- MP - memoria principal;
- PE, PI - "porturi" de ieire, intrare;
- DISP - dispozitive externe;
- BA, BD, BC - busuri de adrese, date, comenzi

Figura 3.4. Configuraia de baz a unui microcontroler (microcalclator)

Memoria principal poate fi memorie de program (de tip ROM) sau memorie de date (de
tip ROM - date fixe sau RAM - date variabile).
Memoria de date poate conine i programe, fr nici o restricie.
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 5
PROIECTAREA APLICAIILOR

Porturile de intrare/ieire permit interconectarea microcalculatorului cu dispozitive


externe (periferice).

Magistrala (busul) de adrese este unidirecional; pe acest bus, UCP genereaz adresa
necesar memoriilor sau porturilor de intrare/ieire.
Busul de date este bidirecional cu 8, 16, 32 sau 64 bii.
Busul de comand (control) este bidirecional i conine linii de ieire ce reprezint
comenzi (scriere, citire, etc.) i linii de intrare - sincronizri cu evenimente externe.
Din punct de vedere al comenzii transferului pe bus-ul de date, exist module active
(master) care genereaz adrese i comenzi (UCP, circuite de acces direct la memorie (DMA))
i module pasive (slave) care recepioneaz comenzi de la un modul master; la un moment de
timp este activ un singur modul master.
Informaia pe bus-ul de date poate fi:
- coduri numerice de instruciuni (comenzi elementare adresate UCP pentru a executa o
instruciune - transfer de date, operaii aritmetice/logice, salturi n program, operaii auxiliare);
- adrese - informaie de localizare a datelor (ca informaie auxiliar la instruciune);
- date propriu-zise.
Dispozitivele externe pot fi informatice (console teletype, monitoare video, imprimante,
memorie de mas (discuri, band magnetic) sau interfee cu sistemul comandat de
microcalculator (convertoare A/D, D/A, module de achiziie de date, circuite logice specifice
aplicaiei).

3.2.1. Principiul transferului pe bus-ul de date

1: Citire memorie principal sau port de intrare

BA <-- (adresa de memorie sau de port)


BC <-- comenzi de citire memorie sau port
BD <-- MEM() sau PI() (coninutul locaiei de memorie de adres sau al
portului de intrare de adres )
P <-- (BD) (data citit din memorie sau port este transferat de pe BD n
registrele P)

2: Scriere n memoria principal sau ntr-un port de ieire

BA <-- (adresa de memorie sau de port)


BD <-- d (data din microprocesor se transfer pe BD)
BC <-- comenzi de scriere n memorie sau port de ieire
MEM() sau PE() <-- (BD) (data este transferat de pe BD n locaia de
memorie de adres sau n portul de ieire de adres )
6 MICROCONTROLERE - ARHITECTUR I APLICAII

3.3. Funcionarea unui microcalculator elementar cu arhitectur


von Neumann
Unitatea RALU execut operaia de prelucrare dat prin instruciune. Unitatea de
comand genereaz comenzile interne necesare execuiei instruciunii (comand secvena de
aciuni elementare n interiorul unei instruciuni). UCPG comand secvenarea instruciunilor
i adresarea datelor.
O instruciune reprezint o comand elementar adresat UCP pentru a executa operaii
aritmetice, logice, auxiliare i pentru a selecta adresa instruciunii urmtoare. Reprezentarea
instruciunii n memoria principal poate avea format variabil (ca numr de cuvinte) sau
format fix (numr fix de cuvinte - la procesoarele RISC, DSP).
Unitatea de comand conine un registru de instruciuni, un decodificator al codului
instruciunii (asociaz codului instruciunii un ordin dat automatului de comand), automatul
de comand propriu-zis (care genereaz toate secvenele de comenzi pentru execuia
instruciunii curente i selecia instruciunii urmtoare) i o schem de tacte (generator de
ceas). Unitatea de control a programului conine un contor de program (PC) pentru adresarea
memoriei principale n vederea citirii cuvntului curent al codului de program i un circuit de
incrementare; deasemenea conine un registru de adresare a datelor (RA) care conine adresele
datelor calculate conform modului de adresare. Pot exista i alte registre auxiliare de adresare
(index, deplasament). Exist deasemenea un registru care conine adresa vrfului stivei (SP);
stiva poate s fie intern (n UCP) i/sau extern (n memoria principal).
Ciclul de instruciune reprezint totalitatea operaiilor necesare pentru execuia unei
instruciuni. Execuia unei instruciuni se compune din n 1 operaii pe bus (citiri, scrieri).
Operaia de citire-scriere pe bus se numete ciclu main. Un ciclu main se compune din n
1 cicluri de tact. Orice instruciune incepe cu un ciclu main M1, care preia codul operaiei
asociat instruciunii.
Succesiunea general a operaiilor ntr-un ciclu de bus este urmtoarea:

1. citire cod instruciune ( n 1 cuvinte); RI <-- MP(PC);


2. decodificarea codului (n UC);
3. citirea (dac este cazul) a altor cuvinte din memoria de program (adrese,
operanzi de tip imediat);
4. citirea (dac este cazul) a operanzilor din memoria principal;
5. execuia instruciunii i determinarea adresei instruciunii urmtoare;
6. memorarea rezultatului (n registrele interne sau memoria principal).

Operaiile 1 i 2 sunt obligatorii pentru fiecare instruciune; operaiiile 3 i 4 pot s apar


sau nu n funcie de tipul instruciunii; operaia 5 este obligatorie n orice instruciune, iar
operaia 6 poate s apar sau nu n funcie de instruciune.
n figura 3.5 este ilustrat funcionarea unui microcontroler (microcalculator).
Notaiile utilizate sunt:
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 7
PROIECTAREA APLICAIILOR

RALU: A - acumulator
AL - latch acumulator
TMP- registru temporar
ALU- unitate aritmetic i logic
UCPG: PC + IMC- contor de program + circuit de incrementare
AR - registru de adresare a datelor
UC: RI - registru de instruciuni
DEC - decodificator instruciuni
8 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 3.5. Funcionarea unui microcontroler (microcalculator)

3.4. Metode pentru creterea performanelor UCP


Creterea performanelor UCP se refer n principal la mrirea vitezei de prelucrare.
Metodele utilizate pot fi de natur electric (creterea frecvenei de tact prin mbuntirea
tehnologiei) sau arhitectural (sporirea gradului de paralelism, utilizarea unor instruciuni mai
complexe din punct de vedere al operaiilor i al modurilor de adresare - procesoare CISC
Complex Instruction Set Computer, utilizarea tehnicii pipe-line i a unor instruciuni simple
- procesoare RISC Reduced Instruction Set Computer.
Principalele moduri prin care se poate mbunti performana unui UCP sunt:

- utilizarea unitii aritmetice pentru calculul adreselor (pentru arhitecturi von


Neumann)
- utilizarea tehnicii pipe-line pentru UCP cu arhitectur CISC
- definirea unei arhitecturi cu bus-uri separate pentru date i instruciuni (arhitectura
Harvard)
- utilizarea arhitecturii RISC
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 9
PROIECTAREA APLICAIILOR

3.5. Subsisteme ale UCP


3.5.1. Uniti RALU (automate de prelucrare)

a) Uniti RALU cu bus unic (procesoare CISC)

Schema de principiu pentru RALU elementar este prezentat n figura 3.6.

Figura 3.6. Structura automatului RALU cu bus unic


Registrele din unitatea RALU sunt mprite n dou grupuri (high, low) i se pot utiliza i
pe lungime dubl. RTA i RTB sunt registre temporare. MUX este un multiplexor. Blocul de
corecie BCD asigur corecia rezultatului ALU pentru lucrul in zecimal (Binary Coded
Decimal BCD).
Operaiile ALU pot fi:
- cu un singur operand (din registre sau de pe bus);
- cu doi operanzi (din registre sau de pe bus);
Unitatea ALU poate efectua operaii aritmetice elementare (+, -, , /), operaii logice
(AND, OR, XOR, NOT), deplasri, rotaii.
Operaiile ALU se pot efectua i pe lime dubl.

b) Unitatea RALU pentru microprocesoare RISC

Este prezentat n figura 3.7.


10 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 3.7. Unitate RALU pentru procesoare RISC

Avantajele acestei uniti RALU sunt urmtoarele:

- numr mare de registre (120x32 bii);


- se pot extrage doi operanzi simultan (n registrele RA, RB);
- execut n acelai ciclu operaia: R <-- SHIFT (R1 R2) , unde SHIFT reprezint
operatorul de deplasare, iar este o operaie oarecare.

Unitatea ALU poate s fie controlat de pe bus-ul extern. De asemenea, registrul de


rezultate poate fi citit (scris de pe bus-ul extern).

3.5.2. Comanda execuiei programelor

Unitatea de comand a programelor (UCPG) asigur funciile:

- adresarea datelor (modul de calcul al adresei se numete mod de adresare);


- adresarea instruciunilor (n secven (secvenial), salturi n programe, apeluri i resturi
din subprograme).
Schema de principiu a unei uniti UCPG elementare este prezentat n figura 3.8.

Figura 3.8. Structura UCPG


LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 11
PROIECTAREA APLICAIILOR

Unitatea ALU este utilizat pentru a incrementa/decrementa unul dintre


registrele PC, SP, AR. Functia UCPG este descris de relaia: BA <-- PC | SP |
AR, n funcie de tipul operaiei (extragere cod instruciune, lucrul cu stiva,
citire/scriere date).
Dup efectuarea operaiei curente, se poate modifica valoarea registrului corespunztor
cu +1 | -1 | 0. n microprocesoarele concrete se pot utiliza n locul lui AR registre din unitatea
RALU.

3.5.2.1. Moduri de adresare a datelor

Se definete adresa efectiv ca fiind adresa calculat conform modului de adresare


utilizat. Adresa care se genereaz pe busul de adrese se numete adres fizic i poate fi:
- chiar adresa efectiv (pentru adresare liniara);
- modificat (pentru adresare sewgmentat sau paginat).
Vom nota cu O - un operand i cu EA - adresa efectiv.
Modurile de adresare sunt:

1. Adresare imediat: O este specificat n instruciune dup codul instruciunii.


2. Direct la registru: O aparine unui registru din RALU specificat n codul instruciunii.
Prezint dezavantajul c nu permite scrierea compact de programe pentru prelucrarea de
tabele de date.
3. Direct la memorie: EA este dat n codul instruciunii dup codul operaiei.
4. Indirect prin registru: EA este coninutul unui registru specificat n codul instruciunii.
5. Indirect prin registru cu baz i deplasament: EA este coninutul unui registru de baz
plus un deplasament.
6. Indirect prin dou registre: EA este coninutul unui registru de baz plus coninutul
unui registru index.
7. Indirect prin dou registre de baz index i deplasament: EA este suma coninutului a
dou registre i a unui deplasament.
8. Indirect prin memorie cu index i deplasament: EA este suma dintre coninutul unei
locaii de memorie de adres egal cu suma ntre un registru baz i un deplasament i
coninutul unui registru index.
Modurile de adresare de mai sus sunt ilustrate n figura 3.9.
12 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 3.9. Moduri de adresare a datelor

3.5.2.2. Adresarea instruciunilor

Dup fiecare instruciune contorul de program PC se ncarc cu o adres care


depinde de tipul de operaie executat n instruciunea curent. Exist urmtoarele
moduri de adresare a instruciunilor:
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 13
PROIECTAREA APLICAIILOR

1. - execuie secvenial PC <-- PC + n, n este deplasarea pn la adresa de nceput


a instruciunii urmtoare;
2. - salt cu adres direct PC <-- a, a adresa de salt;
3. - salt cu adres relativ PC <-- PC + d, d deplasament (+/-) fa de adresa
instruciunii urmtoare.
Avantajul acestei metode de salt const n relocabilitatea programelor (codul
programului poate fi deplasat n memoria principal la alt adres i rmne
executabil fr nici o modificare). Programele ce folosesc adresarea direct a
instruciunilor nu sunt relocabile. Figura 3.10 ilustreaz modul de adresare cu salt
relativ la program.

Figura 3.10. Salt relativ la PC

4. - salt cu adresare indirect


PC <-- Reg (prin registru)
PC <-- (EA) (prin memorie)
(EA) reprezint coninutul cuvntului de memorie de adres EA, calculat
conform unui mod de adresare a datelor. Se utilizeaz la realizarea de tabele de
adrese de salt (instruciunea case). Instruciunile pot fi adresate i cu ajutorul stivei
(CALL/RET); de exemplu, apelul CALL k reprezint secvena de operaii: SP <--

SP - 1, SP <-- adresa urmtoare dup CALL k, PC <-- k, iar revenirea din


subrutin, RET, este echivalent cu operaiile: PC <-- (SP), SP <-- SP + 1.
14 MICROCONTROLERE - ARHITECTUR I APLICAII

3.5.3. Unitatea de comand (UC)

Unitatea de comand are urmtoarele funcii: extrage codul instruciunii


(fetch), decodific instruciunea, comand execuia unei secvene de aciuni
asociate instruciunii respective (microprogram).
Unitatea de comand poate fi realizat prin logic convenional- sau logic
cablat- (primele microprocesoare, procesoarele RISC), sau prin microprogramare
(procesoarele CISC).
O unitate de comand microprogramat execut o secven de
microinstruciuni, asociat instruciunii, care genereaz comenzile pentru execuia
instruciunii la nivel main (citire-RD, scriere -WR, validri, etc.) i comenzi
pentru selectarea adresei urmtoare n memoria de microprograme. Logica de
comand (controler) i circuitul ROM (pentru microprograme) constituie un
microsecvenor.

Exemplu de secvenare pentru execuia unei instruciuni

Notaii:
MM = memorie de microprograme;
RMI = registru de microinstruciuni;
P = contor de microinstruciuni;
I(i) = microinstruciunea i;
PC = contor de instruciuni.
Fazele de secvenare sunt urmtoarele:

(0) Reset PC ==> adresa MM = 0;


(1) Adresa MM = 0, citete I(0), RMI <-- I(0) (microinstruciunea "fetch")

Execuia I(0) (FETCH)

(2) - comand de aplicare a adresei PC la memoria principal (MP);


(3) - adresa MP = PC;
(4) - comand de citire (Read) i validarea destinaiei (RI = registru de
instruciuni);
(5) - RI <-- MP(PC);
(5') - selectarea I(1) ca microinstruciune urmtoare i citirea ei.

Execuia I(1) (DECODIFICARE)

Microinstruciunea I(1) determin un salt necondiionat n MM la o adres


dat de codul instruciunii. Este posibil o transformare care asigur independena
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 15
PROIECTAREA APLICAIILOR

codificrii instruciunii de plasarea adreselor de salt n MM (printr-un codificator


(ROM) care are ca intrri codul instruciunii i ca ieiri adresa de salt n MM.

(6) - selectarea RI ca generator de adres de salt;


(7) - aplicarea adresei de salt la MM;
(8) - salt la adresa microprogramului asociat instruciunii I.

Execuia I1(I), I2(I)

(9) - execuia microprogramului asociat instruciunii I. Se incrementeaz


corespunztor PC, se citesc/scriu date, se efectueaz operaii n RALU, etc. Ultima
microinstruciune conine un salt necondiionat n memoria de microprograme, la
adresa 0 (FETCH); se ncepe un nou ciclu de instruciune.Indicatori de condiie
(flaguri) din RALU pot s determine salturi condiionate la diverse microprograme
n funcie de valoarea biilor condiionali.
Principiul microprogramrii pentru realizarea unitii de comand este ilustrat
n figura 3.11.
Microinstruciunea cu formatul din figura 3.12 este o microinstruciune
orizontal caracterizat de: cmpuri independente, timp de execuie redus (1 tact),
grad mare de paralelism. Pentru microinstruciunile orizontale, dimensiunea MM
este mare, iar gradul de utilizare este mic.
n cazul unor comenzi disjuncte, se poate utiliza un decodificator (ca n figura
3.13) pentru a reduce numrul de cmpuri ale microinstruciunii.
Utilizarea unui cmp cu mai multe semnificaii conduce la microprogramare
vertical; semnificaia cmpului este dat de un cmp special de selecie. Mai
multe microinstruciuni succesive pot utiliza acelai cmp, cu semnificaie diferit.
O restricie a utilizrii microprogramrii verticale este aceea c nu se poate
realiza o operaie care utilizeaz un operand imediat din microprogram i
efectueaz simultan i un salt.
16 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 3.11. Principiul microprogramrii

Formatul unei microinstruciuni este prezentat n figura 3.12.

Figura 3.12. Formatul microinstruciunii


LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 17
PROIECTAREA APLICAIILOR

Figura 3.13. Formatul unei microinstruciuni cu comenzi disjuncte

n practic, se utilizeaz microprogramarea "diagonal" (combinaie de


microinstruciuni orizontale i verticale).
Pentru aciuni tipice necesare n mai multe microprograme, se pot defini
microsubrutine.
Codurile instruciunilor la nivel main sunt structurate ca figura 3.14.

Figura 3.14. Structura codurilor de instruciune

Cmpurile DEST i SRC devin parametrii ai microprogramului care poate


lucra cu orice destinaie i cu orice surs (dintre cele accesibile utilizatorului).
n general, structura unei instruciuni un are un numr de cmpuri fix (ca la
procesoare RISC), ci poate avea un numr variabil de cmpuri, n funcie de
complexitatea operaiilor (ca la procesoare CISC).
18 MICROCONTROLERE - ARHITECTUR I APLICAII

3.6. Microcontrolere specializate n prelucrarea digital a


semnalelor
Majoritatea aplicaiilor de procesare a semnalelor (Digital Signal Processing -
DSP) necesit o prelucrare n timp real cu o intrziere minim ntre momentele de
timp ale achizitiei semnalului de intrare i generarea semnalului de iesire. Pentru
aceste aplicaii datele de intrare nu pot fi stocate (pentru a fi prelucrate " off line" )
deci procesorul trebuie sa fie suficient de rapid pentru a se evita pierderea de date.
Pe de alt parte algoritmii DSP snt caracterizai de paralelism n ceea ce
privete organizarea calculelor; acest paralelism poate fi exploatat de arhitectura
procesorului de semnal.
n figura 3.15 este prezentat o configuratie generic a unui procesor de
semnal constituit din: unitatea de procesare, memorie, unitatea detransfer a datelor,
procesorul de intrare / ieire i procesorul de control.
n structur pot exista mai multe unitti de prelucrare distribuite, cu memorii
private sau comune. Transferul datelor i conflictele de acces la memorie pot
constitui elemente de reducere a vitezei globale de operare a procesorului. Pentru
evitarea acestui fenomen se utilizeaz proiectarea modularizat, cu partajarea
sarcinilor ntre unittile de prelucrare. Acest lucru este valabil att pentru
procesoarele de semnal nou create ct i pentru structurile de prelucrare cu mai
multe procesoare integrate interconectate.
Procesorul de intrare - iesire (I /O) asigur preluarea semnalului de intrare i
generarea semnalului de ieire (filtrare de band, conversii, stocare a datelor,
protocolul de comuniie cu exteriorul).
Memoria este caracterizat prin: capacitatea de stocare a datelor, lrgimea
cuvntului de date, modurile de adresare a datelor, timpul de acces).
Reeaua de transfer a datelor asigur transmiterea datelor ctre toate unittile
funcionale ale procesorului de semnal (transmisie de date, rutarea datelor,
controlul asupra erorilor).
Procesorul de control este caracterizat de: capacitatea de stocare a
instruciunilor, viteza de execuie, setul de instruciuni.
Unitatea de prelucrare asigur efectuarea operaiilor de baz (operaii
aritmetice, logice) i este caracterizat de: timpul de execuie a intruciunilor,
gradul de flexibilitate.
Funciile procesorului de control snt: interpretarea comenzilor primite din
exterior, controlul transferului de date, controlul unitilor de prelucrare i
controlul interfeelor de intrare-ieire.
Aceste funcii pot fi distribuite i ctre alte elemente ale sistemului. De
exemplu unitile de prelucrare au posibilitatea de a controla local transferul
datelor i funciile aritmetice - logice proprii.
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 19
PROIECTAREA APLICAIILOR

Intrare
Procesor Procesor
I / O
de control
Iesire

Retea de
Memorie Unitate de
transfer
prelucrare

a datelor

Figura 3.15 Procesor de semnal generic

Procesorul de control poate efectua prelucrri complementare aplicaiei DSP


(de uz general care nu au cerinte critice de timp: monitorizare, ntreinere etc.)
Resursele procesorului de control includ capacitatea de stocare a datelor i
instruciunilor, setul de instruciuni, capabilitatea aritmetic.
Elementele de prelucrare execut algoritmul DSP n timp real. Aceste
elemente snt specializate n efectuarea prelucrrilor specifice algoritmilor DSP.
Reeaua de transfer a datelor reprezint un bloc esenial n sistem; acest bloc
poate avea influene majore n viteza de prelucrare global a sistemului.
Resursele reelei de transfer a datelor includ: cile de rutare a datelor,
lrgimea busurilor de transfer a datelor, viteza de transmisie, posibilitatea de
transfer pe blocuri de date. Cerinele de control a retelei de transfer includ
protocoalele de comunicaie i modurile de adresare. Numrul de busuri reprezint
o problem care diminueaz capacitatea de transfer a datelor ntre blocurile din
figura 1; nu este convenabil realizarea unei interconectri totale ntre blocuri
datorit complexittii tehnologice i a necesitii introducerii unor blocuri
suplimentare de arbitare a cererilor de acces multiple.
Resursele memoriilor includ: capacitatea de stocare, lrgimea cuvintului de
date, modurile de adresare i controlul general al memoriei (decodificare,
comenzi).

3.6.1. Caracteristici ale procesoarelor DSP


20 MICROCONTROLERE - ARHITECTUR I APLICAII

Prelucrarea digital a semnalelor presupune utilizarea unor procesoare de


semnal cu performante ridicate. Performantele nu pot fi masurate numai prin
viteza de multiplicare/acumulare (MIPS). Deoarece o instruciune pentru un
procesor de semnal (DSP) nu este echivalent cu o instructiune pentru un alt
procesor de semnal, rata MIPS poate s nu fie concludent i poate conduce la
erori de apreciere.
Arhitectura unui DSP i performanele pentru fiecare bloc funcional din
aceasta arhitectur (cum ar fi unitatea aritmetic, unitatea de adresare i
secvenorul de program) pot fi mult mai importante n stabilirea caracteristicilor
unui procesor de semnal. Ceea ce distinge un procesor de semnal de un procesor de
uz general este reprezentat de urmtoarele:

1. Aritmetica rapid i flexibil


Un procesor de semnal trebuie sa permita calcule ntr-un singur ciclu
(multiplicri, multiplicri i acumulri, deplasri, operaii aritmetice i logice).
Unitatea aritmetic trebuie sa permita implementarea unui algoritm de prelucrare a
semnalelor fara ca acesta sa fie reformulat (modificat) pentru a putea fi
implementat.

2. Dinamica extinsa pentru multiplicari/acumulari


Dinamica extins este fundamental pentru algoritmii de prelucrare a
semnalelor. Aceasta asigur protecia la depirile aritmetice care apar n decursul
sumelor pariale (de exemplu efectuarea calculelor pe 40 bii cu 8 biti de extensie a
bitului de semn).

3. ncrcarea a 2 operanzi ntr-un singur ciclu (din memoria interna


sau externa)
n calculele cu sum de produse (convoluii numerice) trebuie ncrcati 2
operanzi pentru a efectua calculele. Capacitatea de adresare flexibil pentru 2 date
din memorie este important.

4. Buffere circulare hardware (n memoria intern sau extern)


O clas larg de algoritmi de prelucrare a semnalelor necesit buffere de
memorie circulare; dac exist posibilitatea hardware de a utiliza astfel de buffere
se reduce timpul de execuie (de prelucrare) i se simplific implementarea
algoritmului.

5.Bucle hardware i salturi condiionate fr cicluri suplimentare


Algoritmii de prelucrare snt n mod natural repetitivi i pot fi exprimai
simplu prin bucle de program. Secventorul de program trebuie s permit
implementarea buclelor i a salturilor conditionate fr ciclii main suplimentari
datorai testrii condiiei de terminare a buclei sau testrii condiiei de salt; aceasta
conduce la performane mai bune din punct de vedere al timpului de prelucrare.
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 21
PROIECTAREA APLICAIILOR

3.6.2 Uniti aritmetice i de control pentru procesoare DSP


Unitatea aritmetica poate fi organizata ca n figura 3.16.

Figura 3.16. Moduri de realizare a unitilor aritmetice DSP

Structurile (a) i (b) sunt potrivite pentru sume de produse; se pot efectua
nmuliri rapide. Timpul de efectuare al unei sume de produs (nmulire i
acumulare la suma anterior) este destul de mare. Pentru mbunatirea
performanelor acestei structuri se pot folosi n paralel nmultitorul i sumatorul.
Multiplicatorul se poate folosi n mod secvenial (se efectueaz cte un produs apoi
se face acumularea rezultatului) sau n timp ce se efectueaza un produs se
acumuleaza rezultatul anterior (utilizarea n paralel a multiplicatorului i a
sumatorului).
Dezavantajele structurii (a) sunt: efectuarea sumelor simple se face cu
utilizarea suplimentar a multiplicatorului (ceea ce mrete timpul de calcul) i
efectuarea produselor multiple se face cu utilizarea suplimentar a sumatorului.
Avantajul structurii (b) este posibilitatea efecturii unor calcule, de tip x.y+z, cu
vitez foarte mare datorit faptului ca sumatorul i multiplicatorul pot lucra paralel.
Dezavantajele structurii (b) sunt: numrul de busuri interne mare; pentru
reducerea numrului de busuri se alege varianta transferurilor pe busuri comune
sumatorului i multiplicatorului: paralelismul nu mai este total.
Unitatea de control a unui procesor de semnal poate fi realizat
microprogramat utiliznd tehnica pipe-line pentru a mari viteza de lucru. n figura
3.17-a este ilustrat realizarea unei uniti de control microprogramate fr pipe-
line. Modificrile introduse prin tehnica pipe line snt ilustrate n figura 3.17-b.
22 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 3.17. Unitate de comanda pentru procesoare DSP

Notaiile utilizate snt:

tsecv - timp de calcul al adresei pentru memoria de microprograme


tacc - timp de acces la memoria de microprograme

tPR,tSR - timp de ncrcare a registrelor R1,R2


tstat - timp de stabilire a strii unittii aritmetice (n avans)
tc - timp de calcul efectiv (operaii interne n unitatea aritmetic)

n timp ce unitatea aritmetic execut instructiunea (n) secventorul


calculeaz deja adresa pentru instructiunea (n+1) folosind ca informaie
instructiunea (n) i starea unitii aritmetice de la instructiunea (n-1).
Unitatea de comand din figura 3.17-a se regseste n toate procesoarele
CISC. Varianta cu pipe-line este obligatorie n procesoare DSP pentru a asigura o
vitez de lucru sporit. Exist i procesoare CISC cu unitate de comanda pipe-line,
dar, n general, nu e obligatorie pentru microcontrolerele uzuale.
n microcontrolerele DSP, microinstruciunea este orizontal, pentru a
putea asigura controlul mai multor uniti funcionale n paralel.
4. SINCRONIZAREA PROCESORULUI CU
DISPOZITIVE EXTERNE. TRANSFERURI
INTRARE-IEIRE

4.1. Sincronizarea UCP cu dispozitive externe


4.1.1 Conceptul de ntrerupere

ntreruperea, n sens strict, reprezint oprirea temporar a executiei unui


program la comanda unui semnal exterior unitatii centrale (semnificind producerea
unui eveniment extern) si executarea unui program specific asociat evenimentului
extern. Odata cu incheierea servirii intreruperii programul intrerupt este reluat
automat din starea in care a fost intrerupt.
O astfel de intrerupere propriu-zisa poarta numele de intrerupere externa sau
ntrerupere hardware (HW). n acest caz evenimentelor externe li se asociaza
semnalele numite cereri de intrerupere (CI). Servirea cererii de intrerupere (SCI)
consta in executia subprogramului asociat evenimentului extern respectiv.
Surse ale intreruperilor externe pot fi:
- dispozitive periferice care solicita prin CI servicii specifice (transferuri IO
sau actiuni particulare solicitate prin simpla prezenta a CI) corespunzatoare
aplicatiei;
- dispozitive HW de supraveghere a functionarii normale a sistemului,
distincte de aplicatia propriu-zisa (ex. circuite detectoare de erori de paritate la
transferurile cu memoria, de sesizare a caderii iminente a tensiunii de alimentare,
etc.).
Anumite UCP permit generarea interna (prin instructiuni ale programului) a
intreruperii executiei programului principal si executia unui subprogram asociat
utilizind un mecanism foarte asemnator cu acela al intreruperilor propriu-zise
HW. Aceste intreruperi se numesc ntreruperi interne sau ntreruperi software
(SW).
Surse ale intreruperilor interne pot fi:
- indicatoare ale unor situatii de exceptie (depiri la operaiile aritmetice,
operaii de control nepermise n programul utilizatorului, nerezidena unor
segmente virtuale n memoria principala fizic, etc)
- alte situaii necritice care pot fi ntlnite n programele de aplicaie, dar care
necesit execuia unor subprograme asociate.
Sistemul de ntreruperi este sistemul hardware-software (HW-SW) prin
care UCP realizeaz funciunile de ntrerupere. Existena sistemului de ntreruperi
permite:
- sincronizarea activitii UCP cu evenimente externe;
2 MICROCONTROLERE - ARHITECTUR I APLICAII

- eliberarea UCP de sarcina explorarii intrrilor, n vederea modificarilor de


stare i micorarea timpului de rspuns la modificarea intrrilor;
- tratarea ierarhizat (dup prioriti) a diverselor sarcini alocate UCP;
- detectarea rapid a unor situaii anormale n funcionarea sistemului cu
sporirea implicit a fiabilitii.
Termenul de control al ntreruperilor se refer la acceptarea sau neacceptarea
de ctre UCP a CI i se aplic evident doar ntreruperilor externe, HW nu i celor
interne, SW.
De asemenea anumite microprocesoare posed semnale de ntrerupere care
determin execuia necondiionat a subprogramului asociat. Acestea poart
numele de ntreruperi nemascabile.
ntreruperile care pot fi validate/ invalidate prin program se numesc
mascabile. Pentru aceasta UCP dispune de instructiuni de validare a intreruperilor
i de invalidare a intreruperilor.

Rspunsul UCP laintreruperi

Considerind o UCP cu o singur intrare de ntrerupere mascabil (INTR) i


mai multe surse de intrerupere posibile, realizarea aciunilor specificate n definirea
ntreruperilor necesit n principiu urmtoarele aciuni ale UCP, la apariia unei CI
acceptate:

- confirmarea acceptrii i identificarea ntrerupatorului;


- salvarea strii programului ntrerupt;
- transferul executiei la subrutina de servire;
- restabilirea strii programului ntrerupt dup executarea subrutinei;
- reluarea execuiei programului ntrerupt.

Daca sursa de ntrerupere este unic, se aloc prin construcia UCP o adres
fix, la care se va plasa subrutina de servire. n aceast situaie sistemul de
ntreruperi se numete cu vectorizare fix.

n cazul mai multor surse de intrerupere ele vor fi identificate prin coduri
proprii (tip de ntrerupere), citite de ctre UCP n ciclul masin de confirmare a
acceptrii i identificare a ntrerupatorului.
Generarea unui tip de ntrerupere se poate face n dou moduri:
- de ctre dispozitivul extern, daca este prevzut cu logica necesar;
- de ctre un dispozitiv special numit controler de ntreruperi (CINT) prevzut
cu mai multe intrri la care sosesc CI de la dispozitivele externe, crora li se
aloc tipuri distincte i cu ieirea conectat la intrarea INTR a UCP.

Confirmarea acceptrii unei cereri de ntrerupere de ctre UCP se face printr-


un semnal de recunoatere INTA (INTerrupt Acknowledge). La primirea acestuia,
CINT genereaz pe bus-ul de date (BD) tipul de intrerupere. Adresa de servire a
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 3
PROIECTAREA APLICAIILOR

ntreruperii se citete dintr-o tabel, stocat n memorie, care se numete tabela


vectorilor de ntrerupere.
Figura 4.1. ilustreaz rspunsul la ntreruperi a unui procesor.

Figura 4.1 Rspunsul UCP la ntreruperi

4.1.2. Sincronizarea cu dispozitive lente

Memoriile si dispozitivele externe din structura unui sistem cu microprocesor


pot avea o vitez mai redus dect a UCP. n aceste situaii este necesar s existe
semnale speciale prin care UCP s poat s se sincronizeze cu aceste dispozitive
lente. Trebuie precizat ns c, pentru perifericele integrate n structura unui
microcontroler, acest lucru nu este necesar.
Sincronizarea cu memorie i dispozitivele externe lente se realizez cu
ajutorul unui semnal, READY, care este testat pe durata fiecrui ciclu main.
Dac semnalul READY este zero logic, atunci toate semnalele de pe magistralele
externe ale UCP vor fi ingheate pn cnd semnalul READY devine unu logic.
Procesorul se afl, pe durata ct READY este yero logic, n starea de WAIT.
Figura 4.2. ilustreaz sincronizarea cu memoria si dispozitivele externe lente.

4.2. Interfee de intrare-ieire. Porturi I/O


4 MICROCONTROLERE - ARHITECTUR I APLICAII

Structura tipic a oricarui microcalculator are o seciune de intrare ieire -


IO (ca in figura 3.4). Schema din figura 3.4 trebuie completat cu circuite de
selecie a memoriei i a porturilor. Figura 4.3 indic modul n care se conecteaz
mai multe module de memorie i de intrare ieire pe magistralele unui procesor.

Figura 4.2. Sincronizarea cu memorii si dispozitive externe lente


LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 5
PROIECTAREA APLICAIILOR

Figura 4.3. Structura unui microcontroler

n schema din figura 4.3 un singur modul de memorie sau port IO sunt
active la un moment dat. Acest lucru este asigurat de decodificatoarele DEC1 i
DEC2.
Sectiunea de intrare asigura accesul informaiilor din lumea exterioara spre
calculator (tastatura, cititor de banda, disc, echipamente de masur, semnalizari
dintr-un proces etc).
Prin sectiunea de ieire se transmit spre exterior rezultate, comezi, mrimi
ctre echipamente de executie, etc. Toata funcionarea sistemului este coordonat
de ctre unitatea de control, care supervizeaz i sincronizeaz toate operaiile,
transferul de informaie, decodific instruciunile programului i determin
execuia acestora.
Elementele de intrare/ieire vor fi realizate cu circuite speciale, n
exteriorul microprocesorului. De multe ori, productorii de microprocesoare vor
furniza aa numite familii de circuite integrate, asociate (compatibile ca
funcionare), cu tipurile de microprocesoare pe care le realizeaz.
Transferul de intrare ieire repezint schimbul de informatii dintre
dispozitivele periferice (exterioare sistemului cu microprocessor) i este realizat
prin intermediul unor cicuite de interfat numite porturi de intrare-ieire sau porturi
I/O.
Porturile I/O sunt accesate n mod similar unor locaii de memorie.
Adresele acestor porturi pot fi nglobate in spaiul de adrese al memoriei sau pot fi
separate.
Transferul datelor ntre diversele seciuni ale sistemului se face pe
magistralele de date ale sistemului. Diferenierea diferitelor surse de informaie de
la care/ctre se vehiculeaz datele n sistem se face prin existena adreselor
distincte ale acestora. Astfel fiecare cuvnt de date al memoriei sistemului are o
6 MICROCONTROLERE - ARHITECTUR I APLICAII

adres unic. Microprocesorul genereaz aceast adres dac se efectueaz


transferuri de informaie de la/la cuvntul de date pe magistrala de adrese a
sistemului. Similar i porturile sistemului au adrese unice. Apariia unei anumite
adrese va conduce la selecia unic a portului dorit, care va fi activat i cu care va
opera sistemul. Diferenierea ntre memorie i porturi ct i indicarea sensului
transferului datelor (de la microprocesor nspre memorie sau porturi - scriere; la
microprocessor dinspre memorie sau porturi - citire) va fi facut prin semnale
specifice ale seciunii de control.
Porturile de la care se face citirea datelor se numesc porturi de intrare
(INPUT). Porturile la care se face scrierea datelor se numesc porturi de ieire
(OUTPUT).

4.2.1. Transferul de date. Protocoale de comunicaie

Transferurile de date pot fi clasificate dup urmtoarele criterii:

1. dup gradul de implicare a microprocesorului n realizarea transferului


- transfer comandat prin program (transfer programat)
- transfer cu acces direct la memorie ( transfer DMA - Direct
Memory Access)
2. dup dispozitivul care solicita transferul
- transfer solicitat de CPU
- transfer solicitat de dispozitivul periferic
3. dup gradul de serializare
- transfer serial
- transfer paralel

Performanele sistemului n ceea ce privete transferul de date sunt


influenate de modul n care se realizeaz sincronizarea dintre CPU s
dispozitivul extern.
Transferul programat presupune ca procesorul initiaz, controleaz
desfaurarea transferului i ncheie transferul de date, ca n organigrama din
figura 4.4.
Acest tip de transfer presupune existenta unei bucle de ateptare activ n
care UCP interogeaz dispozitivul periferic pentru a determina cnd acesta are
date gata de transfer. Portul I/O are este compus dintr-un port de stare (care
indic printre altele i faptul c datele sunt pregatite de transfer) i un port de
date care conine informaia dorit. Transferul programat cu bucl de ateptare
activ nu este foarte eficient deoarece blocheaz procesorul n bucla de
interogare. Organigrama din figura 2 poate fi modificat prin utilizarea
ntreruperilor generate de dispozitivul perifeic atunci cnd datele sunt pregtite
de transfer. Bucla de ateptare activ se transform ntr-o bucl de ateptare
pasiv ce poate fi nlocuit cu alte prelucrri utile.
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 7
PROIECTAREA APLICAIILOR

Citirea efectiv a datelor i stocarea acestora se vor face n rutina de


servire a ntreruperilor generate de dispozitivul periferic (portul I/O).
Avantajul utilizrii ntreruperilor este acela ca UCP poate fi utilizat pentru
prelucrri utile; este necesar ca UCP s aib n componen un bloc de rspuns
la ntreruperi (crete complexitatea hardware).

Figura 4.4. Transferul programat (port de intrare)


8 MICROCONTROLERE - ARHITECTUR I APLICAII

n cazul transferului de tip DMA, procesorul initiazp transferul prin


programarea unui circuit specializat numit controler DMA (DMAC) dup
care desfurarea transferului i ncheierea acestuia se vor face sub controlul
DMAC. Transferul DMA este guvernat de principiul cererii i acceptarii
magistralelor (Bus Request-Bus Grant) ilustrat n figura 4.5.

Figura 4.5. Principiul cererii si acceptarii magistralelor

Dupa programarea circuitului DMAC, acesta ateapt o cerere de transfer


de la dispozitivul periferic (REQ); cnd aceasta este generat, DMAC confirm
acceptarea cererii (ctre dispozitivul periferic) prin semnalul ACK i genereaz
o cerere de magistral (Bus Request BR) ctre UCP; se ateapt confirmarea
cedrii magistralelor de ctre procesor (prin semnalul Bus Grant BG), dup
care procesorul i trece magistralele n starea de inalta impedanta (HiZ) i
devine slave in sistem. Controlerul DMA este master n sistem i controleaz
magistralele, efectund transferuri de date cu memoria sau dispozitivele
periferice, fr interventia UCP (care poate s efectueze numai operatii ce nu
necesit magistralele sistemului). Aceast situaie este meninut pn cnd
semnalul de cerere de magistral este inhibat, dupa care UCP redevine master
iar DMAC slave. Figura 4.6 ilustreaz etapele desfaurrii transferului DMA.
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 9
PROIECTAREA APLICAIILOR

Figura 4.6. Diagrama de operare a transferului DMA


4.2.1.1 Transferul serial

Pentru a putea realiza transferuri pe distane mai mari se utilizeaz interfete


speciale care transforma informaia paralel - cuvntul de date - ntr-o succesiune
de impulsuri, transmise pe un singur fir de legatur ca n figura 4.7.

Figura 4.7. Transferul serial

Transmisia n acest mod se face cu vitez mai mic dect transmisia simultan
a tuturor biilor (transmisie paralel), dar problemele de zgomot i preul
echipamentelor sunt mai reduse.
Transmisia serial se va face prin emiterea unor impulsuri de tensiune, cu dou
niveluri, corespunztoare valorilor logice "0" sau "1" ale biilor ce se transmit.
Durata acestor pulsuri este fix, fiind dat de semnalul de "ceas", care va impune
viteza de serializare a datelor. Este evident ca pentru o funcionare corect va fi
necesar ca ambele circuite, att cel emitor (transmitator) ct i receptorul, s
functioneze cu aceeai frecven a ceasului. De aceea, aceste viteze de
transmisie/receptie serial sunt standardizate. Ele se msoar n numrul de biti ce
10 MICROCONTROLERE - ARHITECTUR I APLICAII

se transmit/receptioneaz pe secunda. Vitezele standard tipice sunt: 110,300,600,


1200, 2400, 4800, 9600 pn la 115000 de bii pe secund. Exist doua moduri
principale de transmisie a datelor: modul asincron (cel mai utilizat) i modul
sincron.
Pentru a ameliora deformarea pulsurilor n linia seriala (datorate atenuarilor i
capacitii parazite a liniei) se pot utiliza urmtoarele metode:
- introducerea unor circuite de conversie a pulsurilor din gama 05
V n gama 012V sau (-12) (+12 )V
- eantionarea multipl a bitului ( pna la de 64 de ori durata de bit)
i determinarea prin logic majoritar a valorii acestuia
n figura 4.8. sunt ilustrate cele doua metode.

Pentru distane foarte mari se pot utiliza n locul convertoarelor de nivel


circuite de tip modem (modulator demodulator) care transform (moduleaz)
irul de pulsuri n semnal analogic (mai puin modificat de canalul de
comunicaie) care va fi demodulat la recepie i refcut n form binar.

Figura 4.8. mbunatirea transmisiei seriale

Formatul transmisiei seriale asincrone este prezentat n figura 4.9:


LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 11
PROIECTAREA APLICAIILOR

Figura 4.9. Formatul transmisiei seriale asincrone

Transmisia este declansat n mod asincron; semnalizarea nceperii acesteia se


realizeaz prin bitul de START (cu valoarea logic "0"). Acesta va declana la
receptor, operaia de receptie i deserializare a urmtorilor bii, ce reprezint
informatia propriu-zis ce se transmite (b0 pina la b7 n figura 4.9). Transmisia se
va incheia cu un numar precizat (cel puin 1) de bii de stop (valoarea logic "1").
Abia apoi se va putea emite eventual un alt cuvint de date, n aceeai succesiune a
operaiilor.

4.2.1.2 Transferul paralel

Transferul paralel al datelor se realizeaz prin transmiterea simultan a datelor


prin intermediul unui cablu format din N conductori, fiecare conductor purtnd un
bit, ca in figura 4.10.

Figura 4.10. Transferul paralel

Transmiterea datelor n mod paralel ntre dou calculatoare sau ntre un


calculator i o consol nu se poate face pe distante mai mari de civa metri
datorit problemelor deosebite legate de ecranarea acestor cabluri i a preului de
cost ridicat. Nu se pot - sau nu este convenabil - realiza magistrale de date care s
12 MICROCONTROLERE - ARHITECTUR I APLICAII

permit transferul simultan al tuturor biilor cuvintelor de date ntre dou asemenea
echipamente.
Transferurile de date n mod paralel pot fi clasificate astfel:
- transferuri fara protocol electric ( se transmit numai datele, fr
alte semnale de comand)
- transferuri cu protocol electric ( pe lng date se transmit i
semnale de comand a transferului)
- transferurile cu protocol electric pot fi cu sau fr confirmare
- transfer paralel asincron sau sincron (dup modul de sincronizare
ntre transmitor i receptor)
Pentru transferul fara protocol, UCP are sarcina interogarii porturilor de
intrare (pentru a determina momentele n care datele sunt pregatite); pentru ieire,
dispozitivul periferic are drept sarcina urmrirea modificrii datelor. Dezavantajele
transferului de date fr protocol sunt: nu exist sincronizare, nu se confirm faptul
c datele au ajuns la destinaie i ncrcarea suplimentar a UCP pentru realizarea
transfrului programat.
n cazul transferurilor cu protocol electric fr confirmare transmisia poate
fi iniiat fie de transmitor fie de receptor. Daca transmisia este iniiat de
transmitor, acesta va emite ctre receptor un semnal (RDY) care indic faptul c
datele sunt pregtite de transfer. Receptorul ateapt semnalul RDY dup care
preia datele de pe magistrala de date. Acest protocol este ilustrat n figura 4.11.
Transferul de date poate fi iniiat i de receptor; acesta va emite un semnal de
cerere de date (REQ) ctre tranmitor. Dup primirea semnalului REQ,
transmitorul va transmite datele pe magistala de date de unde acestea vor fi
preluate de ctre receptor. Protocolul este ilustrat n figura 4.12.
Pentru ambele tipuri de protocoale fr confirmare nu se rezolva dect
determinarea momentelor de timp la care se vor transmite datele pe magistrala de
date. Transmitatorul si receptorul trebuie s funcioneze la aceeai vitez pentru a
se evita pierderea de date sau receptionarea acelorai date de mai multe ori. Nu
exist o confirmare a faptului c datele au fost recepionate i nu este posibil ca
transmitatorul i receptorul s opereze cu viteze diferite.
Aceste dezavantaje sunt eliminate prin utilizarea protocolului cu confirmare
ilustrat in f igura 4.13.
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 13
PROIECTAREA APLICAIILOR

Figura 4.11. Transfer paralel cu protocol asincron fr confirmare (transfer iniiat


de transmitor)
14 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 4.12. Transfer paralel cu protocol asincron fr confirmare (transfer iniiat


de receptor)

n cazul protocolului cu confirmare, de exemplu cu iniierea transferului de


catre transmitor, acesta emite un semnal (RDY) care indic receptorului c datele
sunt pregatite de transfer, plaseaz datele pe magistrala de date, dar nu se iniiaza
un nou transfer pna cnd transmitatorul nu recepioneaza un semnal de confirmare
(ACK) emis de receptor care indic faptul c datele au fost preluate. Protocolul cu
confirmare se mai numeste protocol cu hand-shaking.
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 15
PROIECTAREA APLICAIILOR

Figura 4.13. Transfer paralel cu protocol asincron cu confirmare (hand-shaking)

4.3. Selecia memoriei


Etapele proiectrii unui bloc de selecie de memorie sunt urmtoarele:

1. Determinarea numrului de circuite de memorie necesare:


D
n= , unde D este dimensiunea zonei de memorie si d este
d
dimensiunea unui circuit de memorie
16 MICROCONTROLERE - ARHITECTUR I APLICAII

2. Determinarea numrului de semnale de selecie necesare:


n
m= , unde c este numrul de circuite de memorie decodificate
c
simultan
Fiecare semnal de selecie selecteaz un bloc de memorie de 2p
locaii (octei)

3. Determinarea adreselor iniiale i finale pentru fiecare bloc de memorie i


numrului de bii necesari pentru reprezentarea acestora. Se cunoate
adresa iniial a zonei de memorie si lungimea acesteia.

4. Realizarea tabelului de decodificare:

Decodificare externa Decodificare interna


AN-1 .. Ap Ap-1 .....A0
0 0 10 0 0 0 0 0 ............... 0 0 0 Adresa initial bloc 0
CS0
0 0 10 0 0 0 1 1 ....... 1 1 1 Adresa final bloc 0
0 0 10 0 0 1 0 0 ....... 0 0 0 Adresa initial bloc 1
CS1
0 0 10 0 0 1 1 1 ....... 1 1 1 Adresa final bloc 1

0 0 10 1 1 1 0 0 ....... 0 0 0 Adresa initial bloc m-1
CSm-1
0 0 10 1 1 1 1 1 ....... 1 1 1 Adresa final bloc m-1

n tabelul de decodificare se trec adresele iniiale i finale pentru fiecare bloc,


n format hexazecimal si format binar. S-a considerat ca un bloc de memorie are 2p
locaii (octei) i c numrul maxim de bii necesar pentru reprezentarea adresei
este N.

5. Realizarea schemei de selecie cu circuite de decodificare i pori logice,


pe baza tabelului de decodificare. Se observ c n grupul adreselor
decodificate extern exist bii de adres care nu se modific vor fi
utilizai la validarea decodificatorului i bii de adres care variaz vor
fi folosii ca intrri de selecie n decodificator
6. Conectarea semnalelor de date i de control la circuitele de memorie, n
funcie de tipul de memorie (RAM sau ROM)

Proiectarea seleciei de memorie este exemplificat, urmnd etapele 1-5 de mai


sus, pentru urmtorul caz:

- dimensiunea zonei de memorie D = 256k octei


LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 17
PROIECTAREA APLICAIILOR

- dimensiunea unui circuit de memorie d = 64k octei


- memorie de tip RAM
- adresa initial a zonei de memorie 0x80000

D 256 k
Numrul de circuite de memorie necesare este n = = =4
d 64k
Dac nu se specific altfel, vom lua c = 1 .
n
Numrul de semnale de selecie este m = =n=4
1
Deoarece avem relaia d = 64 k = 216 i considerm o locaie de memorie de un
octet, numrul de bii de adres pentru decodificarea interna este p = 16 .
Avem relaia D = 256 k = 218 , rezult numarul de biti pentru adresarea zonei de
memorie 18.
Adresa final a zonei de memorie este 0 x80000 + D 1 =
0 x80000 + 0 x40000 1 = 0 xBFFFF

Numrul maxin de bii pentru reprezentarea adreselor este 20.

Exist 4 blocuri de memorie, conform tabelului de decodificare:

Decodificare externa Decodificare interna


A19 A18 A17 A16 A15 ......A0
1 0 0 0 0 0 .............. 0 0 0 0x80000
CS0
1 0 0 0 1 1 .............. 1 1 1 0x8FFFF
1 0 0 1 0 0 .............. 0 0 0 0x90000
CS1
1 0 0 1 1 1 .............. 1 1 1 0x9FFFF
1 0 1 0 0 0 .............. 0 0 0 0xA0000
CS2
1 0 1 0 1 1 .............. 1 1 1 0xAFFFF
1 0 1 1 0 0 .............. 0 0 0 0xB0000
CS3
1 0 1 1 1 1 .............. 1 1 1 0xBFFFF

Conform tabelului de decodificare se poate realiza schema de selecie din figura


4.14.
18 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 4.14. Exemplu de selecie de memorie

4.4. Selecia porturilor de intrare ieire


Porturile IO sunt selectate printr-o schema de selecie asemantoare seleciei
memoriei. Spre deosebire de selecia memoriei, decodificarea porturilor poate fi
incomplet (datorita faptului ca numarul de porturi din sistem este suficient de
mare i nu se va dori extinderea acestora de exemplu cu 8 bii de adrese se
selecteaz 256 de porturi ceea ce reprezint un numr relativ suficient de porturi
IO).
Selecia porturilor poate fi fcut cu maparea porturilor n spaiul de adrese al
memoriei sau cu adresare ntr-un spaiu diferit de adrese (denumite adrese IO).
Avantajele maparii n memorie a porturilor constau n posibilitatea utilizarii
instructiunilor de adresare a memoriei ( cu moduri mai sofisticate de adresare, ceea
ce ofer o flexibilitate ridicat n utilizarea porturilor).
Dezavantajul maprii n memorie consta n ocuparea ineficienta a unui bloc de
memorie pentru selecia unui singur port. Acest dezavantaj poate fi ameliorat prin
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 19
PROIECTAREA APLICAIILOR

utilizarea unor circuite de decodificare ce selecteaz o zon ngust de memorie.


Acest lucru este posibil ns dac chipul de memorie are o capacitate mic.

Exemple de porturi simple

Cu ajutorul unor circuite simple (buffer, registre) se pot implementa


porturi de intrare ieire simple. Aceste porturi nu implementeaza protocoale de
comunicaie, dar pot fi utilizate n cazul transferurilor de date de vitez mic.
n figura 4.15 se ilustreaz modalitatea de realizare a porturilor IO simple.

Figura 4.15. Porturi de intrare/ieire simplificate

Selecia porturilor poate fi fcut cu utilizarea decodificatoarelor i/sau a


porilor logice.

Adresarea liniar a porturilor

Adresarea liniar a porturilor IO este o metod simpl de selecie care


folosete cte un singur bit de adres pentru selecia unui port.
Adresarea liniar a porturilor de intrare este prezentat n figura 4.16.
20 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 4.16. Selecia liniar a porturilor de intrare

Fiecare port de intrare, PI_i, este selectat de bitul de adres Ai=0. Semnalul
IORD/ indic un semnal general de citire a porturilor de intrare.
Pentru selecia liniar a porturilor de intrare nu este permis ca dou sau mai
multe adrese s fie in starea de zero logic; n acest caz va apare un conflict electric
pe magistrala de date.
Selecia liniar a porturilor de ieire este ilustrat n figura 4.17.
Fiecare port de ieire, PO_i, este selectat de bitul de adres Ai=0. Semnalul
IOWR/ indic un semnal general de scriere a porturilor de ieire.
Pentru selecia liniar a porturilor de ieire dou sau mai multe adrese pot fi n
starea de zero logic; n acest caz se pot scrie (cu aceeai valoare) mai multe porturi
de ieire simultan.

Figura 4.17. Selectia liniara a porturilor de iesire


LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 21
PROIECTAREA APLICAIILOR

Fiecare familie de microprocesoare are porturi asociate. De exemplu


pentru familia Intel 80x86 exist urmtoarele porturi: port paralel 8255, port serial
8251, timer 8253, controler de intreruperi 8259 si controler DMA 8237.

Exemplu de schema de porturi de I/O

Pentru a studia porturile de intrari/ieire, se prezint o interfa I/O


pentru un sistem microprocesor. Spaiul de adrese pentru porturi poate s fie ntre
0H si 3FFH. Din aceast cauz n decodificare au fost folosite numai adresele A0
9 (3FFH este reprezentabil pe 10 bii). Figura 4.18 prezint schema de
decodificare pentru generarea semnalelor de selecie de chip pentru un numr de 8
porturi ncepnd cu adresa de baz 2A0H.
.

Figura 4.18. Schema de decodificare a porturilor de intrare-ieire

Tabelul de decodificare este:

A9 A8 A A A A A A A A0 CS Adres Port
7 6 5 4 3 2 1 a
1 0 1 0 1 0 0 0 0 0 CS0 2A0 PORT_0
1 0 1 0 1 0 0 0 0 1 CS1 2A1 PORT_1
1 0 1 0 1 0 0 0 1 0 CS2 2A2 PORT_2
1 0 1 0 1 0 0 0 1 1 CS3 2A3 PORT_3
1 0 1 0 1 0 0 1 0 0 CS4 2A4 PORT_4
22 MICROCONTROLERE - ARHITECTUR I APLICAII

1 0 1 0 1 0 0 1 0 1 CS5 2A5 PORT_5


1 0 1 0 1 0 0 1 1 0 CS6 2A6 PORT_6
1 0 1 0 1 0 0 1 1 1 CS7 2A7 PORT_7

Semnalul IODECODE/ din figura.4 indic un acces de scriere/citire de la


orice port din intervalul 2A0 H 27. Practic nu exist nici un port care s fie
selectat pentru adresele 2A6H si 2A7H.
n decodificarea propriu-zis sunt folosite numai adresele A0, A1, A2.
Celelalte adrese sunt folosite pentru sintetizarea semnalului IODECODE, iar A3
este folosit ca validare pentru decodificator. Ieirile sale sunt active n starea low
(0 logic).

Semnalele IOR/ si IOW/ sunt formate din semnalele M/IO si RD/ respectiv
M/IO si WR astfel:

IOR = M/IO + RD

IOW = M/IO + WR

Semnalul AEN/ este format din liniile de adresa superioare (A15 pna la A10)
astfel:

AEN = A15+ A14+ A13+ A12+ A11 +A10


5. EXEMPLE DE MICROCONTROLERE.
PROIECTAREA UNUI SISTEM CU
MICROCONTROLER
5.1. Descrierea microcontrolerului ATMEL AT90S8515

AT90S8515 este un microcontroler CMOS pe 8 bii, produs de ATMEL,


realizat n arhitectura AVR RISC.

Caracteristicile microcontrolerului AT90S8515 sunt:


Arhitectur RISC:
- 118 instruciuni, cele mai multe fiind executate ntr-un ciclu;
- 32 registre de uz general pe 8 bii;
- pn la 8MIPS la o frecven de 8 MHz.
Memorie:
- 8 K octei memorie de Program (Flash);
- 512 octei memorie SRAM;
- 512 octei memorie EEPROM;
- Protecie la citire pentru Flash i EEPROM.
Module periferice:
- 1 Timer/Counter pe 8 bii cu prescaler separat;
- 1 Timer/Counter pe 16 bii cu prescaler separat i diverse moduri
de lucru;
- Comparator analogic;
- Watchdog Timer programabil cu oscilator RC intern;
- Port serial UART programabil;
- Interfa serial SPI master/slave.
32 de linii I/O programabile.
ntreruperi externe i interne.
Moduri Low Power Idle i Power Down.
Frecven de ceas pn la 8MHz.

Diagrama acestui microcontroler este prezentat n figura 5.1.


n figura 5.2 este prezentat arhitectura simplificat a microcontrolerului
AT90S8515.
Arhitectura AVR este o arhitectur Harvard cu bus-uri separate pentru
program i date. n timpul execuiei unei instruciuni, instruciunea urmtoare este
adus din memoria de program (pipe-line cu dou niveluri). Tehnica pipe-line
permite ca instruciunile s fie executate la fiecare ciclu de tact. Memoria de
program este de tip Flash programabil intern.
Figura 5.1: Diagrama bloc a lui AT90S8515
Figura 5.2: Arhitectura AVR

Exist 32 de registre de lucru, pe 8 bii, cu timp de acces rapid. Aceasta


nseamn o operaie aritmetic logic este executat ntr-un singur ciclu de ctre
ALU (Arithmetic Logic Unit). Cei doi operanzi sunt extrai din registre, se execut
operaia i rezultatul este stocat n registrul destinaie, toate acestea ntr-un singur
ciclu. ase dintre cele 32 registre pot fi folosite ca 3 pointeri pe 16 bii pentru
adresare relativ n memoria de date SRAM. Aceste registre sunt X, Y i Z.
Unitatea ALU permite efectuarea operaiilor logice i aritmetice cu un registru,
ntre dou registre sau ntre un registru i o constant. n plus registrele de lucru pot
fi accesate prin intermediul celor trei pointeri ca oricare locaie de memorie. Acest
lucru este posibil deoarece registrelor le sunt alocate primele 32 de adrese din
spaiul memoriei de date. Spaiul locaiilor de memorie I/O conine 64 de adrese
pentru dispozitivele periferice ale microcontrolerului ca: registre de control,
Timere/Countere, convertoare A/D, porturi I/O i alte funcii I/O. Locaiile de
memorie I/O pot fi adresate direct sau indirect prin cei trei pointeri ntre adresele
0x20-0x5F. Cu instruciunile rjmp i rcall se poate adresa direct tot spaiul de
memorie de program, intern de 4K. Toate
instruciunile AVR au un format pe 16 bii. Fiecare
adres de memorie de program conine o instruciune
pe 16 sau 32 bii. n timpul ntreruperilor i al
apelurilor de subrutin adresa de revenire este salvat
n stiv. Stiva se afl n spaiul de memorie SRAM i
este limitat doar de dimensiunea acestei memorii.
Pointerul stivei SP este accesibil n spaiul de memorie
I/O. Memoria de date este ilustrat n figura 5.3:

n continuare se vor detalia urmtoarele


caracteristici ale microcontrolerului AT90S8515
precum si dispozitivele periferice:

1. Registrele de lucru de uz general;


2. Memoria de program FLASH;
3. Memoria de date SRAM intern i extern;
4. Moduri de adresare a memoriei de program i
de date;
5. Timpii de acces ai memoriei, execuia n timp a
instruciunilor;
6. Porturi I/O mapate n memorie;
7. Resetul i nteruperile;
8. Moduri Sleep;
9. Porturile I/O.

Figura 5.3: Organizarea memoriei de date

1. Registrele de lucru de uz general.

Organizarea acestora este prezentat n figura 5.4:


Toate instruciunile care opereaz cu registre au acces direct ntr-un singur
ciclu la toate aceste registre. Singurele excepii sunt instruciunile care opereaz cu
un registru i o constant. Acestea pot folosi doar registrele din a doua jumtate a
spaiului registrelor de lucru i anume R16, ...,R31.
Dup cum reiese din figura 4 fiecrui registru i este alocat o adres din
spaiul memoriei de date n primele 32 locaii. Dei nu sunt implementate fizic ca
locaii de memorie SRAM, aceast organizare permite o larg flexibilitate n
accesarea acestor registre. Registrele R26, ... , R31 au i funcia de pointeri X, Z i
Z pentru adresarea indirect a locaiilor din spaiul memoriei de date.
Figura 5.4: Organizarea registrelor de lucru

2. Memoria de program FLASH

Microcontrolerul AT90S8515 are 8K octei de memorie de program


programabil intern. Deoarece toate instruciunile sunt pe 16 sau 32 bii, aceast
memorie este organizat ca 4K x 16 bii. Registrul Program Counter are 12 bii,
deci se pot adresa direct 4096 de locaii. Andurana memoriei de program (flash)
este cel puin 1000 de cicluri scriere/citire.

3. Memoria de date SRAM intern i extern

Aceast memorie are o structur ca n figura 5.5.


Primele 608 locaii ale memoriei de date cuprind registrele de lucru (32),
memoria I/O (64) i memoria intern SRAM (urmtoarele 512 locaii). O memorie
extern opional poate fi conectat i ocup spaiul de adrese cuprins ntre adresa
superioar a memoriei SRAM interne i 64K. Locaiile din memoria SRAM
extern pot fi accesate de aceleai instruciuni ca cele din memoria intern, singura
diferen fiind c la accesarea unei locaii de memorie extern exist o ntrziere de
un ciclu main fa de accesarea unei locaii de memorie intern. De asemenea,
dac stiva este situat n spaiul extern SRAM la ntreruperile i apelurilor
subrutinelor se vor aduga nc dou cicluri main, deoarece adresele
instruciunilor (2 octei) vor fi introduse sau extrase din stiv.
Figura 5.5. Organizarea memoriei SRAM

Accesarea memoriei externe SRAM implic setarea unui bit dintr-un registru
de control al microcontrolerului (bitul SRE din registrul I/O MCUCR) i folosirea
pinilor RD (citire) i WR (scriere). Pentru accesarea ntregului spaiu de 64K
SRAM pot fi folosite toate modalitile de adresare direct i indirect.

4. Moduri de adresare a memoriei de program i de date

Modurile de adresare a memoriei de date sunt:


Adresare direct
- a unui registru de lucru adresa registrului este inclus n codul
instruciunii (pe 5 bii);
- a dou registre de lucru adresele celor dou registre sunt incluse
n codul instruciunii (pe cte 5 bii);
- a unei locaii de memorie I/O adresa locaiei I/O (pe 6 bii)
mpreun cu adresa registrului destinaie (pe 5 bii) sunt incluse n
codul instruciunii;
- a unei locaii din memoria SRAM adresa locaiei SRAM pe 16
bii reprezint al doilea cuvnt din cele dou cuvinte pe 16 bii ale
instruciunii;
Adresare indirect
- a unei locaii din memoria SRAM prin pointerii X,Y, Z adresa
locaiei SRAM pe 16 bii se afl ntr-unul din pointerii X, Y, Z;
- a unei locaii din memoria SRAM cu nlocuire prin pointerii Y, Z;
adresa locaiei SRAM se obine prin adunarea unui numr de 6 bii
(aflat n codul instruciunii) la unul ditre pointerii Y, Z;
- a unei locaii din memoria SRAM cu predecrementare (X, Y, Z)
adresa locaiei SRAM coninut n unul dintre pointerii X, Y, Z este
decrementat nainte de efectuarea operaiei RD/WR asupra locaiei;
- a unei locaii din memoria SRAM cu postincrementare (X, Y, Y);
adresa locaiei SRAM coninut n unul dintre pointerii X, Y, Z este
incrementat dup efectuarea operaiei RD/WR asupra locaiei;
- a unei constante din memoria de program folosind instruciunea
LPM adresa constantei se afl n pointerul Z pe 15 bii, iar din LSB
se selecteaz octetul inferior dac LSB=0 sau superior dac LSB=1.

Modurile de adresare a memoriei de program sunt:

Adresarea indirect prin instruciunile ijmp i icall execuia


programului continu de la adresa aflat n pointerul Z;
Adresarea relativ prin instruciunile rjmp i rcall execuia
programului continu de la o adres obinut astfel: PC+k+1 unde PC este adresa
curent de program, k o constant pe 12 bii cu semn coninut n codul
instruciunii (-2048<k<2047).

5. Timpii de acces ai memoriei, execuia n timp a instruciunilor

Microcontrolerul este controlat direct de ceasul generat de un cristal extern


fr nici o divizare. n figura 5.6 este ilustrat paralelismul dintre execuia
instruciunilor i aducerea acestora din memorie (fetch), paralelism relizat pe baza
arhitecturii Harvard i a tehnicii pipe-line.
Figura 5.6: Tehnica pipe-line cu dou nivele

n figura 5.7 este ilustrat modul n care este efectuat o operaie aritmetic sau
logic folosind dou registre i salvat rezultatul n registrul destinaie ntr-un singur
ciclu.

Figura 5.7: Modul de execuie a unei operaii aritmetice-logice

6. Porturile I/O mapate n memorie

Porturile I/O i dispozitivele periferice sunt situate n spaiul de adrese I/O


0x20-0x5F. Locaiile din acest zon de memorie pot fi accesate de instruciunile
in i out care transfer date ntre registrele de lucru i spaiul I/O. Primele 16
registre pot fi accesate direct de instruciunile sbi (set bit) i cbi (reset bit) care
acioneaz la nivel de bit.

7. Reset-ul i gestionarea ntreruperilor

Microcontrolerul AT90S8515 are trei surse posibile pentru iniializare (reset):

Power-on Reset microcontrolerul este resetat cnd tensiunea de alimentare


este mai mic de un anumit prag;
Reset extern microcontrolerul este resetat de un nivel logic zero prezent pe
pinul RESET pe o durat mare de 50ns;
Watchdog Reset microcontrolerul este resetat cnd a expirat perioada
modulului Watchdog Timer dac acest lucru este validat. n urma unui reset
toate locaiile din spaiul I/O sunt setate la valorile lor iniiale i programul ncepe
de la adresa 0x000.
AT90S8515 dispune de 12 surse de ntrerupere fiecare din acestea avnd
asociat un vector de ntrerupere n memoria de program. De asemenea pentru
fiecare ntrerupere exist un bit de mascare care trebuie setat mpreun cu bitul de
validarea a intreruperilor pentru a valida acea ntrerupere. Exist intreruperi
externe i interne (de la toate dispozitivele periferice din structura
microcontrolerului). ntreruperile sunt vectorizate fix, ficare semnal de ntrerupere
are o adres de servire prestabilit.De asemenea, prioritatea ntreruperilor este
fixat.
Sistemul de ntreruperi este controlat de o serie de registre: General Interrupt
Mask Register GIMSK, General Interrupt Flag Register GIFR, Timer/Counter
Interrupt Mask Register TIMSK i Timer/Counter Interrupt Flag Register
TIFR. Cnd apare o ntrerupere bitul Global Interrupt Enable SREG[I] este resetat
(zero) i toate ntreruperile sun mascate. Utilizatorul poate seta acest bit pentru a
valida eventualele ntreruperi ce pot aprea n timpul execuiei rutinei de servire a
ntreruperii curente. La execuia instruciunii reti bitul I va fi setat automat.
Latena oricrei ntreruperi este de minim patru cicluri main. n acest timp
adresa PC este salvat n stiv i SP este decrementat cu doi. La revenirea din
rutina de ntrerupere lucrurile se ntmpl exect invers: PC este extras din stiv i
SP este incrementat cu doi. Registrul SREG nu este introdus n stiv, de aceesa
acest registru trebuie salvat.

8. Moduri Sleep

Exist dou moduri:


Idle Mode execuia instruciunii sleep oprete execuia programului,
dar dispozitivele periferice (Timere, sistemul de ntreruperi, etc) funcioneaz.
Acest lucru face ca microcontrolerul s poat fi scos din modul Idle de
ntreruperi externe i interne, ca de exemplu trecerea prin 0 a unui timer.
Power Down Mode n acest mod oscilatorul extern i dispozitivele
periferice sunt blocate i microcontrolerul poate fi scos din acest mod doar de o
ntrerupere extern, de un Reset extern sau de Watchdog Reset.
La apariia evenimentului care repune microcontrolerul n funciune, acesta
reia execuia programului cu rutina de ntrerupere sau cu rutina de Reset dac
microcontrolerul a primit vreun Reset.
n timpul n care microcontrolerul se afl n unul dintre cele dou moduri,
coninutul registrelor de lucru, registrelor I/O i al locaiilor SRAM rmne
nemodificat.

9. Porturile I/O

AT90S8515 dipune de 32 pini I/O organizai n patru porturi: PortA, PortB,


PortC, PortD. Toate aceste porturi sunt bidirecionale. Fiecrui port i sunt asociate
cte trei registre:
Data Register PORTx;
Data Direction Register DDRx registrul din care se seteaz direcia
portului individual pentru fiecare pin ;
Port x Input Pins PINx registrul din care se citete portul respectiv.

Funciile generale I/O ale porturilor sunt multiplexate cu funcii speciale


asociate dispozitivelor periferice, accesului memoriei externe, ntreruperilor, etc.

Microcontrolerului AT90S8515 are o serie de dispozitivele periferice descrise


pe scurt n continuare.
Acestea sunt:

1. Modulele Timer/Conters;
2. Watchdog Timer;
3. Memoria de date EEPROM;
4. Serial Peripheral Interface (SPI);
5. Universal Asynchronus Receiver Transmiter (UART);
6. Analog Comparator;
7. Interfaa cu memoria extern.

1. Modulele Timer/Conters

AT90S8515 dispune de dou numrtoare/timere de uz general, unul de 8 bii


i unul de 16 bii. Fiecruia i se poate selecta o valoare individual pentru prescaler
din acelai prescaler de 10 bii. Ambele module pot fi folosite ca timere cu un
clock generat intern sau ca numrtoare cu un clock extern de la un pin I/O. Cele 4
valori pentru prescaler sunt CK/8, CK/64, CK/256 i CK/1024 unde CK este clock-
ul dat de oscilatorul extern.
Ambele timere pot genera ntreruperi ale cror bii de validare se afl n
registrul Timer/Counter Interrupt Mask Register (TIMSK) i ale cror flaguri de
ntrerupere se afl in registrul Timer/Counter Interrupt Flag Register (TIFR).

Timer/Counter0 este un numrtor pe 8 bii. Registrul de control al acestuia


este Timer/Counter0 Control Register (TCCR0) din care se seteaz valoarea
prescalerului, ceasul intern sau extern i starea pornit-oprit a modulului. La
trecerea din 0xFF n 0x00 flagul overflow este setat i este generat ntreruperea
TMR0_OVR dac aceasta este validat.
Ceasul extern este sincronizat cu oscilatorul microcontrolerului. Pentru a
asigura o numrare corect a impulsurilor externe, durata dintre dou tranziii ale
clock-ului extern trebuie s fie mai mare ca perioada oscilatorului
microcontrolerului.
Timer/Counter1 este un numrtor pe 16 bii. Registrele de control ale
acestuia sunt Timer/Counter1 Control Registers (TCCR1A and TCCR1B).
Diferitele flaguri de stare (overflow, captura unui eveniment, etc) se afl n
registrul Timer/Counter Interrupt Flag Register (TIFR). De asemenea ceasul
extern trebuie s ndeplineasc condiia ca perioada dintre dou tranziii s fie mai
mare dect perioada oscilatorului microcontrolerului pentru a asigura o funcionare
corect a modulului.
Modulul Timer/Counter1 suport funcia de comparare folosind registrele
Output Compare Register 1 A i B (OCR1A i OCR1B) pe care le compar cu
registrul TCNT1. Funciile de comparare includ resetarea numrtorului la
egalitatea cu registrul OCR1A sau alte aciuni pe pinii de ieire la egalitatea cu
ambele registre A i B. Modulul poate fi utilizat i ca modulator de impulsuri n
durat pe 8, 9 sau 10 bii. De asemenea funcia Input Capture poate salva
coninutul TCNT1 n registrul Input Capture Register (ICR1) la apariia unui
eveniment extern pe pinul de captur ICP. Setrile evenimentului de captur sunt
definite de registrul Timer/Counter1 Control Registers B (TCCR1B). n plus
modulul Analog Comparator poate genera evenimentul de captur.

2. Watchdog Timer

Timerul Watchdog are un clock separat intern la o frecven de 1 MHz,


valoare tipic la o tensiune de alimentare de 5V. Din setarea valorii prescalerului
intrevalul de reset poate fi ajustat la una dintre cele opt valori posibile.
Instruciunea wdr reseteaz numrtorul. Dac n perioada setat nu se folosete
instruciunea wdr atunci microcontrolerul va fi resetat. Aceasta este o protecie
pentru prevenirea blocrii programului (ntr-o bucl infinit ieire de exemplu).

3. Memoria de date EEPROM

AT90S8515 conine 512 octei de memorie EEPROM care sunt organizai ca


un spaiu separat de date n care se poate scrie sau citi cte un octet. Are o
anduran de 100 000 de cicluri scriere/tergere. Timpul de scriere este n
intervalul 2.5-4ms depinznd de tensiunea de alimentare. Cnd o locaie EEPROM
este scris, execuia programului este ntrerupt pentru dou cicluri main nainte
ca instruciunea urmtoare s fie executat. La citirea din EEPROM se ntmpl
acelai lucru numai c execuia este oprit timp de 4 cicluri.
Registrele EEARH and EEARL specific adresa n spaiul de 512 locaii ale
memoriei EEPROM. Registrul EEDR conine datele care trebuiesc scrise sau citite
din locaia a crei adres este dat de perechea de registre EEAR.
Registrul Control Register EECR conine biii de control ai modulului
EEPROM. Pentru prevenirea scrierilor nedorite n locaiile din memoria EEPROM
trebuie luate anumite msuri de protectie (de exemplu resetarea microcontrolerului
pe perioadele n care tensiunea de alimentare scade sub un anumit prag).
4. Serial Peripheral Interface (SPI)

Acest modul permite un transfer de mare vitez ntre microcontroler i


dispozitive periferice externe sau ntre mai multe microcontrolere. SPI are
urmtoarele caracteristici:

Transfer sincron de date Full Duplex pe 3 fire;


Operare mastaer sau slave;
Transferul poate ncepe cu LSB sau MSB;
Patru rate de transfer programabile;
Genereaz ntrerupere la terminarea transmisiei;
Protecie la coliziunea de scriere n registrul de transmisie;
Poate scoate microcontrolerul din Idle Mode.

Interconexiunea ntre dou dispozitive Master-Slave prin SPI este ilustrat n figura
5.8:

Figura 5.8: Conexiunea master-slave

Pinul PB7 (SCK) este ieire n modul Master i intrare n mod Slave. Scrierea
n registrul SPI Data Register al microcontrolerului Master pornete generatorul de
tact, datele ncep s fie transmise pe pinul PB5 (MOSI) i recepionate pe acelai
pin PB5 al microcontrolerului Slave. Acelai lucru se ntmpl i n sens invers de
la slave ctre master pe pinii PB6 (MISO). Aceasta nseamn c pe timpul unei
perioade de Clock sunt interschimbai 2 bii ntre Master i Slave. Pentru
comunicarea ntre mai multe dispozitive este prevzut un semnal de control Slave
Select PB4 (SS) care trebuie inut n zero pentru a accesa un dispozitiv individual.
Dup transmiterea ultimului bit SPI genereaz o ntrerupere dac aceasta este
validat.
Registrele asociate cu modulul SPI sunt: SPI Control Register SPCR i SPI
Status Register SPSR.
5. Universal Asynchronus Receiver Transmiter (UART)

Principalele caracteristici ale acestui modul sunt:


Generatorul pentru stabilirea ratei de transmisie pemite a gam larg
de viteze de transmisie;
Se pot transfera 8 sau 9 bii;
Protecii:
- Overrun umplerea buferului de recepie;
- Framing error recepionarea unui bit de stop 0;
- Start bit fals eliminarea tranziiilor false care ar putea s
porneasc recepia unui octet.
Trei ntreruperi asociate, separate TX Complete, TX Data Register
Empty, RX Complete.
Transmisia de date este iniiat prin scrierea datelor care trebuie transmise n
registrul UART I/O Data Register. Transferul din acest registru n registrul de
transmisie apare cnd:
1. Un nou octet a fost scris n registrul UDR dup ce bitul de stop al
octetului anterior a fost transmis. n aceast situaie registrul de transmisie
este ncrcat imediat;
2. Un nou octet a fost scris n registrul UDR nainte de transmiterea bitului
de stop al octetului anterior. Registrul de transmisie este ncrcat dup ce
a fost transmis bitul de stop al octetului curent transmis.
Dac registrul de transmisie este gol, datele sunt transferate din UDR. n
acelai moment flagul UDRE (UART Data Register Empty) este setat i modulul
UART este gata s primeasc urmtorul octet. n timp de un ciclu de tact se
transmite bitul de start urmat apoi de LSB. Cnd s-a transmis ultimul bit, bitul de
stop registrul de transmisie se va ncrca cu date dac acestea au fost scrise n
prealabil n registrul UDR n timpul transmisei. Dac pn la transmitera bitului de
stop registrul UDR nu a fost scris, flagul TX Complete (TXC) va fi setat. Bitul
TXEN valideaz modulul de transmisie cnd este setat (unu) i pinul PD1 va fi
configurat automat ca ieire, indiferent de valoarea setat n registrul DDRD (Data
Direction Register D). Cnd bitul TXEN este resetat (zero) pinul PD1 poate fi
folosit ca un pin general I/O.
Recepia semnalului de la pinul RXD se face cu detecie majoritar la o rat
de 16 ori mai mare dect viteza de recepie. n timp ce linia este n repaus (1)
detecia unui nivel logic 0 va fi interpretat ca front negativ al bitului de start i
secvena de detecie a acestui bit va fi iniiat. Dup aceast tranziie negativ se
sondeaza nivelul semnalului de intrare la eantioanele 8,9,10. Dac dou sau mai
multe dintre aceste eantioane vor fi detectate ca 1, bitul de start nu va fi considerat
valid (va fi considerat o tranziie fals) i receptorul va cuta o nou traziie
negativ pentru a detecta un bit de start real. Dac se detecteaz o tranziie valid
se va face detecia majoritar pentru fiecare bit recepionat. Aceasta nseamn c
valoarea gsit la dou sau mai multe dintre eantioanele 8, 9 sau 10 va fi luat ca
valoarea detectat pentru bitul respectiv. Toi biii astfel detectai vor fi introdui n
registrul de recepie.
Analog, la detectarea bitului de stop majoritatea eantioanelor trebuie s fie 1
pentru ca acest bit s fie validat. Dac nu se ntmpl acest lucru va fi o eroare
semnalat prin setarea flagului Framing Error (FE) din registrul UART Status
Register (USR). nainte de citirea registrului UDR trebuie verificat bitul FE pentru
detecia erorilor.
Indiferent dac s-a detectat un bit de stop valid sau nu, la sfritul recepiei
unui octet datele sunt transferate n UDR i bitul RX Complete (RXC) din registrul
USR va fi setat. UDR reprezint de fapt dou registre, unul pentru recepie i unul
pentru transmisie. Cnd UDR este citit atunci este accesat registrul de recepie, iar
cnd se scrie n UDR este accesat registrul de transmisie.
Dac la terminarea recepiei unui octet, registrul UDR nu a fost n prealabil
citit flagul OverRun (OR) este setat, semnaliznd c ultimul octet recepionat nu a
putut fi transferat n UDR i a fost pierdut. Bitul OR este reactualizat dup citirea
din registrul UDR i trebuie verificat pentru a detecta erorile ce pot aprea la
necitirea la timp a registrului UDR n cazurile n care volumul de prelucrri ale
microcontrolerului este mare sau cnd viteza de recepie a datelor este mare.
Cnd bitul RXEN (RX Enable) din registrul UCR este resetat (0) modulul de
recepie este invalidat. Aceasta nseamn ca pinul PD0 poate fi folosit ca un pin
general I/O. Cnd RXEN este setat (1) pinul PD0 va fi configurat automat ca
intrare, indiferent de valoarea setat n registrul DDRD (Data Direction Register
D). Cnd bitul CHR9 din registrul UCR este setat se folosete un format de 9 bii
plus un bit de start i unul de stop. Cel de-al noulea bit ce trebuie transmis trebuie
setat la valoarea dorit nainte de iniierea transmisiei prin scrierea n registrul
UDR. Al noulea bit recepionat se afl n bitul RXB8 din registrul UCR.
Registrele asociate modulului UART sunt UART I/O Data Register UDR i
UART Control Register UCR.
Generatorul de tact pentru stabilirea vitezei de transfer este un divizor de
frecven care genereaz un semnal de tact cu frecvena dedus din urmtoarea
formul:

Baud=fCK/16(UBRR+1)
unde:
Baud este viteza de transfer;
fCK este frecvena oscilatorului microcontrolerului;
UBRR este coninutul registrului UART Baud Rate Register

Se poate obine o gam larg de viteze de transfer plecnd de la o frecven


dat fCK.
6. Comparatorul Analogic (Analog Comparator)- AC

Modulul AC compar nivelele de tensiune de pe intrarea pozitiv PB2 (AIN0)


i intrarea negativ pinul PB3 (AIN1). Cnd nivelul tensiunii de la AIN0 este mai
mare dect AIN1 bitul Analog Comparator Output (ACO) este setat (1). ACO
poate s declaneze funcia Timer/Counter1 Input Capture. n plus comparatorul
poate declana o ntrerupere separat, asociat exclusiv cu acest modul. Registrul
de control al modulului comparator este Timer/Counter1 Input Capture.

7. Interfaa cu memoria extern

Interfaa cu memoria SRAM const n:

Port A reprezint bus-ul de date multiplexat cu bus-ul de adrese de


nivel inferior;
Port C reprezint bus-ul de adrese de nivel superior;
Pinul ALE Address Latch Enable;
Pinul RD/WR reprezint strobe RD/WR.

Memoria extern este validat prin setarea bitului SRE din registrul MCUCR
(MCU Control Register), acest lucru implicnd suprascrierea setrilor din registru
de direcie DDRA. Cnd bitul SRE este resetat (0) memoria extern nu este
folosit, Portul A este folosit n concordan cu setrile din registrul DDRA i
spaiul de adrese peste spaiul alocat memoriei interne SRAM nu poate fi folosit.
Pe frontul negativ al pinului ALE pe Portul A este disponibil o adres valid.
n timpul transferului de date ALE este 0. RD i WR sunt active doar cnd se
acceseaz memoria SRAM extern. n figura 5.9 se arat cum se poate conecta o
memorie SRAM extern la microcontroler folosind 8 latch-uri care sunt
transparente cnd G este n 1. n mod normal accesul SRAM extern se face ntr-o
schem de trei cicluri dup cum se poate vedea n figura 5.10. Cnd este nevoie de
un ciclu n plus pentru acces se seteaz bitul SRW din registrul MCUCR. Noua
schem este prezentat n figura 5.11.
Figura 5.9: Conectarea unei memorii externe SRAM

Figura 5.10: Accesarea memoriei externe SRAM fr ciclu de ateptare

Figura 5.11: Accesarea memoriei externe SRAM cu ciclu de ateptare


5.2 Familia de procesoare DSP - ADSP 218x
Familia de procesoare de semnal ADSP 218x este o familie de procesoare
optimizat pentru prelucrarea semnalelor i alte aplicaii de vitez mare ce necesit
calcule numerice.
Arhitectura utilizat este o arhitectura Harvard modificat care conine
urmtoarele blocuri: ALU, MAC, SHIFTER. Se prelucreaza date pe 16 bii; exist
2 generatoare de adrese pentru date i un secvenor de program care permite
executarea operaiilor de calcul cu maximum de eficient.
Se adaug o serie de extensii:

- memorie de program i de date intern (on-chip)


- 2 porturi seriale
- 1 circuit de timp programabil (timer)
- posibiliti extinse de lucru cu ntreruperi

Memoria intern are capacitatea de 1kx16 pentru date i 2kx24 pentru


program. Se pot ncarca doi operanzi simultan, din memoria de date i din memoria
de program, ntr-un singur ciclu main. Memoria de date i memoria de program
se pot extinde, n exterior, pn la 16kx16 i respectiv pn la 16kx24. Arhitectura
microcalculatorului ADSP 218x este prezentat n figura 5.12.
Microcalculatorul ADSP 218x permite cedarea magistralelor prin semnale
specifice i poate utiliza pn la 6 nivele de ntrerupere.

Figura 5.12. Arhitectura microcalculatorului ADSP218x

Procesorul ADSP 218x poate s realizeze ntr-un singur ciclu:


2 MICROCONTROLERE - ARHITECTUR I APLICAII

- generarea adresei instruciunii urmtoare


- ncrcarea instruciunii urmtoare
- 1 sau 2 transferuri de date
- actualizarea a 1 sau 2 pointeri de adres
- efectuarea oricrei operaii de calcul
- recepia i transmiterea unui bit pe porturile seriale

Setul de instruciuni este puternic; permite transferuri flexibile de date i


instruciuni multifuncie (transferuri de 1 sau 2 date urmate de o operaie de
calcul). Orice instruciune se execut ntr-un singur ciclu main (tipic de 30 ns).
Sintaxa limbajului de asamblare este algebric.
Procesorul ADSP 218x are 5 busuri interne:

- PMA (Program Memory Address) - busul adreselor pentru memoria de


program
- DMA (Data Memory Address) - busul adreselor pentru memoria de date
- PMD (Program Memory Data) - busul de date pentru memoria de pro-
gram
- DMD (Data Memory Data) - busul de date pentru memoria de date
- R (Result) - bus de rezultate

Pe busul R se interconecteaz unitile de calcul. Aceste uniti sunt


prezentate n continuare pe scurt: unitatea ALU - poate efectua setul standard de
operaii aritmetice i logice; n plus are i 2 primitive de mprire; unitatea MAC -
permite efectuarea operaiilor de nmulire, nmultire cu acumulare, nmultire cu
scdere, fiecare ntr-un singur ciclu; unitatea SHIFTER - permite efectuarea
deplasrilor logice i aritmetice precum i a operaiilor de normalizare i
denormalizare a blocurilor de date.
Ieirea oricrei uniti de calcul poate fi intrare n oricare unitte de calcul
la urmtorul ciclu masin. Toate cele 3 uniti de calcul au registre de intrare i
registre de ieire care pot fi citite sau scrise de pe busul DMD.
ntre memorie i unittea de calcul exist registre att la intrare ct i la
ieire (exist un nivel pipe-line ntre intrare i iesire, la nivelul unitilor de calcul).
Busul R permite rezultatelor unei operatii anterioare s fie utilizate direct
ca intrare pentru operatia urmtoare. Acest lucru evit intirzierile excesive datorate
"pipe-line-lui" existent, cnd se execut o serie de operaii diferite.
Cele 2 generatoare de adrese (DAG1 i DAG2) determin adresa datelor
pentru memoria de date (DAG1) ct i pentru memoria de date i de program
(DAG2). Se pot genera adrese cu modificarea ulterioar a pointerului de adres.
Fiecare unitate de adresare poate genera 4 adrese indirecte prin registru. Unitile
de adresare a datelor pot funciona simultan - deci se pot adresa 2 operanzi
simultan.
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 3
PROIECTAREA APLICAIILOR

Se pot implementa buffere de memorie circulare (utile n realizarea


filtrelor digitale FIR). Exist modul de generare a adreselor cu inversarea bitilor
("bit reverse") util pentru calculul FFT.
Secvenorul de program genereaz adresa instruciunii din memoria de
program. Exist un registru de instruciuni n care se memoreaz codul instruciunii
curente. Acest registru introduce un nivel de "pipe- line". Instructiunea este citit
din memoria de program i ncrcat n registrul de instruciuni (IR) ntr-un singur
ciclu; instruciunea va fi executat n ciclul urmtor atunci cnd o nou instruciune
(urmtoarea) este ncrcat n IR.
Secventorul permite salturi condiionate, apeluri de subrutine i reintorcere
din acest apel ntr-un singur ciclu. Datorit faptului c exist stive hardware n
componena secvenorului, se pot execut bucle DO UNTIL fr cicluri
suplimentare (zero overhead). Salturile condiionate se execut de asemenea fr
cicluri suplimentare.
Secvenorul de program contine i un controler de ntreruperi asociat.
Circuitul de timp programabil contine un registru de prescalare pe 8 bii
,un registru numarator pe 16 bii i un registru pentru constant de numarare pe 16
bii. La trecerea prin zero a registrului numarator se genereaza o ntrerupere.
Cele doua porturi seriale (SPORT0 i SPORT1) permit realizarea unei
comunicatii seriale sincrone; protocolul de comunicatie este flexibil, programabil .
Pentru a se interschimba informaii ntre memoria de program intern i
memoria de date intern exist blocul "bus exchange".
Busurile PMA i DMA sunt multiplexate pentru a rezult magistrala de
adrese extern (pentru memoria extern de program sau de date)
Busurile DMA i DMD sunt multiplexate pentru a rezult magistrala de
date extern.
Separarea memoriei externe n memorie de program i memorie de date se
efectueaza prin semnale de selectie separate; totodat exist i semnale specifice
pentru citirea i scrierea memoriei externe. Sunt prevazute de asemenea i semnale
pentru acceptarea i confirmarea cedarii magistralelor externe altor dispozitive.
n continuare sunt prezentate semnalele microcalculatorului ADSP 218x:

A0 - A13 -bus de adrese extern (pentru date, program i "boot")


D0 - D23 -bus de date extern (pentru date, program i "boot")
RESET/ - semnal de iniializare
IRQ2 - ntrerupere extern (#2)
BR/ - cerere de bus
BG/ - confirmarea cererii de magistral
PMS/ - selecie memorie de program
DMS/ - selecie memorie de date
BMS/ - selecie memorie "boot"
RD/ - citire
WR/ - scriere
4 MICROCONTROLERE - ARHITECTUR I APLICAII

MMAP - configurare memorie de program


CLIKIN, XTAL - pentru conectarea ceasului
CLKOUT - ieire de ceas
SPORT0 (TFS0, RFS0, DT0, DR0, SCLK0) -semnale asociate portului
serial #0 (sincronizare la transmisie, sincronizare la recepie, transmisie de date,
receptie de date, ceas serial)
SPORT1 (TFS1, RFS1, DT1, DR1, SCLK1) -semnale asociate portului
serial #1 (sincronizare la transmisie, sincronizare la receptie, transmisie de date,
receptie de date, ceas serial) sau (IRQ1/, IRQ0/, SCLK1,FO,FI) - cerere de
ntrerupere #1, cerere de ntrerupere #0, ceas programabil, "flag out","flag n"- n
funcie de configurarea procesorului.

Aritmetica utilizat de ADSP 218x

Microcalculatorul ADSP 218x lucreaza n virgula fix pe 16 bii.


Interpretarea datelor este urmtoarea:
- iruri de bii (pentru operatii logice NOT, AND, OR, XOR - nu se in-
terpreteaza irul binar ca numr)
- numere ntregi fr semn
- numere ntregi cu semn (n complement de 2)
- numere fracionare (n format 1.15 n complement de 2)

Aritmetica ALU

Cu exceptia primitivei de mprire cu semn (DIVS) ALU interpreteaz


operanzii i rezultatele ca iruri binare de 16 bii. Rezultatul poate fi interpretat ca
numr cu semn prin intermediul indicatorilor condiionali (flag-uri). Detectarea
depirii aritmetice se face conform aritmeticii n complement de 2 (dac bitul
MSB al rezultatului se modific n mod incorect). De exemplu adunarea a dou
numere pozitive trebuie s genereze un rezultat pozitiv n caz contrar a aprut o
depire aritmetic ce a alterat bitul de semn (MSB) al rezultatului. Logica de
pozitionare a flag-ului de transport (AC) lucreaz pentru numere ntregi fr semn;
acest bit este setat dac se genereaz transport pentru bitul 16 (MSB) i este util
pentru operatii multicuvnt ("multiword" ) pe 32 bii, n precizie dubl.

Aritmetica MAC

Multiplicatorul produce rezultate ca iruri de bii.Intrrile pe 16 bii sunt


interpretate n conformitate cu informaia coninut n instruciune (ambii operanzi
cu semn, unul cu semn i cellalt fr semn). Rezultatul pe 32 bii este considerat
cu semn, iar bitul de semn (MSB) este extins pina la 40 bii. Exist 2 formate
posibile pentru inmultitor: 1.15 (pentru numere cu semn) i 16.0 (pentru numere
ntregi).
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 5
PROIECTAREA APLICAIILOR

nmulirea a doi operanzi n format 1.15 conduce la generarea unui rezultat


n format 2.30; pentru a corecta acest lucru rezultatul nmulirii trebuie deplasat cu
1 pozitie la stnga; rezultatul deplasarii este n format 1.31 i poate fi rotunjit n
formatul 1.15. Pentru numere ntregi rezultatul nmulirii este n format 32.0 care
se poate rotunji n formatul 16.0 fr a fi necesara o deplasare prealabil.

Aritmetica SHIFTER

Deplasrile logice interpreteaz operanzii ca numere ntregi fr semn sau


ca iruri binare, iar deplasarea aritmetic interpreteaz rezultatul ca un numar cu
semn n complement de 2. Exponentul pentru numerele n virgula mobil se
reprezint n complement de 2. Se poate lucra cu blocuri de date n virgula mobil
care sunt interpretate n complement de 2.

5.2.1.Unitatea ALU

Este prezentat n figura 5.13.


Este o unitate pe 16 bii cu dou porturi de intrare X i Y i un port de
iesire R. Unitatea ALU permite efectuarea unui set complet de funcii aritmetice i
logice: adunare, scdere, negare, incrementare, decrementare, valoare absolut,
AND, OR, XOR, NOT. Exist i dou primitive de mprire.
Unitatea ALU accept un semnal de "carry-n" (CY) i genereaz 6
semnale de stare (flaguri): AZ(zero), AN(negativ), AC(transport), AV(depire
aritmetic), AS(semn intrare X) i AQ(ct); aceste flaguri sunt pozitionate la
sfiritul fiecrui ciclu main.
6 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 5.13 Unitatea ALU - ADSP218x

Intrarea X a ALU poate accept date din dou surse: registrul AX sau
busul de rezultate R. Conectarea direct pe busul R permite utilizarea operanzilor
de tip imediat (acest lucru este specific pentru toate unittile de calcul ale ADSP
2101). Registrul AX este dedicat pentru intrarea X i are n compunere 2 registre
de 16 bii AX0 i AX1 care se pot citi/scrie de pe magistrala DMD; cu ajutorul
blocului de interschimbare DMD-PMD aceste registre sunt accesibile i de pe
magistrala PMD. Un registru AX poate fi intrare n ALU n acelai timp n care
cellalt registru este citit/scris de pe magistrala DMD.
Intrarea Y a unitii ALU poate de asemenea s accepte date din 2 surse:
registrul AY i registrul de reacie AF. Registrul AY este dedicat pentru
intrarea Y i conine 2 registre: AY0 i AY1; aceste dou registre se pot citi/scrie
de pe magistrala DMD i se pot scrie direct de pe magistrala PMD; ele se pot citi
de pe magistrala PMD prin intermediul blocului de interschimb ntre PMD i
DMD. n mod similar unul dintre registrele AY poate fi intrare n ALU n timp ce
cellalt registru este citit/scris de pe magistrala DMD.
Iesirea ALU este ncrcat n registrul AF sau n registrul de rezultat AR;
ieirea ncrcat n AF poate fi utilizat ca intrare n ALU. Registrul AR poate fi
ncrcat i n mod direct de pe magistrala DMD; prin blocul de interschimbare
DMD-PMD registrul AR poate fi citit/scris de pe magistrala PMD.
Orice registru asociat unitii ALU poate fi citit sau scris intr-un singur
ciclu main; citirea se efectueaz la nceputul ciclului iar scrierea la sfiritul
acestuia. Acest lucru permite ca un operand al ALU s fie citit la nceputul unui
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 7
PROIECTAREA APLICAIILOR

ciclu i actualizat la sfrsitul acestuia. De asemenea se permite ca rezultatul s fie


ncrcat n memorie la inceputul unui ciclu i actualizat cu un nou rezultat la
sfirsitul ciclului(acelasi ciclu main).
Unitatea ALU conine un set de registre duplicat (AX,AY,AF,AR); un
singur set este accesibil la un moment de timp dat. Setul secundar de registre este
util pentru schimbarea rapida a contextului programului de exemplu n cazul
ntreruperilor. Selectarea unuia dintre seturi se face prin program.

Primitivele de mprire

Exist 2 primitive pentru realizarea mpririi. mprirea poate fi cu semn


sau fr semn dar mprtitorul i demprtitul trebuie s fie de acelasi tip (cu semn
sau fr semn). Se imparte un numar de 32 bii la un numar de 16 bii i rezult un
ct pe 16 bii. Primitiva DIVS este executat la inceputul mpririi cu semn; se
calculeaz semnul ctului (memorat n flagul AQ). Pentru mprtirea numerelor
fr semn DIVS nu este utilizat.Cea de a doua primitiva - DIVQ, calculeaz biii
ctului; aceast primitiv este apelat de 15 ori pentru mprirea cu semn i de 16
ori pentru mprirea fr semn.
Starea unitii ALU este memorat ntr-un registru de stare (ASTAT) cu
urmtorii bii:

AZ - zero - 1 dac ieirea ALU este 0


AN - negativ - 1 dac ieirea ALU este < 0
AV - depaire aritmetic - 1 dac a aprut depire aritmetic
AC - transport - 1 dac a aprut transport din bitul de rang 16
AS - semn - indic bitul de semn al intrarii X a unitii ALU
AQ - ct - indic bitul curent al restului mpririi

5.2.2. Unitatea MAC

Unitatea de nmulire - acumulare (MAC) poate efectua inmultiri rapide i


inmultiri cu acumulare (adunare sau scadere).Rezultatul poate fi rotunjit sau
saturat.Schema bloc a acestei unitti este prezentat n figura 5.14.
8 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 5.14.Unitatea MAC - ADSP218x

Unitatea MAC permite efectuarea operatiilor de nmulire rapid, a


operaiilor de nmulire cu acumulare/scdere, saturare i tergere (aducere la zero).
O bucl de reacie permite utilizarea unei prti a rezultatului ca intrare n
MAC.
Unitatea MAC are doua porturi de intrare X i Y de cte 16 bii i un port
de ieire P de 32 bii.Produsul pe 32 de bii este o intrare ntr-un sumator de 40 bii
care adun rezultatul anterior cu cel curent. Registrul MR are 40 bii i este compus
din 3 registre: MR0 (16 bii) cel mai putin semnificativ, MR1(16 bii) registrul mai
semnificativ i MR2 (8 bii) registrul de extensie de semn.Sumatorul este de 40 de
bii pentru a permite depasirile aritmetice imediate ce apar ntr-o sum de produse.
Exist un bit de stare (flag) - MV - care indic dac acumulatorul a fost afectat de
depire aritmetic (n complement de 2) peste 32 bii (cnd suma de produse s-a
incheiat).
Registrele de intrare - iesire ale unittii MAC sunt similare cu registrele
ALU.Portul X accept date de la registrul MX sau de pe bus-ul R (de rezultat). Se
permite n acest mod ncrcarea unor operanzi de tip imediat.Exist 2 registre MX:
MX0 i MX1 care pot fi citite sau scrise de pe magistrala DMD. Este permis ca n
timp ce unul din registrele MX este intrare pentru MAC cellalt s fie citit/scris de
pe DMD. Portul Y accept date de la registrul MY sau registrul MF. Registrul MY
are registrele MY0 i MY1; aceste registre pot s fie citite i scrise de pe
magistrala DMD i scrise direct de pe magistrala PMD; citirea pe PMD se poate
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 9
PROIECTAREA APLICAIILOR

face prin blocul de interschimb PMD - DMD. Este permis ca n timp ce unul din
registrele MY este intrare pentru MAC cellalt s fie citit/scris de pe DMD.
Ieirea sumatorului este ncrcat n registrul MF sau n registrul MR.
Registrul MF permite ca bitii 16-31 ai rezultatului s fie utilizati direct la intrarea
nmultitorului la ciclul urmtor. Registrele MR0, MR1, MR2 pot fi ncrcate de pe
magistrala DMD i pot s fie citite de pe DMD sau bus-ul R.
Orice registru asociat unitii MAC poate fi citit i scris n acelasi ciclu:
citirea se face la nceputul ciclului iar scrierea la sfrsitul acestuia.Se permite ca o
intrare n MAC (un operand) s fie ncrcat la nceputul ciclului (operaiei) i s
fie actualizat la sfirsitul ciclului (de exemplu din memorie).
De asemenea se permite ca un rezultat s fie ncrcat n memorie i
actualizat cu un nou rezultat n acelai ciclu.
Unitatea MAC conine un set duplicat de registre (MX, MY, MR, MF); un
singur set este disponibil la un moment dat. Acest set este utilizat pentru
schimbarea rapid a contextului programului (n cazul ntreruperilor). Setul de
registre este selectat prin program.

Operatiile MAC

Operaiile efectuate de MAC sunt: MR=X*Y, MR=MR+X*Y,


MR=MR-X*Y, MR=0. Sunt permise 2 moduri pentru funciile de nmulire i
nmulire-acumulare: modul pentru numere fracionare (n format 1.15) i modul
pentru numere ntregi (n format 16.0). Modul este selectat printr-un bit dintr-un
registru de stare al MAC (MSTAT); la iniializare este activ modul pentru numere
fractionare.
n ambele moduri de lucru ieirea nmulitorului este ncrcat ntr-un
acumulator de 40 bii (sumator - scztor) pentru a implementa funcia MR+/-
X*Y.
n modul de lucru fractionar ieirea pe 32 de bii a multiplicatorului este
ajustat n cazul operatiei de multiplicare - acumulare prin extinderea bitului de
semn pna la 40 de bii i deplasarea cu 1 bit la stnga nainte de ncrcarea
rezultatului n registrul MR. Acest lucru se realizeaz deoarece o nmulire n
format 1.15 cu 1.15 trebuie s genereze un rezultat n format 1.31 care poate fi
rotunjit la formatul 1.15. Bitul LSB este poziionat n 0.

Formate de intrare pentru operanzi

Operanzii pot fi cu semn sau fr semn fiecare; se pot inmulti operanzi de


tipuri diferite (semn-fr semn).Tipul operandului este specificat dinamic pentru
fiecare operaie de nmulire n parte.

Registrele de intrare - iesire ale MAC


10 MICROCONTROLERE - ARHITECTUR I APLICAII

Sunt urmtoarele:
registre X : MX0,MX1,AR,MR0,MR1,MR2,SR0,SR1;
registre Y : MY0,MY1,MF;
registre destinaie: MR (MR2,MR1,MR0),MF;

Protecia la depire a MAC

Acumulatorul din MAC genereaz un semnal de stare, MV, dac a aprut o


depire aritmetic (flag-ul MV este ncrcat ntr-un registru de stare general la
fiecare operatie cu MAC).
Acest flag este setat de fiecare dat cnd apare o depire aritmetic pe 32
de bii (MR1, MR0) adic dac bitul de semn (MSB al registrului MR1) nu se
regsete n coninutul registrului MR2.
Registrul MR poate fi saturat dac apare depire aritmetic.
Flagul MV este actualizat dup o sum de produse astfel ca depirile
aritmetice care pot apare la sume partiale se pot compensa (i nu sunt luate n
considerare).Depirea care poate s apar n registrul MR2 (peste bitul MSB al
registrului MR2) nu este permis; dac apare acest fenomen se pierde bitul de
semn i saturarea se face incorect; acest caz apare dup 255 de depiri pariale
necompensate. Pentru a evita aceast situaie trebuie s se efectueze, pentru
sigurant, un numr de maxim 256 de sume de produse, ceea ce este n majoritatea
cazurilor suficient.
Acumulatorul din unitatea MAC are posibilitatea de a fi rotunjit pe 40 de
bii la grania dintre biii de rang 15 i 16 dac se specifica acest lucru n formatul
instruciunii.

5.2.3. Unitatea SHIFTER

Acest bloc funcional permite efectuarea unui set complet de funcii de


deplasare pe 16 bii de intrare , genernd o ieire pe 32 bii; acest set include
deplasri aritmetice, deplasri logice i normalizari. De asemenea unitatea de
deplasare poate fi utilizat pentru calcule n virgul mobil.
Schema bloc a unittii de deplasare este dat n figura 5.15.:
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 11
PROIECTAREA APLICAIILOR

Figura 5.15. Unitatea SHIFTER - ADSP218x

Unitatea de deplasare poate fi mparit n 4 sectiuni: matricea de deplasare


(shift array), logica OR/PASS , detectorul de exponent i logica de comparare a
exponentului.
Matricea de deplasare este constituit dintr-un "barrel-shifter" cu 16
intrri i 32 ieiri. Acest circuit permite realizarea unei deplasri pe 16 bii ntr-un
singur ciclu. Intrarea n acest circuit de deplasare este dat de un registru de intrare
SI (16 bii); acest registru este intrare i pentru detectorul de exponent i poate fi
citit/scris de pe DMD. De asemenea ca intrri n circuitul de deplasare pot fi regis-
trele AR, SR sau MR prin busul R. Registrul SR este de 32 bii i este divizat n 2
sectiuni de cte 16 bii: SR0 i SR1.Registrele SR0 i SR1 pot fi ncrcate de pe
busul DMD i pot fi citite de pe DMD sau busul R.De asemenea registrul SR poate
fi ncrcat prin logica OR/PASS permitnd deplasri n dubl precizie (32 de bii).
Registrul SE este de 8 bii i memoreaz exponentul n timpul operatiilor
de normalizare i denormalizare, reprezint o valoare n complement de 2 i poate
fi citit/scris de pe busul DMD.
Registrul SB reine exponentul unui bloc de date (cel mai mare exponent
care va fi utilizat pentru normalizare); este un registru de 5 bii, n complement de
2; poate fi citit/scris de pe DMD.
Citirea registrelor SB sau SE se face pe DMD, n format pe 16 bii cu
extensia semnului.Toate registrele din unitatea de deplasare pot fi citite/scrise ntr-
un singur ciclu (citire la inceputul ciclului i scriere la sfirsitul acestuia). Se
12 MICROCONTROLERE - ARHITECTUR I APLICAII

permite ca un operand s fie ncrcat n unitatea de deplasare la inceputul ciclului


i s fie actualizat la sfirsitul acestuia.
Unitatea de deplasare conine un set duplicat de registre (SE, SB, SI, SR1,
SR0); un singur set este accesibil la un moment dat; sunt utilizate la schimbarea
rapid a contextului programului (n cazul ntreruperilor); selectarea unui set se
face prin program.
Operaiile posibile ale unitii de deplasare sunt:
- ASHIFT -deplasare aritmetic
- LSHIFT -deplasare logic
- NORM - normalizare
- EXP - calculul exponentului unui numar n virgula mobil
- EXPADJ - ajustarea exponentului unui bloc de date n virgul mobil.

Funciile de deplasare pot fi efectuate n modurile HI sau LO astfel:


n modul LO intrarea n unitatea de deplasare (registrul SI) este aliniat
dup partea mai puin semnificativ a ieirii (registrul SR0); n modul HI intrarea
este aliniat dup partea cea mai semnificativa a ieirii (registrul SR1).
Blocul OR este utilizat pentru deplasri n dubla precizie (pe 32 de bii de
intrare).

5.2.4.Unittile de adresare (Data Address Generator DAG)

ADSP 218x conine dou generatoare de adrese pentru date, permind


adresarea simultan a doi operanzi (unul n PM i cellalt n DM). De asemenea,
datele pot fi adresate indirect, cu modificarea dinamic a adresei.
Exist trei tipuri de registre (pe 14 bii):
- registrul modificator - M (modificator)
- registrul index - I (index)
- registrul de lungime - L (lungime)

Aceste registre pot fi scrise/citite pe magistrala DMD.


Registrul index memoreaz adresa de baz a unui bloc de date, calculat
astfel:
A = ( I + M - B ) modulo ( L ) + B
unde: A = adresa urmtoare (calculat);
I = adresa curent;
M = valoarea modificatorului (cu semn)
B = adresa de baz (indicat de linker)
M + I = adresa post-modificat;
L = lungimea buffer-ului circular (-L < M < L este o condiie
obligatorie).
Daca valoarea lui L este 0 atunci adresarea este liniar iar dac aceast
valoare este nenul atunci adresarea se numeste circular.
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 13
PROIECTAREA APLICAIILOR

5.2.5.Unitatea de comanda (secvenorul de program)

Genereaz adresa instruciunii curente i permite crearea unor programe


flexibile; permite de asemenea implementarea buclelor hardware, fr cicluri
suplimentare i a salturilor condiionate.
Adresa instruciunii urmtoare poate fi selectat din urmtoarele surse:
registrul de instruciuni (program "secvenorul", liniar), logica de conditie (pentru
salturi condiionate), comparatorul de bucla (pentru bucle hardware de tip DO
UNTIL) i contolerul de ntreruperi (la acceptarea unei ntreruperi).
O a cincea surs o reprezint DAG2 atunci cnd se execut un salt indirect
prin registru.
Pentru programe secveniale sursa adresei urmtoare este modulul de
incrementare al PC; stiva PC este utilizat ca surs a adresei instruciunii urmtoare
atunci cnd se execut o rentoarcere dintr-o subrutin sau din servirea unei cereri
de ntrerupere. De asemenea este utilizat i atunci cnd se revine la nceputul unei
bucle DO UNTIL.
Registrul de instruciuni este utilizat ca surs atunci cnd se execut un salt
direct (adresa coninut n instruciune).
ntreruperile sunt vectorizate fix; la acceptarea unei ntreruperi controlerul
de ntrerupere va genera o adres de salt fix (prestabilit).
Fiecare ntrerupere are alocat o zona de 4 locatii de memorie (PM);
rutinele de servire a ntreruperilor cu lungime mai mare dect 4 locatii vor fi plasate
n alt zona de memorie (PM) i se va execut, la fiecare ntrerupere, o instruciune
de salt catre rutina corespunzatoare. Instructiunea de salt este plasat n spatiul
rezervat vectorului de ntrerupere cu rutina de servire mai mare de 4 locatii.
Unitatea de adresare DAG2 devine sursa pentru adresa instruciunii
urmtoare atunci cnd se execut un salt indirect prin registru, dar n acest caz
DAG2 nu este o intrare n multiplexorul adresei instruciunii urmtoare i PC este
ncrcat de pe bus-ul PMA.
Contorul de program (PC) este un registru de 14 bii i conine adresa
instruciunii curente. Iesirea PC este incrementat de modulul de incrementare
(dac este cazul) pentru a se calcula adresa instruciunii urmtoare.
Stiva PC este utilizat pentru salvarea coninutului registrului PC n cazul
instructiunilor CALL sau DO UNTIL sau a ntreruperilor.
Exist un contor de bucl i o stiv asociat acestuia; acest contor este util
pentru implementarea buclelor DO UNTIL: efectuarea unei secvene de
instruciuni de un anumit numar de ori, coninut n acest contor - CNTR; stiva
asociat este utilizat pentru a permite lucrul cu bucle de acest tip nlanuite (se
salveaza CNTR).
De exemplu:
CNTR = N
--- DO adr UNTIL CE ; CE = expirare CNTR
| CNTR = N1 ; se salveaza N n stiva CNTR
14 MICROCONTROLERE - ARHITECTUR I APLICAII

| --- DO adr1 UNTIL CE


| | .....
| | .....
| --> adr1: .....
--> adr: .....
Salvarea CNTR n stiv se face automat.
Comparatorul de bucl i stiva asociat sunt utilizate pentru implementarea
buclelor DO UNTIL.
Comparatorul de bucl compara n mod continuu adresa ultimei
instruciuni a buclei (codat n instructiunea DO UNTIL) cu adresa curent pentru
a testa sfrsitul buclei; adresa primei instruciuni a buclei este meninut n stiva
PC.
Cnd ultima instruciune a buclei este executat, se testeaz condiia de
reluare a buclei i dac aceasta e indeplinit se face un salt la prima instruciune a
buclei fr a se introduce cicluri suplimentare.
Stiva asociat logicii de bucl stocheaz adresele de sfrit i condiiile de
terminare pentru buclele nlnuite (se admit pna la 4 nivele de bucle nlnuite).
Condiiile de terminare a buclelor pot fi urmtoarele: EQ (rezultat egal cu
0), NE (diferit de zero), LT (mai mic ca 0), GE (mai mare ca 0), LE (mai mic sau
egal cu 0), GT (mai mare ca 0), AC (ALU carry), NOT AC, AV (ALU overflow),
NOT AV, MV (MAC overflow), NOT MV, NEG (semnul intrarii X negativ), POS
(semnul intrarii X pozitiv), CE (CNTR expirat), FOREVER (intotdeauna).
Controlerul de ntreruperi permite ca procesorul s raspund la 6
nivele de ntrerupere, vectorizate fix. Intreruperile pot fi mascate; pot fi active pe
front sau pe palier i pot fi forate sau sterse sub controlul programului. Sunt
admise i ntreruperi nlanuite (cu respectarea prioritilor).
Contextul programului poate fi modificat rapid prin trecerea pe setul de
registre auxiliare: n acest fel nu se mai utilizeaz stiva pentru a salva contextul
programului la servirea ntreruperii. Exist registre speciale pentru controlul
ntreruperilor: ICNTL (controleaz modul de sesizare a ntreruperilor pe front sau
pe palier) i IMASK- mascheaz (invalideaz) ntreruperile care nu se utilizeaz.
Registrele IMASK i ICNTL pot fi att citite ct i scrise.

Secvena de operare pentru controlerul de ntreruperi

Semnalele de cerere de ntrerupere individuale sunt prelucrate (printr-o


funcie AND cu registrul IMASK); rezultatul acestei funcii este ncrcat ntr-un
circuit de detecie a priorittii care selecteaz ntreruperea nemascat de prioritate
maxim. Ieirea acestui circuit de detecie este n permanen actualizat pentru a
permite nlnuirea ntreruperilor (dac acest mod este activ).
O ieire activ determin un salt la adresa fix corespunzatoare prioritii
ntreruperii. ntrzierea ntre apariia ntreruperii externe i servirea acesteia este
mai mic de 2 ciclii main..
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 15
PROIECTAREA APLICAIILOR

La apariia unei ntreruperi se salveaz automat stiva "de stare" (status


stack) starea curent a unitii ALU, a unitii MAC i registrul IMASK. La
revenirea din ntrerupere starea mainii este refcut.

Registrele de stare i stiva de stare

Starea procesorului ADSP 218x i modul de lucru sunt memorate n 6


registre care pot fi citite pe magistrala DMD.
Acestea sunt: ASTAT (stare ALU), SSTAT (stare stiv), MSTAT
(stare MAC), ICNTL, IMASK i IFC (forare ntreruperi
software).
5.3.Proiectarea unui sistem cu microcontroler

Un sistem cu microcontroler se realizeaz conform schemei din figura 4.3.


Practic, la conectarea microcontrolerului in sistem trebuie proiectate doar schemele
de selecie a memoriei i a porturilor. Un exemplu de sistem cu ADSP218x este
ilustrat in figura 5.16. Figurile 5.17, 5.18 si 5.19 prezint schemele electrice de
principiu pentru unitatea central de prelucrare, selecia IO i conectarea codecului.

Figura 5.16. Schema bloc a unui sistem cu ADSP2181


LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 3
PROIECTAREA APLICAIILOR
4 MICROCONTROLERE - ARHITECTUR I APLICAII

Figura 5.19. Conectarea codecului AD1847 intr-un sistem cu ADSP2181

Sistemul de prelucrare de semnal ilustrat in figurile 5.17, 5.18 i


5.19 utilizeaz o memorie EPROM pentru ncrcarea programului n
memoria intern de program, comunic cu circuitul codec prin portul serial
SPORT0 i acceseaz dou porturi IO, plasate la adresele 0x1FF i 0x0FF
pentru citirea unor butoane si afiarea pe un display de 7 segmente. Sistemul
nu are memorie extern.
6. LIMBAJE DE PROGRAMARE PENTRU
MICROCONTROLERE. PROIECTAREA
APLICAIILOR
6.1. Organigrama general a unei aplicaii de timp real cu
microcontroler
Realizarea unei aplicaii cu microcontroler presupune implementarea unui
sistem hardware, ca n capitolul 5, i dezvoltarea unui program de aplicaie.
Programul se poate scrie n limbaj de asamblare sau n limbaj de nivel nalt (de
obicei n limbajul C).
Scrierea aplicaiei n limbaj de asamblare are avantajul c timpul de execuie
va fi minim, dar efortul depus pentru dezvoltarea acesteia va fi mai mare datorit
sintaxei limbajului de asamblare i a necesitii de a efectua manual managementul
resurselor microcontrolerului (registre, memorie). Trebuie remarcat faptul c, n
general, programele scrise n limbaj de asamblare utilizeaz mult mai eficient
resursele hardware, mai ales n situaia cnd acesta are complexitate ridicat.
Dezvoltarea aplicaiei n limbaj C are avantajul c se reduce timpul de
elaborare a programului, dar acesta nu este optim datorit faptului trebuie
respectate anumite reguli, impuse de compilator, n procesul de translatare a
codului scris n C n cod de limbaj de asamblare.
Programele scrise n limbaj C pot s nu utilizeze eficient toate resursele
hardware, mai ales dac arhitectura microcontrolerului este complex (ca de de
exemplu microcontrolerele DSP). Exist metode de optimizare a codului C, pentru
a se crea programe eficiente sau se poate scrie un program mixt (n limbaj C cu
seciuni de limbaj de asamblare).
Dac arhitectura microcontrolerului este relativ simpl (ca la
microcontrolerele AVR), atunci diferentele dintre codul n limbaj de asamblare i
limbaj de nivel nalt sunt acceptabile.
Dezvoltarea aplicaiilor pentru microcontrolere se face folosind progarme
specializate denumite IDE (Integrated Development Environment) care integreaz
toate uneltele software necesare generrii codului executabil (editare, compilare,
asamblare, link-editare) i depanarii acestuia (simulatoare, emulatoare).
n continuare este prezentat organigrama general a unei aplicaii pentru
microcontroler i diagrama de timp asociat prelucrrilor (figura 6.1).
Se vor genera ntreruperi periodice, iar n rutina de servire a acestor
ntreruperi se vor citi intrarile, se vor prelucra i se va genera pe portul de ieire
rezultatul prelucrrilor.
Condiia de funcionare n timp real, pentru organigrama din figura 6.1, este:
6 MICROCONTROLERE - ARHITECTUR I APLICAII

t in + t p + t out T , unde t in este timpul de citire a intrrii, t p este timpul de


prelucrare a unei intrari, t out este timpul de scriere a ieirii iar T este perioada
ntreruperilor periodice. Timpul de prelucrare t p poate s fie diferit de la o intrare
la alta.

Figura 6.1. Organigrama general a unei aplicaii cu microcontroler

Alegerea perioadei ntreruperilor se face lund n considerare dou criterii


contradictorii: T trebuie s fie suficient de mic pentru a sesiza modificri rapide
ale intrrilor i T trebuie s fie suficient de mare pentru a ndeplini condiia de
funcionare n timp real pentru prelucrri complexe.
O valoare de compromis acceptat n multe aplicaii este T = 20 ms.

6.2. Setul de instruciuni al microcontrolerului ADSP2181


Setul de instruciuni al procesorului ADSP 2181 permite realizarea unor
algoritmi de prelucrare a semnalelor ce necesit vitez mare de prelucrare; acest
lucru este posibil datorit faptului ca sunt permise transferuri rapide de date ntre
unittile de calcul ale C; instructiunile se execut intr-un singur ciclu main;
setul de instruciuni este puternic (operatii aritmetice, MAC, deplasari, instruciuni
de control al programului, bucle HW); exist registre interne suficiente pentru a se
evit, n general, ciclurile de acces la memorie n decursul executiei unui algoritm
rapid.
Adresarea memoriei este flexibila; se permit adresarea direct (imediat) i
indirect (cu postindexare); este posibila adresarea simultana a doi operanzi.
Sintaxa limbajului de asamblare este algebric; sunt permise cteva structuri
de date (vectori, buffere circulare) utile pentru simplificarea scrierii programelor.
De asemenea se execut instruciuni multifuncie; acestea permit, ntr-un
singur ciclu, efectuarea unei operatii de calcul i maxim dou transferuri de date.
Transferurile de date permise sunt: registru - registru , registru - memorie.
Exist 5 categorii de instruciuni:
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 7
PROIECTAREA APLICAIILOR

- instruciuni de calcul;
- instruciuni de transfer;
- instruciuni multifuncie;
- instruciuni de control al programului;
- alte instruciuni.

Instruciunile multifuncie se pot clasifica astfel:

a) - operaii de calcul ALU/MAC cu citirea memoriei de date i de program.


b) - citirea memoriei de date i de program.
c) - operatii de calcul cu citirea memoriei.
d) - operatii de calcul cu scrierea memoriei.
e) - operatii de calcul cu transfer la registru.

Instruciunile de control al programului controleaz secvenorul de program i se


pot clasifica n:

- salturi la rutina de servire a ntreruperilor i apeluri de subrutine;


- reintoarceri din ntreruperi i subrutine;
- bucle DO UNTIL;
- controlul flag+urilor de intrare-ieire
- IDLE (asteapt ntreruperi n starea 'power-down').

Principalele instruciuni ale microcontrolerului ADSP 2181 sunt prezentate n


tablele urmtoare.

Instruciuni de transfer

reg = reg Transfer registru-registru


reg = <data> ncrcare registru
reg = DM (<addr>) Citire memorie de date (adresare direct)
dreg = DM (Ix , My) Citire memorie de date (adresare indirect)
dreg = PM (Ix , My) Citire memorie de program (adresare direct)
DM (<addr>) = reg Scriere memorie de date (adresare direct)
DM (Ix , My) = dreg Scriere memorie de date (adresare indirect)
PM (Ix , My) = dreg Scriere memorie deprogram (adresare indirect)
8 MICROCONTROLERE - ARHITECTUR I APLICAII

Instruciuni MAC

[IF cond] MR|MF = xop * yop nmulire


= MR + xop * yop nmulire cu acumulare
= MR xop * yop nmulire cu scdere
= MR Transfer MR
=0 tergere MR
IF MV SAT MR Saturare MR

Instruciuni ALU

[IF cond] AR|AF = xop + yop [+ C] Adunare cu transport


= xop yop [+ C 1] Scdere cu mprumut
= yop xop [+ C 1]
= xop AND yop AND
= xop OR yop OR
= xop XOR yop XOR
= PASS xop Transfer pentru setarea flags
= xop Negare
= NOT xop NOT
= ABS xop Valoare absolut
= yop + 1 Incrementare
= yop 1 Decrementare
= DIVS yop, xop
mparire
= DIVQ xop

Instruciuni SHIFTER

[IF cond] SR = [SR OR] ASHIFT xop Deplasare aritmetic (cu SE)
[IF cond] SR = [SR OR] LSHIFT xop Deplasare logic (cu SE)
SR = [SR OR] ASHIFT xop BY <exp> Deplasare aritmetic imediat
SR = [SR OR] LSHIFT xop BY <exp> Deplasare logic imediat
[IF cond] SE = EXP xop Calcul exponent
[IF cond] SB = EXPADJ xop Calcul al exponentului unui blocu
de date
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 9
PROIECTAREA APLICAIILOR

[IF cond] SR = [SR OR] NORM xop Normalizare


Instruciuni multifuncie

<ALU>|<MAC>|<SHIFT> , dreg = Calcul i transfer ntre registre


dreg
<ALU>|<MAC>|<SHIFT> , dreg = DM Calcul i citire de memorie de
(Ix , My) date
<ALU>|<MAC>|<SHIFT> , dreg = PM Calcul i citire de memorie de
(Ix , My) program
DM (Ix , My) = dreg , Calcul i scriere de memorie de
<ALU>|<MAC>|<SHIFT> date
PM (Ix , My) = dreg , Calcul i scriere de memorie de
<ALU>|<MAC>|<SHIFT> program
dreg = DM (Ix , My) , dreg = Citire memorie de date i
PM (Ix , My) memorie de program
<ALU>|<MAC> , dreg = DM (Ix , My), Instruciune ALU/MAC i citire
dreg = PM (Ix , My) din memorie de date i din
memorie de program

Instruciuni pentru controlul programului

DO <addr> [UNTIL term] Bucl Do Until


[IF cond] JUMP (Ix) Salt indirect
[IF cond] JUMP <addr> Salt direct
[IF cond] CALL (Ix) Apel de subrutin (indirect)
[IF cond] CALL <addr> Apel de subrutin (direct)
IF [NOT ] FLAG_IN JUMP <addr> Salt condiionat de FLAG-IN
IF [NOT ] FLAG_IN CALL <addr> Appel de subrutin condiionat
de FLAG-IN
[IF cond] SET|RESET|TOGGLE Modificare FLAG-OUT
FLAG_OUT [, ...]
[IF cond] RTS Revenire din subrutin
[IF cond] RTI Revenire din ntrerupere
IDLE [(n)] Idle
10 MICROCONTROLERE - ARHITECTUR I APLICAII

Alte instruciuni

NOP Nici o operaie


MODIFY (Ix , My) Modificare registru index
[PUSH STS] [, POP CNTR] [, POP PC] Control stiv
[, POP LOOP]
ENA|DIS SEC_REG [, ...] Control set de registre primar
(secundar)
BIT_REV - inversarea biilor de adres
AV_LATCH - activare saturare ALU
AR_SAT
M_MODE - mod de operare MAC
TIMER - setare timer
G_MODE - operaii interne active in starea
de HOLD

Notaii:

Ix Registru index
My Registru de modificare
<data> Valoare (dat) imediat
<addr> Adres imediat
<exp> Exponent
<ALU> Orice instruciune ALU (excepie mprirea)
<MAC> Orice instruciune MAC
<SHIFT> Orice instruciune (excepie deplasare imediat)
cond Condiie logic ( EQ, NE, LT, GT, CE etc.)
term Condiie de terminare a buclei DO UNTIL
dreg Registru de date (ALU, MAC sau SHIFTER)
reg Orice registru (inclusive dreg)
; Termin o instruciune
, Separ operaiile multiple ntr-o instruciune multifuncie
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 11
PROIECTAREA APLICAIILOR

6.3. Optimizarea performanelor unui program n limbajul C


Pentru situaiile n care programele sunt scrise n limbaj C, de exemplu pentru
procesoare DSP, se pot da urmtoarele recomandri pentru optimizarea codului:

1. Algoritmul trebuie descris ntr-o form adecvat arhitecturii


microcontrolerului (se iau n considerare elementele de paralelism,
artimetica utilizat de microcalculator, modurile de adresare, tipurile de
instruciuni).
2. Codificarea algoritmului (scrierea programului) se realizeaz ct mai
simplu din punct de vedere al codului i a strucrurilor de date utilizate.
3. Seciunile critice ale programului se pot rescrie n limbaj de asamblare
(pentru minimizarea timpului de execuie i a dimensiunii codului)
4. Se evit efectuarea calculelor ce vor fi emulate (operaii aritmetice pentru
care microcontrolerul nu are intruciune nativ mprire, calcule n
virgul mobil)
5. Utilizarea analizei interprocedurale

- definirea constantelor

De exemplu pentru urmtorul program:

#include <stdio.h>
int val; // initialized to zero
void init() {
val = 3; // re-assigned
}
void func() {
printf("val %d",val);
}
int main() {
init();
func();
}

Variabila val este iniializat de dou ori, ceea ce este ineficient. Prin analiza
interprocedural nu se poate determina faptul ca val este o constanta. Pentru acest
lucru programul trebuie rescris astfel:

#include <stdio.h>
const int val = 3; // initialized once
12 MICROCONTROLERE - ARHITECTUR I APLICAII

void init() {
}
void func() {
printf("val %d",val);
}
int main() {
init();
func();
}
Pentru codul rescris variabila val este iniializat o singur dat.

- evitarea alierii pointerilor

Fie urmtorul program:

void fn(char a[], char b[], int n) {


int i;
for (i = 0; i < n; ++i)
a[i] = b[i];
}

Variabilele de tip pointer a si b pot indica acelai tablou (fenomenul se


numeste alierea pointerilor). Prin analiza interprocedural compilatorul va ncerca
s determine situaiile de aliere i s le rezolve.
Dac funcia fn este apelat de dou ori ntr-un program, analiza
interprocedural poate determina urmatoarele rezultate:

fn(glob1, glob2, N);


fn(glob1, glob2, N);

n acest caz pointerii a si b nu se intersecteaza (nu apare alierea).

fn(glob1, glob2, N);


fn(glob3, glob4, N);

n acest caz pointerii a si b nu se intersecteaza (nu apare alierea).

fn(glob1, glob2, N);


fn(glob3, glob1, N);

n acest caz pointerii a si b pot indica acelai tablou (poate apare alierea).

Aceast situaie apare deoarece analiza interprocedurala ia n considerare toate


apelurile de funcii n mod global i nu individual, atunci cnd determin riscul
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 13
PROIECTAREA APLICAIILOR

apariiei alierii. Dac apelurile ar fi luate n considerare individual analiza


interprocedural trebuie s analizeze fluxul de intruciuni i s ia in considerare un
numr mare de permutari posibile, ceea ce ar mri foarte mult timpul de compilare.

Evitarea alierii pointerilor se poate realiza i prin utilizarea calificatorilor


restrict si const.
Secvena:

for (i=0; i<100; i++)


a[i] = b[i];

poate fi rescris pentru a elimina alierea pointerilor a si b astfel:

int * restrict p = a;
int * restrict q = b;
for (i=0; i<100; i++)
*p++ = *q++;

Calificatorul restrict precizeaz compilatorului c accesele la memorie nu se vor


suprapune.

Utilizarea calificatorului const este ilustrat de secvena:

void copy(short *a, const short *b) {


int i;
for (i=0; i<100; i++)
a[i] = b[i];
}

6. Utilizarea tablourilor indexate sau a pointerilor, dup caz

Limbajul C permite ca accesarea datelor s se efectueze fie prin indexarea


unui tablou, fie incrementnd un pointer la tablou. Cele dou posibilitti sunt
prezentate n continuare:

- cu tablouri indexate:

void va_ind(const short a[], const short b[], short out[], int n) {
int i;
for (i = 0; i < n; ++i)
out[i] = a[i] + b[i]; }
14 MICROCONTROLERE - ARHITECTUR I APLICAII

- cu pointeri

void va_ptr(const short a[], const short b[], short out[], int n) {
int i;
short *pout = out;
const short *pa = a, *pb = b;
for (i = 0; i < n; ++i)
*pout++ = *pa++ + *pb++;
}

n funcie de aplicaie codul generat la compilare poate fi mai eficient folosind


unul dintre cele dou stiluri.
Cea mai buna strategie este de a ncepe prin scrierea codului folosind
indexarea; daca rezultatul compilarii nu este satisfacator se pot folosi pointeri.

7. Utilizarea funciilor inline sau a limbajului de asamblare (dac pentru


funcia dorit nu exist varianta inline)
8. Utilizarea de seciuni diferite de memorie pentru variabilele programului
(memorie de program, memorie de date) pentru exploatarea paralelismului
microcalculatorului.
9. Reguli pentru scrierea buclelor de program:

- buclele de program trebuie sa fie ct mai scurte (pentru a putea fi


optimizate automat de ctre compilator)
- se va evita desfacerea (unrolling) manual a buclelor n scopul
exploatrii paralelismului unitilor aritmetice ale
microcalculatorului (pipe-line); acest lucru se va face automat de
ctre compilator, dac e posibil.

Desfacerea manual a buclelor poate face programul mai greu de nteles i poate
mpiedica realizarea optimizrii automate de ctre compilator.

Pentru secvena de program:

void va1(const short a[], const short b[], short c[], int n)
{
int i;
for (i = 0; i < n; ++i) {
c[i] = b[i] + a[i];
}
}

compilatorul va optimiza bucla, iar pentru secvena desfcut manual:


LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 15
PROIECTAREA APLICAIILOR

void va2(const short a[], const short b[], short c[], int n)
{
short xa, xb, xc, ya, yb, yc;
int i;
for (i = 0; i < n; i+=2) {
xb = b[i]; yb = b[i+1];
xa = a[i]; ya = a[i+1];
xc = xa + xb; yc = ya + yb;
c[i] = xc; c[i+1] = yc;
}
}

este dificil pentru compilator s optimizeze bucla.

- evitarea rotirii manulale a buclelor pentru a ncrca sau stoca n


avans variabile ale programului

Pentru secvena urmtoare:

int ss(short *a, short *b, int n) {


int sum = 0;
int i;
for (i = 0; i < n; i++) {
sum += a[i] + b[i];
}
return sum;
}

bucla va fi rotit de ctre compilator.

Secvena rotit manual:

int ss(short *a, short *b, int n) {


short ta, tb;
int sum = 0;
int i = 0;
ta = a[i]; tb = b[i];
for (i = 1; i < n; i++) {
sum += ta + tb;
ta = a[i]; tb = b[i];
}
sum += ta + tb;
return sum;
16 MICROCONTROLERE - ARHITECTUR I APLICAII

este dificil de optimizat datorit variabilelor auxiliare ta si tb.

- lungimea buclelor interioare trebuie s fie mai mare ca lungimea


buclelor exterioare
- se va evita utilizarea instruciunilor condiionale n interiorul
buclelor

Urmtoarea secven:

for (i=0; i<100; i++) {


if (mult_by_b)
sum1 += a[i] * b[i];
else
sum1 += a[i] * c[i];
}

nu poate fi optimizat; este mai bine ca secvena s fie rescris astfel:

if (mult_by_b) {
for (i=0; i<100; i++)
sum1 += a[i] * b[i];
} else {
for (i=0; i<100; i++)
sum1 += a[i] * c[i];
}

n acest caz secvena conine dou bucle simple ce pot fi optimizate.

- se vor evita apelurile de funcii n interiorul buclelor


- contorul buclei trebuie s fie incrementat sau decrementat cu
factorul 1, n caz contrar optimizarea devine dificil
- contorul buclei trebuie s fie variabil local pentru ca bucla s
poat fi controlat hardware

Contorul buclei trebuie s fie variabil local (care va fi stocat ntr-un registru) i
nu variabil global. Urmtorul cod:

for (i=0; i<globvar; i++)


a[i] = 10;
LIMBAJE DE PROGRAMARE PENTRU MICROCONTROLERE. 17
PROIECTAREA APLICAIILOR

poate necesita rencrcarea variabilei globvar la fiecare iteraie i nu va


transforma bucla ntr-o bucl controlat hardware (cu ajutorul unui hardware
dedicat ce asigura incrementarea contorului i verificarea terminrii buclei).

Codul poate fi rescris astfel:

int upper_bound = globvar;


for (i=0; i<upper_bound; i++)
a[i] = 10;

ceea ce permite transformarea buclei ntr-o bucl hardware.

10. Utilizarea funciilor de lucru n aritmetic fracionar (1.15)

Dac programul necesit efectuarea unor calcule n aritmetic fractionar, ca n


exemplul urmtor:

long dot_product (short *a, short *b) {


int i;
long sum=0;
for (i=0; i<100; i++) {
/* this line is performance critical */
sum += (((long)a[i]*b[i]) << 1);
}
return sum;
}

este mai eficient s se utilizeze funciile aritmetice ale compilatorului pentru


operaii n format fracionar, n locul deplasrilor, astfel:

#include <math.h>
fract32 dot_product(fract16 *a, fract16 *b) {
int i;
fract32 sum=0;
for (i=0; i<100; i++) {
/* this line is performance critical */
sum += __builtin_mult_fr1x32(a[i],b[i]);
}
return sum;
}