cortex vers 4becaths1.s3.amazonaws.com/tecnicasdigitalesiii/287565273.17_cortex... ·...
TRANSCRIPT
09/09/13
1
Agenda
• Introducción • Presentación de la Familia Cortex M3 • Arquitectura de los Cortex M3 • Repertorio de Instrucciones y Ejemplos • Sistema de Memoria • Excepciones, Interrupciones y el NVIC • La familia NXP LPC17xx
1 Cortex -‐ Parte 1
Agenda
• Introducción • Presentación de la Familia Cortex M3 • Arquitectura de los Cortex M3 • Repertorio de Instrucciones y Ejemplos • Sistema de Memoria • Excepciones, Interrupciones y el NVIC • La familia NXP LPC17xx
2 Cortex -‐ Parte 1
09/09/13
2
Algunos conceptos Fundamentales
3 Cortex -‐ Parte 1
Ciclo perpetuo de ejecución
Búsqueda Cod Op
Decodificación Cod Op
Ejecución Este ciclo perpetuo y secuencial cambiará con la introducción del pipeline de la familia ARM
4 Cortex -‐ Parte 1
09/09/13
3
Arquitecturas de las computadoras
• Arquitectura Von Neumann CPU
000000010002..
DIREC.
nnnn
BUSES
Memoriade Programa
y de Datosindistinta
5 Cortex -‐ Parte 1
Arquitecturas de las computadoras
CPU
MEMORIA MEMORIADE DE
PROGRAMA DATOS
000000010002..
DIREC.
nnnn
DIREC.000000010002..mmmm
BUSES BUSES
• Arquitectura Harvard
6 Cortex -‐ Parte 1
09/09/13
4
Una de las formas de clasificar las computadoras
• Complejidad de su repertorio de instrucciones – Computadoras CISC – Computadoras RISC
7 Cortex -‐ Parte 1
Análisis estadísOco de Ejecución de programas estándar
Tipo de instrucción % de Uso Movimiento de datos 43 Control de flujo (branches) 23
Operaciones Aritméticas 15 Comparaciones 13 Operaciones Lógicas 5 Otras 1
2/3 de las
instrucciones
8 Cortex -‐ Parte 1
09/09/13
5
Concepto RISC
• Se buscó diseñar un procesador que tuviera pocas instrucciones, fundamentalmente las de uso más frecuente y se opOmizó su Oempo de ejecución, de manera que la arquitectura resultante fuera muy eficiente en la mayoría de las instrucciones de uso corriente.
• Las instrucciones complejas, no tendrían lugar en el repertorio de instrucciones y deberían ser implementadas por medio de varias instrucciones sencillas.
9 Cortex -‐ Parte 1
Ventajas Arquitectura RISC
1. Mejor aprovechamiento de área de silicio. Típicamente 1/3 a ¼ del área requerida por un procesador x86.
2. Menor consumo de energía. 3. Menor Oempo de desarrollo 4. Mayor rendimiento de la energ ía .
Típicamente 40 a 50% menor consumo por MHz de reloj.
h"p://blogs.arm.com/so0ware-‐enablement/375-‐risc-‐versus-‐cisc-‐wars-‐in-‐the-‐prepc-‐and-‐pc-‐eras-‐part-‐1/
h"p://blogs.arm.com/so0ware-‐enablement/377-‐risc-‐versus-‐cisc-‐wars-‐in-‐the-‐postpc-‐eras-‐part-‐2/ 10 Cortex -‐ Parte 1
09/09/13
6
Inconvenientes Arquitectura RISC
1. No ejecuta código x86 2. Generalmente Oenen una pobre densidad de
código comparada con CISC 3. Se requerirán múlOples instrucciones RISC
para ejecutar una CISC (aunque el Oempo de ejecución del programa completo en RISC sea menor que el Oempo de ejecución en CISC)
11 Cortex -‐ Parte 1
El repertorio de instrucciones con que nos encontraremos será:
1. Instrucciones de procesamiento de datos 2. Instrucciones de movimientos de datos 3. Instrucciones de control de flujo 4. Instrucciones especiales
12 Cortex -‐ Parte 1
09/09/13
7
Cantidad de direcciones en la palabra de instrucción
Tres Direcciones
13 Cortex -‐ Parte 1
Implementación en un Microcontrolador Cortex
14
En los microcontroladores de 32 bits se implementa una versión de las máquinas de 3 direcciones en las que las direcciones de los operandos se puede dar por medio de registros de 32 bits que contienen los operandos y que previamente fueron cargados en los mismos
14 Cortex -‐ Parte 1
09/09/13
8
Suma del contenido de dos posiciones de memoria
En RISC puede ser: ldr r0,=Oper1 ldr r1,[r0] ldr r0,=Oper2 ldr r2,[r0] add r3,r2,r1 LDR r0,=result str r3,[r0]
Oper1 DCD 0x12345678 Oper2 DCD 0x23456789 AREA DATA result space 4
Lo que en un CISC sería: Add result, Oper1, Oper2
15 Cortex -‐ Parte 1
Agenda
• Introducción • Presentación de la Familia Cortex M3 • Arquitectura de los Cortex M3 • Repertorio de Instrucciones y Ejemplos • Sistema de Memoria • Excepciones, Interrupciones y el NVIC • La familia NXP LPC17xx
16 Cortex -‐ Parte 1
09/09/13
9
17
Fabricantes
Cortex -‐ Parte 1
Aplicaciones
18 Cortex -‐ Parte 1
09/09/13
10
19 19
Cortex M
Temporizadores
A/D
D/A
Serie RTC
Watchdog
PLL
PWM
USB, Ethernet CAN, etc
ISP, IAP
19
¿Con qué nos encontraremos?
Cortex -‐ Parte 1
Principios Básicos ARM -‐ Cortex • Se basa en Arquitectura RISC. • OpOmización del Oempo de ejecución de las instrucciones más frecuentes
• Importante banco de registros • Arquitectura load-‐store. • Pipeline
20 Cortex -‐ Parte 1
09/09/13
11
Principios Básicos ARM -‐ Cortex • Instrucciones de tamaño fijo: 16 ó 32-‐bit • Ejecución condicional de todas las instrucciones, para maximizar el rendimiento de la ejecución.
• Computadora de 3 direcciones. • Varios modos de operación. • Las operaciones aritméOcas y lógicas son entre registros.
21 Cortex -‐ Parte 1
Características ARM - Cortex
• Todos las familias de procesadores Cortex comparten el mismo repertorio de instrucciones.
• El núcleo del procesador es compartido por todos los fabricantes de silicio. Los periféricos son específicos de cada modelo y suelen NO ser compatibles entre si, por lo cual se han implementado metodologías de homogeneización (CMSIS).
• Existen técnicas de programación que hacen que esas incompatibilidades de hardware sean disimuladas para el programador
• Registros de 32 bits (16 + 1 disponibles). Registros 0 a 7 disponibles en todo momento
• Estructura del bus tipo Von Neuman (ARM7), tipo Harvard ( Cortex y ARM9)
22 Cortex -‐ Parte 1
09/09/13
12
Componentes, Familias y subfamilias
23 Cortex -‐ Parte 1
Portafolio Procesadores NXP
24 Cortex -‐ Parte 1
09/09/13
13
Evolución
25 Cortex -‐ Parte 1
Evolución
26 Cortex -‐ Parte 1
09/09/13
14
Evolución
27 Cortex -‐ Parte 1
Aplicaciones de las disOntas subfamilias
28 Cortex -‐ Parte 1
• ARM Cortex-‐A, Orientado a Sistemas OperaOvos complejos y aplicaciones mulOusuario.
• ARM Cortex-‐R, Orientada a s i s t e m a s o p e r a O v o s embebidos en Oempo real.
• ARM Cortex-‐M, Orientada a aplicaciones de bajo costo y FPGA h"p : / /www . a c t e l . c om / i n t e r a c t /
c o n fi r m a J o n . a s p x ?p=E239default.aspx.htm
09/09/13
15
Evolución
29 Cortex -‐ Parte 1
Costo / Performance
30 Cortex -‐ Parte 1
09/09/13
16
Agenda
• Introducción • Presentación de la Familia Cortex M3
• Arquitectura de los Cortex M3 • Repertorio de Instrucciones y Ejemplos • Sistema de Memoria • Excepciones, Interrupciones y el NVIC • La familia NXP LPC17xx
31 Cortex -‐ Parte 1
ObjeOvos Cortex M3 • OpOmizado para uso con flash en un solo ciclo • Esquema de Interrupciones priorizables basado en hardware • DeterminisOco/Interrupciones con baja latencia • Interrupción no enmascarable (NMI)
• MulOplicación en un solo ciclo y división por hardware
• Requerimientos reducidos de memoria. • Almacenamiento de datos no-‐alineado • Manipulación de bits • Thumb-‐2
32 Cortex -‐ Parte 1
09/09/13
17
ObjeOvos Cortex M3 • Manejo de potencia disipada y modos de muy bajo consumo.
• Herramientas de depuración incorporadas en el chip (breakpoints, watchpoints y serial wire viewer).
• Diseño opOmizado para la programamción en C (aún del reset, interrupciones y excepciones).
• Excelente soporte para la implementación de sistemas operaOvos.
• Mapa de memoria Fijo • Bit-‐banding (operación atómica sobre bits)
33 Cortex -‐ Parte 1
Tamaño de instrucciones y datos
• ARM es una arquitectura de 32-bits. – Byte significa 8 bits – Halfword significa 16 bits – Word significa 32 bits
• El repertorio de instrucciones – 32-bit ARM – 16-bit Thumb – Thumb-2 es una combinación de ambos
• Los que tienen la extensión Jazelle ejecutan código Java
34 Cortex -‐ Parte 1
09/09/13
18
Cortex M3
Diseñado Por ARM
Diseñado por el
fabricante del
integrado
35 Cortex -‐ Parte 1
Arquitectura Cortex M3 Núcleo Cortex-‐M3 (core)
Arquitectura Harvard Pipeline de tres etapas con especulación
de saltos Thumb®-‐2 y Thumb tradicional ALU con división por H/W y mulOplicación
en un ciclo
Procesador Cortex-‐M3 Controlador de interrupciones
Configurable Bus matrix Componentes de depuración avanzados Opcionales: MPU & ETM
36 Cortex -‐ Parte 1
09/09/13
19
Arquitectura Cortex M3
37 Cortex -‐ Parte 1
Opcional
Un ejemplo: AMBA (Advanced Microcontroller Bus Architecture)
Sim
ilar a
PC
No se
Justi
fica
Que trab
ajen
A velocid
ad
Del proce
sador
38 Cortex -‐ Parte 1
09/09/13
20
Ejemplo de Implementación Arquitectura NXP LPC17xx
39 Cortex -‐ Parte 1
Ejemplo de Implementación Arquitectura NXP LPC13xx
40 Cortex -‐ Parte 1
09/09/13
21
Registros de Cortex M3
Modelo amigable para compiladores • Arquitectura Load/Store • Registros de 32-‐bit • Esquema Flexible de registros • Espacio de direccionamiento Linear de 32-‐bits
41 Cortex -‐ Parte 1
Registros específicos
• R15 = PC • R14 = LR = Link register. Almacena la dirección de retorno en subruOnas y excepciones
• R13 = SP (con doble significación) • Program Status Registers (PSRs) • Interrupt Mask Registers (PRIMASK, FAULTMASK, BASEPRI)
• Control Register (CONTROL) 42 Cortex -‐ Parte 1
09/09/13
22
Modos ARM, Thumb y Thumb-‐2
43 Cortex -‐ Parte 1
Thumb-‐2 y Thumb
44 Cortex -‐ Parte 1
09/09/13
23
Cambio de modos en ARM
Archivo 2
Archivo 1
45 Cortex -‐ Parte 1
Arm 32 y Thumb 2 en Cortex
• No hay overhead de conmutación de estado, ahorrando Oempo de ejecución y espacio de instrucción
• No hay necesidad de separar el código ARM del Thumb y se puede hacer todo el programa en un solo archivo, lo que hace el desarrollo y mantenimiento del firmware más fácil
• Es más fácil obtener la mejor eficiencia y rendimiento, a su vez, por lo que es más fácil escribir soqware, porque no hay necesidad de preocuparse por el cambio de código entre el ARM y Thumb para tratar de obtener la mejor densidad / rendimiento
46 Cortex -‐ Parte 1
09/09/13
24
Thumb-‐2
• Permite mezclar instrucciones de 16 bits de longitud con instrucciones de 32 bits.
• La mayor parte de las instrucciones de los Cortex-‐M3 son de 16 bits.
• Internamente se procesan como instrucciones de 32 bits, por lo que existe una etapa de decompresión de las instrucciones que las lleva de 16 a 32 bits.
47 Cortex -‐ Parte 1
Thumb-‐2 Debemos destacar dos temas muy importantes: 1. A pesar de que la mayoría de las instrucciones de un Cortex M3
son de 16 bits, internamente se procesan como 32 bits “descomprimiéndose”
2. Aunque las instrucciones sean de 16 operan sobre registros de 32 bits (salvo las instrucciones específicas que trabajan sobre 16 u 8 bits)
Cortex -‐ Parte 1 48
09/09/13
25
Instrucciones en Thumb-‐2
• En ARM Unified Assembler Language Muchas instrucciones se representan nemónicamente de igual manera para 32 ó 16 bits.
• Si no indicamos lo contrario, y de ser posible los compiladores habitualmente eligen la opción de 16 bits.
• Ej: ADDS R0, #1 será implementada en 16 bits • Si deseamos se más explícitos (strong Typing) • ADDS.W R0,#1 ; Wide = 32 bits • ADDS.N R0,#1 ; Narrow = 16 bits
49 Cortex -‐ Parte 1
Thumb-‐2
50 Cortex -‐ Parte 1
09/09/13
26
Repertorio de instrucciones basado en Thumb
Compatibilidad
Compatibilidad
51 Cortex -‐ Parte 1
Caminos de Datos y pipeline
52 Cortex -‐ Parte 1
09/09/13
27
Caminos de datos
53 Cortex -‐ Parte 1
Pipeline de 3 etapas
Búsq Cod Op Ejecución Decodificación
Búsq Cod Op Ejecución Decodificación
Búsq Cod Op Ejecución Decodificación
1
2
3
Tiempo
PC
= 0
x010
0
PC
= 0
x010
4
PC
= 0
x010
8
54 Cortex -‐ Parte 1
09/09/13
28
Pipeline en Cortex. Funciones ampliadas
• Pipeline de 3-etapas + especulación de saltos • Cuando se encuentra una instrucción de salto, la etapa de
decodificación también incluye una búsqueda de código de operación especulativa del salto
55 Cortex -‐ Parte 1
UOlización ÓpOma del Pipeline
6 cilos = 6 Instrucciones
56 Cortex -‐ Parte 1
09/09/13
29
Caso más desfavorable
Ejecutar el Branch tarda 3 ciclos.
57 Cortex -‐ Parte 1
LDR Debe completarse la instrucción LDR antes de poder ejecutar la sig. instrucción
58 Cortex -‐ Parte 1
09/09/13
30
Agenda
• Introducción • Presentación de la Familia Cortex M3 • Arquitectura de los Cortex M3 • Repertorio de Instrucciones y Ejemplos • Sistema de Memoria • Excepciones, Interrupciones y el NVIC • La familia NXP LPC17xx
59 Cortex -‐ Parte 1
Repertorio de Instrucciones
60 Cortex -‐ Parte 1
09/09/13
31
Registros r0 r1 r2 r3 r4 r5 r6 r7 r8 r9
r10 r11 r12
r15 (PC) r14 (LR)
xPSR
r13 (MSP) r13 (PSP)
61 Cortex -‐ Parte 1
Instrucciones • Formatos de instrucción de 3 direcciones • Consta de “f” bits para el código de operación, “n” bits para especificar la
dirección del 1er. operando, “n” bits para especificar la dirección del 2do. operando y “n” bits para especificar la dirección del resultado (el destino).
• n = 4 para instrucciones de 32 bits y n = 3 para instrucciones de 16 bits • El formato de esta instrucción en Assembler, por ejemplo para la instrucción
de sumar dos números para producir un resultado, es: • ADD d, s1, s2 ;d := s1 + s2.
62 Cortex -‐ Parte 1
09/09/13
32
Instrucciones Condicionales
63 Cortex -‐ Parte 1
Instrucciones Condicionales
64 Cortex -‐ Parte 1
09/09/13
33
Instrucciones Condicionales • If – Then (IT) se agrega la instrucción (16 bit)
• Hasta 3 condiciones “then” o “else” adiconales pueden ser especificadas (T or E)
• Hace hasta 4 instrucciones condicionales • Puede uOlizarse cualquier código de operación ARM normal • Las instrucciones de 16 bits, en bloque, no afectan los flags
• Si lo hacen las instrucciones de comparación • Las instrucciones de 32 bits (según las reglas generales) pueden afectar los
flags • El estado actual del “if-‐then” se almacena en el CPSR
• El bloque condicional puede ser interrumpido y retornado con seguridad • NO se deben realizar branch dentro o fuera del bloque ‘if-‐then’
♣
65 Cortex -‐ Parte 1
Ejemplos condicionales
if (r0 == 0) { r1 = r1 + 1; } else { r2 = r2 + 1; }
Fuente C
§ 5 instrucciones § 5 palabras § 5 o 6 ciclos
§ 3 instrucciones § 3 palabras § 3 ciclos
... ...
ARM instructions Incondicional CMP r0, #0 BNE else ADD r1, r1, #1 B end else ADD r2, r2, #1 end
CMP r0, #0 ADDEQ r1, r1, #1 ADDNE r2, r2, #1 ...
Condicional
66 Cortex -‐ Parte 1
09/09/13
34
Instrucciones • Casi todas las instrucciones se ejecutan en un ciclo de reloj • Modos de direccionamiento simples • El procesamiento de datos solo opera con contenidos de
registros, no directamente en memoria. • Control sobre la unidad aritmética lógica (ALU, Arithmetic
Logic Unit) y el “shifter”, en cada instrucción de procesamiento de datos para maximizar el uso de la ALU y del “shifter”.
• Modos de direccionamiento con incremento y decremento automático de punteros, para optimizar los lazos de los programas.
• Carga y almacenamiento de múltiples registros, para maximizar el rendimiento de los datos.
67 Cortex -‐ Parte 1
Registro, opcionalmente con operación de desplazamiento – El valor del desplazamiento puede ser:
• 5 bit entero no signado • Especificado en el LSB de otro
registro. – Usado para multiplicar por una
constante Valor inmediato
– 8 bit : Número en el rango de 0-255. • Rotado a la derecha en un nùmero
par de posiciones – Permite que sean cargados
directamente a los registros constantes de 32-bits
Resultado
Oper 1
Barrel Shifter
Oper 2
ALU
Barrel Shifter: El 2º Operando
68 Cortex -‐ Parte 1
09/09/13
35
Operandos inmediatos
69 Cortex -‐ Parte 1
• Instrucciones de procesamiento
de datos
70 Cortex -‐ Parte 1
09/09/13
36
Instrucciones de procesamiento de datos
71 Cortex -‐ Parte 1
Instrucciones de procesamiento de datos
72 Cortex -‐ Parte 1
09/09/13
37
Procesamiento de Datos • Consiste de:
– Aritmeticas: ADD ADC SUB SBC RSB RSC – Logicas: AND ORR EOR BIC – Comparaciones: CMP CMN TST TEQ – Movimiento Datos: MOV MVN
• Estas instrucciones operan sobre registros y NO en memoria.
• Sintaxis:
<Operación>{<cond>}{S} Rd, Rn, Operand2
• Comparaciones sólo afectan flags – no especifican Rd • Movimiento de datos no especifican Rn
• El segundo operando se envía a la ALU a través del desplazador en barril.
73 Cortex -‐ Parte 1
Procesamiento de Datos Aritméticas
• ADD r1, r2, r3 ; r1 = r2 + r3 • ADC r1, r2, r3 ; r1 = r2 + r3 + C • SUB r1, r2, r3 ; r1 = r2 - r3 • SUBC r1, r2, r3 ; r1 = r2 - r3 + C - 1 • RSB r1, r2, r3 ; r1 = r3 - r2 (inversa) • RSC r1, r2, r3 ; r1 = r3 - r2 + C - 1
74 Cortex -‐ Parte 1
09/09/13
38
Procesamiento de Datos
• Aritméticas – ADD r3,r2,#1 – ADD r3,r2,r1, lsl #3 (lsr, asl, asr, ror, rrx) – ADD r5,r5,r3, LSL r2 – MUL r4,r3,r2 – MLA r4,r3,r2,r1 ;r4:=(r3 x r2 + r1) – RSB r0,r0,r0, LSL #3
» ; Multiplicar por 7
75 Cortex -‐ Parte 1
Procesamiento de Datos
• Lógicas – AND r0,r1,r2 ; r0:= r1.r2 – ORR r0,r1,r2 ; r0:= r1 + r2 – EOR r0,r1,r2 ; r0:= r1 xor r2 – BIC r0,r1,r2 ; r0:= r1 and not r2 – AND r8,r7,#0xff ; r8:= r7 . 0x000000ff
76 Cortex -‐ Parte 1
09/09/13
39
Procesamiento de Datos Solo afectan los Flags
CMP r1, r2 ; cc por r1 - r2 CMN r1, r2 ; cc por r1 + r2 TST r1, r2 ; cc por r1 and r2 TEQ r1, r2 ; cc por r1 xor r2
77 Cortex -‐ Parte 1
Procesamiento de Datos Inmediatas
• ADD r3, r3,#1 ; r3 := r3 + 1 • AND r8, r7,#oxff ; r8 := r7[7:0]
78 Cortex -‐ Parte 1
09/09/13
40
Registro, opcionalmente con operación de desplazamiento – El valor del desplazamiento puede ser:
• 5 bit entero no signado • Especificado en el LSB de otro
registro. – Usado para multiplicar por una
constante Valor inmediato
– 8 bit : Número en el rango de 0-255. • Rotado a la derecha en un n´´umero
par de posiciones – Permite que sean cargados
directamente a los registros constantes de 32-bits
Resultado
Oper 1
Barrel Shifter
Oper 2
ALU
Procesamiento de Datos Barrel Shifter: El 2º Operando
79 Cortex -‐ Parte 1
Procesamiento de Datos Desplazamientos
• ADD r3, r2, r1, LSL #3 ; r3 := r2 + 8 x r1 • ADD r5, r5, r3, LSL r2 ; r5 : = r5 + r3 x 2r2
• RSB r0,r0,r0, LSL #3 • ; Multiplicar por 7
80 Cortex -‐ Parte 1
09/09/13
41
Desplazamientos
81 Cortex -‐ Parte 1
• INSTRUCCIONES DE TRANSFERENCIA DE
DATOS
82 Cortex -‐ Parte 1
09/09/13
42
Transferencias de Datos
83 Cortex -‐ Parte 1
Transferencias de Datos
• Movimiento – MOV r0,r2 – MVN r0,r2 ; r0:= not r2
84 Cortex -‐ Parte 1
09/09/13
43
Transferencias de Datos LDR
LDR r0,[r1] ; r0 := mem32[r1] LDR R4, [R2, #4] ; Carga word en R4 desde direc R2 + 4 LDR R4, [R2, R1] ; Carga word en R4 desde direc R2 + R1 LDRH R3, [R6, R5] ; Carga half word en R3 desde R6 + R5 LDRB R2, [R1, #5] ; Carga byte en R2 desde R1 + 5 LDR R6, [PC, #0x3FC] ; Carga R6 desde PC + 0x3FC LDR R5, [SP, #64] ; Carga R5 desde SP + 64
85 Cortex -‐ Parte 1
Transferencias de Datos Pre y post indexado
LDR r0,[r1,#4] ; r0 := mem32[r1+ 4] LDR r0,[r1,#4]! ; r0 := mem32[r1+ 4] ; r1 := r1 + 4
86 Cortex -‐ Parte 1
09/09/13
44
Transferencias de Datos STR
STR r0,[r1] ; mem32[r1] := r0 STR R0, [R7, #0x7C] ; Guarda word desde R0 a direc R7 + 124 STRB R1, [R5, #31] ; Guarda byte desde R1 a direc R5 + 31 STRH R4, [R2, R3] ; Guarda halfword desde R4 a dir R2 + R3 STR R4, [SP, #0x260] ; Guarda R5 a direc. SP + 0x260
87 Cortex -‐ Parte 1
Preindexado y posOndexado
0x5
0x5
r1 0x200 Base
Register 0x200
r0
0x5 Source Register for STR
Offset 12 0x20c
r1
0x200
Original Base
Register 0x200
r0
0x5 Source Register for STR
Offset
12 0x20c
r1 0x20c
Updated Base
Register
Pre-‐indexado: STR r0,[r1,#12]
n Post-indexado: STR r0,[r1,#12]!
88 Cortex -‐ Parte 1
09/09/13
45
Multiples Load y Store Registros • Sintaxis:
– <LDM|STM>{<cond>}<addressing_mode> Rb{!}, <register list> • 4 modos de direccionamiento:
– LDMIA / STMIA increment after – LDMIB / STMIB increment before – LDMDA / STMDA decrement after – LDMDB / STMDB decrement before
IA
r1 Increasing Address
r4
r0
r1 r4
r0
r1 r4
r0 r1 r4
r0
r10
IB DA DB LDMxx r10, {r0,r1,r4} STMxx r10, {r0,r1,r4}
Base Register (Rb)
89 Cortex -‐ Parte 1
LDMIA y STMIA
LDMIA R7!, {R0-R3, R5} ; Load R0 to R3-R5 desde R7, add 20 to R7 STMIA R0!, {R3, R4, R5} ; Store R3-R5 to R0: add 12 to R0
90 Cortex -‐ Parte 1
09/09/13
46
PUSH y POP
Funcion:
PUSH {R0-R7, LR} ; push al stack (R13) R0-R7 y la ; dirección de retorno
... ; Cuerpo de la función
... POP {R0-R7, PC} ; restaura R0-R7 del stack ; y el PC y retorna
91 Cortex -‐ Parte 1
Uso de la Pila
92 Cortex -‐ Parte 1
09/09/13
47
Push y Pop
PUSH {R0} ; R13 = R13 - 4, luego Memory[R13] <- R0 POP {R0} ; R0 <- Memory[R13], luego R13 = R13 + 4
93 Cortex -‐ Parte 1
Push y Pop Ampliados
94 Cortex -‐ Parte 1
09/09/13
48
Uso de la pila en subruOnas
; R0 = X, R1 = Y, R2 = Z BL funcion1 ; Regresa al prgma ppal ; R0 = X, R1 = Y, R2 = Z ... ;
funcion1 PUSH {R0} ; almacena R0 en pila y ajusta SP PUSH {R1} ; almacena R1 en pila y ajusta SP PUSH {R2} ; almacena R2 en pila y ajusta SP ... ; Ejecuta tarea. (R0, R1 y R2 pueden cambiar) POP {R2} ; restaura R2 y reajusta SP POP {R1} ; restaura R1 y reajusta SP POP {R0} ; restaura R0 y reajusta SP BX LR ; R
95 Cortex -‐ Parte 1
Program Status Register – Ampliado y Condensado
• APSR - Application Program Status Register – ALU flags • IPSR - Interrupt Program Status Register – Interrupt/Exception No. • EPSR - Execution Program Status Register
• IT field – If/Then block information • ICI field – Interruptible-Continuable Instruction information
Condensado Almacenado en el stack al Inicio de
excepción
96 Cortex -‐ Parte 1
09/09/13
49
Instrucciones de control de flujo
97 Cortex -‐ Parte 1
Instrucciones de control de flujo
98 Cortex -‐ Parte 1
09/09/13
50
Saltos - Branch • Instrucciones de salto (Branching): BX, B, BL • B: salto con desplazamiento de 24 bits con
signo • BL: enlace (link) PC -> R14 • Instrucciones de transferencia de datos: LDR,
STR, LDRH, STRH, LDRSB, LDRSH, LDM, STM, SWP.
99 Cortex -‐ Parte 1
Control de flujo
100 Cortex -‐ Parte 1
09/09/13
51
• Branch : B{<cond>} etiqueta • Branch with Link : BL{<cond>} Etiqueta subrutina • El procesador desplaza el campo del offset a la izquierda en
dos lugares, extiende el signo y lo suma al PC – ± 32 Mbyte de rango – ¿Cómo se pueden implementar Branches mayores?
28 31 24 0
Cond 1 0 1 L Offset
Campo de condiciones
Link bit 0 = Branch 1 = Branch with link
23 25 27
Instrucciones de Branch
101 Cortex -‐ Parte 1
Subrutinas
BL subru … Subru: ….
mov pc,r14
102 Cortex -‐ Parte 1
09/09/13
52
AAPCS Procedure Call Standard for the ARM® Architecture
103 Cortex -‐ Parte 1
Uso de Registros
r8 r9/sb r10/sl r11
r12
r13/sp r14/lr r15/pc
r0 r1 r2 r3
r4 r5 r6 r7 Variables en registros
deben ser preservadas
Argumentos a funcion Resultado(s) de functon
alterables ((Parámetros pasados
en la pila)
Scratch register (alterable)
Stack Pointer Link Register
Program Counter
El compilador tiene un conjunto de reglas conocidas como Procedure Call Standard que determina como pasar parámetros a las funciones (ver AAPCS) Los flags del CPSR pueden corromperse por una llamada inapropiada a función Si se vinculan tutinas en assembler con rutinas en C deben seguir el protocolo El AAPCS es parte del nuevo ABI de la arquitectura ARM ABI = Application Binary Interface
Register
- Stack base - Stack limit e
- R14 puede serusado una vez que se almacenó en pila - SP debe ser 8 bytes (2 palabras alineadas)
104 Cortex -‐ Parte 1
09/09/13
53
Branches y subrutinas en ARM • B <etiqueta>
– Relativo al PC ±32 Mbyte range. • BL <subrutina>
– Almacena la dirección de retorno en LR – Retorna restaurando el PC desde LR – Para lamadas a subrutina desde una subrutina, LR debe ser guardada
en la pila
STMFD sp!,{regs,lr} : BL func2 : LDMFD sp!,{regs,pc}
func1 func2 : : BL func1 : :
: : : : : MOV pc, lr
105 Cortex -‐ Parte 1
Instrucciones reservadas de control
106 Cortex -‐ Parte 1
09/09/13
54
Instrucciones de control
• Instrucciones de excepciones: SVC • Instrucciones del Coprocesador: CDP,
LDC, STC, MRC, MCR. • Cortex no ejecuta estas instrucciones
p e r o d e j a a l c o p r o c e s a d o r l a manipulación de ellas.
107 Cortex -‐ Parte 1
Modos de Operación
108 Cortex -‐ Parte 1
09/09/13
55
Modos del Procesador
• Handler Mode: Utilizado para gerenciar excepciones. El procesador retornará al modo Thread al finalizar el procesamiento de la excepción.
• Thread Mode: Utilizado para ejecutar software de aplicación. El procesador entra en este modo luego del reset. • En modo Thread, el registro CONTROL maneja la ejecución del
programa en forma privilegiada o no privilegiada. • En modo Handler siempre se trabaja en forma privilegiada
109 Cortex -‐ Parte 1
Niveles de privilegio
• No privilegiado: • El soqware Oene acceso limitado a las instricciones MSR y MRS y no puede ejecutar la instrucción CPS
• No puede acceder a: system Omer, NVIC, o system control block
• Tiene algunas zonas de acceso restringido a memoria o periféricos.
• Unprivileged soqware executes at the unprivileged level
• Privilegiado: El soqware Oene acceso a todas las instrucciones y recursos
110 Cortex -‐ Parte 1
09/09/13
56
Privilegios
111 Cortex -‐ Parte 1
Registros para cada modo
112 Cortex -‐ Parte 1
09/09/13
57
Modos de trabajo
113 Cortex -‐ Parte 1
Transiciones permiOdas
114 Cortex -‐ Parte 1
09/09/13
58
Conmutación de estados
Desde el modo Usuario no se puede pasar al modo privilegiado por voluntad propia
115 Cortex -‐ Parte 1
Agenda
• Introducción • Presentación de la Familia Cortex M3 • Arquitectura de los Cortex M3 • Repertorio de Instrucciones y Ejemplos • Sistema de Memoria • Excepciones, Interrupciones y el NVIC • La familia NXP LPC17xx
116 Cortex -‐ Parte 1
09/09/13
59
Matriz de buses mulOcapa AHB
117 Cortex -‐ Parte 1
Mapa de Memoria Genérico
118 Cortex -‐ Parte 1
09/09/13
60
Mapa de memoria detallado
119 Cortex -‐ Parte 1
Unidad de Protección de memoria • Soporta 8 regiones (de 32bytes a los 4GB) • Las reglas de protección están basadas en el Opo de transacción
(read, write o execute) y el privilegio del código realizando el acceso
• La violación de la MPU producirá una excepción de Falla en el Gerenciamiento de Memoria (Memory Management Fault )
• Escenarios de uso de la MPU: • La MPU puede ser programada por un RTOS a fin de evitar que los datos
usados por el kernel sean protegidos de otros usuarios • Que ciertas zonas de memoria sean sólo de lectura para prevenir su
borrado accidental • Para aislar regiones de memoria entre disOntas tareas en un sistema
mulOtarea
120 Cortex -‐ Parte 1
09/09/13
61
Manipulación de Bits (operación atómica sobre bits)
121 Cortex -‐ Parte 1
Manejo de Bits
• El manejo de bits de los ARM7 es bastante primiOvo y requiere las acciones de read-‐modify-‐write {picas de los microprocesadores
• En la familia Cortex se rescató la filoso|a del bit set – bit clear de los microcontroladores.
• Buscando no crear nuevas instrucciones se asociaron palabras de una zona de memoria con bits de periféricos. Es llamado Bit Band
122 Cortex -‐ Parte 1
09/09/13
62
Bit Banding
123 Cortex -‐ Parte 1
Bit Banding
124 Cortex -‐ Parte 1
09/09/13
63
Bit Banding
Cuando se utiliza la dirección del bit-band alias, cada b i t ind iv idual puede ser accedido individualmente en forma separada en el LSB de cada palabra alineada en dirección
125 Cortex -‐ Parte 1
Bit Band
126 Cortex -‐ Parte 1
09/09/13
64
Endianess
• Las variables mulObyte pueden ser almacenadas y leídas de menor a mayor o viceversa.
• Por omisión se emplea el formato Big Endian.
• No es frecuente que se cambie a lo largo de la ejecución de un programa y la uOlización de una u otra forma de almacenar las variables es transparente para el usuario
Cortex -‐ Parte 1 127
Agenda
• Introducción • Presentación de la Familia Cortex M3 • Arquitectura de los Cortex M3 • Repertorio de Instrucciones y Ejemplos • Sistema de Memoria
• Excepciones, Interrupciones y el NVIC • La familia NXP LPC17xx
128 Cortex -‐ Parte 1
09/09/13
65
Excepciones e Interrupciones
129 Cortex -‐ Parte 1
Excepciones
• Es un concepto más amplio que las interrupciones pues no necesariamente se producen por acciones externas.
• Las interrupciones son un subgrupo de las excepciones y se procesan similarmente
130 Cortex -‐ Parte 1
09/09/13
66
Excepciones
131 Cortex -‐ Parte 1
Excepciones
Externas
132 Cortex -‐ Parte 1
09/09/13
67
NVIC
• Se introduce un controlador de interrupciones vectorizadas y anidadas
• Permite el cambio dinámico de prioridades de interrupción.
• Reducción del Oempo de latencia de interrupción • Enmascaramiento individual de interrupciones • System Tick (Sys Tick), que es un contador descendente de 24 bits imaginado para trabajar con un RTOS u otras tareas similarmente planificadas
133 Cortex -‐ Parte 1
Interrupciones
• Una interrupción no enmascarable (INTNMI) • 1-240 interrupciones priorizables • Las interrupciones pueden ser enmascaradas
• Puede seleccionarse el número de interrupciones activas • El controlador de interrupciones anidadas (NVIC) está fuertemente asociado al núcleo del procesador • Las entradas de interrupción son activas ALTA
134 Cortex -‐ Parte 1
09/09/13
68
Terminología (a ser ampliada) • Determinístico: Que es predecible. Dado un conjunto de
entradas, siempre producirá las mismas salidas pasando por la misma secuencia de estados.
• Prevaciado (preemption) Habilidad de un sistema operativo o programa similar de detener la ejecución de una tarea programada a favor de una tarea de mayor prioridad.
• Tail chaining: Forma de encolar los retornos de interrupciones anidadas, de forma de optimizar el tiempo total de ejecución.
• Latencia de interrupciones: Demora experimentada desde que se genera una interrupción hasta que es atendida
135 Cortex -‐ Parte 1
Manejo de interrupciones microcodificado
• Entrada: • Se pushean automáOcamente la la pila os registros R0–R3, R12, LR, PSR, y
el PC • En paralelo se hace la pre-‐fetch de la ISR en el bus de instrucciones. • ISR esta lista para comenzar tan pronte termine las operaciones de PUSH. • La llegada tardía de otra interrupción reiniciará el prefetch de la ISR pero
no necesita repeOr el salvado de registros. • Salida:
• El estado del procesador es recuperado automáOcamente de la pila. • En paralelo, la instrucción interrumpida es prefetched, lista para reiniciar
la ejecución apenas se completen los POPs de la pila. • Los POPs de la pila pueden ser interrumpidos, permiOendo nuevas ISR ser
inmediatamente atendidas sin la sobrecarga temporal de guardar registros
136 Cortex -‐ Parte 1
09/09/13
69
Las excepciones y el stack
Cortex -‐ Parte 1 137
Interrupciones
• Latencia de interrupciones determinística • Características avanzadas
• Prioridad de pre-vaciado • Tail chaining (encadenado de colas)
138 Cortex -‐ Parte 1
09/09/13
70
Latencia de Interrupciones del NVIC
Latencia de interrupciones determinística • Cortex-M3 tiene una latencia de interrupción de 12
ciclos y 12 ciclos para retornar de la ISR • ARM7 tiene una latencia de interrupción entre 24 y
42 ciclos y 16 de retorno. NO ES DETERMINÍSTICO
139 Cortex -‐ Parte 1
Tail Chaining
• En el caso de que una interrupción de mayor prioridad interrumpa una de menor prioridad, se abreviará el proceso de salida y nueva entrada a interrupción (Tail Chaining)
140 Cortex -‐ Parte 1
09/09/13
71
Tail Chaining
141
PUSH POP ISR 1 PUSH POP ISR 2
PUSH ISR 1 POP ISR 2
26 16 26 16
12
IRQ1
IRQ2
ARM7 Manejo interrupciones en
assembler
Cortex-M3 Manejo de interrupcione s
por hardware
6 12
42 CICLOS
6 CICLOS
Mayor
Tail-chaining
ARM7 • 26 Ciclos desde IRQ1 a la entrada de ISR1
• 42 ciclos si LSM • 42 ciclos desde salida ISR1 a entada ISR2 • 16 ciclos para retornar desde ISR2
Cortex-M3 • 12 ciclos desde IRQ1 a la entrada de ISR1
• 12 ciclos si LSM • 6 ciclos desde salida ISR1 a entrada ISR2 • 12 ciclos para retomar desde ISR2
En el caso de que una interrupción de mayor prioridad interrumpa una de menor prioridad, se abreviará el proceso de salida y nueva entrada a interrupción (Tail Chaining)
Cortex -‐ Parte 1
Latencia de interrupciones -‐ Prevaciado
POP ISR 1 PUSH 2 POP ISR 2
ISR 1 POP ISR 2
16 26 16
1- 12
IRQ1
IRQ2
ARM7
Cortex-M3
6
42 ciclos
7-18 ciclos
ARM7 • El procesador debe terminar con los POPs y luego relizar los PUSH
Cortex-M3 • POP puede ser abandonado tempranamente si llega otra interrupción • Si POP es interrumpido, sólo toma 6 ciclos en entrar en ISR2 (equivalente al Tail chaining)
Mayor
POP
12
142 Cortex -‐ Parte 1
09/09/13
72
Latencia de interrupciones – Llegada tardía
ISR 2
IRQ1
IRQ2
ISR 2
Tail-Chaining
ISR 1 PUSH PUSH POP POP
PUSH POP
ARM7
Cortex-M3
Mayor
Cortex-M3 • Se interrumplen los push a ISR 2 • Stacking continúa pero la dirección del nuevo vector se busca en paralelo • 6 ciclos más tarde entra ISR1. • Tail-chain en ISR 2
ARM7 • 26 ciclos Para entrar a ISR2 • Immediatamente pre-vaciado por IRQ1 y lleva 26 ciclos más entrar a ISR 1. • ISR 1 se completa y lleva 16 ciclos Retornar a ISR 2.
26 16 16 26
12 6
ISR 1
143 Cortex -‐ Parte 1
Tabla de vectores Inicial
144 Cortex -‐ Parte 1
09/09/13
73
Tabla de vectores Inicial
145 Cortex -‐ Parte 1
Regreso de excepción
Cortex -‐ Parte 1 146
09/09/13
74
Desde el Reset…..
147 Cortex -‐ Parte 1
Referencias h~p://event.on24.com/clients/default/presentaOon/default.html?
Otlecolor=000000&evenOd=143900&sessionid=1&username=&partnerref=&format=rmaudio&key=4B2981D839231C9C19F8AF717E67D193&text_language_id=en&playerwidth=1020&playerheight=685&eventuserid=46875874&conten~ype=A&mediametricsessionid=40306582&mediametricid=358721&usercd=46875874&mode=launch
h~p://ics.nxp.com/support/training/cortex-‐m.intro/
h~p://ics.nxp.com/support/training/lpc1700.overview/
148 Cortex -‐ Parte 1
09/09/13
75
That’s All Folks
149 Cortex -‐ Parte 1
Muchas Gracias