Criando Biblioteca para LPC1768- (Parte 2/21)

Creando biblioteca para LPC1768- (Parte 2/21)

Este es otro artículo que presenta la programación del microcontrolador ARM Cortex-M3 LPC1768. La mayoría de los tutoriales utilizarán bibliotecas prediseñadas en los siguientes tutoriales. A veces es necesario crear una nueva biblioteca para su propio proyecto. Este tutorial explica cómo crear una biblioteca personalizada en Keil y también incluye una biblioteca creada para las funciones GPIO del LPC1768. La configuración del entorno para el desarrollo de ARM Cortex M3 se analiza detalladamente en este artículo.

El LPC 1768 es un microcontrolador basado en ARM Cortex-M3 para capacidades de aplicaciones integradas con bajo consumo de energía y un alto nivel de integración. El ARM Cortex M3 está diseñado para mejorar las capacidades de depuración y un mayor nivel de integración del sistema. Funciona a una frecuencia de CPU de 100 MHz e incorpora una tubería de 3 etapas y utiliza una arquitectura Harvard con buses de datos e instrucciones locales separados para periféricos de tercer bus. La CPU ARM Cortex-M3 tiene una unidad de captación previa interna para admitir ramas especulativas. Los componentes periféricos incluyen memoria flash de 512 KB, memoria de datos de 64 KB, Ethernet MAC, USB OTG, 4 UART, controlador DMA de uso general de 8 canales, 2 controladores SSP, DAC de 10 bits, interfaz de codificador de cuadratura, interfaz SPI, 3 buses I2C interfaz, interfaz de bus I2S de 2 entradas más 2 salidas, 4 temporizadores de uso general, reloj en tiempo real (RTC) de potencia ultrabaja con suministro de batería independiente y hasta 70 pines de E/S de usuario General, 6 salidas generales -propósito PWM. Los LPC1768/66/65/64 son compatibles con los pines de la serie de microcontroladores basados ​​en LPC236x ARM7 de 100 pines.

Bibliotecas:

Hay una biblioteca de dos archivos, un archivo de código y un archivo de encabezado. Deberían tener el mismo nombre, mat_lib por ejemplo. El archivo de código se llama mat_lib.c y el archivo de encabezado mat_lib.h. El archivo de código es el archivo que contiene el código real que debe ejecutarse y los archivos de encabezado son solo una lista con todas las instrucciones de la biblioteca en su interior. Para agregar nuevos archivos a un proyecto:

Adicionar novos arquivos para projeto em LPC1768

Fig. 1: Agregar nuevos archivos al proyecto en LPC1768

Para este ejemplo, crearemos el siguiente código en una biblioteca:

Un = Un * 2;

Un = Un + 2;

El código simplemente multiplica una variable por 2 y luego suma 2. La instrucción se llamará A = Multiplicar suma2(A); Para la biblioteca es necesario crear 2 archivos en el proyecto. Archivo AC y un archivo H como se explicó anteriormente.

El código de la biblioteca debe colocarse en una función como esta:

vacío Multiplicar agregar2 (vacío)

{

//instrucción

}

void significa vacío, si una instrucción no necesita enviar ningún dato, se puede usar void. La variable que queremos modificar debe enviarse con la instrucción y la instrucción debe devolver un valor. Para cambiar la instrucción se pueden utilizar variables del código principal a las que se debe cambiar:

vacío Multiplicar agregar2 (variable uint32_t)

En lugar de uint32_t se puede utilizar cualquier variable. También se pueden utilizar múltiples variables:

(Variable uint32_t, Variable uint16_t2, Char char3)

El comando para la línea anterior es : A = Multiplyaddition2(Variable, Variable2, Character3); Para el comando de multiplicar y sumar 2 a una variable, simplemente use 1 variable, la que necesita multiplicarse, etc.

La instrucción también debe devolver el valor una vez completados los cálculos. Para hacer esto, el vacío al principio debe convertirse en una variable:

uint32_t Multiplicar agregar2 (variable uint32_t)

{

}

Ahora se puede agregar el código real a la declaración:

uint32_t Multiplicar agregar2 (variable uint32_t)

{

Variable = Variable * 2;

Variable = Variable + 2;

variable de retorno;

}

La declaración de devolución devuelve la variable una vez que se completan los cálculos. El archivo .c también necesita algunas adiciones. En la parte superior del archivo .c, se deben agregar los siguientes elementos incluidos:

#incluir “lpc17xx.h”

#incluir “tipos.h”

#incluir “mat_lib.h”

Estas inclusiones son necesarias para que la biblioteca sepa qué microcontrolador se utiliza y qué variables se pueden utilizar en la biblioteca. También puede agregar otras inclusiones para otras bibliotecas para que puedan usarse en la nueva biblioteca.

Lo único que queda es agregar el código del archivo .h. Los archivos .h enumeran todas las instrucciones que se pueden utilizar. Esta biblioteca de ejemplo tiene solo una instrucción, por lo que el código es:

uint32_t Multiplicaradd2(variable uint32_t);

Para usar la biblioteca, simplemente incluya Tutlibrary.h en el código principal y estará listo para usar. La creación de bibliotecas para LPC1768 funciona de la misma manera que la creación de bibliotecas para cualquier lenguaje de programación C.

Cree un proyecto usando Keil uvision4 para el microcontrolador LPC1768:

En esta sección, comenzaremos a crear un proyecto en Keil MDK, ya hemos instalado Keil µVision y Co-MDK Plug-in + CoLinkEx Drivers necesarios para el adaptador de programación CoLinkEx. Puede comenzar descargando los archivos del proyecto y probar la biblioteca creada para el GPIO del LPC1768.

Código.rar

Descripción del código:

La programación ARM requiere un buen manejo de la manipulación de bits en lenguaje C. Aquí hay una pequeña nota sobre cómo introducir la manipulación de bits para un novato. C tiene soporte directo para operaciones bit a bit que pueden usarse para manipulación de bits. En los siguientes ejemplos, n es el índice del bit que se va a manipular dentro de la variable bit_fld, que es un carácter sin signo que se utiliza como campo de bits. La indexación de bits comienza en 0, no en 1. El bit 0 es el bit menos significativo.

definir un poco

bit_fld = (1 <

Limpiar un poco

bit_fld &= ~(1 <

alternar un poco

bit_fld ^ = (1 << n)

prueba un poco

bit_fld & (1 <

La biblioteca GPIO proporcionada anteriormente incluye un total de 7 funciones que se pueden usar para completar acciones GPIO fácilmente.

· GPIOSetDir(uint32_t número de puerto, uint32_t bitPosi, uint32_t dir);

· GPIOSetValue(uint32_t número de puerto, uint32_t bitPosi, uint32_t bitVal);

· GPIOSetPull(uint32_t portNum, uint32_t bitPosi, uint32_t dir);

· GPIOGetValue (uint32_t número de puerto, uint32_t bitPosi);

· GPIOSetInterrupt (uint32_t portNum, uint32_t bitPosi, uint32_t dir);

· GPIOClearInterrupt(nulo);

· uint32_t GPIOCheckInterrupts (uint32_t portNum, uint32_t dir);

Los puertos GPIO se pueden utilizar como entrada o salida, para este tutorial se utiliza el puerto GPIO como salida. Instrucciones para configurar un puerto GPIO:

GPIOSetDir(portnum, bitposi, dir);

Portnum es el número de puerto, puede ser de 0 a 4 dependiendo del puerto IO utilizado. Bitposi es la posición del bit del número de puerto; esto puede ser de 0 a 31 dependiendo del puerto IO utilizado. Dir es la dirección, 0 para entrada y 1 para salida. También puede escribir Entrada o Salida. El puerto IO utilizado en este tutorial es GPIO-1.25 y se utiliza como salida. La instrucción correcta para configurar el puerto IO es:

GPIOSetDir(1, 25, SALIDA); o:

GPIOSetDir(1, 25, 1);

Para aumentar o disminuir una IO, el comando: GPIOSetValue(portnum, bitposi, valor);

Portnum y bitposi son iguales que el comando GPIOSetDir. El valor determina si una IO está activada o desactivada, 0 para Baja para desactivada y 1 o Alta para activada. Para activar el pin IO 1.25 en el comando, haga lo siguiente:

GPIOSetValue(1, 25, ALTO); o

GPIOSetValue(1, 25, 1);

El nombre de las otras funciones explicará su uso. Puede comparar estas funciones de biblioteca con la hoja de datos LPC1768 para una mejor comprensión.

Código fuente del proyecto

 ###
Los códigos están vinculados en la Descripción ###

Diagramas de circuito

Diagrama de circuito Creación de biblioteca para LPC1768

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de su publicación.