Escolar Documentos
Profissional Documentos
Cultura Documentos
ARM Cortex-M4
Índice
Índice __________________________________________________________________________________ 2
1. Introducción a la arquitectura Arquitectura ARM Cortex-M4 ______________________________ 3
1.1. Pipeline _______________________________________________________________________ 3
1.2. Mapa de memoria _______________________________________________________________ 4
1.3. Acceso a memoria - Endianness ___________________________________________________ 4
1.4. Buses del ARM Cortex-M__________________________________________________________ 5
1.5. STM32F407 ____________________________________________________________________ 6
2. Modelo de programación ___________________________________________________________ 7
2.1. Registros ______________________________________________________________________ 7
2.2. Registros de la unidad de coma flotante (FPU) _______________________________________ 8
2.3. Registro de estado ______________________________________________________________ 8
2.4. Unidad aritmético-lógica (ALU) ____________________________________________________ 9
2.5. Otras características del modelo de programación ____________________________________ 9
3. Juego de instrucciones – ISA (Instruction Set Architecture) ______________________________ 10
3.1. Sintaxis del lenguaje ensamblador ________________________________________________ 10
3.2. Modos de direccionamiento admitidos _____________________________________________ 11
3.3. Instrucciones de procesado de datos ______________________________________________ 12
3.4. Instrucciones de acceso a memoria _______________________________________________ 13
3.6. Instrucciones de salto y control __________________________________________________ 14
3.7. Códigos de condición ___________________________________________________________ 14
3.8. Sintaxis de un fichero para un programa ensamblador ________________________________ 15
3.9. Directivas ____________________________________________________________________ 15
3.10. Toolchain_____________________________________________________________________ 17
3.11. Depuración de código___________________________________________________________ 19
Definición de privilegios de acceso a memoria en el modo Debug ____________________________ 20
4. Bibliografía _____________________________________________________________________ 21
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
La arquitectura de un microprocesador viene descrita por los modelos funcionales que lo describen desde
el punto de vista de un programador: el juego de instrucciones con los que controlar al procesador, el
conjunto de registros disponibles, el mapa de memoria disponible, los buses de transferencia de datos
entre los distintos componentes (datapath), la arquitectura de pipeline, los modos de operación del
procesador o el modo de gestión de las interrupciones. La mayor parte de estos modelos están definidos
en la arquitectura estándar ARMv7-M, que el Cortex-M4 trata de implementar. Otros, son específicos de
la implementación particular del Cortex-M4. Asimismo, el microcontrolador de la tarjeta de desarrollo,
STM32F407 es una implementación de la firma ST del diseño Cortex-M4 ideado por ARM.
1.1. Pipeline
El ARM Cortex-M4 utiliza arquitectura Harvard con pipeline de 3 etapas:
Gracias a este pipeline, es capaz de recuperar instrucciones (fetch) de forma simultánea con la ejecución
de otra (execute), incluso si esta requiere acceso a memoria de datos gracias a la arquitectura Harvard.
Este paralelismo permite acelerar la ejecución de código. Por ejemplo, ejecutar las 4 instrucciones de la
figura siguiente requeriría 12 ciclos de reloj en ausencia de paralelismo (4 instrucciones x 3
ciclos/instrucción), pero se reduce a 6 ciclos en el Cortex-M.
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
Nota: las instrucciones del Cortex-M utilizan 16 o 32 bits, por lo que el bus de datos es de 32 bits. El
paralelismo mostrado en la etapa fetch es posible si se recuperan instrucciones de 16 bits.
1
Recuerde que 0x es una notación para números hexadecimales. 0x20000000 hace referencia a la dirección de
memoria en hexadecimal (20000000)16
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
El bus I-CODE se utiliza para recuperar (fetch) instrucciones de programa de la zona de memoria
reservada para código
El bus D-CODE se utiliza para lectura de datos auxiliares (constantes) de la zona reservada para
código
El bus de sistema da acceso al resto de la memoria y los periféricos
En un microcontrolador sencillo, la memoria de programa estará conectada a los buses D-CODE e I-CODE,
y la SRAM y los periféricos al bus de sistema.
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
1.5. STM32F407
Es un microcontrolador que implementa la arquitectura Cortex-M4, e incluye una larga lista de periféricos:
• Núcleo Cortex-M4
• 64kB RAM acoplada al núcleo
• Memoria de programa (Flash)
• SRAM
• Controlador DMA
• Generadores de reloj de alta y baja frecuencia
• Escaladores de frecuencia (divisores y PLL)
• Real Time Clock
• Temporizadores (TIM)
• Generadores de onda PWM
• Puertos de entrada/salida GPIO
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
2. Modelo de programación
La arquitectura del juego de instrucciones (Instruction Set Architecture – ISA) del Cortex-M es de tipo
load-store, es decir, la mayoría de las instrucciones no tienen acceso directo a la memoria, sino que
trabajan exclusivamente con los registros del procesador. Para cargar un dato en los registros desde la
memoria se utiliza la instrucción específica load. Para guardar datos de los registros de nuevo a memoria
se utiliza la instrucción store. De ahí el nombre de la arquitectura.
2.1. Registros
El procesador utiliza 16 registros de 32 bits. Los registros R0 a R12 son de propósito general, se utilizan
para almacenar variables de programa como el resultado de una operación o una dirección de memoria a
la que debe accederse. En cambio, el resto de registros tienen funciones especiales: R13 es el puntero
de pila (stack pointer – SP), del que en realidad existen dos versiones (Main Stack Pointer - MSP y Process
Stack Pointer –PSP) en función del modo de ejecución del procesador (por ejemplo para que el sistema
operativo use una, y la aplicación en ejecución use otra); R14 es el registro de enlace para las llamadas
a subrutinas (link register – LR); R15 es el contador de programa (program counter – PC), que almacena
la dirección de memoria de la siguiente instrucción a ejecutar.
Nota: las instrucciones codificadas en 16 bits no tienen acceso a los registros R8 a R12, por eso se
denominan high registers.
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
El PSR es accesible a través de 3 alias, o versiones enmascaradas del registro completo, como si fueran 3
registros distintos:
Application Program Status Register (APSR): contiene el estado actual de los bits o flags de
condición activados por las últimas instrucciones que se han ejecutado.
Interrupt Program Status Register (IPSR): contiene el número de la excepción que se atiende en
una Interrupt Service Routine (se estudiarán en Sistemas Electrónicos Digitales)
Execution Program Status Register (EPSR): contiene bits de estado sobre la ejecución
Nos fijaremos en el APSR especialmente, puesto que nos permite controlar el flujo de programa mediante
códigos de condición vinculados al estado de los flags N, Z, C, V y Q, que se detallan en la tabla:
Bit Descripción
31 N Flag Negativo / Menor que:
• 0: el resultado de la operación ha sido positivo, cero, “mayor que”, o “igual”
• 1: el resultado de la operación ha sido negativo o “menor que”
30 Z Flag Zero:
• 0: el resultado de la operación no fue cero
• 1: el resultado de la operación fue cero
29 C Flag Carry (acarreo):
• 0: una suma no produjo acarreo, o una resta produjo llevada (borrow)
• 1: una suma produjo acarreo, o una resta no produjo llevada (borrow)
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
La unidad de cálculo (Arithmetic Logic Unit – ALU) utiliza operandos de hasta 32 bits. El operando 1 se
toma directamente del banco de registros (Rn). El operando 2 se toma también del banco de registros
(Rm), pero se hace pasar por una unidad desplazadora de bits (barrel shifter) en serie con la ALU, lo que
permite realizar operaciones con operandos desplazados o escalados sin necesidad de invocar
instrucciones adicionales de desplazamiento (ver más adelante las instrucciones shift o rotate). Esto
permite modos de direccionamiento muy potentes para recorrer vectores de datos de forma eficiente.
El resultado de las operaciones se almacena de nuevo en el banco de registros (Rd). El usuario puede
decidir si el resultado afectará o no a los flags (N, Z, C, V…) del registro de estado APSR.
Privileged Unprivileged
Gestión de
Handler excepciones
mode
Stack: MSP
Excepciones e interrupciones
o Una excepción es un evento asíncrono que interrumpe el desarrollo normal de la
ejecución de un programa. Puede estar generado por software o por los periféricos (se
denominan “interrupciones”, un tipo de excepción), o por el propio hardware del
sistema (por ejemplo, un fallo de acceso a la memoria de programa). Cuando se genera
una excepción, el procesador suspende la tarea que está realizando en ese momento,
salva el contexto en la pila (es decir, introduce el contenido de los registros más
importantes en la memoria apuntada por el registro R13 o stack pointer) e inicia una
rutina de gestión de la excepción. Las excepciones de sistema se atienden con Exception
Handlers, y las interrupciones, menos dramáticas, con Interrupt Service Routines (ISR).
Una vez que la excepción ha sido atendida, el procesador recoge su contexto de la pila
y se retoma el hilo de ejecución anterior. El registro IPSR visto anteriormente contiene
el numero de ISR que está ejecutándose.
o El Cortex-M4 tiene un sistema de gestión de excepciones hardware y software: Nested
Vectored Interrupt Controller (NVIC), que asigna prioridades y gestiona la atención a
todas las excepciones posibles del sistema.
o El procesador entra en Handler mode siempre que atiende a una excepción.
Al contrario que con un lenguaje de alto nivel como C, los códigos binarios que componen las instrucciones
son específicos de cada procesador o de la arquitectura que implementa. El Cortex-M4 está basado en la
arquitectura ARMv7-M, pensada para sistemas que vayan a ser utilizados en microcontroladores con un
uso eficiente de la memoria. ARMv7-M utiliza el juego de instrucciones Thumb2 (a su vez, un estándar de
codificación de instrucciones), que contiene instrucciones tanto de 16 bits como de 32 bits para optimizar
la memoria de código.
Las instrucciones disponibles en la arquitectura ARMv7-M pueden agruparse por el tipo de función que
realizan, principalmente, en:
El listado completo está definido en el manual de referencia de la arquitectura ARMv7-M, pero existen
buenas síntesis disponibles3.
2
Note la ambigüedad del término “ensamblador”. Esta ambigüedad no existe en inglés.
3
Quick reference card for ARMv7 (Cortex-M4)
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
y Rm, cuyo resultado se almacene en el registro Rd, se realiza con la instrucción ADD Rd, Rn, Rm. Esta
instrucción puede codificarse con 16 o con 32 bits si pertenecen a los registros bajos (R0 a R7):
Codificación con
16 bits
Codificación con
32 bits
<op>{flags}{cond} Rd , Rn , Op2
donde:
El operando flexible Op2 puede hacer referencia a un literal (constante) o a muy diversas maneras de
utilizar el valor de un registro:
Un literal: #imm. El literal puede ser cualquier constante de 32 bits que pueda escribirse como
un número de 8 bits rotado a la izquierda por un número cualquiera de bits
O cualquier constante de la forma 0x00XY00XY, 0xXY00XY00 o 0xXYXYXYXY.
El valor de un registro desplazado: Rm {, shift}. El desplazamiento shift puede ser:
ASR #n: desplazamiento aritmético (respeta signo) a la dcha. n bits, 1 ≤n ≤ 32
LSL #n: desplazamiento lógico a la izqda. n bits, 1 ≤n ≤ 31
LSR #n: desplazamiento lógico a la dcha. n bits, 1 ≤n ≤ 32
ROR #n: rotación a la dcha. n bits, 1 ≤n ≤ 31
RRX: rotar a la dcha. un bit, con extensión
—: si se omite, se usa Rm sin desplazamiento
Los modos indexados presentan 3 variaciones en función del cálculo de la dirección efectiva a acceder y
de si se actualiza o no el valor de la base:
Las instrucciones Thumb-2 requieren incluir las instrucciones condicionales dentro de bloques if-then. Se
trata de una instrucción especial (IT) que avisa al procesador de que hasta 4 instrucciones siguientes
serán ejecutadas de forma condicional:
IT{x{y{z}}} cond
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
cond especifica la condición para que la primera instrucción del bloque se ejecute
para una segunda instrucción opcional, {x} especifica si se ejecuta cuando se cumple cond (en
cuyo caso se escribe T, de then) o cuando se cumple su inversa (en cuyo caso se escribe E, de
else)
para una tercera instrucción opcional, {y} especifica si la tercera instrucción se ejecuta según
cond (T) o su inversa (E)
para una cuarta instrucción opcional,{z} especifica si la segunda instrucción se ejecuta según
cond (T) o su inversa (E)
; esto es un comentario
DIRECTIVA ; obligatorio dejar un espacio antes del texto
; las directivas son propias de cada programa ensamblador
etiqueta ; da nombre a la posición de memoria de la siguiente instrucción
; no debe haber espacios antes de una etiqueta
instrucción op1, op2 ; obligatorio dejar espacio antes
3.9. Directivas
Las directivas no son parte del código ensamblador, sino instrucciones destinadas a controlar el
comportamiento del programa ensamblador o el linker, es decir, son específicas de cada entorno de
desarrollo. Por ejemplo, la directiva AREA se usa para declarar una sección de código o datos nueva, y su
funcionalidad. En la tabla siguiente se resumen algunas de las directivas del emsamblador Keil µVision
(armasm) más utilizadas y su utilidad:
El código a continuación muestra el uso de las directivas más importantes con un programa completo en
lenguaje ensamblador (en µVision, estaría definido en un fichero de texto con extensión .s) que realiza
la suma de los cinco primeros números pares, con algunas rutinas de inicialización típicas:
MOV R0, #0 ; R0 = 0
MOV R1, #2 ; R1 = 2
MOV R2, #5 ; R2 = 5
Lbegin ;etiqueta para la dirección de memoria de la siguiente
; instrucción, es decir, CBZ R2, lend
CBZ R2, lend ; Si R2 == 0 -> saltar a la dirección de la etiqueta lend
ADD R0, R1 ; R0 = R0 + R1
ADD R1, #2 ; R1 = R1 + 2
SUB R2, #1 ; R2 = R2 - 1
B lbegin ; saltar a la dirección de la etiqueta Lbegin (CBZ...)
lend
END
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
3.10. Toolchain
Para poder generar código ejecutable por el microprocesador, es necesario contar una serie de
herramientas de desarrollo de software: compilador de alto nivel, ensamblador, linker o enlazador,
cargador y depurador. Estas herramientas se utilizan típicamente en cascada, de mayor a menor nivel de
abstracción, y de menor a mayor nivel dependencia del microprocesador/microcontrolador concreto para
el que se desarrolla:
ARM Keil MDK (Microcontroller Development Kit) es un toolchain completo de desarrollo software para
microcontroladores o sistemas empotrados basados en microprocesadores ARM. En la figura se muestra un
ejemplo típico de flujo de desarrollo:
IDE para gestión de proyectos con Run-Time Environment, edición de código, recursos para
depuración… en la figura siguiente se muestran sus controles principales.
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
Depurador (Debug) y trazador (Trace, para inspección del procesador en tiempo real) con
capacidad de simulación del Cortex-M
Compilador ARM C/C++
Ensamblador
Gestor de componentes software
Instalador de software packs para el microcontrolador en uso, que permite gestionar los
componentes software a utilizar como librerías CMSIS (Cortex Microcontroller Software Interface
Standard, librerías estandarizados para MCU basados en Cortex-M que permiten reutilizar o portar
código más fácilmente), ficheros de configuración e inicialización, plantillas de código de
ejemplo, middleware, documentación…
Por supuesto, existen muchos otros entornos de desarrollo completes como IAR Embedded Workbench,
Atollic True Studio o SW4STM32 - System Workbench. Los dos últimos son especialmente interesantes por
tratarse de IDE gratuitas basadas en eclipse/GCC y directamente soportadas por STM.
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
A partir de ahí la depuración puede realizarse paso a paso como con la tarjeta física utilizandoel botón
siguiente, Ctrl+F5 o el menú Debug > Start/Stop Debug Session
El entorno uVision adopta la configuración de la figura siguiente en el modo de depuración. Los registros
R0 a R15 aparecen a la izquierda, junto con el registro de estado xPSR, que debe desplegarse pinchando
en (+).
Controles de depuración
Registros
Listado de código en ejecución
Ciertos accesos a memoria pueden no estar adecuadamente inicializados y la simulación podría generar
errores como el de la figura:
Para reconfigurar privilegios adecuados de acceso a memoria, una vez iniciado el modo Debug, se accede
a Debug > Memory Map… Se configura el rango de memoria deseado, los privilegios adecuados
(lectura/escritura/código ejecutable) y se añade la zona clicando en Map Range.
Esta definición sólo es válida durante la sesión de Debug iniciada, por lo que si se quieren guardar las
zonas de memoria definidas debe usarse un fichero .ini. Se trata de un fichero de texto simple que
contiene una línea por cada zona de memoria a definir. Por ejemplo, podemos crear con el Bloc de
Notas el fichero RAM.ini que contenga esta única línea:
MAP 0x40000000, 0x5FFFFFFF READ WRITE
Este fichero se carga en la ventana Project > Options for Target, dentro del tab Debug, clicando en el
botón ‘...’ para cargar un fichero Initialization File.
Electrónica Digital y Microprocesadores Apuntes ARM Cortex-M4
4. Bibliografía
Tema Referencia
Manual de aprendizaje de la
Yiu, The Definitive Guide to ARM Cortex-M3 andCortex-M4
arquitectura y leng uaje
Processors
ensamblador ARM Cortex -M4
Us er Ma nu al - Di s cove ry k it w it h ST M 32 F 40 7V G MC U
Tarjeta de desarrollo
User Manual - Getting started with software and firmware
STM32 F4 Discovery
environments for the STM32F4DISCOVERY Kit
Softw are AR M Ke il M DK
Get ti ng st art ed w ith MD K Cre ate ap pl ic at ion s w i th
Entorno de desarrollo
µV is ion® for AR M® Cor tex ® - M mi cro controll ers
ARM Keil MDK
MD K V5 .1 0 L a b fo r t he S T M3 2F 4 D is cov ery Boar d -
Tutor ial