Publicado el 18 de Septiembre del 2019
817 visualizaciones desde el 18 de Septiembre del 2019
535,0 KB
15 paginas
Creado hace 8a (25/04/2017)
Departamento de Ingeniería Electrónica
ETSI de Telecomunicación
Universidad Politécnica de Madrid
Práctica 1:
Introducción al entorno
MPLAB X y simulación de
programas en
ensamblador y C
Autores:
Pedro José Malagón Marzo
Profesores del Dpto. de Ingeniería Electrónica
Fecha última revisión: Abril 2017
SELC – Introducción al entorno MPLAB X y simulación de programas en ensamblador
Contenido
1.
Introducción ....................................................................................................................... 4
2. Proyecto de ejemplo: ports_control.X ............................................................................... 4
3. Primer proyecto: p1.X ........................................................................................................ 5
3.1. Ejercicio. Modifica ports_control.S ................................................................................. 6
4. Entradas en el simulador: Estímulos .................................................................................. 9
4.1. Ejercicio. Función mPORTA2PORTB. ............................................................................. 10
5. Big Endian y Little Endian ................................................................................................. 10
5.1. Ejercicio. Endianness .................................................................................................... 10
6. Funciones en C ................................................................................................................. 11
2
SELC – Introducción al entorno MPLAB X y simulación de programas en ensamblador
Tabla de figuras
Figura 1. Selección de pines para el Logic Analyzer ................................................................... 7
Figura 2.
I/O Pins con registros del puerto A ............................................................................. 7
Figura 3. Breakpoint inicial ........................................................................................................ 8
Figura 4. Barra de herramientas del depurador ........................................................................ 8
Figura 5. Personalización de la barra de herramientas .............................................................. 9
Figura 6. Selección de estímulos ................................................................................................ 9
Figura 7. Tipo de proyecto para PIC32 ..................................................................................... 12
Figura 8. Selección de dispositivo ............................................................................................ 12
Figura 9. Escoger el simulador como hardware ....................................................................... 13
Figura 10. Escoger el compilador XC32 .................................................................................... 13
Figura 11. Nombre de proyecto y establecer como Main Project ........................................... 14
3
SELC – Introducción al entorno MPLAB X y simulación de programas en ensamblador
1. Introducción
La sesión práctica 1 consiste en utilizar realizar programas en ensamblador de MIPS y en C para
un PIC de la familia PIC32MX. Los objetivos más importantes de esta práctica son:
•
Familiarización con el entorno de desarrollo MPLAB IDE de Microchip:
o Simulador
o Depuración de programas
• Consolidación de conceptos básicos vistos en clase:
o Manipulación de bits
o Control de periféricos: GPIO
Al igual que en la práctica 0 utilizaremos MPLAB X IDE para editar y simular el programa.
Utilizaremos el compilador XC32 para compilar.
En primer lugar abriremos un proyecto existente en ensamblador, con un programa en
ensamblador, que
lo que se pide.
Aprenderemos a visualizar el estado de los pines GPIO y provocar cambios en las entradas.
Además veremos otras utilidades de depuración: variables, registros y memoria.
iremos modificando y ampliando para conseguir
En segundo lugar crearemos un proyecto en C e implementaremos las mismas funciones que
hayamos tenido que hacer en C, comprobando que obtenemos un resultado equivalente.
El resultado será un fichero comprimido (.zip) con un conjunto de capturas de pantalla, un
fichero ensamblador y un fichero en C con todas las funciones que se hayan pedido. Por
favor, sigue la nomenclatura indicada.
2. Proyecto de ejemplo: ports_control.X
En primer lugar tenemos que abrir el programa MPLAB IDE (buscar en el menú inicio).
Vamos a trabajar con un proyecto de ejemplo proporcionado por Microchip. Se trata del
proyecto ports_control.X, que realiza operaciones sobre el puerto A de GPIO. El código
original, en otras instalaciones, se puede encontrar en el directorio de instalación de xc32:
PATH_DE_MICROCHIP\xc32\v1.40\examples\assembly_examples\ports_control
En nuestro caso ya está disponible en la carpeta del entorno :
C:\Usuarios\usuario\MPLABXProjects
El proyecto tiene un único fichero fuente ports_control.S, en la carpeta Source Files. Este
fichero tiene dos funciones:
• mPORTAClearBits que recibe un único argumento: la máscara con los pines del
puerto A que hay que poner a 0.
• main, que prepara el argumento pasado a mPORTAClearBits (máscara para bit 7).
La extensión típica para el fichero ensamblador es .s o .asm. En este caso se utiliza .S (en
mayúscula) para poder utilizar el preprocesador de C (así lo interpreta el compilador xc32).
Gracias a ello el fichero hace uso de etiquetas (típicas del preprocesador de C) como a0 o
4
SELC – Introducción al entorno MPLAB X y simulación de programas en ensamblador
IOPORT_BIT_7, que están definidas en el fichero xc.h. Los ficheros de cabecera incluídos con
<> son los del sistema. Uno de los directorios del sistema es
C:\Archivos de programa\Microchip\xc32\v1.40\pic32mx\include
Los registros de control de un puerto de GPIO son:
• TRISx: cada bit controla la dirección del pin (0 es salida, 1 es entrada)
• PORTx: cada bit refleja el valor del pin (0 es nivel bajo, 1 es nivel alto)
•
LATx: cada bit refleja el valor del registro de salida del pin. Este valor coincide con el
pin si está configurado como salida, y puede no coincidir si es entrada.
Para modificar un solo bit de un registro, manteniendo el resto con su valor original,
normalmente es necesario leer el valor actual del registro, realizar una operación binaria (OR o
AND) con la máscara adecuada, y guardar el resultado en el registro. Se necesitan 3
operaciones (Read/Modify/Write o RMW) para hacerlo. Si observamos el código, se hace solo
en una operación. No se accede al registro LATA en este caso, sino al registro LATACLR. Casi
todos los registros de control de periféricos tienen asociados 3 registros que facilitan la
modificación de bits en una única instrucción. La función que se realiza depende del sfijo del
registro: CLR (para poner bits a 0), SET (para poner bits a 1) e INV (para cambiar bits). Los 4
registros (LATA, LATACLR, LATASET y LATAINV) son consecutivos y cada uno ocupa 32-bits,
aunque luego solo algunos de ellos tienen sentido, porque no haya tantas GPIO (se puede ver
en la sección 11.2 CLR, SET and INV Registers del datasheet).
Los nombres de los registros están disponibles en el datasheet del componente. Para que el
compilador los pueda utilizar, están definidos los nombres, asociados a las direcciones reales
del registro, en el fichero ensamblador
C:\Archivos de programa\Microchip\xc32\v1.40\pic32-libs\proc\32MX250F128B\p32mx250f128b.S
El fichero para C (p32mx250f128b.h), que vimos en clase, con las estructuras de acceso a cada
bit de los registros, tiene la palabra extern porque la variable ya está declarada en este fichero
con la palabra clave .global NOMBRE_DEL_REGISTRO (.global LATACLR en este caso).
El siguiente paso es generar el código máquina: compilar. Se compila el proyecto marcado
como Main Project (en negrita). Si no es el abierto, póngalo como Main Project haciendo click
en el botón derecho del ratón sobre el nombre del proyecto, y seleccionando la opción Set as
Main Project. La compilación se realiza a través del menú Run -> Build Main Project (
) o
a través del menú Run -> Clean and Build Main Project (
). En el segundo caso, se limpian
todos los ficheros intermedios generados en compilaciones anteriores y se compila desde cero
todo el proyecto. El proyecto debe compilar correctamente.
3. Primer proyecto: p1.X
En el anexo 1 detallamos los pasos a seguir para crear un proyecto para nuestro dispositivo
utilizando el compilador gratuito XC32, que incluye todas las herramientas para convertir los
ficheros en ensamblador o C a código máquina del MIPS disponible en el PIC32. El proyecto
incluye un conjunto de etiquetas de preprocesador para indicar el dispositivo y el lenguaje
utilizado. Según las etiquetas definidas se accede a una parte del fichero xc.h, tal y como se ha
visto en clase.
5
SELC – Introducción al entorno MPLAB X y simulación de programas en ensamblador
A continuación vamos a realizar nuestro primer programa, inspirado en el ejemplo. Cree un
nuevo proyecto y llámelo p1. Los ficheros fuente, tanto en ensamblador como en C, se
muestran en la carpeta Source Files. No es posible crear en el entorno un fichero .S mayúscula
de forma correcta, por lo que hay que añadir uno ya existente, creado fuera del entorno (en
este caso el del ejemplo ports_control). Hacemos click con el botón derecho en la carpeta y
seleccionamos Add Existing Item ...
N
Comentarios de: Práctica 1: Introducción al entorno MPLAB X y simulación de programas en ensamblador y C (0)
No hay comentarios