mc cap 7

23
Microcontrolere - Capitolul 7 Corneliu BURILEANU © 1 7. FAMILIA DE PROCESOARE “ARM” 7.1. ARM – caracteristici generale Primul procesor ARM a fost dezvoltat de Acorn Computers Limited, Cambridge, England, 1983 – 1985: Acorn RISC Machine. A devenit ulterior acronimul de la Advanced RISC Machine. Versiunile arhitecturilor ARM: V1 ARM1 V2 ARM2 V2a ARM2aS ARM3 V3 ARM6 ARM600 ARM610 ARM7 ARM700 ARM710 V4T ARM7TDMI ARM710T ARM720T ARM740T V4 StrongARM ARM8 ARM810 V4T ARM9TDMI ARM920T ARM940T V5TE ARM9E-S ARM10TDMI ARM1020E Intel XScale V6 ARM1136J-S ARM1136JF-S

Upload: iulian-pavaloiu

Post on 09-Aug-2015

91 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

1

7. FAMILIA DE PROCESOARE “ARM”

7.1. ARM – caracteristici generale

Primul procesor ARM a fost dezvoltat de Acorn Computers Limited, Cambridge, England, 1983 – 1985: Acorn RISC Machine.

A devenit ulterior acronimul de la Advanced RISC Machine.

Versiunile arhitecturilor ARM:

V1 ARM1

V2 ARM2

V2a ARM2aS ARM3

V3 ARM6 ARM600 ARM610 ARM7 ARM700 ARM710

V4T ARM7TDMI ARM710T ARM720T ARM740T

V4 StrongARM ARM8 ARM810

V4T ARM9TDMI ARM920T ARM940T

V5TE ARM9E-S ARM10TDMI ARM1020E Intel XScale

V6 ARM1136J-S ARM1136JF-S

Page 2: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

2

Comparaţie cu predecesoarele RISC Berkeley RISC I şi II şi Stanford MIPS:

Asemănări:•••• Acces în memorie cu instrucţiuni LOAD – STORE•••• Instruc ţiuni cu format fix pe 32 de biţi•••• Prelucrarea datelor fără acumulator dedicat•••• Puţine moduri de adresare

Deosebiri :•••• Setul de lucru de registre nu este de 32 de registre şi nu există ferestre de registre•••• Instruc ţiunile nu durează toate o singură stare•••• Nu se foloseşte tehnica întârzierii salturilor pentru a preveni blocarea Unităţii de control

De fapt, ARM este o combinaţie CISC – RISC. Setul de instrucţiuni are caracteristici CISCmai mult decât RISC

Page 3: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

3

7.2. ARM – modurile de lucru

Utilizator usr Modul normal de execuţie a programelor

Moduri privilegiate:

Sistem sys Rulează procese ale sistemului de operare

Moduri care tratează excepţii:

Răspuns rapid la întreruperi fiq transfer rapid de date

Răspuns normal la întreruperi irq răspuns normal la cereri de întreruperi

Supervizor svc mod protejat pentru sistemul de operare

Abort abt implementează mecanismul de protecţie în memoria virtuală

Nedefinit und emulare soft a coprocesoarelor hardware

Page 4: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

4

7.3. ARM – Setul de registre

Cele mai multe registre sunt nededicate (multifuncţionale).

Sunt registre pe 32 de biţi .

Un procesor ARM are în total 37 de registre fizice distincte:

- 31 de „registre generale” incluzând numărătorul de program;

- 6 registre de stare.

Page 5: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

5

Modurile de lucru Moduri privilegiate

Moduri care tratează excepţii Utilizator Sistem Supervizor Abort Nedefinit Întreruperi Într. rapide

R0 R0 R0 R0 R0 R0 R0 R1 R1 R1 R1 R1 R1 R1 R2 R2 R2 R2 R2 R2 R2 R3 R3 R3 R3 R3 R3 R3 R4 R4 R4 R4 R4 R4 R4 R5 R5 R5 R5 R5 R5 R5 R6 R6 R6 R6 R6 R6 R6 R7 R7 R7 R7 R7 R7 R7 R8 R8 R8 R8 R8 R8 R8_fiq R9 R9 R9 R9 R9 R9 R9_fiq

R10 R10 R10 R10 R10 R10 R10_fiq R11 R11 R11 R11 R11 R11 R11_fiq R12 R12 R12 R12 R12 R12 R12_fiq R13 R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14 R14 R14_svc R14_abt R14_und R14_irq R14_fiq PC PC PC PC PC PC PC

CPSR CPSR CPSR CPSR CPSR CPSR CPSR

SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq

Page 6: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

6

R0 – R7 sunt registre fizice. (8)

R8 – R14 sunt registre logice – în sensul ca pot fi translatate în registre fizice diferite, astfel:

R8 – R12 pot fi translatate în câte 2 registre fizice; (10)R13 şi R14 pot fi translatate în câte 6 registre fizice. (12)

R15 este registru fizic. (1)-----

(31)

CPSR este registru fizic. (1)

SPSR este registru logic ce poate fi translatat în 5 registre fizice. (5)-----

(6)

Page 7: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

7

R13: indicator de stivă nededicat:SP

R14: „registru de legătur ă”: LR ;conţine adresa de reîntoarcere din subprograme

MOV PC, LRsauBX LR

R15 este numărătorul de program PC:• poate fi registru general de date• când e citit dă adresa instrucţiunii curente plus 8B• ultimii 2 bi ţi sunt zero• când se scrie în acest registru rezultatul e un salt la adresa înscrisă în R15;

ultimii 2 bi ţi trebuie să fie zero

CPSR este „registrul de stare al programului curent”. În modurile care tratează excepţii, acest registru este trecut în SPSR – “registrul de stare al programului salvat”.

Page 8: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

8

N – negativ

Z – zero

C – transport

V – depăşire

Q – depăşire pentru instruc ţiuni DSP

I – validarea întreruperilor normale

F – validarea întreruperilor rapide

T – indică trecerea la setul de instrucţiuni „Thumb”

M4 – M0 – indică modurile de lucru

31 30 29 28 27 7 6 5 4 3 2 1 0 N Z C V Q I F T M4 M3 M2 M1 M0

Page 9: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

9

Setul de lucru conţine (indiferent de modul de lucru):

- 15 registre generale: R0 – R14;

- 1 numărător de program: R15 ≡≡≡≡ PC;

- 1 sau 2 registre de stare:CPSR şi SPSR_mod .

unde mod semnifică unul dintremodurile care tratează excepţii.

Page 10: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

10

7.4. ARM – Memoria şi porturile

Adresare liniară: AF ≡≡≡≡ adr32

Memoria are 4 GB, sau 2Gw sau 1Gdw; informaţiile sunt aliniate

Adresele instrucţiunilor:• Salturi: AFsalt ←←←← AF curent ă + 8 + offset• Secvenţial: AF instr. urm ătoare ←←←← AF instr. curent ă

+ 4

Se folosesc atât „micul indian” cât şi „marele indian”. Nu există instrucţiuni specifice pentru trecerea de la o convenţie la alta. Există un terminal de intrare pentru a configura convenţia care se potriveşte cu memoria folosită

Porturile sunt organizate ca locaţii de memorie („memory – mapped I/O”)

Page 11: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

11

Moduri de adresare

Adresa pentru accesul în memorie (LOAD / STORE) are 2 păr ţi:

• registru bază: oricare registru general R0 – R15în cazul R15 (PC) avem, de fapt, o adresare relativă

• offset (AE):• imediat: o constantă (întreg fără semn) care se adună sau se scade la registrul bază• registru: un registru general R0 – R14 care se adună sau scade la registrul bază• registru deplasat: un registru general R0 – R14 care este deplasat cu un număr de celule indicat printr-o valoare imediată, iar rezultatul se adună sau scade la registrul bază

Indiferent de tipul de offset, există trei moduri de a combina cele 2 entităţi:

• offset: cele 2 entităţi se adună sau se scad:AF ←←←← (r) ±±±± AE

• pre-indexare: cele 2 entităţi se adună sau se scad; apoi registru bază este actualizat cu noua adresă, ceea ce permite indexarea automată într-un şir:

AF ←←←← (r) ±±±± AE(r) ←←←← (r) ±±±± AE

• post-indexare: se foloseşte doar registrul bază pentru adresare; apoi registru bază este actualizat cu cele 2 entităţi se adună sau se scad, ceea ce permite indexarea automată într-un şir:

AF ←←←← (r)(r) ←←←← (r) ±±±± AE

Page 12: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

12

7.5. ARM – Setul de instrucţiuni

7.5.1. Condiţionarea execuţiei instrucţiunilor

Aproape toate instrucţiunile ARM sunt, de fapt, decizii simple: sunt testate fanioanele N, Z, C, Vdin CPSR şi dacă este îndeplinită condiţia, instrucţiunile se desfăşoară normal

Instruc ţiunile conţin în format un câmp de 4 biţi [31:28] care codifică condiţia testatăFormat [31:28]

Mnemonic Semnificaţie Fanion testat

0000 EQ Egal (Z) ←←←← 1 0001 NE Non-egal (Z) ←←←← 0 0010 CS/HS Mai mare sau egal, numere fără semn (C) ←←←← 1 0011 CC/LO Mai mic, numere fără semn (C) ←←←← 0 0100 MI Negativ (minus) (N) ←←←← 1 0101 PL Pozitiv sau zero (plus) (N) ←←←← 0 0110 VS Depăşire (V) ←←←← 1 0111 VC Non-depăşire (V) ←←←← 0 1000 HI Mai mare, numere fără semn (C) ←←←← 1 & (Z) ←←←← 0 1001 LS Mai mic sau egal, numere fără semn (C) ←←←← 0 ∀ (Z) ←←←← 1 1010 GE Mai mare sau egal, numere cu semn (N) ←←←← 1 & (V) ←←←← 1 1011 LT Mai mic, numere cu semn (N) ←←←← 1 & (V) ←←←← 0 1100 GT Mai mare, numere cu semn (N) ←←←← 0 & (V) ←←←← 0 1101 LE Mai mic sau egal, numere cu semn (N) ←←←← 0 & (V) ←←←← 1 1110 AL Necondiţionat - 1111 NV Rezervat pentru instr. suplimentare -

Page 13: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

13

7.5.2. Salturi

Salturi propriu-zise în ecartul a 32 MBPot fi realizate şi prin înscrierea unei valori în R15 ≡≡≡≡ PC

Apelul de subprograme cu instrucţiuni similare („Branch with Link”) tot în ecartul a 32 MBAdresa de revenire va fi în R14 ≡≡≡≡ LR

„Branch and Exchange”:(PC) ←←←← (r)if (PC)0 ≡≡≡≡ 1 se trece în setul de instrucţiuni Thumb

Încărcarea a 4 octeţi direct în R15 ≡≡≡≡ PC echivalează cu un salt lung în toată memoria de 4 GBDacă în prealabil (LR) ←←←← (PC) se generează un apel de subprogram în toată memoria de 4 GB

Page 14: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

14

Salturi condiţionate:

B necondiţionatBAL ÎntotdeaunaBEQ EgalBNE Non-egalBPL PlusBMI MinusBCC Salt dacă transport e 0BLO Mai mic (fără semn)BCS Salt dacă transport e 1BHS Mai mare sau egal (fără semn)BVC Salt dacă depăşire e 0BVS Salt dacă depăşire e 1BGT Mai mare (cu semn)BGE Mai mare sau egal (cu semn)BLT Mai mic (cu semn)BLE Mai mic sau egal (cu semn)BHI Mai mare (fără semn)BLS Mai mic (fără semn)

Page 15: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

15

Exemple:

B eticheta ; salt la eticheta

BCC eticheta ; salt condiţionat de (C) ←←←← 0

BEQ eticheta ; salt condiţionat de (Z) ←←←← 1

MOV PC,#0 ; (R15) ←←←← 0

BL proc ; apel de procedură

MOV PC,LR ; (R15) ←←←← (R14) ;return

MOV LR,PC ; (R14) ←←←← (R15) ;gata pentru return

LDR PC,=proc ; (R15) ←←←← adr(proc) ;încarcă o adresă pe 32 biţi în;numărătorul de program

Page 16: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

16

7.5.3. Prelucrări de date

Toţi operanzii sunt pe 32 biţi

Rezultatul este pe 32 biţi şi va fi un registru

Nu există acumulator; registrele pentru operanzi şi rezultat sunt separate

AND (d) ←←←← (s) & operandEOR (d) ←←←← (s) ⊕⊕⊕⊕ operandSUB (d) ←←←← (s) - operandRSB (d) ←←←← operand - (s)ADD (d) ←←←← (s) + operandADC (d) ←←←← (s) + operand + (C)SBC (d) ←←←← (s) – operand – NOT(C)RSC (d) ←←←← operand - (s) – NOT(C)TST (s) & operandTEQ (s) ⊕⊕⊕⊕ operandCMP (s) - operandCMN (s) + operandORR (d) ←←←← (s) ∀∀∀∀ operandMOV (d) ←←←← (s)BIC (d) ←←←← (s) & NOToperandMVN (d) ←←←← NOT(s)

în care:• (d) şi (s) sunt registre generale• operand este o valoare imediată sau un registru general care poate fi şi deplasat

Page 17: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

17

Deplasări:

LSL deplasare logică stânga

LSR deplasare logică dreapta

ASL deplasare aritmetică stânga

ASR deplasare aritmetică dreapta

ROR rotaţie dreapta

RRX rotaţie dreapta o poziţie folosind C

Setarea fanioanelor se face opţional (cu excepţia comparaţiilor) se face indicând în asamblor un „S” la mnemonică; de exempluADDS

Page 18: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

18

7.5.4. Înmulţiri

Două clase de înmulţiri:• 32 ←←←← 32 * 32• 64 ←←←← 32 * 32

Înmul ţire „normal ă”:• MUL operanzii sunt în 2 registre generale, rezultatul este trunchiat la 32 biţi şi stocat în alt registru• MLA operanzii sunt în 2 registre generale, se adună conţinutul uni al treilea registru, rezultatul este

trunchiat la 32 biţi şi stocat în al patrulea registru „înmulţire cu acumulare”)

Înmul ţire „lung ă”:• SMULL operanzii sunt în 2 registre generale şi rezultatul, pe 64 biţi este stocat

în alte 2 registre concatenate; numerele sunt întregi cu semn• UMULL operanzii sunt în 2 registre generale şi rezultatul, pe 64 biţi este stocat

în alte 2 registre concatenate; numerele sunt întregi fără semn• SMLAL operanzii sunt în 2 registre generale, la rezultat se adună conţinutul

a 2 registre concatenate şi rezultatul este stocat în aceste al treilea şi al patrulea registru;numerele sunt întregi cu semn

• UMLAL operanzii sunt în 2 registre generale, la rezultat se adună conţinutula 2 registre concatenate şi rezultatul este stocat în aceste al treilea şi al patrulea registru;numerele sunt întregi fără semn

Page 19: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

19

Exemple:

MUL R4, R2, R1 ; (R4) ←←←← (R2)*(R1)

MLA R7, R8, R9, R3 ; (R7) ←←←← (R8)*(R9) + (R3)

SMULL R4, R8, R2, R3 ; (R4)↑↑↑↑(R8) ←←←← (R2)*(R3)

UMULL R6, R8, R0, R1 ; (R6)↑↑↑↑(R8) ←←←← (R0)*(R1)

UMLAL R5, R8, R0, R1 ; (R5)↑↑↑↑(R8) ←←←← (R0)*(R1) + (R5)↑↑↑↑(R8)

Page 20: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

20

7.5.5. Instrucţiuni aritmetice speciale

CLZ înscrie într-un registru numărul de cifre binare 0 ale unui operand din alt registru,începând cu msb şi până la primul 1

Determină câte deplasări stânga sunt necesare pentru normalizarea unui operand

Determină bitul cu prioritatea maxim ă într-o mască binară

Exemple:

CLZ R4, R2

Page 21: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

21

7.5.6. Accesul în memorie

Tipuri de instruc ţiuni LOAD / STORE:• 8 sau 32 biţi, întregi fără semn• 16 biţi întregi fără semn, 16 sau 8 biţi, întregi cu semn

Se folosesc modurile de adresare amintite

LDR Încarcă 32 biţi într-un registru generalLDRB Încarcă 8 biţi într-un registru generalLDRH Încarcă 16 biţi (întreg fără semn) într-un registru generalLDRSB Încarcă 8 biţi (întreg cu semn) într-un registru generalLDRSH Încarcă 16 biţi (întreg cu semn) într-un registru generalSTR Memorează 32 biţi dintr-un registru de uz generalSTRB Memorează 8 biţi dintr-un registru de uz generalSRH Memorează 16 biţi dintr-un registru de uz general

LDM Încarcă un subset sau toate registrele generaleSTRM Memorează un subset sau toate registrele generale

SWP Inter-schimbă 32 biţi între registre şi memorieSWPB Inter-schimbă 8 biţi între registre şi memorie

Page 22: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

22

Exemple:

LDR R1, [R0] ; (R1) ←←←← ((R0))

LDR R8, [R3,#4] ; (R8) ←←←← ((R3) + 4)

LDR R12, [R13,#-4] ; (R12) ←←←← ((R13) - 4)

STR R2, [R1,#0x100] ; ((R1) +100H) ←←←← (R2)

LDRB R5,[R9] ; (R5) ←←←← 000000 ↑↑↑↑((R9))

LDR R11, [R3,R5,LSL #2] ; (R11) ←←←← ((R3) + (R5)*4)

LDR R1, [R0,#4]! ; (R1) ←←←← ((R0) + 4); (R0) ←←←← (R0) + 4

STRB R7, [R6,#-1]! ; ((R6) -1) ←←←← (R7); (R6) ←←←← (R6) – 1

LDR R3, [R9], #4 ; (R3) ←←←← ((R9)); (R9) ←←←← (R9)+4

STR R2, [R5],#8 ; ((R5)) ←←←← (R2); (R5) ←←←← (R5) + 8

LDR R0, [PC,#40] ; (R0) ←←←← ((PC) + 40 + 8)

LDR R0, [R1], R2 ; (R0) ←←←← ((R1)); (R1) ←←←← (R1) + (R2)

SWP R12, R10, [R9] ; (R12) ←←←← ((R9)); ((R9)) ←←←← (R10)

SWP R1, R1, [R9] ; (R1) ↔↔↔↔ ((R9))

Page 23: Mc cap 7

Microcontrolere - Capitolul 7 Corneliu BURILEANU ©

23

7.5.7. Comunicarea cu coprocesorul

Suportă până la 16 coprocesoare logice

Fiecare coprocesor poate avea până la 16 registre proprii de mărimi diverse

Coprocesoarele au arhitecturi RISC, cu instrucţiuni care• execută operaţii interne cu registrele• accesează memoria cu LOAD şi STORE• schimbă date cu registrele nucleului ARM

Coprocesoarele pot fi adăugate pe cip sau pe placă.Cel mai adesea se folosesc coprocesoare pentru gestionarea memoriei şi accesul în memoriile cache.

CDP p5, 2, c12, c10, c3, 4 ;ini ţiază operaţii cu date la coprocesorul 5;primul byte de cod este 2 iar al doilea byte;de cod este 4; c12 este registru destinaţie;şi c10, c3 sunt registre sursă

MRC p15, 5, R4, c0, c2, 3 ;transferă date de la coprocesorul 15;;primul byte de cod este 5 iar al doilea byte; de cod este 3; R4 este registru destinaţie,; iar c0, c2 sunt registre sursă