• Nenhum resultado encontrado

EL68E Sistemas Embarcados Prof. Douglas RENAUX www.dainf.ct.utfpr.edu.br/~douglas © Prof. Dr. Douglas Renaux

N/A
N/A
Protected

Academic year: 2022

Share "EL68E Sistemas Embarcados Prof. Douglas RENAUX www.dainf.ct.utfpr.edu.br/~douglas © Prof. Dr. Douglas Renaux"

Copied!
193
0
0

Texto

(1)

EL68E Sistemas Embarcados

Prof. Douglas RENAUX

(2)

Arquitetura ARM

Prof. Douglas RENAUX

© Prof. Dr. Douglas Renaux

(3)

Acorn

BBC Micro

(4)

© Prof. Dr. Douglas Renaux

Developer Acorn Computers

Type 8-bit home computer

Release date 1 December 1981

Retail availability 12 years

Introductory price £235 Model A, £335 Model B (in 1981)

Discontinued 1994

Units sold over 1.5 million

Media Cassette tape, floppy disc (optional), hard disc

(rare),Laserdisc(BBC Domesday Project)

Operating system Acorn MOS

Power 50 W

CPU 2 MHzMOS Technology 6502/6512

Storage capacity 100–800 kB (DFS)

160–1280 kB (ADFS floppy discs) 20 MB (ADFS hard disc)

Memory 16–32kB(Model A/B)

64–128 kB (Model B+) 128 kB (Master)

Plus 32–128 kB ROM, expandable to 272 kB

Display PAL/NTSC,UHF/composite/TTL RGB

Graphics 640×256, 8 colours (variousframebuffermodes)

78×75, 8 colours (Teletext)

Sound Texas Instruments SN76489, 4 channels, mono

TMS5220speech synthesiser with phrase ROM (optional)

Input Keyboard, twin analogue joysticks with fire buttons,

lightpen

Connectivity Printer parallel,RS-423serial, user

parallel,Econet(optional), 1 MHz bus,Tubesecond processor interface

(5)
(6)

ARM – Histórico

Ano Evento

1984-1985 Desenvolvimento do primeiro RISC comercial na Acorn Computers Ltd (Cambridge – UK) ARM = Acorn RISC Machine

1990 Fundação da ARM (Advanced RISC Machines Ltd.)

1995 ARM7TDMI

1996-1998 Desenvolvimento do ARM8 em conjunto com a DEC (adquirida pela Intel que fez o StrongARM)

1997 ARM9

1999 ARM10

2003 ARM11

2005 Cortex M3, R4, A8 2007 Cortex A9 – Multicore

2012 Arquitetura v8 – 32/64 bits (Cortex A50) 2014 Cortex M7 – pipeline superescalar

© Prof. Dr. Douglas Renaux

(7)

ARM Family ARM

Arch. ARM Core Feature TypicalMIPS@

MHz

ARM1 ARMv1 ARM1 First implementation

ARM2

ARMv2 ARM2 ARMv2 added the MUL (multiply) instruction

4 MIPS @ 8 MHz 0.33DMIPS/MHz

ARMv2a ARM250

Integrated MEMC (MMU), Graphics and IO processor. ARMv2a added the SWP and SWPB (swap) instructions.

7 MIPS @ 12 MHz

ARM3 ARMv2a ARM3 First integrated memory cache.

4 KB unified

12 MIPS @ 25 MHz

0.50 DMIPS/MHz ARM60 ARMv3 first to support 32-bit memory

address space (previously 26-bit)

10 MIPS @ 12 MHz

(8)

ARM7 ARMv3

ARM700 40 MHz

ARM710 As ARM700, no coprocessor bus. 40 MHz

ARM710a As ARM710 40 MHz

0.68 DMIPS/MHz

ARM7TDMI ARMv4T

ARM7TDMI(-S) 3-stage pipeline, Thumb 15 MIPS @ 16.8 MHz 63 DMIPS @ 70 MHz

ARM710T As ARM7TDMI, cache 8 KB unified,

MMU 36 MIPS @ 40 MHz

ARM720T As ARM7TDMI, cache 8 KB unified,

MMU 60 MIPS @ 59.8 MHz

ARM740T As ARM7TDMI, MPU

ARM7EJ ARMv5TEJ ARM7EJ-S 5-stage pipeline, Thumb, Jazelle DBX, Enhanced DSP instructions

© Prof. Dr. Douglas Renaux

(9)

Pipeline

(10)

ARM Cortex

© Prof. Dr. Douglas Renaux

(11)

ARM Cortex

(12)

ARM Cortex

© Prof. Dr. Douglas Renaux

© Prof. Dr. Douglas Renaux

(13)

Cortex- M

ARMv6-M

Cortex- M0[9]

Microcontroller profile, most Thumb + some Thumb-2,[10]hardware multiply instruction (optional small), optional system timer, optional bit-banding memory

Optional cache, no TCM, no MPU

0.84

DMIPS/MHz

Cortex- M0+[11]

Microcontroller profile, most Thumb + some Thumb-2,[10]hardware multiply instruction (optional small), optional system timer, optional bit-banding memory

Optional cache, no TCM,

optional MPU with 8 regions

0.93

DMIPS/MHz

Cortex- M1[12]

Microcontroller profile, most Thumb + some Thumb-2,[10]hardware multiply instruction (optional small), OS option adds SVC / banked stack pointer, optional system timer, no bit- banding memory

Optional cache, 0-1024 KB I- TCM, 0- 1024 KB D- TCM, no MPU

136 DMIPS

@

170 MHz,[13]( 0.8 DMIPS/M Hz FPGA- dependent)[1

4]

ARMv7-M Cortex-

M3[15]

Microcontroller profile, Thumb / Thumb-2, hardware multiply and divide instructions, optional bit-banding memory

Optional cache, no TCM,

optional MPU with 8 regions

1.25

DMIPS/MHz

(14)

© Prof. Dr. Douglas Renaux

Cortex -M

ARMv6-M

Cortex- M0[10]

Microcontroller profile, most Thumb + some Thumb-2,[11]hardware multiply instruction (optional small), optional system timer, optional bit-banding memory

Optional cache, no TCM, no MPU

0.84

DMIPS/MHz

Cortex- M0+[12]

Microcontroller profile, most Thumb + some Thumb-2,[11]hardware multiply instruction (optional small), optional system timer, optional bit-banding memory

Optional cache, no TCM,

optional MPU with 8 regions

0.93

DMIPS/MHz

Cortex- M1[13]

Microcontroller profile, most Thumb + some Thumb-2,[11]hardware multiply instruction (optional small), OS option adds SVC / banked stack pointer, optional system timer, no bit- banding memory

Optional cache, 0-1024 KB I- TCM, 0- 1024 KB D- TCM, no MPU

136 DMIPS

@

170 MHz,[14]( 0.8 DMIPS/M Hz FPGA- dependent)[1

5]

ARMv7-M Cortex- M3[16]

Microcontroller profile, Thumb / Thumb-2, hardware multiply and divide instructions, optional bit-banding memory

Optional cache, no TCM,

optional MPU with 8 regions

1.25

DMIPS/MHz

ARMv7E-M

Cortex- M4[17]

Microcontroller profile, Thumb / Thumb-2 / DSP / optional VFPv4-SP single-precisionFPU,

hardware multiply and divide instructions, optional bit-banding memory

Optional cache, no TCM,

optional MPU with 8 regions

1.25

DMIPS/MHz (1.27 w/FPU)

Cortex- M7[18]

Microcontroller profile, Thumb / Thumb-2 / DSP / optional VFPv5 single and double precisionFPU, hardware multiply and divide instructions

0-64 KB I- cache, 0-64 KB D-cache, 0- 16 MB I-TCM, 0-16 MB D-TCM (all these

w/optional ECC), optional MPU with 8 or 16 regions

2.14

DMIPS/MHz

(15)

Cortex-M7 (lançamento 24-Set-2014)

(16)

© Prof. Dr. Douglas Renaux

(17)
(18)

© Prof. Dr. Douglas Renaux

(19)
(20)

Thumb-2

Densidade de código melhora em até 35% em relação ao código ARM.

Thumb-2:

“melhor de dois mundos”

independe de código ARM

© Prof. Dr. Douglas Renaux

Fonte: ARM © Prof. Dr. Douglas Renaux

(21)

Baixo Custo x 8 bits

(22)

© Prof. Dr. Douglas Renaux

© Prof. Dr. Douglas Renaux

(23)

ARMv8-A (64 bits)

(24)

© Prof. Dr. Douglas Renaux

(25)
(26)

© Prof. Dr. Douglas Renaux

(27)
(28)

Fev 29, 2016 – Raspberry Pi 3

© Prof. Dr. Douglas Renaux

(29)

Processador Broadcom BCM2837; Cortex-A53 quad core, clock 1.2 GHz GPU VideoCore IV, 24 GFLOP Dual Core, Open GL, 1080p 30 fps H.264

SDRAM 1 GB LPDDR2-900

Memória de Massa Cartão micro-SD

Interfaces: 4 x USB 2.0 WiFi 802.11 b/g/n

BTLE – Bluetooth Low Energy HDMI full size

Ethernet 10/100 Mbps

GPIO 40 pinos

Câmera interface MIPI, 15 pinos Display interface DSI, 15 pinos Áudio/Vídeo plug 3.5 mm 3 vias

(30)

Exynos 5250 com Cortex-A15 dual core

© Prof. Dr. Douglas Renaux

(31)
(32)

64-bits - AMD

Hierofalcon will pack four to eight 64-bit ARM A57 cores clocked up to 2GHz.

In addition to new ARM cores, the 28nm chips also feature 10Gbit Ethernet and PCI

Express 3.0 on board, which means they should be a good fit for data centres.

21-Out-2013

© Prof. Dr. Douglas Renaux

(33)

NVIDEA:

192 GPU 4x A15

ou 2x A57 Tegra K1

(34)

Tegra X1 - 2015

© Prof. Dr. Douglas Renaux

(35)

NVidia - 2016

(36)

Qualcomm's Growing 64-bit SoC Lineup

Marketing Name Snapdragon 615 Snapdragon 610 Snapdragon 410

Internal Model Number MSM8939 MSM8936 MSM8916

Manufacturing Process 28nm LP 28nm LP 28nm LP

CPU 8 x ARM Cortex A53 4 x ARM Cortex A53 4 x ARM Cortex A53 1.2GHz+

ISA 32/64-bit ARMv8 32/64-bit ARMv8 32/64-bit ARMv8 GPU Qualcomm Adreno 405 Qualcomm Adreno 405 Qualcomm Adreno 306

H.265 Decode Yes Yes No

Memory Interface 1 x 64-bit LPDDR2/3 1 x 64-bit LPDDR2/3 1 x 64-bit LPDDR2/3

Integrated Modem 9x25 core, LTE Category 4, DC- HSPA+, DS-DA

9x25 core, LTE Category 4, DC- HSPA+, DS-DA

9x25 core, LTE Category 4, DC- HSPA+, DS-DA

Integrated WiFi Qualcomm VIVE 802.11ac

Qualcomm VIVE 802.11ac

Qualcomm VIVE 802.11ac

eMMC Interface 4.5 4.5 4.5

© Prof. Dr. Douglas Renaux

(37)
(38)

RISC x CISC

© Prof. Dr. Douglas Renaux

(39)

Gerações de Computadores

Geração Descrição

0 Máquinas Mecânicas e Eletromecânicas solução de equações

1 40’s – Válvula ENIAC, Zuse

2 50’s – Transistores

Universidade de Manchester IBM 350

3 60’s – Circuitos integrados SSI (portas lógicas) Apolo Guidance Computer (embarcado)

IBM System/360

(40)

Computação Quântica - 5-Out-2015

© Prof. Dr. Douglas Renaux

(41)

Primeira Geração

(42)

Segunda Geração

© Prof. Dr. Douglas Renaux

PDP-1

(43)

Terceira Geração

(44)

De que forma os projetistas de

computadores (arquitetos) utilizaram o aumento significativo de transistores

disponibilizados pela evolução rápida da tecnologia de fabricação de circuitos

integrados ?

© Prof. Dr. Douglas Renaux

(45)

CISC

Complex Instruction Set Computer

o conjunto de instruções

inicialmente simples

avanços tecnológicos (transistores, CIs)

permitiram a manufatura de computadores com mais transistores a menor custo

projetistas optaram por conjuntos de instruções cada vez mais complexos

(46)

CISC

Como tornar as instruções mais complexas:

aumentar o número de modos de endereçamento

endereçamento indireto em memória [[R]]

instruções com elevado grau semântico

Exemplos do 68000

SBCD: Subtract Decimal with Extend SWAP: Swap register Words

CMP2: Compare Register against Upper and Lower Bounds

© Prof. Dr. Douglas Renaux

(47)
(48)

Processor Transistor count

Date of

introduction Manufacturer Process Area

Intel 4004 2,300 1971 Intel 10µm 12 mm²

Intel 8008 3,500 1972 Intel 10 µm 14 mm²

Motorola

68000 68,000 1979 Motorola 3.5 μm 44 mm²

Intel 80286 134,000 1982 Intel 1.5 µm 49 mm²

Pentium 3,100,000 1993 Intel 0.8 µm 294 mm²

ARM 7 578,977[9] 1994 ARM 0.5 µm 68.51 mm²

ARM Cortex-A9 26,000,000[12] 2007 ARM 65 nm

AMD

K10 quad-core 2M L3

463,000,000[11] 2007 AMD 65 nm 283 mm²

Quad-Core +

GPUCore i7 1,400,000,000 2012 Intel 22 nm 160 mm²

Xbox One

Main SoC 5,000,000,000 2013 Microsoft/AMD 28 nm 363 mm²

18-coreXeon

Haswell-E5 5,560,000,000[31] 2014 Intel 22 nm 661 mm²

IBM z13 Storage

Controller 7,100,000,000 2015 IBM 22 nm 678 mm²

22-coreXeon Broadwell-E5

~7,200,000,000[32

] 2016 Intel 14 nm 456 mm²

SPARCM7 10,000,000,000 2015 Oracle 20 nm

(49)

Perguntas

Qual é, afinal, o objetivo primordial do arquiteto / projetista de computadores ?

Dada uma tecnologia de fabricação e uma

área de silício (custo), como fazer o melhor aproveitamento possível ?

Quais são as conseqüências de um conjunto de instruções complexo ?

(50)

RISC x CISC

RISC CISC

Conjunto de instruções reduzido Conjunto de instruções extenso Instruções muito simples Instruções complexas

Instruções de tamanho fixo Instruções de tamanho variável Decodificação simplificada

(tabela)

Decodificação complexa (microcódigo)

Execução regular Cada instrução executa a sua maneira

Instruções requerem o mesmo número de clocks para executar

Grande variação no número de clocks por instrução

Possibilita o uso de pipeline Extremamente difícil / impossível o uso de pipeline

© Prof. Dr. Douglas Renaux

(51)

Pipeline

(52)

© Prof. Dr. Douglas Renaux

(53)

Arquitetura ARM

Prof. Douglas RENAUX

(54)

Módulo 3

A arquitetura Cortex-M3

© Prof. Dr. Douglas Renaux

(55)

Cortex-M3 internal structure

(56)

Cortex-M3 internal structure

© Prof. Dr. Douglas Renaux

(57)

Arquitetura Cortex-M3

Visão geral da Arquitetura:

Registradores

Conjunto de instruções

Acesso à Memória

Interrupções

(58)

© Prof. Dr. Douglas Renaux

(59)

Instruções do Cortex-M0

(60)

© Prof. Dr. Douglas Renaux

(61)
(62)

Módulo 4

Conjunto de Instruções Thumb-2

© Prof. Dr. Douglas Renaux

(63)

Arquitetura Cortex-M3

Cortex-M3 usa a versão ARMv7-M de arquitetura ARMv7-M

Thumb2

Mix de instruções de 16 e 32 bits

Não requer alinhamento na memória das instruções de 32 bits

(64)

© Prof. Dr. Douglas Renaux

(65)
(66)

© Prof. Dr. Douglas Renaux

(67)
(68)

© Prof. Dr. Douglas Renaux

(69)

infocenter.arm.com

Developer Guides and Articles Software Development

(70)

1 - Lógicas e Aritméticas

Instrução Descrição

ADD, ADDS, ADCS Soma, soma com carry

SUB, SUBS Subtrai

RSBS Subtração reversa

MUL Multiplicação: 32b x 32b -> 32b

ANDS, ORRS, EORS Operações lógicas: E, OU, OU-EXCL (bit a bit)

BICS Operação lógica: E NÃO

CMP, CMN Comparação, comparação negada

TEQ, TST Teste de bits

MOV, MVN Move, move negado

© Prof. Dr. Douglas Renaux

(71)

Formato das Instruções Log/Arit

Três operandos explícitos (Rd,Op1,Op2) ADD R0,R1,R2

R0 := R1 + R2

Dois operandos e um implícito (Rd,Op2) ADDS R0,R5

R0 := R0 + R5

(72)

CMP, CMN, TST, MOV, MVN

 Formatos:

CMN Rn,Rm // R0-R7 (soma Rn e Rm)

CMP Rn, #imm //R0-R14; 0-255

CMP Rn,Rm

TST Rn, Rm // R0-R7 (AND)

MOVS Rd, Rm

MOVS Rd, #imm // 0-255

MVNS Rd,Rm

MOV Rd,Rm

© Prof. Dr. Douglas Renaux

(73)

Deslocamento (LSLS)

• n >= 32 todos os bits são zerados

n >= 33 todos os bits e o carry são zerados

(74)

Deslocamento (LSRS)

• n >= 32 todos os bits são zerados

n >= 33 todos os bits e o carry são zerados

variantes: só LSRS (altera carry) LSRS {Rd},Rm,Rs

LSRS {Rd},Rm,#imm

• efeito de LSRS Rm, #n é Rm / 2n

© Prof. Dr. Douglas Renaux

(75)

Deslocamento (ASRS)

n >= 32 todos os bits e o carry recebem cópia do bit 31 variantes: só ASRS (altera carry)

(76)

Rotação (RORS) / RRX

n >= 32 é o mesmo que n-32

variantes: só RORS (altera carry) RORS {Rd},Rm,Rs

RORS {Rd},Rm,#imm

efeito de LSRS Rm, #n é Rm / 2n (para Rm sem sinal)

• n = 32 o valor não é alterado e CY := Rm[31]

n = 33 mesmo efeito que RORS com n = 1

variantes: só RORS (altera carry) RORS {Rm},Rm,Rs

não acessa regs altos

apenas dois operandos

© Prof. Dr. Douglas Renaux

(77)

ARM – Barrel Shifter

Destination

CF 0 Destination CF

LSL : Logical Left Shift ASR: Arithmetic Right Shift

Multiplication by a power of 2 Division by a power of 2, preserving the sign bit

Destination CF

...0 Destination CF

LSR : Logical Shift Right ROR: Rotate Right

Division by a power of 2 Bit rotate with wrap around from LSB to MSB

(78)

Operando 2

© Prof. Dr. Douglas Renaux

(79)

Operando 2

Registrador R4

Registrador e deslocamento R4, LSL #4

R5, ASR #1

Constante:

(80)

Deslocamentos no Operando 2

Opções:

ASR #n 1 ≤ n ≤ 32

LSL #n 1 ≤ n ≤ 31

LSR #n 1 ≤ n ≤ 32

ROR #n 1 ≤ n ≤ 31

RRX

© Prof. Dr. Douglas Renaux

(81)

Constantes no Operando 2

Não é possível definir qualquer valor de constante no Operando 2

Apenas alguns valores podem ser formados:

Valores de 8 bits deslocados

Valores do tipo 0x00XY00XY

Valores do tipo 0xXY00XY00

Valores do tipo 0xXYXYXYXY

(82)

Exercícios

1-

init: MOV r1,#3 MOV r2,#5 MOVS r3,#-6 ADD r0,r2,r3 ADDS r0,r2,r3 ADDS r0,#9 CMP r0,#8 SUBS r0,#10 SUBS r0,#256 SUBS r0,#3000 ASR r0,#5 2-

escreva um programa em assembly para descobrir qual o valor corrente de PC, ou seja, qual o valor de PC quando a instrução no endereço i está sendo executada. Explique o que descobriu.

© Prof. Dr. Douglas Renaux

interpretação dos valores numéricos interpretação dos flags

corrigir e explicar erros de montagem

(83)

MULTIPLICAÇÃO-1

MULS Rd,Rn,Rm

Rd := Rn x Rm

Rm deve ser o mesmo registrador que Rd

formato preferido: MULS Rd,Rn

R0 – R7

32-bits x 32-bits -> 32-bits em 1 único ciclo de clock afeta N e Z

(84)

MULTIPLICAÇÃO-2

MUL Rd,Rn,Rm

Rd := Rn x Rm

formato alternativo: MUL Rd,Rn

Registradores exceto SP, PC

32-bits x 32-bits -> 32-bits em 1 único ciclo de clock

© Prof. Dr. Douglas Renaux

(85)

MULTIPLICAÇÃO-3

MLA Rd,Rn,Rm,Ra

Rd := Ra + Rn x Rm

32-bits x 32-bits -> 32-bits em 2 ciclos de clock

(86)

MULTIPLICAÇÃO-4

MLS Rd,Rn,Rm,Ra

Rd := Ra - Rn x Rm

32-bits x 32-bits -> 32-bits em 2 ciclos de clock

© Prof. Dr. Douglas Renaux

(87)

MULTIPLICAÇÃO-5

UMULL RdLo, RdHi, Rn, Rm

RdHi:RdLo := Rn x Rm

UMLAL RdLo, RdHi, Rn, Rm

RdHi:RdLo := RdHi:RdLo + Rn x Rm

SMULL RdLo, RdHi, Rn, Rm

RdHi:RdLo := Rn x Rm

SMLAL RdLo, RdHi, Rn, Rm

(88)

DIVISÃO

UDIV Rd,Rn,Rm

Rd := Rn / Rm

SDIV Rd,Rn,Rm

Rd := Rn / Rm

32-bits / 32-bits -> 32-bits em 4 ciclos de clock

configurável se quer gerar exceção na divisão por zero

© Prof. Dr. Douglas Renaux

(89)

MOV, MOV.W, MOVT

 Para simplificar a carga de constantes que não atendem o formato “8-bits com deslocamento”

 MOV Ri,#16-bits (equivalente a MOV.W Ri,#16) carrega os 16 bits menos significativos de Ri

 MOVT Ri,#16-bits

carrega os 16 bits mais significativos de Ri

(90)

Exercícios

1. Multiplicar o valor inteiro (32-bits) que está em R3 pela constant 9:

a) Usando instrução de multiplicação

b) Sem usar multiplicação

(sugestão: usar ADD/SUB/shift)

2. Idem, mas multiplicando por 15.

3. Qual a maneira mais eficiente (menos instruções e menos tempo) para fazer as seguintes cargas de constantes:

1. R0 := 0

2. R1 := 200

3. R2 := 0x1234

4. R3 := 0xFFFFFF00

5. R4 := 0xABCDEF00 © Prof. Dr. Douglas Renaux

(91)

Instruções que Operam em Bits

BFC Rd, #lsb, #w

#lsb e #w estão na faixa de 0 a 31 e 1 a 32 Bit-field clear: limpa #w bits a partir de #lsb BFC R0, #4, #8 R0 = 0xFFFF F00F

BFI Rd, Rn, #lsb, #w

(92)

Exercícios

4. Alterar os bits 5 a 9 do registrador R10 para 11001

a) Usando AND/OR/…

b) Usando instruções de bit-field

sua solução deve funcionar para qualquer que seja o valor atual de R10.

© Prof. Dr. Douglas Renaux

(93)

Instruções que Operam em Bits

SBFX Rd, Rn, #lsb, #w

#lsb e #w estão na faixa de 0 a 31 e 1 a 32 Extrai campo e faz extensão de sinal:

copia #w bits a partir de #lsb para o bit0 de Rd e estende

SBFX R0, R1, #4, #8 R0 = 0xFFFF FFBC

(94)

Extend

SXTB Rd,Rm // Rd := sign extend Rm[7:0]

UXTB Rd,Rm // Rd := zero extend Rm[7:0]

SXTH Rd,Rm // Rd := sign extend Rm[15:0]

UXTH Rd,Rm // Rd := zero extend Rm[15:0]

R0-R7

© Prof. Dr. Douglas Renaux

(95)

ADR

ADR Rd, label

calcula o endereço do label na forma de um offset para o PC

Carrega o Rd com o endereço do label Faixa permitida: PC +/- 4095

(96)

2 - Acesso à Memória

© Prof. Dr. Douglas Renaux

(97)

Acessos Alinhados

um acesso à memória de dados é alinhado se:

acesso à Word é em endereço múltiplo de 4

acesso à HalfWord é em endereço múltiplo de 2

acesso à Byte é em endereço múltiplo de 1

No Cortex-M0 todos os acessos devem ser alinhados ou causa um HardFault

No Cortex-M3 os acessos podem ser

(98)

LD

(Load = Leitura)

ST

(Store = Escrita)

Instruções de Acesso à Memória de Dados

© Prof. Dr. Douglas Renaux

STR STRD STM PUSH

LDR LDRD LDM POP

(99)

LDR

Lê dado da memória Formatos:

LDR Rt,[Rn]

LDR Rt,[Rn,#off]

LDRB Rt,[Rn,#off]

LDRH Rt,[Rn,#off]

Restrições:

(100)

LDR

Lê dado da memória Formatos:

LDR Rt,[Rn,Rm]

LDRB Rt,[Rn,Rm]

LDRH Rt,[Rn,Rm]

LDR Rt,[Rn, Rm, LSL #2] //end = Rn + Rm<<2

© Prof. Dr. Douglas Renaux

(101)

LDR – Pré e Pós Indexado

Pré-Indexado:

LDR Rd,[Ri,#cte] !

LDR Rd,[Ri,Rm] !

Primeiro calcula endereço depois acessa memória

O ‘!’ indica que o Ri deve ser atualizado com o endereço recém calculado. LDR R2,[R3,#4]!

Pós-Indexado

(102)

LDRSB e LDRSH

Lê dado da memória e faz extensão de sinal Formatos:

LDRSB Rt,[Rn,#off]

LDRSH Rt,[Rn,#off]

LDRSB Rt,[Rn,Rm]

LDRSH Rt,[Rn,Rm]

© Prof. Dr. Douglas Renaux

(103)

LDR (relativo ao PC)

Lê dado da memória

O dado está em endereço próximo ao código sendo executado

Formatos:

LDR Rt,[PC,#100]

LDR Rt, label

(104)

LDRD

Lê 64 bits da memória para 2 registradores

Usado para carregar inteiros de 64 bits (long long) LDRD Rt, Rt2, label // relativo ao PC

LDRD Rt, Rt2, [...] // mesmos modos de

// endereçamento que LDR Rt – word menos significativo (LSW)

está no endereço especificado Rt2 – word mais signifivativo (MSW)

está no endereço seguinte (+4)

© Prof. Dr. Douglas Renaux

(105)

STR

Escreve dado da memória Formatos:

STR

STRB

STRH

mesmas regras que para LDR

(106)

LDM e STM

Tranfere múltiplos registradores de/para memória Formatos:

LDM R0,{R0,R1,R2}

LDM R1!,{R2-R7}

STM R0!,{R2-R4}

© Prof. Dr. Douglas Renaux

(107)

LDM e STM

Variantes:

IA = Increment After – default

1. acessa memória

2. incrementa endereço

DB = Decrement Before

1. decrementa endereço

2. acessa memória

EA = Empty Ascending

(108)

PUSH e POP

Tranfere múltiplos registradores de/para memória Formatos:

PUSH {R0-R7}

POP {R1,R3-R6}

Full Descending Stack

STMFD sp!, {r0,r1,r3-r5}

PUSH {r0,r1,r3-r5}

r5 r4 r3 r1 SP r0

FD : Full Descending

old SP

endereço baixo

© Prof. Dr. Douglas Renaux

(109)

LDM e STM

STMDB sp!, {r0,r1,r3-r5}

STMFD sp!, {r0,r1,r3-r5}

r5 r4 r3

0x400 0x418

STMIA sp!, {r0,r1,r3-r5}

STMEA sp!, {r0,r1,r3-r5}

r5 r4 r3 r1 r0 SP

Old SP Old SP

(110)

3 - Saltos

© Prof. Dr. Douglas Renaux

(111)

3 - Saltos

B loopA ; salta para o label LoopA

(unica instrução condicional que não precisa IT) BL funC ; chamada de rotina, armazena endereço

de retorno em LR

BX LR ; retorno de chamada de rotina BLX R0 ; Chamada de rotina

BEQ labelD ; Salto condicional

(112)

Saltos

CBZ Rn, label – Testa Rn e salta se 0

CBNZ Rn, label – Testa Rn e salta se não-zero Restrições:

Só saltos para frente até 130 bytes

Não pode ser usado em bloco IT

Não modifica flags

Só R0 a R7

© Prof. Dr. Douglas Renaux

(113)

Bloco IT

Bloco consiste de 1 a 4 instruções condicionais ITxyz cond

x,y,z são T ou E (Then ou Else) ITTE EQ

ADDEQ SUBEQ

(114)

Bloco IT

A instrução de salto condicional Bcc label

(onde cc é uma das condições) não precisa estar num bloco IT As instruções:

IT, CBZ, CBNZ, CPSIE, CPSID NÃO podem estar em bloco IT

Uma instrução que altera PC, só pode estar num bloco IT se for a última.

© Prof. Dr. Douglas Renaux

(115)

Condições

No Cortex-M3 as outras instruções podem ir em blocos IT

(116)

Saltos (limites)

© Prof. Dr. Douglas Renaux

(117)

Exercício

1)

(118)

Exercício – continuação MDC

2) Como transformar em subrotina ?

3) Como chamar a partir de outra rotina em assembly ?

4) Como chamar a partir de uma função em C ?

© Prof. Dr. Douglas Renaux

(119)

Exercício

Qual a maneira mais eficiente de implementar um loop com número fixo de execuções,

como por exemplo:

for (int i=0; i<10; i++) {

// dentro do loop não se usa i a = b<<3 + a;

(120)

Módulo 5

Registradores Especiais Modos de Operação Instruções Especiais

© Prof. Dr. Douglas Renaux

(121)
(122)

Pilha (Stack)

pode-se trabalhar apenas com MSP

o SP corrente sempre é acessado como R13 ou SP O SP está sempre com alinhamento de Word

(i.e. endereços múltiplos de 4) Instruções:

PUSH - empilha

POP - desempilha

Full descending

© Prof. Dr. Douglas Renaux

(123)

Link Register

R14 ou LR

Armazena o endereço de retorno de uma subrotina Deve ser salvo antes de chamar outra subrotina

(124)

Contador de Programa

PC ou R15

instrução sendo executada + 4

endereço de instrução é sempre par (bit0 = 0) bit0 do PC é usado para indicar modo Thumb

após reset e em algumas instruções de salto: BX e BLX

© Prof. Dr. Douglas Renaux

(125)

Modo

Nível de Privilégio

Thread Handler

Não-Privilegiado Privilegiado Main (Principal)

(126)

© Prof. Dr. Douglas Renaux

(127)
(128)

© Prof. Dr. Douglas Renaux

(129)

xPSR

(130)

© Prof. Dr. Douglas Renaux

(131)

IPSR

(132)

CONTROL

CONTROL

instruções MSR e MRS

após MSR usar ISB para garantir que o novo stack será usado

© Prof. Dr. Douglas Renaux

© Prof. Dr. Douglas Renaux

(133)

PRIMASK

(134)

Modo Privilegiado

No modo Privilegiado o código tem acesso a TODOS os recursos.

No modo NÃO-Privilegiado o código NÃO tem acesso à:

instruções como CPS que permitiriam alterar FAULTMASK e PRIMASK

maioria dos registradores do System Control

© Prof. Dr. Douglas Renaux

(135)

4 - Outros

(136)

BKPT

BKPT #imm

#imm é um valor de 0 a 255

entrada no estado de depuração

esta instrução é utilizada por debugers instrução não deve ser usada por

programadores

© Prof. Dr. Douglas Renaux

(137)

CPS

Change Processor State

altera o PRIMASK

Formatos:

CPSID i // desabilita IRQs

CPSIE i // habilita IRQs

(138)

DMB —

The Data Memory Barrier (DMB)

completa transações pendentes antes de realizar outra transação

.

DSB — The Data Synchronization Barrier (DSB) completa transações pendentes antes de

executar a próxima instrução.

ISB — The Instruction Synchronization Barrier (ISB) garante que o efeito das transações efetuadas seja percebido antes da próxima instrução.

© Prof. Dr. Douglas Renaux

(139)

Exemplos de Uso

Tabela de vetores: usar DMB entre uma

alteração no vetor e a habilitação da IRQ correspondente.

Alteração no código: usar uma ISB logo após a instrução que altera o código.

Alteração no mapa de memória: usar um DSB imediatamente após a instrução que altera o

(140)

MSR, MRS

MSR – Move to Special Reg from Register MSR special_reg, Rn

MRS – Move to Register from Special Reg MRS Rd, special_reg

Special Reg:

APSR, IPSR, EPSR, IEPSR, IAPSR,

EAPSR, PSR, MSP, PSP, PRIMASK, or CONTROL

Rd, Rn – não podem ser SP ou PC

© Prof. Dr. Douglas Renaux

(141)

NOP

Não realiza nenhuma operação

Pode ser elimininada no pipeline (i.e. pode ser executado em tempo 0)

Uso: alinhamento de código em fronteira de word ou double-word

(142)

SEV

Send Event Formato:

SEV

Informa da ocorrência de um evento

Seria usado com WFE que não existe no LPC11xx

© Prof. Dr. Douglas Renaux

(143)

SVC

Chamada ao Supervisor (S.O.) Formato

SVC #imm // 0 .. 255 Gera uma exceção do tipo SVC

A ISR pode ler o valor de #imm para identificar o serviço solicitado

(144)

WFI

Wait for Interrupt Formato:

WFI

entra em modo de baixo consumo até que:

exceção

IRQ, mesmo que mascarada por PRIMASK

solicitação de DEBUG

© Prof. Dr. Douglas Renaux

(145)

Módulo 6

Acesso à Memória

(146)

© Prof. Dr. Douglas Renaux

© Prof. Dr. Douglas Renaux

(147)

Memória – Processadores 13xx

(148)

Módulo 7

Exceções/Interrupções

© Prof. Dr. Douglas Renaux

(149)

Interrupções são uma forma eficiente de se responder às demandas solicitadas pelos periféricos.

Alternativa é polling:

desperdício de consultas

atendimento mais demorado

Interrupções

(150)

Estrutura típica de Interrupção

217

Microprocessor Core

(e.g Cortex-M)

Interrupt Controller

Peripheral 1

P2 P3 P4

Pn

IRQ

(151)

Interrupções

Princípio de funcionamento

durante a execução de um programa, um sinal de hardware (IRQ = Interrupt Request) é ativado.

um controlador de interrupções percebe o sinal, verifica se está habilitado (desmascarado) e sua prioridade e então informa o processador da existência de um pedido de interrupção pendente

o processador verifica se as interrupções estão habilitadas e finaliza a execução da instrução corrente

SALVAMENTO DE CONTEXTO (registradores, palavra de status)

[em alguns casos] - muda o ponteiro de pilha para IRQ_STACK

busca no vetor de interrupção: identifica quem é a rotina responsável pelo atendimento daquela interrupção específica

execução da ISR (parte do salvamento de contexto pode ser feito aqui)

(152)

Interrupções

É um processo complexo

Qualquer falha em algum passo causa uma parada total do sistema

Depuração difícil, principalmente porque é um evento assíncrono

Um programador só é realmente um programador de sistemas embarcados quando sabe trabalhar bem com o atendimento de interrupções.

Quando se usa RTOS, em geral, passa-se ao RTOS a responsabilidade de tratar as IRQs.

219

(153)

Controlador de Interrupção

Em geral são vetorizados:

detectam automaticamente qual dos pedidos de interrupção ativo é o mais prioritário, consultam a tabela de endereços de ISR (vetor de

interrupção) e entregam ao processador o endereço da ISR.

portanto, a CPU só precisa ler o endereço da ISR e executar a partir dali

(154)

Desabilitando o Atendimento de IRQs

Também chamado de mascaramento de IRQs No controlador de interrupções é possível

mascarar / desmascarar IRQs específicas:

p.ex. mascarar apenas a IRQ da UART2

No processador é possível

mascarar / desmascarar o atendimento de interrupções por completo.

221

(155)

Teste e Depuração

Teste e Depuração de ISRs é uma atividade complexa.

Quando finalmente se consegue atender à primeira interrupção:

o teste NÃO acaba aqui !!!

atender a segunda IRQ do mesmo periférico também requer teste e depuração

p.ex. esquecer de enviar um EOI impede o atendimento do pedido seguinte.

Importante testar situações de stress:

(156)

Como registrar uma ISR num Cortex-M3

Basta colocar o nome da ISR na tabela de

vetores de exceção localizada no endereço 0 da memória.

233

(157)

Como registrar uma ISR num Cortex-M3

Cortex-M:

o vetor de interrupções fica na memória do processador a partir do endereço 0.

basta armazenar a tabela com os endereços das ISRs nesta região de memória.

(158)

Interrupções - Conceitos

Latência:

tempo entre o pedido de interrupção (ativação do sinal IRQ) até o início da execução da ISR:

HW: detecção, processamento no Cont. IRQ

tempo de finalização da instrução corrente

tempo que as IRQs estão desabilitadas

outras ISR em execução (aninhamento x prioridade)

no device driver

no RTOS

na aplicação

Tempo de Resposta (pior caso):

Somar:

Pior caso da Latência

Pior caso do tempo de execução da ISR.

235

(159)

Exceções

Qualquer solicitação para mudança do fluxo normal de um programa.

interrupção

detecção de falha / erro (p.ex. acesso desalinhado)

(160)

Exceções

Estados

Inativo (inactive) = não ativo nem pendente

Pendente (pending) = aguardando atendimento (p.ex. pedido de interrupção – irq – de

periférico)

Ativo (active) = em atendimento

pode haver mais de uma interrupção em

atendimento (interrupções aninhadas – nested)

Ativo e Pendente = interrupção em atendimento e outro pedido da mesma fonte está pendente

© Prof. Dr. Douglas Renaux

(161)

Tipos de Exceção

Reset – reinício da execução (modo Thread) (-3) NMI - prioridade -2

HardFault – prioridade -1

falha genérica: representa todas as classes de falhas que não foram tratadas

SVC – causada pela instrução SVC (Supervisor Call)

PendSV – solicitação de serviço (p.ex.

chaveamento de contexto)

(162)

Configurável: prioridade de 0 (default) a 3

Prioridades: valor menor significa maior prioridade

PRIMASK: pode mascarar as IRQ com prioridade configurável

© Prof. Dr. Douglas Renaux

(163)
(164)

Atendimento

Um atendimento de exceção ocorre quando:

existe uma exceção pendente com prioridade suficiente (*); e

o processador está em modo Thread; ou

a exceção pendente é de prioridade maior que a exceção sendo atendida (preempção)

(*) prioridade suficiente significa prioridade maior do que o limite estabelecido no PRIMASK

© Prof. Dr. Douglas Renaux

(165)

Atendimento (2)

Stacking – salva o estado

O SP está alinhado em double-word

se necessário pula um word antes de começar o empilhamento

(166)

Atendimento (3)

O processador lê do vector_table o endereço do handler;

LR := EXC_RETURN (ver próximo slide)

após o stacking, a execução se dá a partir do handler, a exceção passa ao status de ativa Se durante o stacking ocorreu outra exceção

de maior prioridade então esta é atendida (late-arriving exception)

© Prof. Dr. Douglas Renaux© Prof. Dr. Douglas Renaux

(167)

Atendimento (4)

(168)

Retorno de Exceção

Ocorre quando uma instrução escreve no PC um dos valores de EXC_RETURN

As instruções que podem ser usadas para retorno de exceção são POP e BX

© Prof. Dr. Douglas Renaux

(169)

Tratamento de Faltas

Todas as faltas causam HardFault

Trava se a falta ocorre no handler da NMI ou HardFault Faltas:

SVC

BKPT fora de depuração (i.e. não conectado ao IAR)

erro de acesso a memória (erro de barramento) em LD ou ST

tentativa de execução em área XN

tentativa de execução causando erro de barramento

erro de barramento em acesso ao vector_table

(170)

Hard Faults

© Prof. Dr. Douglas Renaux

(171)

Módulo 8

ATPCS

(172)

ATPCS

ARM-Thumb Procedure Call Std Passagem de parâmetros:

- primeiros parâmetros em R0 .. R3 demais parâmetros pela pilha

- retorno: R0 ou R1:R0

© Prof. Dr. Douglas Renaux

(173)

ATPCS – Tipos de Dados

Tipo Tamanho Tipo Tamanho

char 8 bits [ ] 32 bits

short 16 bits struct ptr = 32 bits

int 32 bits float 32 bits

unsigned 32 bits double 64 bits

long 32 bits enum = int

long long 64 bits

* 32 bits

(174)

ATPCS

Quem tem a obrigação de salvar o valor dos registradores caso interesse manter este valor após a chamada de uma função ?

- rotina chamada: deve salvar R4 – R11 antes de alterar

- R0 – R3,R12 podem ser livremente utilizados pela rotina chamada

© Prof. Dr. Douglas Renaux

(175)

Código de Entrada e Saída de Função

PUSH {R4-R7,LR}

POP {R4-R7,LR}

MOV PC,LR

PUSH {R4-R7,LR}

(176)

Exercício – continuação MDC

2) Como transformar em subrotina ?

3) Como chamar a partir de outra rotina em assembly ?

4) Como chamar a partir de uma função em C ?

© Prof. Dr. Douglas Renaux

(177)

Exercício de Alinhamento

C:

struct s { char a;

short b;

char c;

int d;

(178)

© Prof. Dr. Douglas Renaux

Alinhamento Assembly (n) 0 1 2 3

C: #pragma pack(n) 1 2 4 8

bytes bits

1 8 bool

char X 1 X 1 X 1 X 1

2 16 short X 1 X 2 X 2 X 2

4 32

int

unsigned long

* float

X 1 X 2 X 4 X 4

8 64 long long

double X 1 X 2 X 4 X 8

x1 - objeto armazenado em qualquer endereço

x2 - objeto armazenado em endereços pares

x4 - objeto armazenado em endereços múltiplos de 4

x8 - objeto armazenado em endereço múltiplo de 8

(179)

Prova – questão 2

Janela de registradores Janela de memória

Janela de watch / variáveis

Janela de stack ? / janela de memória na região stack

(180)

Prova – questão 3

Formas:

1. LR tem um código especial começando por 0xFFFFFFF_

2. Modo do processador:

handler (ver IPSR)

main stack (CONTROL) privilegiado (CONTROL)

© Prof. Dr. Douglas Renaux

(181)

Prova – Questão 4

DRAM – RAM dinâmica – requer refresh periódico 1 bit = 1 cap+1 tr

acesso: end_linha+ RAS + precarga bit_lines end_coluna+CAS

RD/WR

leitura é destrutiva: reescrever todos os capacitores da linha após leitura

SDRAM = DRAM com sinal de clock acesso = clk + RAS + end linha

Referências

Outline

Documentos relacionados

Um robô deve sempre proteger sua própria existência, somente enquanto tal proteção não contrariar a Primeira ou a Segunda

(FGV- 2015 – XVI) A respeito dos legitimados, assinale a opção que indica as pessoas que podem requerer patente de invenção ou modelo de utilidade, de acordo com a Lei nº

Considerando que o texto acima tenha caráter unicamente motivador, redija um texto dissertativo que aborde, necessariamente, os seguintes aspectos:.. --relação entre eficiência

• De que forma o compilador organiza os campos da estrutura na memória a partir do endereço inicial da estrutura. • Qual estrutura está melhor

- Ponteiro para a struct com configuração da tarefa - Ponteiro para argumento da função job1. osThreadDef(job1, osPriorityAboveNormal,

No atual cenário político, a situação não é diferente, inúmeros representes públicos utilizam-se do poder e da influência que exercem sobre a sociedade para

Material sobre software embarcado preparado por Paulo Stadzisz e Douglas Renaux para o ERI/SBC

O nome geográfico que não constitua indicação de procedência ou denominação de origem poderá servir de elemento característico de marca para produto ou serviço, desde