Escolar Documentos
Profissional Documentos
Cultura Documentos
Agosto - 2011
Alan Kharsansky
1 / 64
Indice
1
LPCXpresso Introduccin o LPCXpresso Target board BaseBoard LPCXpresso IDE Repaso de Lenguaje C Introduccin o Proceso de creacin de software en C o Pasando del Assembly al C Repositorio de cdigo o VCS Topolog a VCSs populares Herramientas para el curso Mercurial Alan Kharsansky Introduccin a LPCXpresso y repaso del lenguaje C o Actividades
2 / 64
Introduccin o
El LPCXpresso es un toolchain completo para evaluacin y o desarrollo con microcontroladores de NXP. Esta compuesto por: LPCXpresso IDE y development tools
IDE basado en Eclipse compiler y linker GNU GDB debugger
Un uC de las familias LPC1100, LPC1300 o LPC1700 junto con eletrnica m o nima necesaria para su funcionamiento Un programador y debugger JTAG
Alan Kharsansky
4 / 64
Alan Kharsansky
5 / 64
Alan Kharsansky
6 / 64
Alan Kharsansky
7 / 64
LPCXpresso BaseBoard
El BeseBoard fue diseado por Embedded Artists Junto con NXP. n Permite conectarle un MBed o un LPCXpresso Target.
Alan Kharsansky
8 / 64
LPCXpresso BaseBoard
Alan Kharsansky
9 / 64
LPCXpresso BaseBoard
La placa contiene perifricos para desarrollo y experimentacin: e o
Generales: Socket for LPCXpresso and mbed module 50 pin expansion dual row pin/header list connector Battery powering (small coin battery) USB interface Reset pushbutton Digitales: RGB-LED (can be PWM controlled) 5-key joystick switch 2 pushbuttons, one for activating bootloader Rotary switch with quadrature encoding (timer capture) Temperature sensor with PWM output (timer capture) Analgicos: o Trimming potentiometer input (analog input) PWM to analog LP-ltering (PWM output and analog input) Speaker output (PWM output) Oscilloscope probe inout stage Serial - UART: USB-to-serial bridge, with automatic ISP activation RS422/485 interface Interface socket for XBee RF-module
Alan Kharsansky
10 / 64
LPCXpresso BaseBoard
Continuacin: o
Serial - SPI: Shift register driving 7-segment LED SD/MMC memory card interface Dataash SPI-NOR ash Serial - I2C: PCA9532 port expander connected to 16 LEDs 8kbit E2PROM MMA7455L accelerometer with I2C interface Light sensor Extras CAN bus interface (can be simulated with LPCXpresso LPC1114/LPC1343) Ethernet RJ45 connector with integrated magnetic Serial - I2C/SPI SC16IS752 - I2C/SPI to 2xUART bridge; connected to RS232 full-modem interface and one expansion UART 96x64 pixel white OLED (alternative I2C/SPI interface)
Alan Kharsansky
11 / 64
Informacin adicional o
Se recomienda revisar los siguientes documentos: LPC1768 User Manual LPC1768 Datasheet
Ver Ver Ver
LPCXpresso 1768 Target board: Esquemticos a LPCXpresso BaseBoard: Gu de usuario a LPCXpresso BaseBoard: Esquemticos a
Ver Ver
Alan Kharsansky
12 / 64
Alan Kharsansky
13 / 64
Conceptos bsicos a
Eclipse utiliza algunos conceptos que no siempre son comunes a otros entornos de desarrollo por lo que vamos a ver algunos de ellos.
Workspace Es el contenedor de nuestros proyectos. Estos proyectos pueden ser aplicaciones y/o bibliotecas. Tambin almacena todas las e conguraciones del entorno por lo que se puede mover muy fcilmente de a computadora en computadora. Proyecto Este puede ser de dos tipos. Biblioteca esttica o una aplicacin a o ejecutable. Contiene archivos de cdigo fuente (.c), encabezados (.h) y o cualquier otro archivo que se desee. En general utilizaremos el workspace para intercambiar proyectos (en el sentido convencional de la palabra) ya que el mismo inclu todas las bibliotecas ra necesarias.
Alan Kharsansky Introduccin a LPCXpresso y repaso del lenguaje C o 14 / 64
Tipos de proyectos
Alan Kharsansky
15 / 64
Para ejemplicar pensemos en un ejemplo de un sistema embebido: un reproductor de MP3. Este podr estar compuesto por una a memoria SD, una pantalla tctil y un decodicaro de MP3. Todos a estos perifricos estn controlados por un microcontrolador, por e a ejemplo un LPC1768.
Alan Kharsansky
16 / 64
Las bibliotecas estticas que podr a amos tener son: Para el manejo de una memoria SD Para el manejo del display Para el manejo del touchscreen Para el manejo del decodicador
Alan Kharsansky
17 / 64
Nuestra aplicacin en s ser la que tendr el programa principal y o a a desde donde se ejecutara nuestro programa. Pero las bibliotecas nos proveen funciones para el manejo de estos perifricos. Puede e darse el caso en el que el fabricante nos provea de estas bibliotecas ya compiladas. En ese caso solo debemos conocer los prototipos de las funciones. Estos prototipos se agregan a los archivos fuente utilizando la directiva #include y generalmente de archivos con extensin .h. o
Alan Kharsansky
18 / 64
Repaso de lenguaje C
Tenemos que recordar que vamos a estar programando en el lenguaje C estandar y que nuestra plataforma donde se ejecutar el a cdigo es distinta a donde lo compilaremos. Es por eso que o decimos que estamos usando un:
Cross Compiler
Alan Kharsansky
19 / 64
Edicin o
Compilacin o
Linkeo
Descarga
Depuracin o
Alan Kharsansky
20 / 64
Edicin de cdigo o o
Alan Kharsansky
21 / 64
delay.c
void delay ( int t ) ;
delay.h app.c
Alan Kharsansky Introduccin a LPCXpresso y repaso del lenguaje C o 22 / 64
Compilacin o
Al querer generar un programa ejecutable. Primero necesitaremos ejecutar el compilador. Este antes de empezar a compilar, ejecuta el pre-procesador. Algunas de las tareas que este realiza son: Inclusin de archivos. o Compilacin condicional. o Interpretacin de macros y deniciones. o Comprobacin de errores de sintaxis. o
Alan Kharsansky
23 / 64
Compilacin o
Ahora el compilador es quien se encarga de generar cdigo objeto. o Incluir archivos .h (o prototipos de funciones) en el archivo .c le indican al compilador que las funciones existen, tienen un prototipo determinada y en algn momento sern linkeadas. Es decir que el u a cdigo tendra llamadas a las funciones pero no su implementacin. o o En nuestro ejemplo, se deber entonces ejecutar el compilador para a compilar leds.c y app.c El resultado del mismo son archivos .o: leds.o app.o
Alan Kharsansky
24 / 64
Linkeo
Cuando se tienen todos los archivos .o, se puede proceder al linkeo o unin de los archivos para generar un archivo ejecutable. La o salida generalmente es un archivo .axf o .elf que contienen el cdigo ejecutable. Luego se puede pasar a un archivo .hex o
Alan Kharsansky
25 / 64
Zonas de memoria
Es importante tener en cuenta en donde se va a ubicar cada parte del cdigo generado. Se tienen los sectores de memoria: o .text Cdigo ejecutable o .data Variables globales read-only y read-write inicializadas .bss Variables sin inicializar (son inicializadas en 0 automticamente)
Notas: Es comn en microcontroladores utilizar el segmento text para u guardar variables const. Las variables locales de una funcin se alojan en o el stack. La memoria dinmica, en el heap. a
Alan Kharsansky
26 / 64
El linker script es un archivo de conguracin que le indica al linker o (ld) donde ubicar cada segmento de memoria. Por defaut, en el IDE de LPCXpresso los segmentos .data y .bss se alojan en el primer banco de RAM aunque es posible ubicarlos en uno diferente.
Alan Kharsansky
27 / 64
Resumen
Cuando utilizamos Eclipse (en este caso el CodeRed) podemos, entonces, tener diferentes proyectos dentro de un workspace y luego linkearlos para producir una salida nal.
Alan Kharsansky
28 / 64
Resumen
Alan Kharsansky
29 / 64
Resumen
Alan Kharsansky
30 / 64
Diferencias
Al programar un microcontrolador tendremos que tener algunas consideraciones. Al no tener control (preciso) de las lineas de Assembly ni de donde se ubicar nuestro cdigo en memoria, a o debemos usar nombres de funciones que el compilador luego ubicar en lugares especiales. a
Alan Kharsansky
31 / 64
Punto de entrada
El punto de entrada que antes lo asociabamos a una posicin de o memoria, por ejemplo 0x0000, ahora lo debemos utilizar con un nombre de funcin especico. o Para el LPCXpresso esta funcin se llama Reset Handler(). o
Tambin existen otros para diferentes interrupciones y handlers e
Alan Kharsansky
32 / 64
Punto de salida
A diferencia de un programa de computadora, los programas de los microcontroladores no pueden retornar del main. Esto se debe a que no fue llamado por ningn u sistema operativo (por ejemplo). Por eso generalmente utilizamos la siguiente estructura:
Alan Kharsansky
33 / 64
Interrupciones
v o i d main ( v o i d ) { // D e c l a r a c i o n de v a r i a b l e s // R u t i n a s de i n i c i a l i z a c i o n
Las interrupciones en el microcontrolador, al igual que el main, se asocian a una posicin o de memoria. Solamente utilizamos su nombre. Por ejemplo:
El compilador y/o el microcontrolador se encargan de poner el cdigo necesario o para guardar y devolver el contexto.
Alan Kharsansky Introduccin a LPCXpresso y repaso del lenguaje C o 34 / 64
Un sistema de control de versiones es una herramienta que permite administrar un cdigo que va evolucionando, que debe ser o compartido por ms de una persona y que esta sujeto a constantes a modicaciones por parte de los programadores de manera eciente.
Alan Kharsansky
35 / 64
Hay dos topolog de sistemas de control de versiones: as Centralizado: existe un repositorio central de cdigo. Todos o los usuarios se conectan a este para trabajar sobre el proyecto. Distribuido: No existe un repositorio central de cdigo. o Todos los usuarios manejan copias locales del repositorio completo.
A veces se suele usar un sistema h brido.
Alan Kharsansky
36 / 64
VCSs populares
Hoy en dia los ms populares son: a Centralizado: Subversion Distribuido: Mercurial (Hg) y Git
Alan Kharsansky
37 / 64
Durante el transcurso del seminario utilizaremos Mercurial como sistema de control de versiones y un repositorio central en BitBucket.org. Para utilizar el VCS dentro de nuestro entorno de trabajo, utilizaremos un plugin para eclipse llamado MercurialEclipse que nos permitira integrar esta tecnolog directamente en el entorno a del LPCXpresso. HgInit.com es un muy buen tutorial para comenzar
Ver
Alan Kharsansky
38 / 64
Mercurial
Mercurial es un sistema distribuido muy simple de usar. Los conceptos ms importantes que tenemos que saber para comenzar a son: Clone Push Pull Commit
Alan Kharsansky
39 / 64
Commit
Cuando queremos utilizar Mercurial debemos crear un repositorio en alguna carpeta. Luego agregar los archivos que queremos administrar (lo ideal: la mayor a). Un commit es la manera de guardar los cambios que se hicieron. Estos son incrementales por lo que no se copia cada versin sino o solo las modicaciones. Estos son SIEMPRE en el repositorio local.
Alan Kharsansky
40 / 64
El comando clone permite clonar un repositorio existente. Por ejemplo el central en bitBucket.org a mi computadora local. El comando pull permite descargar los cambios de un repositorio ya clonado El comando push permite guardar los cambios en un repositorio que no es el local.
Alan Kharsansky
41 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Blinky Led
Alan Kharsansky
42 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Objetivo
Familiarizarse con el entorno y lograr hace nuestro primer:
Hello World!
En microcontroladores, esto equivale a hacer parpadear un LED conectado a algun pin de I/O del microcontrolador.
Alan Kharsansky
43 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Paso 1
Debemos clonar el repositorio de la materia. Este nos descargara un workspace que contiene bibliotecas estticas y recursos a adicionales: Lib CMSIS and Drivers CMSIS provisto por NXP y Drivers bsicos para perifericos a FreeRTOS-Library Kernel del FreeRTOS Documentacin o Ejemplos
Alan Kharsansky
44 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Paso 1
Crearemos un nuevo proyecto. Elegir que el target es un NXP LPC17XX C project. Poner un nombre, por ejemplo: Blinky y elegir el microcontrolador LPC1768/9. Luego presionar nish. Debemos congurar al proyecto para que sepa los paths con los que trabajaremos. Tambin debemos denir el macro global e USE CMSIS
Alan Kharsansky
45 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Paso 2
Ahora que ya tenemos congurado el proyecto, podemos empezar a escribir nuestro cdigo. Para ello lo primero que debemos hacer o es congurar el pin como salida digital. Esto se debe a que cada pin del LPC1768 puede ser utilizado para diferentes funciones. Por ahora para poder congurar perifericos, accederemos a traves de los registros especiales. El Led que utilizaremos est ubicado en a el stick y conectado al puerto 0 y pin 22 (GPIO0 22).
Alan Kharsansky
46 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Paso 2
Alan Kharsansky
47 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Paso 2
Para poder acceder a estos registros, NXP nos provee de archivos para cada uC con deniciones y estructuras en las que se incluyen todos los registros de cada perifrico. En este caso como usamos el e puerto 0, la estructura que utilizaremos ser: a
LPC GPIO0
Alan Kharsansky
48 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Paso 2
La estructura LPC GPIO0 esta formado por los siguientes registros: FIODIR: Permite establecer la direccin del pin. 1 para salida, o 0 para entrada FIOSET: Permite poner un 1 lgico en un pin. o FIOCLEAR: Permite poner un 0 lgico en un pin. o FIOPIN: Permite leer el estado de los pines FIOMAS: Establece una mascara para las acciones de PIN, SET o CLEAR
FIO: Fast I/O
Alan Kharsansky
49 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Paso 2
Para setear la direccin de un pin utilizamos el siguiente cdigo: o o
LPC GPIO0>FIODIR |= (1 < <22);
Alan Kharsansky
50 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Ejercicio completo
El cdigo completo queda entonces: o
#i f d e f USE CMSIS #i n c l u d e LPC17xx . h #e n d i f i n t main ( v o i d ) { LPC GPIO0>FIODIR |= (1 < <22); while (1) { LPC GPIO0>FIOSET = (1 < <22); LPC GPIO0>FIOCLR = (1 < <22); } return 0 ; } // D i r e c c i o n
// Prendo // Apago
Alan Kharsansky
51 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Adicional
El ejemplo anterior solo es visible si se debuggea el programa, Por qu? e Como podr amos implementar un delay en nuestro cdigo que o nos permita ver parpadear el led (sin utilizar Timers).
Alan Kharsansky
52 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Alan Kharsansky
53 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Objetivo
El objetivo de este ejercicio es poder crear una biblioteca esttica a de funciones y poder vincularla con nuestro proyecto. La misma deber tener funciones para poder cambiar los colores del led RGB a que incluye el BaseBoard.
Alan Kharsansky
54 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Consigna
Se deber crear una biblioteca estatica que permita manejar el Led a RGB que trae el BaseBoard. El mismo se controla mediante 3 pines de salida: RED: GPIO2, pin 0 GREEN: GPIO2, pin 1 BLUE: GPIO0, 26
Ojo con los jumpers del BaseBoard. Chequear que esten conectados.
Alan Kharsansky
55 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Consigna
Las funciones que debera tener esta biblioteca son: Inicializar el hardware Apagar todos los leds Prender los leds independientemente para mostrar los colores primarios Opcional: Hacer funciones para generar colores a partir de los primarios.
Alan Kharsansky
56 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Consigna
#i n c l u d e RGBLed . h i n t main ( v o i d ) {
La intencin es lograr una o biblioteca (o driver) totalmente separado de nuestro cdigo para luego o tener un main que sea similar al siguiente:
}
ledsInit (); while (1) { redLedOn ( ) ; ledsOff (); greenLedOn ( ) ; ledsOff (); blueLedOn ( ) ; } return 0 ;
Alan Kharsansky
57 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Fading LED
Alan Kharsansky
58 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Consigna
El objetivo de esta actividad es hacer un programa que permita variar la intensidad de brillo de un Led. Para ello solamente podremos usar las funciones bsicas C y las de entrada y salida a vistas en la actividad Nro 1. Se deber disear entonces un programa que permita variar el a n periodo de actividad de un pulso cuadrado (PWM) por software.
Alan Kharsansky
59 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Alan Kharsansky
60 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Resumen
Los temas que vimos hoy fueron: LPCxpresso y su toolchain: target, BaseBoard, IDE Proceso de desarrollo de software: edicion, compilacin, o linkeo, descarga y depuracin o Sistemas de control de versiones Repaso de C: punteros, estructuras, operadores de bits y mascaras. Ejemplos bsicos: manejos de I/O y estructuras repetitivas. a
Alan Kharsansky
61 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Resumen
Prcticamos sobre la herramienta LPCXPresso: a Descargar un repositorio Escribir un programa nuevo Compilarlo y descargarlo Debuggear paso por paso nuestra aplicacin o
Alan Kharsansky
62 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Resumen
Dudas? Consultas?
Cualquier comentario o consulta lo pueden hacer a la lista del grupo:
seminario-embebidos@googlegroups.com
Alan Kharsansky
63 / 64
Actividad Nro 1 - Blinky Led Actividad Nro 2 - RGB Led Actividad Nro 3 - Fading Led
Resumen
Muchas gracias
Alan Kharsansky
64 / 64