03 SuP Microprocessador ARM Cortex Software
03 SuP Microprocessador ARM Cortex Software
03 SuP Microprocessador ARM Cortex Software
João Ranhel
Bom dia,
Boa tarde,
Boa noite..!
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
Barramento APB
(advanced peripheral bus) que
interliga os periféricos...
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
A31..A0 Controle
R0
R1
ADDRESS REG R2
R3
R4
R5
R6
++ R7
R8
NÚCLEO ( CORE ) R9 decodificador
R10
simplificado R11 de instruções
R12
de um processador R13 (SP) e
ARM R14 (LR)
R15 (PC)
controle
cpsr
A bus banco de
registradores
Multiplic. B bus
BS
ALU
ALU bus
R0
➢ Toda a memória e periféricos estão mapeados em 32 bits! R1
R2
0xFFFFFFFF R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13 (SP)
R14 (LR)
R15 (PC)
cpsr
banco de
registradores
0x00000000
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
Periféricos internos
mapeados pelo fabricante do chip
(timers, watchdog, UART, SPI, I2C...)
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
Instruções no ARM:
Exemplo:
SUBNE r0, r1, r2
se (NEQ) r0 = r1– r2
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
trecho do
código...
sub-rotina
trecho do
código...
trecho do
código...
BL sub1 sub-rotina
BX LR
trecho do
código...
trecho do
código...
BL sub1 sub-rotina
É obrigação do
BX LR programador preservar os
trecho do valores dos registradores
código... para continuar o programa
depois de retornar da
sub-rotina !!!
BL sub1
trecho do
código...
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
trecho do
código...
trecho do
código...
trecho do
código...
Alguém se recorda do conceito de PILHA
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
dado 6
dado 5
trecho do
dado 4
código...
dado 3
dado 2
....
trecho do
código... R13 (SP)
dado 6
dado 5
trecho do
dado 4
código...
dado 3
dado 2
dado 1
trecho do
código... primeiro dado a ser recuperado R13 (SP)
dado n
PUSH {R0,R4-R7} R7
dado 5
trecho do
dado 4
código...
dado 3
sub-rotina dado 2
R0 dado 1
trecho do
código... Funcionamento principal da pilha:
✓ nas entradas das sub-rotinas, empurre para a pilha os valores
dos registradores que serão modificados
✓ PUSH {lista de registradores} empurra dados na pilha...
✓ na saída (no retorno) da sub-rotina, recupere os valores dos
registradores salvos na pilha.
trecho do
código... ✓ a instrução segue a ordem e salva o registrador de menor índice na lista
na menor posição de memória da pilha dentro dessa instrução...
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
dado n
PUSH {R0,R4-R7} dado 5
trecho do
dado 4
código...
dado 3
sub-rotina dado 2
dado 1
POP {R0,R4-R7}
BX LR
trecho do
código... Funcionamento principal da pilha:
✓ nas saída das sub-rotinas, puxe os dados de volta da pilha para
recarregar os registradores...
✓ POP {lista de registradores} recupera os valores dos registradores
trecho do
código...
trecho do
código...
trecho do
código...
trecho do
código...
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
trecho do
código...
trecho do
código...
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
trecho do
código...
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
trecho do
código... ➢ ISR funcionam como as sub-rotinas que vimos antes e podem ser
disparadas por hardware ou por software.
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
trecho do
código...
INTERRUPÇÕES e a pilha:
✓ É necessário empurrar o conteúdo do PC (R15) na pilha para que
o programa saiba onde estará a próxima instrução!
✓ Especialmente porque você não sabe QUANDO uma interrupção
trecho do vai ocorrer, é boa prática salvar os registradores na pilha assim
código... que entramos numa ISR.
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
trecho do
código...
sub-rotina
trecho do
código...
O endereço de retorno é obtido ao empurrar o PC na pilha, ok !!!
Mas, a interrupção pode ocorrer a qualquer momento, e não temos uma
instrução branch no meio do código para desviar para a ISRn, da forma:
trecho do
código...
sub-rotina
trecho do
código...
trecho do
sub-rotina
código...
........ R0
destino... ➢ Exemplos da instrução MOV
........ R1
........ R2
........ R3 MOV R0, #0x1A
........ R4
........ R5
........ R6
........ R7
........ R8
........ R9
........ R10
........ R11
........ R12
........ R13
........ R14
........ R15
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
0x0000001A R0
destino... ➢ Exemplos da instrução MOV
........ R1 valor imediato (kte)
........ R2
........ R3 MOV R0, #0x1A
........ R4
........ R5
........ R6
........ R7
........ R8 prefixo hexa...
........ R9
........ R10
........ R11
........ R12
........ R13
........ R14
........ R15
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
........ R12
........ R13
........ R14
........ R15
EN2617 – SμP: processadores ARM – conjunto de instruções e linguagem ASSEMBLY
LDR R0, [R1] // r0 = val mem cujo end está em r1 (pointer *r1)
Obrigado...
Até a próxima aula.