Upload
lenhi
View
220
Download
0
Embed Size (px)
Citation preview
EL68ESistemas Embarcados
Prof. Douglas RENAUX
© Prof. Dr. Douglas Renaux
ARM – HistóricoAno 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-1998Desenvolvimento 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
Acorn
© Prof. Dr. Douglas Renaux
BBC Micro1981
© Prof. Dr. Douglas Renaux
Developer Acorn ComputersType 8-bit home computerRelease date 1 December 1981Retail availability 12 yearsIntroductory price £235 Model A, £335 Model B (in 1981)
Discontinued 1994Units sold over 1.5 millionMedia Cassette tape, floppy disc (optional), hard disc
(rare), Laserdisc (BBC Domesday Project)
Operating system Acorn MOSPower 50 WCPU 2 MHz MOS Technology 6502/6512
Storage capacity 100–800 kB (DFS)160–1280 kB (ADFS floppy discs)
20 MB (ADFS hard disc)
Memory 16–32 kB (Model A/B)64–128 kB (Model B+)128 kB (Master)
Plus 32–128 kB ROM, expandable to 272 kBDisplay PAL/NTSC, UHF/composite/TTL RGB
Graphics 640×256, 8 colours (various framebuffermodes)
78×75, 8 colours (Teletext)
Sound Texas Instruments SN76489, 4 channels, monoTMS5220 speech synthesiser with phrase ROM(optional)
Input Keyboard, twin analogue joysticks with fire buttons,lightpen
Connectivity Printer parallel, RS-423 serial, userparallel,Econet (optional), 1 MHz bus, Tube secondprocessor interface
© Prof. Dr. Douglas Renaux
Acorn Archimedes - 1987
ARM FamilyARMArch.
ARM Core FeatureTypical MIPS @
MHz
ARM1 ARMv1 ARM1 First implementation
ARM2
ARMv2 ARM2ARMv2 added the MUL (multiply)instruction
4 MIPS @ 8 MHz0.33 DMIPS/MHz
ARMv2a ARM250Integrated MEMC (MMU), Graphicsand IO processor. ARMv2a added theSWP and SWPB (swap) instructions.
7 MIPS @ 12 MHz
ARM3 ARMv2a ARM3First integrated memory cache.4 KB unified
12 MIPS @25 MHz0.50 DMIPS/MHz
ARM6 ARMv3
ARM60ARMv3 first to support 32-bit memoryaddress space (previously 26-bit)
10 MIPS @12 MHz
ARM600As ARM60, cache and coprocessor bus(for FPA10 floating-point unit).
28 MIPS @33 MHz
ARM610 As ARM60, cache, no coprocessor bus.17 MIPS @20 MHz0.65 DMIPS/MHz
© Prof. Dr. Douglas Renaux
ARM7 ARMv3
ARM700 40 MHz
ARM710 As ARM700, no coprocessor bus. 40 MHz
ARM710a As ARM71040 MHz0.68 DMIPS/MHz
ARM7TDMI ARMv4T
ARM7TDMI(-S) 3-stage pipeline, Thumb15 MIPS @ 16.8 MHz63 DMIPS @ 70 MHz
ARM710TAs ARM7TDMI, cache 8 KB unified,MMU
36 MIPS @ 40 MHz
ARM720TAs ARM7TDMI, cache 8 KB unified,MMU
60 MIPS @ 59.8 MHz
ARM740T As ARM7TDMI, MPU
ARM7EJ ARMv5TEJ ARM7EJ-S5-stage pipeline, Thumb, Jazelle DBX,Enhanced DSP instructions
© Prof. Dr. Douglas Renaux
ARM7Arquitetura de 32-bits com maior utilização no mundo;Pipeline de 3 estágios;Até 130 DMIPS em 133 MHz (processo 0.13um);Densidade de código semelhante à densidade de processadores de 16
bits;Extenso suporte de ferramentas e RTOS;Código compatível com ARM9, ARM9E, ARM10 e Xscale;
© Prof. Dr. Douglas Renaux
CacheSize(Inst/Data)
TightlyCoupledMemory
MemoryMgt
BusInterface
Thumb DSP Jazelle
ARM720T 8k unified - MMU AHB Yes No No
ARM7EJ-S - - - Yes Yes Yes Yes
ARM7TDMI - - - Yes Yes No No
ARM7TDMI-S - - - Yes Yes No NoFonte: ARM
Pipeline
© Prof. Dr. Douglas Renaux
Fonte: ARM
© Prof. Dr. Douglas Renaux
Fonte: ARM
Versões ISA após ARM7TDMI
© Prof. Dr. Douglas Renaux
ARM Cortex
© Prof. Dr. Douglas Renaux
ARM Cortex
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
ARM Cortex
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
ARM Cortex
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
Thumb-2Densidade 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
Cortex-M
ARM Cortex-M0 ARM Cortex-M3 ARM Cortex-M4
"8/16-bit"applications
"16/32-bit"applications
"32-bit/DSC"applications
Low cost andsimplicity
Performanceefficiency
Efficient digitalsignal control
Cortex-M1 – concebido para uso em FPGA© Prof. Dr. Douglas Renaux
• http://www.embedded-systems.com/underthehood/210101486© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
Baixo Custo x 8 bits
© Prof. Dr. Douglas Renaux
ARMv8-A (64 bits)
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
Exynos 5250 com Cortex-A15 dual core
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
64-bits - AMDHierofalcon 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 PCIExpress 3.0 on board, which means theyshould be a good fit for data centres.
21-Out-2013
© Prof. Dr. Douglas Renaux
NVIDEA:192 GPU4x A15ou 2x A57
Tegra K1esperado
para 2014
© Prof. Dr. Douglas Renaux
Qualcomm's Growing 64-bit SoC LineupMarketing 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 A531.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, LTECategory 4, DC-HSPA+, DS-DA
9x25 core, LTECategory 4, DC-HSPA+, DS-DA
9x25 core, LTECategory 4, DC-HSPA+, DS-DA
Integrated WiFi Qualcomm VIVE802.11ac
Qualcomm VIVE802.11ac
Qualcomm VIVE802.11ac
eMMC Interface 4.5 4.5 4.5
© Prof. Dr. Douglas Renaux
Cortex-M7 (lançamento 24-Set-2014)
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
RISC x CISC
© Prof. Dr. Douglas Renaux
Histórico ComputadoresComputador =
um dispositivo que computa(calcula, processa dados)
© Prof. Dr. Douglas Renaux
Gerações de ComputadoresGeração Descrição0 Máquinas Mecânicas e Eletromecânicas
solução de equações1 40’s – Válvula
ENIAC, Zuse2 50’s – Transistores
Universidade de ManchesterIBM 350
3 60’s – Circuitos integrados SSI (portas lógicas)Apolo Guidance Computer (embarcado)IBM System/360Digital VAX
4 70’s – Microprocessador
5 20?? – ótico, orgânico, computação quântica ???IA © Prof. Dr. Douglas Renaux
Primeira Geração
© Prof. Dr. Douglas Renaux
Colossus - UKENIAC - USA
Segunda Geração
© Prof. Dr. Douglas Renaux
PDP-1
Terceira Geração
© Prof. Dr. Douglas RenauxVAX 11/780
De que forma os projetistas decomputadores (arquitetos) utilizaram oaumento significativo de transistoresdisponibilizados pela evolução rápida datecnologia de fabricação de circuitosintegrados ?
© Prof. Dr. Douglas Renaux
CISCComplex Instruction Set Computer
o conjunto de instruções inicialmente simples avanços tecnológicos (transistores, CIs)
permitiram a manufatura de computadores commais transistores a menor custo
projetistas optaram por conjuntos de instruçõescada vez mais complexos
© Prof. Dr. Douglas Renaux
CISCComo tornar as instruções mais complexas:
aumentar o número de modos deendereçamento
endereçamento indireto em memória [[R]] instruções com elevado grau semântico Exemplos do 68000
SBCD: Subtract Decimal with ExtendSWAP: Swap register WordsCMP2: Compare Register against Upper and Lower
Bounds
© Prof. Dr. Douglas Renaux
Aspectos Econômicos naProdução de Circuitos Integrados
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
Processor Transistorcount
Date ofintroductio
n
Manufacturer Process Area
Intel 4004 2,300 1971 Intel 10 µm 12 mm²
Intel 8008 3,500 1972 Intel 10 µm 14 mm²
Motorola68000 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 578977[9] 1994 ARM 0.5 µm 68.51 mm²
ARMCortex-A9
26,000,000[
12] 2007 ARM 65 nm
AMDK10 quad-core 2M L3
463,000,000[11] 2007 AMD 65 nm 283 mm²
Quad-Core +GPU Core i7 1,400,000,000 2012 Intel 22 nm 160 mm²
Xbox OneMain SoC 5,000,000,000 2013 Microsoft/AMD 28 nm 363 mm²
PerguntasQual é, 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 melhoraproveitamento possível ?
Quais são as conseqüências de um conjuntode instruções complexo ?
© Prof. Dr. Douglas Renaux
RISC x CISCRISC 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 suamaneira
Instruções requerem o mesmonúmero de clocks para executar
Grande variação no número declocks por instrução
Possibilita o uso de pipeline Extremamente difícil / impossível ouso de pipeline
© Prof. Dr. Douglas Renaux
Pipeline
© Prof. Dr. Douglas Renaux
Comparing 16-bit multiply operations across processor architectures8-bit example 16-bit example ARM Cortex-MMOV A, XL ; 2 bytesMOV B, YL ; 3 bytesMUL AB; 1 byteMOV R0, A; 1 byteMOV R1, B; 3 bytesMOV A, XL ; 2 bytesMOV B, YH ; 3 bytesMUL AB; 1 byteADD A, R1; 1 byteMOV R1, A; 1 byteMOV A, B ; 2 bytesADDC A, #0 ; 2 bytesMOV R2, A; 1 byteMOV A, XH ; 2 bytesMOV B, YL ; 3 bytesMUL AB; 1 byteADD A, R1; 1 byteMOV R1, A; 1 byteMOV A, B ; 2 bytesADDC A, R2 ; 1 bytesMOV R2, A; 1 byteMOV A, XH ; 2 bytesMOV B, YH ; 3 bytesMUL AB; 1 byteADD A, R2; 1 byteMOV R2, A; 1 byteMOV A, B ; 2 bytesADDC A, #0 ; 2 bytesMOV R3, A; 1 byte
MOV R4,&0130hMOV R5,&0138hMOV SumLo,R6MOV SumHi,R7(Operands are moved to andfrom a memory mappedhardware multiply unit)
MULS r0,r1,r0
N.B. The Cortex-M multiply in fact performs a 32-bit multiply, here we assume r0 and r1 contain 16-bit data.
© Prof. Dr. Douglas Renaux
Diferenciais da arquitetura ARMCortex-M3
© Prof. Dr. Douglas Renaux
Instruções CondicionaisA maioria das instruções ARM são
condicionais só produzem efeito se os flags estiverem
setados adequadamente BEQ – Branch on Equal
executa um salto caso o bit Z esteja setado As instruções condicionais precisam estar em
um “bloco IT”exceto a instrução B (BRANCH = Salto)
ex: ADDEQ –executa uma soma caso o bit Z esteja setado
© Prof. Dr. Douglas Renaux
PipelineNa arquitetura Cortex-M, as instruções são
executadas de acordo com uma dasseqüências abaixo:
1. BUSCADECODIFICAÇÃOEXECUÇÃO (OPERAÇÃO LÓG./ARIT.)
2. BUSCADECODIFICAÇÃOEXECUÇÃO (CÁLCULO ENDEREÇO)ACESSO À MEMÓRIA DE DADOS
© Prof. Dr. Douglas Renaux
PipelineNo Cortex-M3 o pipeline tem três estágios:
1. BUSCA – leitura da instrução da memória2. DECODIFICAÇÃO – interpretação do código
da instrução e geração dos sinais de controle3. EXECUÇÃO – operação lógica/aritmética ou
acesso a memória de dados
* o estágio de EXECUÇÃO pode ocupar mais deum ciclo de clock
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
Módulo 3
A arquitetura Cortex-M3
© Prof. Dr. Douglas Renaux
Cortex-M3 internal structure
© Prof. Dr. Douglas Renaux
Instruções do Cortex-M0
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
Arquitetura Cortex-M3Visão geral da Arquitetura:
Registradores Conjunto de instruções Acesso à Memória Interrupções
© Prof. Dr. Douglas Renaux
Módulo 4
Conjunto de Instruções Thumb-2
© Prof. Dr. Douglas Renaux
Arquitetura Cortex-M3Cortex-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
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
infocenter.arm.com
Developer Guides and Articles
Software Development
© Prof. Dr. Douglas Renaux
Restrições de USO: PC e SPMuitas instruções tem restrição de uso do PC e
do SP como operando ou como registradordestino. Ver restrições de uso dasinstruções.
© Prof. Dr. Douglas Renaux
Restrições
© Prof. Dr. Douglas Renaux
Formato das Instruções Log/Arit Três operandos explícitos (Rd,Op1,Op2)
ADD R0,R1,R2R0 := R1 + R2
Dois operandos e um implícito (Rd,Op2)ADDS R0,R5R0 := R0 + R5
Dois operandos (Op1,Op2)CMP R8,R9
© Prof. Dr. Douglas Renaux
1 - Lógicas e AritméticasInstruçã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
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 zeradosn >= 33 todos os bits e o carry são zerados
• variantes: só LSLS (altera carry)LSLS {Rd},Rm,RsLSLS {Rd},Rm,#imm
• efeito de LSLS Rm, #n é Rm * 2n
© Prof. Dr. Douglas Renaux
Deslocamento (LSRS)
• n >= 32 todos os bits são zeradosn >= 33 todos os bits e o carry são zerados
• variantes: só LSRS (altera carry)LSRS {Rd},Rm,RsLSRS {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 31variantes: só ASRS (altera carry)
ASRS {Rd},Rm,RsASRS {Rd},Rm,#imm
efeito de ASRS Rm, #n é Rm / 2n
© Prof. Dr. Douglas Renaux
Rotação (RORS) / RRXn >= 32 é o mesmo que n-32variantes: só RORS (altera carry)
RORS {Rd},Rm,RsRORS {Rd},Rm,#imm
efeito de LSRS Rm, #n é Rm / 2n (para Rm semsinal)
• 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
DestinationCF 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 aroundfrom LSB to MSB
Destination
RRX: Rotate Right Extended
Single bit rotate with wrap aroundfrom CF to MSB
CF
© Prof. Dr. Douglas Renaux
Operando 2 Registrador
R4 Registrador e deslocamento
R4, LSL #4R5, ASR #1
Constante:#4#0xAABB#-2
© Prof. Dr. Douglas Renaux
Deslocamentos no Operando 2Opçõ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 2Não é possível definir qualquer valor de
constante no Operando 2Apenas alguns valores podem ser formados:
Valores de 8 bits deslocados Valores do tipo 0x00XY00XY Valores do tipo 0xXY00XY00 Valores do tipo 0xXYXYXYXY
© Prof. Dr. Douglas Renaux
Exercícios
1-init: MOV r1,#3
MOV r2,#5MOVS r3,#-6ADD r0,r2,r3ADDS r0,r2,r3ADDS r0,#9CMP r0,#8SUBS r0,#10SUBS r0,#256SUBS r0,#3000ASR r0,#5
2-escreva um programa em assembly para descobrir
qual o valor corrente de PC, ou seja, qual o valorde 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éricosinterpretação dos flagscorrigir e explicar erros de montagem
MULTIPLICAÇÃO-1MULS Rd,Rn,Rm
Rd := Rn x Rm Rm deve ser o mesmo registrador que Rd formato preferido: MULS Rd,Rn
R0 – R732-bits x 32-bits -> 32-bits em 1 único ciclo de clockafeta N e Z
© Prof. Dr. Douglas Renaux
MULTIPLICAÇÃO-2MUL Rd,Rn,Rm
Rd := Rn x Rm formato alternativo: MUL Rd,Rn
Registradores exceto SP, PC32-bits x 32-bits -> 32-bits em 1 único ciclo de clock
© Prof. Dr. Douglas Renaux
MULTIPLICAÇÃO-3MLA 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-4MLS 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-5UMULL 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 RdHi:RdLo := RdHi:RdLo + Rn x Rm
32-bits x 32-bits -> 64-bits em 3 a 5 ciclos de clock© Prof. Dr. Douglas Renaux
DIVISÃOUDIV 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 RiMOVT Ri,#16-bits
carrega os 16 bits mais significativos de Ri
Com 2 instruções pode-se carregar qualquerconstante de 32 bits em um registrador !
© Prof. Dr. Douglas Renaux
Exercícios1. Multiplicar o valor inteiro (32-bits) que está em R3
pela constant 9:a) Usando instrução de multiplicaçãob) 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 deconstantes:
1. R0 := 02. R1 := 2003. R2 := 0x12344. R3 := 0xFFFFFF005. R4 := 0xABCDEF00
© Prof. Dr. Douglas Renaux
Exercícios4. Alterar os bits 5 a 9 do registrador R10 para
11001a) Usando AND/OR/…b) Usando instruções de bit-field
(após os próximos slides)
sua solução deve funcionar para qualquer que sejao valor atual de R10.
© Prof. Dr. Douglas Renaux
Instruções que Operam em BitsBFC Rd, #lsb, #w#lsb e #w estão na faixa de 0 a 31 e 1 a 32Bit-field clear: limpa #w bits a partir de #lsbBFC R0, #4, #8 R0 = 0xFFFF F00F
BFI Rd, Rn, #lsb, #wBit-field Insert: copia #w bits de Rn:0 para Rd:#lsbBFI R1, R2, #8, #0xC R1 = 0x FFFC DDFF
© Prof. Dr. Douglas Renaux
Instruções que Operam em BitsSBFX Rd, Rn, #lsb, #w#lsb e #w estão na faixa de 0 a 31 e 1 a 32Extrai campo e faz extensão de sinal:
copia #w bits a partir de #lsb para o bit0 de Rd eestende
SBFX R0, R1, #4, #8 R0 = 0xFFFF FFBC
UBFX Rd, Rn, #lsb, #wIdem, estendendo com zeros
© Prof. Dr. Douglas Renaux
ExtendSXTB 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
ADRADR Rd, labelcalcula o endereço do label na forma de um
offset para o PCCarrega o Rd com o endereço do label
Faixa permitida: PC +/- 4095
Obs: no IAR o label deve estar na região dedados para que o assembler aceite o ADR
© Prof. Dr. Douglas Renaux
2 - Acesso à Memória
© Prof. Dr. Douglas Renaux
Acessos Alinhadosum acesso é 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 seralinhados ou causa um HardFault
No Cortex-M3 os acessos podem serdesalinhados
© Prof. Dr. Douglas Renaux
LDRLê dado da memóriaFormatos:
LDR Rt,[Rn] LDR Rt,[Rn,#off] LDRB Rt,[Rn,#off] LDRH Rt,[Rn,#off]
Restrições: só R0 .. R7 e SP #off: 0..1020 (SP), 0..124 (R0-R7), 0..62 (LDRH)
0..31 (LDRB); só valores positivos #off deve ser *4 para LDR e *2 para LDRH
© Prof. Dr. Douglas Renaux
LDRLê dado da memóriaFormatos:
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 IndexadoPré-Indexado:• LDR Rd,[Ri,#cte]• LDR Rd,[Ri,Rm]• Primeiro calcula endereço depois acessa memória• Para atualizar o Ri usar ! LDR R2,[R3,#4]!
Pós-Indexado• LDR Rd,[R ],#cte• LDR Rd,[Ri],Rm• Primeiro acessa memória depois calcula endereço• Sempre atualiza Ri © Prof. Dr. Douglas Renaux
LDRSB e LDRSHLê dado da memória e faz extensão de sinalFormatos:
LDRSB Rt,[Rn,#off] LDRSH Rt,[Rn,#off] LDRSB Rt,[Rn,Rm] LDRSH Rt,[Rn,Rm]
Restrições: só R0 .. R7 e SP (para offset imediato) #off: 0..1020 (SP), 0..124 (R0-R7), 0..62 (LDRH)
0..31 (LDRB) #off deve ser *4 para LDR e *2 para LDRH
© Prof. Dr. Douglas Renaux
LDR (relativo ao PC)Lê dado da memóriaO dado está em endereço próximo ao código sendo
executadoFormatos:
LDR Rt,[PC,#100] LDR Rt, label
Restrições: só R0 .. R7
© Prof. Dr. Douglas Renaux
STREscreve dado da memóriaFormatos:
STR STRB STRH
mesmas regras que para LDR
© Prof. Dr. Douglas Renaux
LDM e STMTranfere múltiplos registradores de/para memóriaFormatos:
LDM R0,{R0,R1,R2} LDM R1!,{R2-R7} STM R0!,{R2-R4}
LDM = LDMIA, LDMFDSTM = STMIA, STMEA
© Prof. Dr. Douglas Renaux
Refazer para Cortex-M3Só IA e DBSó FD e EA
© Prof. Dr. Douglas Renaux
PUSH e POPTranfere múltiplos registradores de/para memóriaFormatos:
PUSH {R0-R7} POP {R1,R3-R6}
Restrição: R0-R7 e LR/PCFull Descending Stack
STMFD sp!, {r0,r1,r3-r5}PUSH {r0,r1,r3-r5}
r5r4r3r1r0SP
FD : Full Descending
old SP
endereçobaixo
© Prof. Dr. Douglas Renaux
LDM e STM
141
STMDB sp!, {r0,r1,r3-r5}STMFD sp!, {r0,r1,r3-r5}
r5r4r3r1r0SP
0x400
0x418
0x3e8
STMIA sp!, {r0,r1,r3-r5}STMEA sp!, {r0,r1,r3-r5}
r5r4r3r1r0
SP
Old SP
DB : Decrement BeforeFD : Full Descending
IA : Increment AfterEA : Empty Ascending
Old SP
© Prof. Dr. Douglas Renaux
3 - SaltosB 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 LRBX LR ; retorno de chamada de rotinaBLX R0 ; Chamada de rotinaBEQ labelD ; Salto condicional
© Prof. Dr. Douglas Renaux
SaltosCBZ Rn, label – Testa Rn e salta se 0CBNZ 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 ITBloco consiste de 1 a 4 instruções condicionaisITxyz condx,y,z são T ou E (Then ou Else)
ITTE EQADDEQSUBEQORRNE
© Prof. Dr. Douglas Renaux
Bloco ITA 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, CPSIDNÃO podem estar em bloco IT
Uma instrução que altera PC, só pode estar numbloco IT se for a última.
© Prof. Dr. Douglas Renaux
CondiçõesNo Cortex-M0 só as instruções de salto são condicionaisNo Cortex-M3 as outras instruções podem ir em blocos IT
© Prof. Dr. Douglas Renaux
Saltos (limites)
© Prof. Dr. Douglas Renaux
Exercício
© Prof. Dr. Douglas Renaux
1)
Exercício - continuação2) 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ícioQual 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 ia = b<<3 + a;b++;
}
© Prof. Dr. Douglas Renaux
Módulo 5
Registradores EspeciaisModos de OperaçãoInstruções Especiais
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
priviledged
Prática1. Utilizando o kit LPC Xpresso + placa base e o
workspace - Código Exemplo Lab02. Recompilar e iniciar a depuração para o projeto
oled_periph3. Com o depurador parado no início da função
main:1. Quais os registradores que podem ser acessados a
partir do depurador ?2. Quais tem bits individualizados e quais os significados
deles ?3. O valor que o depurador apresenta para o PC é o valor
real ou um valor modificado ?
© Prof. Dr. Douglas Renaux
Pilha (Stack)pode-se trabalhar apenas com MSPo SP corrente sempre é acessado como R13 ou SPO 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 RegisterR14 ou LRArmazena o endereço de retorno de uma subrotinaDeve ser salvo antes de chamar outra subrotina
© Prof. Dr. Douglas Renaux
Contador de ProgramaPC ou R15instrução sendo executada + 4endereço de instrução é sempre par (bit0 = 0)bit0 do PC é usado para indicar modo Thumb
após reset e em algumas instruções desalto: BX e BLX
© Prof. Dr. Douglas Renaux
Prática4. Escreva instruções em assembly que alterem os
registradores SP, LR, PC1. Como acompanhar as alterações ?2. Como visualizar o conteúdo da pilha ?
© Prof. Dr. Douglas Renaux
Stack: selecionado pelo bit1 de CONTROL0 = main; 1 = process (este stack só pode ser usado em modo Thread)
Modo: selecionado pelo IPSR0 = Thread; >0 exception
Privilégio: bit 0 do CONTROL (0 = privilegiado, 1 = não-privilegiado)no Cortex-M0 é sempre privilegiado (sem restrição)
© Prof. Dr. Douglas Renaux© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
xPSR
© Prof. Dr. Douglas Renaux© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
IPSR
IPSR Exception number != IRQ Number (Table 320)
© Prof. Dr. Douglas Renaux
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
PRIMASK só pode ser escrito em modo privilegiado instruções CPSID e CPSIE, MSR e MRS
© Prof. Dr. Douglas Renaux
Modo PrivilegiadoNo 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
Prática4. Escreva instruções em assembly que alterem os
registradores SP, LR, PC1. Como acompanhar as alterações ?2. Como visualizar o conteúdo da pilha ?
5. Com o depurador parado:1. Quais registradores tem bits individualizados e quais os
significados deles ?
6. No início da função main:a) Qual o estado do processador ? Quais bits de quais
registradores foram usados para obter esta informação ?
7. Coloque um breakpoint no corpo da função SysTick_Handlere execute até parar nele:
a) Qual o estado do processador ? Quais bits de quaisregistradores foram usados para obter esta informação ?
b) Qual o valor de LR ? Há uma instrução válida neste endereço ?© Prof. Dr. Douglas Renaux
4 - Outros
© Prof. Dr. Douglas Renaux
BKPTBKPT #imm#imm é um valor de 0 a 255entrada no estado de depuraçãoesta instrução é utilizada por debugers
instrução não deve ser usada porprogramadores
© Prof. Dr. Douglas Renaux
CPSChange Processor State
altera o PRIMASK
Formatos: CPSID i // desabilita IRQs CPSIE i // habilita IRQs
© Prof. Dr. Douglas Renaux
DMB — The Data Memory Barrier (DMB)completa transações pendentes antes derealizar 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çõesefetuadas seja percebido antes da próximainstrução.
© Prof. Dr. Douglas Renaux
Exemplos de UsoTabela de vetores: usar DMB entre uma
alteração no vetor e a habilitação da IRQcorrespondente.
Alteração no código: usar uma ISB logo após ainstrução que altera o código.
Alteração no mapa de memória: usar um DSBimediatamente após a instrução que altera omapa de memória.
© Prof. Dr. Douglas Renaux
MSR, MRSMSR – Move to Special Reg from Register
MSR special_reg, RnMRS – Move to Register from Special Reg
MRS Rd, special_regSpecial Reg:
APSR, IPSR, EPSR, IEPSR, IAPSR,EAPSR, PSR, MSP, PSP, PRIMASK, orCONTROL
Rd, Rn – não podem ser SP ou PC
© Prof. Dr. Douglas Renaux
NOPNão realiza nenhuma operaçãoPode ser elimininada no pipeline (i.e. pode ser
executado em tempo 0)Uso: alinhamento de código em fronteira de
word ou double-word
© Prof. Dr. Douglas Renaux
SEVSend EventFormato:
SEV
Informa da ocorrência de um eventoSeria usado com WFE que não existe no
LPC11xx
© Prof. Dr. Douglas Renaux
SVCChamada ao Supervisor (S.O.)Formato
SVC #imm // 0 .. 255Gera uma exceção do tipo SVCA ISR pode ler o valor de #imm para identificar
o serviço solicitado
© Prof. Dr. Douglas Renaux
WFIWait for InterruptFormato:
WFIentra 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
Memória – TiposNormal: pode ocorrer reordenação dos acessos e
leituras especulativasDevice: ordem dos acessos é preservada em
relação a outros acessos a Device e Strongly-Ordered
Strongly-Ordered: preserva ordem em relação atodos os demais acessos. Pode ocorrerbufferização nos acessos à Device, mas nãoaos acessos à Strongly-Ordered
Execute Never (XN): não é permitida a leitura deinstruções nesta região
© Prof. Dr. Douglas Renaux
Memória - Ordenação
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux© Prof. Dr. Douglas Renaux
Memória – Processadores 13xx
© Prof. Dr. Douglas Renaux
Módulo 7
Exceções
© Prof. Dr. Douglas Renaux
ExceçõesQualquer solicitação para mudança do fluxo
normal de um programa. interrupção detecção de falha / erro (p.ex. acesso
desalinhado)
© Prof. Dr. Douglas Renaux
ExceçõesEstados
Inativo (inactive) = não ativo nem pendente Pendente (pending) = aguardando atendimento
(p.ex. pedido de interrupção – irq – deperiférico)
Ativo (active) = em atendimentopode haver mais de uma interrupção ematendimento (interrupções aninhadas – nested)
Ativo e Pendente = interrupção em atendimentoe outro pedido da mesma fonte está pendente
© Prof. Dr. Douglas Renaux
Tipos de ExceçãoReset – reinício da execução (modo Thread) (-3)NMI - prioridade -2HardFault – prioridade -1
falha genérica: representa todas as classes defalhas que não foram tratadas
SVC – causada pela instrução SVC (SupervisorCall)
PendSV – solicitação de serviço (p.ex.chaveamento de contexto)
SysTick – gerado pelo system timerIRQ – pedido de interrupção feito por periférico
© Prof. Dr. Douglas Renaux
Tipos de ExceçãoMemManage: falhas de acesso à memória
detectadas pela MPU. Se desabilitado,escala para HardFault
BusFault: outras falhas no barramento dememória que não as MemManage.
UsageFault: Falhas de execução que não sãorelacionadas ao barramento de memória. P.ex. instrução indefinida ou estado inválido.
© Prof. Dr. Douglas Renaux
Configurável: prioridade de 0 (default) a 3Prioridades: valor menor significa maior prioridadePRIMASK: pode mascarar as IRQ com prioridade configurável
© Prof. Dr. Douglas Renaux
Exception Handlers(Rotinas de Tratamento de Exceção)
ISR (Interrupt Service Routine)Rotina de Tratamento de Interrupçãopara IRQ 0 até IRQ 31
Fault HandlerRotina de Tratamento de Faltapara HardFault
System HandlerRotina de Tratamento de Exceções doSistemapara NMI, PendSV, SVC, SysTick
© Prof. Dr. Douglas Renaux
O LSb deve ser 1 indicando que a rotina de tratamento é em ThumbO IAR coloca o bit0 em 1 automaticamente para todos os labels criados
em Thumb© Prof. Dr. Douglas Renaux
Atendimento e RetornoPreempção: se um handler está em execução uma exceção
de maior prioridade pode causar preempção. Chama-sede exceções aninhadas.
Retorno: ocorre ao término da execução do handler se: não há exceção pendente com prioridade suficiente para ser
atendida o handler que terminou não é de uma late-arriving exception
Tail-chaining (encadeamento): se ao término de um handlerexistir uma exceção pendente apta a ser tratada entãonão se executa a seqüência de POP / PUSH
Late-arriving (chegada tardia): Mecanismo que acelera apreempção. Uma exceção de maior prioridade ocorredurante o salvamento de estado (PUSHs). Neste caso aexceção de maior prioridade é atendida e, por tail-chaining, em seguida a de menor prioridade.
© Prof. Dr. Douglas Renaux
© Prof. Dr. Douglas Renaux
AtendimentoUm atendimento de exceção ocorre quando:
existe uma exceção pendente com prioridadesuficiente (*); 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 limiteestabelecido no PRIMASK
© Prof. Dr. Douglas Renaux
Atendimento (2)Stacking – salva o estado
O SP está alinhado em double-wordse necessário pula um word antes de começar
o empilhamento
© Prof. Dr. Douglas Renaux
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 ativaSe 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)
© Prof. Dr. Douglas Renaux
Retorno de ExceçãoOcorre quando uma instrução escreve no PC
um dos valores de EXC_RETURNAs instruções que podem ser usadas para
retorno de exceção são POP e BX
© Prof. Dr. Douglas Renaux
Tratamento de FaltasTodas as faltas causam HardFaultTrava se a falta ocorre no handler da NMI ou HardFaultFaltas:
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 tentativa de execução de instrução inválida tentativa de execução em modo ARM (T=0) LD ou ST desalinhado
© Prof. Dr. Douglas Renaux
Hard Faults
© Prof. Dr. Douglas Renaux
Travamento (Lockup)Ocorre devido à falta quando executando
handler de NMI ou HardFault ou erro debarramento quando desempilhando PSR.
Soluções: Reset Debugger pára a execução NMI interrompe HardFault handler
© Prof. Dr. Douglas Renaux
Módulo 8
ATPCS
© Prof. Dr. Douglas Renaux
ATPCSARM-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 Tamanhochar 8 bits [ ] 32 bitsshort 16 bits struct ptr = 32 bitsint 32 bits float 32 bitsunsigned 32 bits double 64 bitslong 32 bits enum = intlong long 64 bits* 32 bits
© Prof. Dr. Douglas Renaux
ATPCSQuem tem a obrigação de salvar o valor dos
registradores caso interesse manter estevalor após a chamada de uma função ?
- rotina chamada: deve salvar R4 – R11 antesde alterar
- R0 – R3,R12 podem ser livrementeutilizados pela rotina chamada
© Prof. Dr. Douglas Renaux
Código de Entrada e Saída deFunção
PUSH {R4-R7,LR}
…POP {R4-R7,LR}
MOV PC,LR
PUSH {R4-R7,LR}
…POP {R4-R7,PC}
© Prof. Dr. Douglas Renaux