Está en la página 1de 14

PROCESAMIENTO DIGITAL DE SEÑALES

(FIEE-UNI: Ciclo académico: 2019 − 1)


LABORATORIO No 3 Guia del Modulo ARM Cortex M3
Sayaverde Bravo Luis Enrique Herrera Jananpa Oscar Mallqui Taboada Joel
20160170F 201600110C 20120130C
lsayaverdeb@uni.pe oherreraj@uni.pe joel_mt_19@hotmail.com
9 de julio de 2019

1. Metas de aprendizaje
Bienvenidos al curso EloTrain Programación de microcontroladores ARM Cortex M3 de 32
bits. El personal de LUCAS-NÜLLE les desea gratos momentos durante el trabajo con los temas
de esta unidad didáctica y mucho éxito en la ejecución de los experimentos. Las páginas siguientes
proporcionan una visión general de los contenidos del curso y del material requerido.
El curso comprende la transmisión de conocimientos básicos acerca del entorno de programación
compuesto por el equipo y el software, definición de conceptos así como práctica en el manejo de
los componentes. En todos los ensayos siguientes se emplearán los conceptos propios del entorno
de programación sin mayores comentarios.
Los estudiantes se familiarizarán con la estructura del microcontrolador y su periferia, al igual
que con la programación estructurada, desde el punto de partida hasta llegar a la solución, a partir
de ejemplos sencillos.
En los primeros ejercicios se implementan diversas estructuras de control e interrupciones, y se
analizan las posibilidades de operar con bits en el lenguaje de programación C. Se emplean puertos,
pines de puerto y el convertidor de señales analógicas a digitales incorporado al chip.
Otro capítulo se ocupa de la utilización de bibliotecas de funciones previamente establecidas
para el bus I2 C y el empleo de la pantalla LCD I2 C.
El grupo de ejercicios finales se ocupa del control de un código de audio y del procesamiento
de datos digitalizados también de audio.

1.1. Contenidos de aprendizaje


Introducción a la programación en lenguaje C de sistemas embebidos.
Arquitectura de la unidad Cortex M3 y modelo de programación.

Primeros pasos en la programación del microcontrolador Cortex M3.


Programación de aplicaciones comunes de microcontrolador.

1
2. Equipo

Figura 1: Equipo a utlizar en Laboratorio

CO4203-2A Interfaz UniTrain-I


SO4203-3B Interfaz UniTrain-I
SO5146-1N Juego de cables EloTrain
SO4000-4J Módulo ARM Cortex M3
SO4000-4L Módulo LCD I2C
PS2123-7B 2 pulsadores
PS2121-8G 1 potenciómetro de 10 K
PS2121-3Q 2 resistores, 10 K, 0,5 W
PS2123-5B 4 leds
PS2121-2R 4 resistores, 180 ohmios, 1 W
PS2121-3U 1 resistor, 22 K, 0,5 W
PS2121-3W 1 resistor, 33 K, 0,5 W
PS2125-3E 1 circuito integrado AND/NAND, cuádruple

3. Componentes del equipo de ejercicios


3.1. Módulo ARM Cortex M3
El módulo ARM Cortex M3 está equipado con un microcontrolador LPC1768 fabricado por la
empresa NXP. La unidad ofrece, con sus numerosas interfaces, una amplia gama de posibilidades
de realización de ejercicios de programación de microcontroladores

2
Datos Técnicos y Características Eléctricas
1 Alimentación de tensión: 5 V.
2 Consumo de corriente: máximo 600 mA
3 24 pines universales de entradas y salidas de propósito general (GPIO)
4 2 entradas del convertidor de señales analógicas a digitales
5 1 salida del convertidor de señales digitales a analógicas
6 Interfaz I2 S
7 Interfaz I2 C
8 2 entradas externas de interrupción
9 Interfaz de dispositivo USB
10 Interfaz Ethernet
11 Interfaz de depuración
12 Interfaz VCP
13 Interfaz SPI

Figura 2: Tarjeta de desarrollo ARM CORTEX

* Medidas de seguridad
• Protección contra polarización inversa
• Resistencia a tensiones de hasta +/- 15 voltios.
• Los pines de entradas y salidas de propósito general toleran 5 voltios.
* Dimensiones
• 105 x 120,5 mm (ancho x altura).

Warning: Los pines de las entradas y salidas de propósito general admiten una tensión máxima
de 5 voltios. Cualquier valor superior de voltaje implicaría la destrucción del módulo.

3
3.2. Módulo LCD I 2 C
En el programa de ejercicios se utiliza una pantalla de cristal líquido (LCD) de tres líneas, con
una interfaz I2 C, que permite visualizar las variables de medición.
* Características eléctricas

• Características eléctricas
• Consumo de corriente: máximo 40 mA.
• Interfaz I 2 C
* Medidas de seguridad

• Protección contra polarización inversa.


• Resistencia a tensiones de hasta +/- 15 voltios.
* Dimensiones

• 75 x 59,5 mm (ancho x altura).


Observación: Además viene un modulo de codec de audio, el cual no viene especificado sus
características tecnicas en la guía del equipo, pero si es mencionado y utilizado en los ejercicios.

4. Introducción a la programación
Los lenguajes elevados brindan una serie de ventajas en el desarrollo de programas para micro-
controladores. Las razones esenciales de su empleo radican en los más altos niveles de abstracción,
la transferibilidad relativamente sencilla del código a diferentes sistemas de destino, al igual que
la gestión del software, en el que varias personas pueden desarrollar las tareas parciales de un
proyecto de gran envergadura. Adicionalmente, el desarrollo del código es más cercano al problema
que se debe resolver, aunque su profundidad y, por lo tanto, su velocidad de procesamiento no sea
tan alta como cuando se emplea una solución de ensamblador. Mediante el empleo de un lenguaje
elevado se puede partir de la premisa de que el código máquina generado por un compilador de
este tipo es entre un 10 y un 30 por ciento mayor, si se lo compara con el de un ensamblador, y
que, por lo expresado, se necesitará mayor memoria de programa en la tarjeta de destino.
Entre los lenguajes elevados de programación, en conjunción con los microcontroladores, el más
empleado es el C, debido a que, por una parte, se ha difundido ampliamente en otros sistemas
y, por otro lado, se encuentra más próximo al material de trabajo. Esto se demuestra, por ejem-
plo, por la posibilidad de manipulación de bits y por el empleo de arreglos de datos y punteros.
Las posibilidades de estructuración de los programas son muy extensas y el compilador los puede
convertir de manera eficiente en códigos máquina. Ascendiendo en la escala, C es compatible con
la versión C++, puesto que muchos compiladores generan códigos máquina a partir de estas dos
variantes. De esta manera se puede diseñar el programa orientándolo a su finalidad, mas esto no
será objeto de las siguientes observaciones.
El programa de ensayos aquí presente, permite una capacitación orientada a la práctica en el
lenguaje de programación C, en especial, para sistemas embebidos, con el uso de microcontrolado-
res. La unidad EloTrain, en conjunción con el módulo ARM CORTEX M3, se emplea a modo de
componente principal; es decir, como sistema concreto de destino de las soluciones de programa que
se desarrollarán en los ejercicios. El equipo de este sistema de capacitación consta de numerosos
componentes útiles para aplicaciones comunes de microcontroladores (pantalla LCD, pulsadores
funcionales, etc.).
Cabe resaltar que esta sección del curso no ha sido concebida como obra de consulta para el
estándar C; no obstante, constituye una introducción resumida en la que se aporta una visión ge-
neral de dicho lenguaje. Durante la escritura de programas puede recurrir a estas páginas si desea
realizar una rápida consulta. Sin embargo, se recomienda la lectura de literatura adicional y ade-
cuada sobre el lenguaje C. Como instrumento eficaz para el desarrollo de programas informáticos,
se emplea el juego de herramientas GCC for ARM Cortex M3, a disposición bajo términos de una
Licencia Pública General. El funcionamiento y la utilización de este kit de componentes se detalla
en el apartado denominado «Uso del juego de herramientas».

4
4.1. Una breve sinopsis del lenguaje C
La siguiente sinopsis del lenguaje C de programación sirve, en primer plano, como orientación,
al igual que para una rápida consulta de sus reglas básicas. No obstante, durante la creación de
textos fuente C propios, esto no reemplaza la utilización de un manual adecuado, que explique en
detalle este lenguaje de programación.

Figura 3: Ventana de inicio le CooCox CoIDE

Tipos de datos En el lenguaje de programación C se diferencia entre 4 tipos básicos de datos,


con los que se establece el rango de valores de variables al igual que las funciones. Se debe
observar que estos tipos básicos de datos, en parte, dependen del tipo de procesador del PC.
El tipo de datos int, por ejemplo, puede abarcar 2 o también 4 bytes. A continuación se
enumeran los tipos de datos de acuerdo con el estándar ANSI.

Tipo de dato Tamaño en Byte Denominación Rango de valores


char 1 Carácter ASCII -128 a 127
int 2 Número entero -32768 a 32767
float 4 Número con punto flotante -10 ^38 a 10 ^38
double 8 Número con punto flotante -10 ^308 a 10 ^308

Variables Las variables se encuentran en la memoria y poseen un tamaño fijo y un contenido


susceptible de modificaciones, siendo necesario, por otra parte, establecer su nombre. El
tamaño queda definido por el tipo de datos. Forma general de una declaración de variable:

1 Clase de memoria tipo nombre1, ..., nombreN ;

Ejemplos:

1 unsigned char caracter; /* Una variable de 8 bits sin signo */


2 int i; /* Una variable de numero entero con signo */
3 signed int h; /* Una variable de numero entero con signo */
4 float z; /* Una variable del tipo numero con punto flotante */

Funciones Un programa en lenguaje C, por lo general, está dividido en diferentes funciones.


Fundamentalmente, una función consta de un encabezado y de un cuerpo.

1 Tipo de dato, nombre de la funcion (parametros) // Encabezado de ...


la funcion

5
2 { ...
...
// Inicio del cuerpo de la funcion
3 Tipo de datos, variable; // ...
Variable local del valor de retorno
4 Expresion1; ...
// Contenido del cuerpo de la funcion
5 ...
6 Variable de retorno; // ...
Variable de retorno de la funcion
7 }

Después del nombre de la función es estrictamente necesario introducir un paréntesis en el


que se definan los parámetros de transferencia. El cuerpo de la función se caracteriza por los
corchetes donde se anotan las instrucciones que se deben cumplir.
Antes del final del cuerpo de la función se puede incluir una instrucción de retorno. La clase
de información de esta variable determina el tipo de datos de la función en su conjunto. Si
esta no debe suministrar ningún valor de retorno, se tiene, adicionalmente, un tipo de datos,
denominado void («sin validez»), el mismo que comunica al compilador que se trata de una
función carente de tipo, la misma que, en otros lenguajes de programación, recibe el nombre
de instrucción de procedimiento.
Dentro de un programa, se le debe indicar al compilador con exactitud que una de las fun-
ciones es la principal. El procesamiento del programa en lenguaje C se inicia a partir de ella
(main) de manera que todas las demás funciones serán llamadas desde esta.
Antes de que se dé paso a la función principal, todas las funciones subordinadas empleadas en
el programa deben declararse previamente, en el código fuente, como prototipos de funciones.
El prototipo de una función tiene la tarea de suministrar información adicional al compilador,
para transformar automáticamente parámetros y funciones, y para generar avisos de fallo o
advertencias si aparecieran datos no procesables.

1 // Prototipos de funcion −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−


2 void func1(int) // Prototipo de funcion1
3 int func2(void); // Prototipo de funcion2
4
5 // Funcion principal −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
6 void main(void) // Funcion principal
7 {
8 int a; // Variable local
9 func1(a); // Llamada de la funcion1
10 a = func2(); // Llamada de la funcion2
11 }
12
13 // Contenidos de la funcion −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
14 void func1(int b) // Funcion1
15 {
16 Expresion;
17 }
18
19 int func2(void) // Funcion2
20 {
21 int c; // Variable del valor de retorno
22 Expresion;
23 return c;
24 }

Tipos de datos estructurados


• Arreglos Un arreglo («array») o campo es una concentración de variables del mismo tipo
de datos. El primer elemento posee el índice 0. A continuación se presenta la estructura
general de un arreglo:

1 Tipo de arreglo Nombre del arreglo[tama[U+FFFD]


o del arreglo];
2 int array[5]={7,9,10,0,0};

6
Los elementos individuales del arreglo [0] .. [4] pueden recibir un valor por medio de un
acceso indexado. Ejemplo:

1 int x; // Variable ...


del tipo entero
2 array[4] = 0x0fa1; // Asigna al elemento 4 del ...
arreglo el valor 4001
3 x = array[4]; // A x se le asigna el ...
contenido del elemento 4 del arreglo

Estructuras La creación de estructuras permite reunir objetos de diferente tipo. Como compo-
nentes se pueden emplear variables, arreglos, al igual que otros tipos de elementos. A manera
de declaración es necesario introducir la palabra clave «struct»:

1 struct Name
2 {
3 Objeto1;
4 Objeto2;
5 };

Para acceder a los elementos individuales que se encuentran en la estructura se emplea el


operador de punto .:

1 struct date // Declaracion de la ...


estructura date
2 {
3 unsigned char day[7]; // Objeto dia
4 unsigned char month; // Objeto mes
5 unsigned int year; // Objetoa o
[U+FFFD]
6 }today; // Definicion de una variable de ...
estructura
7
8 unsigned char i; // Variable del tipo caracter
9 unsigned int j; // Variable del tipo numero entero[U+FFFD]
10 today.day[0]=1; // Elemento de arreglo 0 en elemento de ...
estructura dia = 1
11 today.month=12; // Elemento de estructura mes = 12
12 i=today.month; // Asignar valor i de elemento de ...
estructura
13
14 j=today.year; // Asignar valor j de elemento de ...
estructura

5. Arquitectura de la unidad M3 y modelo de programación


5.1. El núcleo de la unidad Cortex M3
El núcleo ARM Cortex™-M3 se basa en el principio denominado Reduced Instruction Set Com-
puter"(RISC), es decir, PC con juego reducido de instrucciones. Al contrario que en el principio
Çomplex Instruction Set Computer"(CISC), o juego de instrucciones complejo, el primero se sirve
de unas cuantas órdenes del procesador, lo cual posibilita una ejecución muy rápida, un breve tiem-
po de reacción a las solicitudes de interrupción y, por otra parte, posee una arquitectura económica
y compacta. La unidad del ARM Cortex™-M3 no se compone de una macro celda prefabricada y
fija, sino que permite al diseñador del chip la adaptación al sistema correspondiente antes de llegar
a la síntesis propiamente dicha del equipo. No obstante, gracias a la arquitectura básica conjunta,
se garantiza que todos los núcleos ARM Cortex™-M3 sean compatibles entre sí en lo concerniente
a las instrucciones.
El núcleo del procesador ARM Cortex™-M3 se basa en una arquitectura Harvard con un canal
de tres niveles y contiene funciones ampliadas como, por ejemplo, la multiplicación de ciclos únicos
y los divisores de hardware. En el procesador Cortex M3 se implementa la nueva arquitectura
Thumb-2®de dos juegos de instrucciones. Combinado con funciones tales como la memoria de

7
datos no alineada y la manipulación atómica de bits, este equipo ofrece la potencia de 32 bits al
precio de los dispositivos de 8 y 16 bits.

En el núcleo del procesador Cortex M3 están integrados los siguientes componentes:

Unidad aritmético lógica (ALU)


Banco de registros
Unidad de obtención de instrucciones

Decodificador
Interfaz de memoria
Interfaz de rastreo
Controlador de interrupciones

5.2. Juego de registros Cortex M3


El procesador Cortex-M3 tiene un juego de 15 registros.

5.2.1. Registros de propósito general


Los registros de R0 a R12 son de propósito general y útiles para realizar operaciones de datos.
En este contexto, se diferencia entre los registros bajos, de R0 a R7, y los altos, de R8 a R12.
Algunas instrucciones «thumb» de 16 bits solo se pueden ejecutar con los registros de R0 a R7.

8
5.2.2. Registros de punteros de pila
El Cortex M3 posee dos registros de punteros de pila (R13):
Puntero principal de pila (o MSP por «main stack pointer»)
Puntero de pila de procesamiento (o PSP por «process stack pointer»)

El registro R13 (MSP) se utiliza para el manejo de excepciones y es el puntero estándar de la pila.
El registro R13 (PSP), por su parte, se emplea por medio de un código de aplicación.

5.2.3. Registro de enlace


En el registro de enlace R14 se almacena la dirección de retorno tras el acceso a una subrutina.

5.2.4. Contador de programa


El registro R15 de contador de programa incluye la actual dirección del programa en actual
ejecución. Este registro se puede escribir para controlar el desarrollo del software.

5.2.5. Registros especiales


Además del juego de registros, el procesador Cortex-M3 posee otras instancias especiales que
le permiten controlar y supervisar la secuencia del programa:

Registros del estado de programa o (PSR)


Registros de máscara de interrupciones (PRIMASK, FAULTMASK y BASEPRI)
Registro de control (CONTROL)
Los registros del estado del programa contienen las banderas aritméticas y lógicas (de cero y de
acarreo), el estado de ejecución y el actual número de interrupciones en procesamiento. Se cuenta
también con el registro del estado del programa de aplicación (APSR), el de estado del programa
de interrupciones (IPSR) y el de estado del programa de ejecución (EPSR).
En el registro APSR se localizan las importantes banderas de cero, de acarreo, de desborda-
miento y de saturación fija («sticky saturation»).

El IPSR contiene el número de rutina del servicio de interrupción (ISR) del vector que se
encuentra en ejecución.

9
El registro EPSR incluye dos campos.
El registro PRIMASK desactiva todas las interrupciones con excepción de las no enmascarables
(o NMI por «nonmaskable interrupts») y las provocadas por fallos.
El registro FAULTMASK desactiva todas las interrupciones con excepción de las no enmasca-
rables o NMI.
El registro BASEPR I desactiva todas las interrupciones de un nivel determinado de prioridades
y de todas las que se encuentren por debajo de él.
El registro CONTROL define un estado privilegiado y su puntero de pila.

5.3. Interrupciones del Cortex M3


El procesador Cortex M3 posee un controlador de interrupciones vectorizadas y anidadas (o
NVIC por «nested-vectored-interrupt-controller»), alojado en su núcleo, que ofrece las siguientes
prestaciones:

5.3.1. Soporte de interrupción anidada


El NVIC ofrece la posibilidad de intercalar distintas fuentes de interrupción. Todas las interrup-
ciones externas y la mayoría de las del sistema pueden clasificarse en diversos niveles de prioridad.
Si aparece una interrupción, el NVIC compara su prioridad con el nivel de interrupción en ejecu-
ción. Si el nivel de la interrupción surgida tiene mayor jerarquía que la actual, el presente proceso
se suspende y, en lugar de ello, se ejecuta la rutina de servicio de la nueva interrupción.

5.3.2. Soporte de interrupción vectorizada


El Cortex M3 apoya las interrupciones vectorizadas. Si aparece una interrupción, el contador
del programa se ramifica hacia una dirección establecida en la tabla de vectores de interrupción,
ubicada en la memoria del Cortex M3. En esta dirección se registra una instrucción de salto hacia
la rutina de procesamiento propiamente dicha, la rutina de servicio de interrupción (ISR).

5.3.3. Soporte dinámico de cambios de prioridad


Los niveles de prioridad de las interrupciones se pueden modificar por software durante el tiempo
de ejecución. Esto también puede suceder mientras se encuentra en marcha el procesamiento de
una interrupción, ya que estas modificaciones solo se adoptan una vez que haya finalizado dicho
procesamiento.

5.3.4. Reducción de latencia de interrupción


El Cortex M3 contiene una serie de funciones ampliadas para acortar el tiempo de admisión de
una interrupción. Estas prestaciones consisten, por ejemplo, en el almacenamiento y restauración
automáticas de contenidos de registro, al comenzar y finalizar las rutinas de servicio de interrupción
(ISR), y la abreviación de los tiempos de conmutación al pasar de una ISR a otra.

5.3.5. Enmascaramiento de interrupciones


La configuración de una fuente de interrupción se produce por medio de los respectivos registros
de máscara denominados BASEPRI, PRIMASK y FAULTMASK.

10
5.4. Modelo de memoria del Cortex M3
El Cortex M3 posee una estructura de memoria predefinida. Por consiguiente, se puede acceder
a la periferia incorporada por medio de instrucciones. En la siguiente imagen se representa la
división del gran rango de 4 GB de la memoria:

La infraestructura interna del bus del Cortex M3 se ha optimizado para este modo de confi-
guración de la memoria. Existen diferentes sistemas de bus para acceder a un área concreta de la
misma:

Buses de código de memoria

Sistema de bus
Bus periférico privado

De este modo, al mismo tiempo, se garantiza la obtención de instrucciones procedentes de la


memoria de códigos y la transferencia de datos a otros sectores de la memoria.
La obtención de esta información, traída del área de la memoria de códigos, se lleva a cabo por
medio de dos sistemas de bus, el de «código I» y el de «código D».
El sistema de bus se utiliza para acceder a las memorias SRAM, a la RAM externa y a los
dispositivos también externos.
Con el bus periférico privado se puede acceder, a nivel de sistema, al controlador de interrup-
ciones NVIC, al registro de control de la unidad de microprocesador y a los componentes del
depurador.

5.5. Juego de instrucciones Cortex M3


El Cortex M3 posee el juego de instrucciones Thumb-2, lo que posibilita un uso eficaz de
comandos de 32 y 16 bits en un modo operativo que incrementa la densidad del código y la
eficiencia en el tiempo de su procesamiento.
En las versiones anteriores del ARM existían dos estados de operación, el estado ARM de
32 bits y el estado Thumb de 16 bits. En el primero se podían ejecutar todas las instrucciones
integradas con un elevado rendimiento. El inconveniente radicaba en la gran cantidad de memoria
de código requerida. En el estado Thumb de 16 bits se consiguió aumentar la densidad del código;
sin embargo, no se encontraban a disposición todas las instrucciones. Además, las excepciones
solo podían tratarse en el estado ARM de 32 bits, de modo que era necesario un cambio del
estado Thumb de 16 bits al de ARM de 32, manteniendo los excesos de información concomitante.
Adicionalmente, al desarrollar el código, se tenían que crear y compilar datos fuente separados
para los dos estados, lo que agregaba una gran complejidad a la escritura del programa.

11
Con el juego de instrucciones Thumb-2 es posible manejar todos los requisitos de procesamiento
en un estado y, así, evitar los inconvenientes de las antiguas versiones ARM.
En principio, se puede dividir el juego de instrucciones del Cortex M3 en órdenes de 16 y 32
bits. Dentro de las de 16 y 32 bits se diferencian otros grupos.
La tabla presenta una lista de grupos de comandos de 16 bits con las correspondientes instruc-
ciones de ensamblador:

Tipo de instrucción [HTML]EFEFEFDescripción


ADC, ADD, AND, ASR,
BIC, CMN, CMP, CPY, EOR,
LSL, LSR, MOV, MUL,
[HTML]EFEFEFOperaciones de datos MVN, NEG, ORR, ROR, SBC,
SUB, TST, REV, REVH,
REVSH, SXTB, SXTH,
UXTB, UXTH.
B, B, BL, BX, BLX
[HTML]EFEFEFRamificaciones (sin BLX en modo de
direccionamiento inmediato)
Instrucciones de LDR, LDRB, LDRH,
[HTML]EFEFEFcarga y LDRSB, LDRSH, STR,
almacenamiento simple STRB, STRH y variantes T
Instrucciones de
LDMIA, POP,
[HTML]EFEFEFcarga y
PUSH, STMIA
almacenamiento múltiple
BKPT se detiene en la
Generación de depuración si esta última está
[HTML]EFEFEF
excepciones habilitada y se produce un
fallo si está deshabilitada
Para uso de «switch»/«case».
Tabla de Estos son LDR con
[HTML]EFEFEF
ramificaciones desplazamientos
y ramificaciones
CPSIE y CPSID son
versiones rápidas de
instrucciones MSR (2)
[HTML]EFEFEFSistema y emplean los codificadores
estándar Thumb-2, aunque
solo se permite su empleo
si i y f y no a.
[HTML]EFEFEFRama combinada CBZ
[HTML]EFEFEFExtensión IT, NOP (incluye YIELD)
ISB, DBS y DMB son
instrucciones barrera
que garantizan que
Barreras determinadas acciones
se hayan culminado
antes de la ejecución
de la siguiente instrucción

En la tabla se representan los grupos de órdenes de 32 bits con las instrucciones de ensamblador
asignadas del Cortex M3:

12
Tipo de instrucción [HTML]EFEFEFDescripción
Operaciones de ADC{S}. ADD{S}, CMN, RSB{S}, SBC{S},
datos con SUB{S},CMP, AND{S}, TST, BIC{S},
direccionamiento EOR{S}, TEQ, ORR{S},MOV{S},
inmediato ORN{S} y MVN{S}
MOVW, MOVT, ADDW, and SUBW. MOVW
y MOVT cuentan con un operando inmediato de
Operaciones
16 bits (así se pueden remplazar cargas literales
de datos con
de la memoria). ADDW y SUBW cuentan con
direccionamiento
un direccionamiento inmediato de 12 bits (así
largo inmediato
también se pueden remplazar muchas de las
cargas literales de memoria).
BFI, BFC, UBFX y SBFX. Son operaciones bit
Operaciones a bit que permiten controlar la posición y el
de campo tamaño en bits. Soportan campos de bit C/C++
de bits (en estructos) además de muchas comparaciones
y algunas expresiones de asignación AND/OR
ADC{S}. ADD{S}, CMN, RSB{S}, SBC{S},
Operaciones
SUB{S},CMP, AND{S}, TST, BIC{S},
de datos con
EOR{S}, TEQ, ORR{S}, MOV{S}, ORN{S},
3 registros
y MVN{S}.Sin instrucciones PKxxx
Operaciones de
ASR{S}, LSL{S}, LSR{S}, ROR{S} y RRX{S}
desplazamiento
REV, REVH, REVSH, RBIT, CLZ,SXTB,SXTH,
UXTB,y UXTH. Instrucciones de extensión al
Varios
igual que lascorrespondientes instrucciones
ARM v6 de 16 bits
UMULL, SMULL, UMLAL y SMLAL.
Conteo de ciclo basado en tamaños de entrada.
Multiplicación
Esto es, ABS (entradas)<64K,
finalización de manera temprana
Soporta formatos PC +/-imm12, Rbase +imm12,
Direccionamiento
Rbase +/-imm8 y ajuste de registros,incluyendo
de cargas y
desplazamientos. Variantes T empleadas
almacenamiento
en modo de privilegio
LDREX, STREX, LDREXB, LDREXH, STREXB,
Carga y
STREXH, CLREX. Esto falla si no hay monitor
almacenamiento
local (si IMP mes DEF). En este perfil no se
múltiple
incluyen DREXD ni STREXD
B, BL y B. Sin BLX (1) porque siempre cambia
Ramificaciones
de estado. Sin BXJ
MSR(2) y MRS(2) remplazan a MSR/MRS pero
también cumplen más funciones. Acceden a otras
Sistema pilas y también a los registros de estado
Los CPSIE/CPSID de 32 bits no son compatibles
con el soporte. Sin RFE ni SRS
NOP y YIELD (indicio NOP). Sin MRS (1),
Extended32
MSR (1),ni SUBS (enlace de retorno al PC)
SDIV y UDIV. 32/32 divide a los dos, con o
sin signo,con resultado de cociente de 32 bits
División (sin residuo, se puede derivar por sustracción).
Se produce un retorno temprano si el dividendo
y el divisor tienen un tamaño similar
WFI, WFE y SEV se clasifican como
Reposo instrucciones NOP,que
13 controlan la respuesta
en estado de reposo
SSAT y USAT realizan la saturación en un registro.
Referencias

14

También podría gustarte