EL68E Sistemas Embarcados
Prof. Douglas RENAUX
Arquitetura ARM
Prof. Douglas RENAUX
© Prof. Dr. Douglas Renaux
Acorn
BBC Micro
© 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
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
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
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
Pipeline
ARM Cortex
© Prof. Dr. Douglas Renaux
ARM Cortex
ARM Cortex
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
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
© 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
Cortex-M7 (lançamento 24-Set-2014)
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
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
Baixo Custo x 8 bits
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
ARMv8-A (64 bits)
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
Fev 29, 2016 – Raspberry Pi 3
© Prof. Dr. Douglas Renaux
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
Exynos 5250 com Cortex-A15 dual core
© Prof. Dr. Douglas Renaux
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
NVIDEA:
192 GPU 4x A15
ou 2x A57 Tegra K1
Tegra X1 - 2015
© Prof. Dr. Douglas Renaux
NVidia - 2016
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
RISC x CISC
© Prof. Dr. Douglas Renaux
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
Computação Quântica - 5-Out-2015
© Prof. Dr. Douglas Renaux
Primeira Geração
Segunda Geração
© Prof. Dr. Douglas Renaux
PDP-1
Terceira Geração
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
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
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
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
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 ?
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
Pipeline
© Prof. Dr. Douglas Renaux
Arquitetura ARM
Prof. Douglas RENAUX
Módulo 3
A arquitetura Cortex-M3
© Prof. Dr. Douglas Renaux
Cortex-M3 internal structure
Cortex-M3 internal structure
© Prof. Dr. Douglas Renaux
Arquitetura Cortex-M3
Visão geral da Arquitetura:
Registradores
Conjunto de instruções
Acesso à Memória
Interrupções
© Prof. Dr. Douglas Renaux
Instruções do Cortex-M0
© Prof. Dr. Douglas Renaux
Módulo 4
Conjunto de Instruções Thumb-2
© Prof. Dr. Douglas Renaux
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
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
infocenter.arm.com
Developer Guides and Articles Software Development
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
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
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
Deslocamento (LSLS)
• n >= 32 todos os bits são zerados
n >= 33 todos os bits e o carry são zerados
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
Deslocamento (ASRS)
n >= 32 todos os bits e o carry recebem cópia do bit 31 variantes: só ASRS (altera carry)
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
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
Operando 2
© Prof. Dr. Douglas Renaux
Operando 2
Registrador R4
Registrador e deslocamento R4, LSL #4
R5, ASR #1
Constante:
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2 - Acesso à Memória
© Prof. Dr. Douglas Renaux
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
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
LDR
Lê dado da memória Formatos:
LDR Rt,[Rn]
LDR Rt,[Rn,#off]
LDRB Rt,[Rn,#off]
LDRH Rt,[Rn,#off]
Restrições:
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
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
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
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
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
STR
Escreve dado da memória Formatos:
STR
STRB
STRH
mesmas regras que para LDR
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
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
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
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
3 - Saltos
© Prof. Dr. Douglas Renaux
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
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
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
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
Condições
No Cortex-M3 as outras instruções podem ir em blocos IT
Saltos (limites)
© Prof. Dr. Douglas Renaux
Exercício
1)
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
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;
Módulo 5
Registradores Especiais Modos de Operação Instruções Especiais
© Prof. Dr. Douglas Renaux
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
Link Register
R14 ou LR
Armazena o endereço de retorno de uma subrotina Deve ser salvo antes de chamar outra subrotina
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
Modo
Nível de Privilégio
Thread Handler
Não-Privilegiado Privilegiado Main (Principal)
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
xPSR
© Prof. Dr. Douglas Renaux
IPSR
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
PRIMASK
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
4 - Outros
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
CPS
Change Processor State
altera o PRIMASK
Formatos:
CPSID i // desabilita IRQs
CPSIE i // habilita IRQs
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
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
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
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
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
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
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
Módulo 6
Acesso à Memória
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
Memória – Processadores 13xx
Módulo 7
Exceções/Interrupções
© Prof. Dr. Douglas Renaux
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
Estrutura típica de Interrupção
217
Microprocessor Core
(e.g Cortex-M)
Interrupt Controller
Peripheral 1
P2 P3 P4
Pn
IRQ
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)
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
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
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
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:
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
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.
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
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)
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
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)
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
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
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
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
Atendimento (4)
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
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
Hard Faults
© Prof. Dr. Douglas Renaux
Módulo 8
ATPCS
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
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
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
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}
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
Exercício de Alinhamento
C:
struct s { char a;
short b;
char c;
int d;
© 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
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
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
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