Laboratorio3 PDS
Laboratorio3 PDS
Laboratorio3 PDS
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
2. Equipo
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
* 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
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.
Ejemplos:
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 }
6
Los elementos individuales del arreglo [0] .. [4] pueden recibir un valor por medio de un
acceso indexado. Ejemplo:
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 };
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.
Decodificador
Interfaz de memoria
Interfaz de rastreo
Controlador de interrupciones
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.
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.
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:
Sistema de bus
Bus periférico privado
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:
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