Actualizado el 21 de Marzo del 2018 (Publicado el 8 de Marzo del 2018)
3.052 visualizaciones desde el 8 de Marzo del 2018
4,6 MB
194 paginas
Creado hace 10a (28/01/2015)
ANTONIO JOSÉ VILLENA GODOY
RAFAEL ASENJO PLAZA
FRANCISCO J. CORBERA PEÑA
PRÁCTICAS DE ENSAMBLADOR
BASADAS EN
RASPBERRY PI
UNIVERSIDAD DE MÁLAGA / MANUALES
ii
Acrónimos
ii
Acrónimos
AAPCS
ARM
CPSR
CPU
CHI
CLO
CS
E/S
ETSII
FIQ
GNU
GCC
GDB
GPAFEN
GPAREN
GPEDS
GPFEN
GPHEN
GPIO
ARM Architecture Procedure Call Standard
Advanced RISC Machines
Current Program Status Register
Central Processing Unit
system timer Counter HIgher
system timer Counter LOwer
system timer Control/Status
Entrada/Salida
Escuela Técnica Superior de Ingeniería Informática
Fast Interrupt reQuest
GNU is Not Unix
GNU C Compiler
GNU DeBugger
GPIO Pin Async. Falling Edge Detect
GPIO Pin Async. Rising Edge Detect
GPIO Pin Event Detect Status
GPIO Pin Falling Edge Detect Enable
GPIO Pin High Detect Enable
General-Purpose Input/Output
iii
GPL
GPLEN
GPLEV
GPPUD
General Public License
GPIO Pin Low Detect Enable
GPIO Pin LEVel
GPIO Pin High Detect Enable
GPPUDCLK
GPIO Pin High Detect Enable CLocK
GPREN
GPIO Pin Rising Edge Detect Enable
GPU
IRQ
LED
LR
PFC
PC
RAM
RISC
ROM
RTI
SoC
SP
SPSR
UMA
VFP
abt
mon
svc
und
Graphics Processing Unit
Interrupt ReQuest
Light Emitting Diode
Link Register
Proyecto Fin de Carrera
Personal Computer
Random-Access Memory
Reduced Instruction Set Computer
Read-Only Memory
Rutina de Tratamiento de Interrupción
System on a Chip
Stack Pointer
Saved Program Status Register
Universidad de MÁlaga
Vector Floating-Point
ABorT mode
secure MONitor mode
Supervisor mode (antiguamente SuperVisor Calls)
UNDened mode
Índice
Acrónimos
Prólogo
iii
xiii
1 Introducción al ensamblador
1.1 Lectura previa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 Características generales de la arquitectura ARM . . . . . . .
1.1.2 El lenguaje ensamblador . . . . . . . . . . . . . . . . . . . . .
1.1.3 El entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.4 Conguración del entorno para realizar las prácticas en casa .
1.1.5 Aspecto de un programa en ensamblador . . . . . . . . . . . .
1.1.6 Ensamblar y linkar un programa
1
2
2
5
6
7
9
. . . . . . . . . . . . . . . . 14
1.2 Enunciados de la práctica . . . . . . . . . . . . . . . . . . . . . . . . 15
. . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.1 Cómo empezar
1.2.2 Enteros y naturales . . . . . . . . . . . . . . . . . . . . . . . . 20
1.2.3
. . . . . . . . . . . . . . . . . . . . . . . 23
1.2.4 Rotaciones y desplazamientos . . . . . . . . . . . . . . . . . . 25
1.2.5
Instrucciones de multiplicación . . . . . . . . . . . . . . . . . 28
Instrucciones lógicas
2 Tipos de datos y sentencias de alto nivel
31
2.1 Lectura previa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.1.1 Modos de direccionamiento del ARM . . . . . . . . . . . . . . 31
2.1.2 Tipos de datos
. . . . . . . . . . . . . . . . . . . . . . . . . . 36
Instrucciones de salto . . . . . . . . . . . . . . . . . . . . . . . 38
2.1.3
2.1.4 Estructuras de control de alto nivel
. . . . . . . . . . . . . . . 42
2.1.5 Compilación a ensamblador
. . . . . . . . . . . . . . . . . . . 43
2.1.6 Ejercicios propuestos. . . . . . . . . . . . . . . . . . . . . . . . 46
2.2 Enunciados de la práctica . . . . . . . . . . . . . . . . . . . . . . . . 48
Suma de elementos de un vector . . . . . . . . . . . . . . . . . 48
2.2.1
v
3 Subrutinas y paso de parámetros
55
3.1 Lectura previa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.1.1 La pila y las instrucciones ldm y stm . . . . . . . . . . . . . . 56
3.1.2 Convención AAPCS . . . . . . . . . . . . . . . . . . . . . . . 58
3.2 Ejemplos de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.2.1 Funciones en ensamblador llamadas desde C . . . . . . . . . . 60
3.2.2 Funciones en ensamblador llamadas desde ensamblador . . . . 62
3.2.3 Funciones recursivas
. . . . . . . . . . . . . . . . . . . . . . . 64
3.2.4 Funciones con muchos parámetros de entrada . . . . . . . . . 70
3.2.5 Pasos detallados de llamadas a funciones . . . . . . . . . . . . 75
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.3.1 Mínimo de un vector . . . . . . . . . . . . . . . . . . . . . . . 76
3.3.2 Media aritmética, macros y conteo de ciclos
. . . . . . . . . . 78
3.3.3 Algoritmo de ordenación . . . . . . . . . . . . . . . . . . . . . 80
3.3 Ejercicios
4 E/S a bajo nivel
83
4.1 Lectura previa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.1.1 Librerías y Kernel, las dos capas que queremos saltarnos
. . . 84
4.1.2 Ejecutar código en Bare Metal . . . . . . . . . . . . . . . . . . 86
4.2 Acceso a periféricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.2.1 GPIO (General-Purpose Input/Output)
. . . . . . . . . . . . 89
4.2.2 Temporizador del sistema . . . . . . . . . . . . . . . . . . . . 95
. . . . . . . . . . . . . . . . . . . 96
4.3.1 LED parpadeante con bucle de retardo . . . . . . . . . . . . . 96
4.3.2 LED parpadeante con temporizador . . . . . . . . . . . . . . . 99
Sonido con temporizador . . . . . . . . . . . . . . . . . . . . . 99
4.3.3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.4.1 Cadencia variable con bucle de retardo . . . . . . . . . . . . . 101
4.4.2 Cadencia variable con temporizador . . . . . . . . . . . . . . . 101
4.4.3 Escala musical . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.3 Ejemplos de programas Bare Metal
4.4 Ejercicios
5 Interrupciones hardware
103
5.1 Lectura previa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
5.1.1 El sistema de interrupciones del ARM . . . . . . . . . . . . . 104
5.1.2 Rutina de tratamiento de interrupción . . . . . . . . . . . . . 109
5.1.3 Pasos para congurar las interrupciones
. . . . . . . . . . . . 110
5.1.4 El controlador de interrupciones . . . . . . . . . . . . . . . . . 112
5.1.5 Ejemplo. Encender LED rojo a los 4 segundos . . . . . . . . . 114
5.1.6 Ejemplos de aplicación . . . . . . . . . . . . . . . . . . . . . . 118
5.1.7 Parpadeo de todos los LEDs . . . . . . . . . . . . . . . . . . . 119
5.1.8 Control de LEDs rojos con pulsadores . . . . . . . . . . . . . . 123
5.2 Ejercicios
5.1.9 Parpadeo secuencial de LEDs con sonido por altavoz
. . . . . 127
5.1.10 Manejo de FIQs y sonidos distintos para cada LED . . . . . . 133
5.1.11 Control de luces/sonido con pulsadores en lugar temporizadores138
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
5.2.1 Todo con IRQs
. . . . . . . . . . . . . . . . . . . . . . . . . . 142
5.2.2 Alargar secuencia a 10 y parpadeo . . . . . . . . . . . . . . . . 142
5.2.3 Tope de secuencia y limitar sonido . . . . . . . . . . . . . . . 142
5.2.4 Reproductor de melodía sencilla . . . . . . . . . . . . . . . . . 143
A Funcionamiento de la macro ADDEXC
145
. . . . . . . . . . . . . . . . . . . . . . . . 145
A.1 Finalidad y tipos de salto
A.2 Elección: salto corto
. . . . . . . . . . . . . . . . . . . . . . . . . . . 146
A.3 Escribir una macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
A.4 Codicación de la instrucción de salto . . . . . . . . . . . . . . . . . . 147
A.5 Resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
B Funcionamiento de la placa auxiliar
149
B.1 Esquema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
B.2 Pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
B.3 Correspondencia
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
B.4 Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
B.5 Presupuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
B.6 Diseño PCB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
C Cable serie y bootloaders
155
C.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
C.2 Cable USB-serie desde el ordenador de desarrollo . . . . . . . . . . . 155
C.3 Cable serie-serie que comunica dos Raspberries . . . . . . . . . . . . . 157
C.4 Reseteo automático . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
C.5 Código fuente del bootloader . . . . . . . . . . . . . . . . . . . . . . . 162
D Resistencias programables de pull-up y pull-down
169
D.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
D.2 Pulsadores en la placa auxiliar . . . . . . . . . . . . . . . . . . . . . . 170
D.3 Ejemplo de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
D.3.1 Pulsador a masa sin cambiar conguración . . . . . . . . . . . 170
D.3.2 Pulsador a masa cambiando conguración . . . . . . . . . . . 172
D.3.3 Pulsador a Vcc sin cambiar conguración . . . . . . . . . . . . 175
Bibliografía
178
Índice de guras
1.1 Registros de la arquitectura ARM . . . . . . . . . . . . . . . . . . . .
1.2 Ubicación de datos en memoria . . . . . . . . . . . . . . . . . . . . .
1.3 Entorno típico de programación . . . . . . . . . . . . . . . . . . . . .
1.4
1.5
1.6
1.7
3
5
6
Instrucciones de desplazamiento lógico . . . . . . . . . . . . . . . . . 25
Instrucciones de desplazamiento aritmético . . . . . . . . . . . . . . . 25
Instrucciones de rotación . . . . . . . . . . . . . . . . . . . . . . . . . 25
Instrucciones de rotación con carry . . . . . . . . . . . . . . . . . . . 26
2.1 Representación de un vector en memoria . . . . . . . . . . . . . . . . 38
2.2
(a) Formato de una matriz C con N las y M columnas y (b) orga-
nización por las
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.1 Uso de la pila en una función . . . . . . . . . . . . . . . . . . . . . . 65
3.2 Uso de la pila en nuestra función . . . . . . . . . . . . . . . . . . . . 66
3.3 Mapa de pila de función poly3 . . . . . . . . . . . . . . . . . . . . . . 72
3.4 Mapa de función hipotética . . . . . . . . . . . . . . . . . . . . . . . 73
. . . . . . . . . . . . .
+
Comentarios de: PRÁCTICAS DE ENSAMBLADOR BASADAS EN RASPBERRY PI (0)
No hay comentarios