Vous êtes sur la page 1sur 36

CMSIS y Drivers

Perif
ericos del LPC1768
Actividades

CMSIS, Drivers para perifericos y I/O


Alan Kharsansky

Septiembre - 2011

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

1 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Indice
1

CMSIS y Drivers
Introduccion
Estructura
Utilizacion
Ejemplo

Perifericos del LPC1768


Configuracion de pines

Actividades
Actividad Nro 1 - UART Echo
Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

2 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Introducci
on
Estructura
Utilizaci
on
Ejemplo

CMSIS - Cortex Microcontroller Software Interface


Standard
Es un hardware abstraction layer (HAL) para los procesadores
Cortex-M

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

3 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Introducci
on
Estructura
Utilizaci
on
Ejemplo

Recursos de NXP

NXP provee en su sitio web una biblioteca de drivers compatible


con el CMSIS para sus perifericos.
Website del LPC1768

Ir

Se lo encuentra bajo el nombre:


LPC17xx CMSIS-Compliant Standard Peripheral Firmware Driver
Library (GNU, Keil, IAR)

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

4 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Introducci
on
Estructura
Utilizaci
on
Ejemplo

Recursos de NXP

Los archivos provistos por NXP no estan contenidos dentro de un


proyecto de CodeRed por lo que se arregl
o esta distribucion para
poder hacerlo. Este recurso se encuentra en el repositorio de la
materia para descargar.
El paquete tambien original incluye un archivo de ayuda (.chm)
que fue descomprimido en archivos HTML para poder hacerlo
portable. Este puede ser descargado del website de la materia.

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

5 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Introducci
on
Estructura
Utilizaci
on
Ejemplo

Estructura del paquete

El proyecto esta estructurado de la siguiente forma:


Core
CM3
CoreSupport
DeviceSupport

Documentation
DSP Lib

Drivers
Examples

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

6 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Introducci
on
Estructura
Utilizaci
on
Ejemplo

Utilizacion

Para poder utilizar estas bibliotecas el proyecto se debe encontrar


en el mismo workspace que nuestra aplicaci
on. Como todo
(CMSIS, Drivers y DSP Lib) se encuentra bajo el mismo proyecto,
solo es necesario linkear con una sola biblioteca para su utilizacion.

LPC17XX CMSIS Drivers

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

7 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Introducci
on
Estructura
Utilizaci
on
Ejemplo

Inclusion

Recordar: Se debera incluir los archivos de cabeceras (.h) que se


deseen utilizar. Por ejemplo:

CMSIS
#i n c l u d e LPC17xx . h

DSP

Drivers
#i n c l u d e
#i n c l u d e

#i n c l u d e arm math . h
l p c 1 7 x x u a r t . h
l p c 1 7 x x g p i o . h

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

8 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Introducci
on
Estructura
Utilizaci
on
Ejemplo

Un ejemplo - Blinky con Drivers


#i f d e f
USE CMSIS
#i n c l u d e LPC17xx . h
#e n d i f
#i n c l u d e l p c 1 7 x x g p i o . h
i n t main ( v o i d ) {
GPIO SetDir (0 ,(1 < <22) ,1);
while (1) {
int i ;
GPIO SetValue (0 ,(1 < <22));
f o r ( i =0; i <10000000; i ++);
GPIO ClearValue (0 ,(1 < <22));
f o r ( i =0; i <10000000; i ++);
}
return 0 ;
}

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

9 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Configuraci
on de pines

Configuracion de pines. El PINSEL

Muchos de los pines externos que posee el encapsulado del


LPC1768 pueden cumplir varias funciones diferentes. Pueden ser
digitales, analogicos, de comunicaci
on, etc.
Tambien pueden tener activados Pull-Ups o Pull-Down y otras
diferentes caractersticas. Es por eso que debemos antes de usar
cualquier pin, configurarlo para cumpla con la funcion que nosotros
buscamos.

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

10 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Configuraci
on de pines

Configuracion de pines. El PINSEL

Para poder seleccionar la funcin de cada pin, se incluyen los


registros PINSELn. Estos registros permiten seleccionar (de a 2
bits) la funcion del pin. Siendo posibles las siguientes opciones:

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

11 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Configuraci
on de pines

Configuracion de pines. El PINMODE

Los registros PINMODEn nos permiten configurar el


comportamiento electrico de los pines. Siendo los posibles valores:

Tamben existe un registro PINMODE OD que permite configurar el


funcionamiento o no como Open Drain.

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

12 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Configuraci
on de pines

Configuracion de pines. Ejemplo


Se puede encontrar en el manual de usuario del microcontrolador
una tabla que resumen los distintos campos para un registro
PINSEL. Por ejemplo:

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

13 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Configuraci
on de pines

Configuracion de pines. Uso

Para facilitar la configuraci


on de los distintos pines del
microcontrolador se puede utilizar uno de los drivers que provee
on que vamos a utilizar tiene el
NXP: lpc17xx pinsel.h. La funci
siguiente prototipo:
void

P I N S E L C o n f i g P i n ( PINSEL CFG Type P i n C f g ) ;

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

14 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Configuraci
on de pines

Configuracion de pines. Uso

El tipo de dato que hay que pasarle es una estructura de


configuracion. Esta esta compuesta por:
Portnum = PINSEL PORT x (x:0-3)
Pinnum = PINSEL PIN x (x:0-31)
Funcnum = PINSEL FUNC x (x:0-3)
Pinmode = Pullup, Pulldown o TriState
OpenDrain = Normal u Open Drain

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

15 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Configuraci
on de pines

Configuracion de pines. Ejemplo


Si se desea configurar los pines 0 y 1 del Port 0 para que esten
conectados a las lineas de Tx y Rx de la UART3, podemos hacer lo
siguiente:
PINSEL CFG Type P i n C f g ;
P i n C f g . Funcnum = PINSEL FUNC 2 ;
P i n C f g . OpenDrain = PINSEL PINMODE NORMAL ;
P i n C f g . Pinmode = PINSEL PINMODE PULLUP ;
P i n C f g . Pinnum = PINSEL PIN 0 ;
P i n C f g . Portnum = PINSEL PORT 0 ;
P I N S E L C o n f i g P i n (& P i n C f g ) ;
P i n C f g . Pinnum = PINSEL PIN 1 ;
P I N S E L C o n f i g P i n (& P i n C f g ) ;

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

16 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 1 - Consigna

Se desea hacer un programa que permita utilizar alguna de las


UARTs que trae el LPC1768. Para ello realizaremos un programa
que:
Configure la UART en: 115200-8-N-1
Envie un mensaje de bienvenida al encender
Espere un caracter nuevo y lo repita por la salida (modo
ECHO)
Puede ver el ejercicio completo en el workspace de esta clase

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

17 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Alan Kharsansky

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

CMSIS, Drivers para perif


ericos y I/O

18 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 1 - Tips

Las siguiente funciones deben ser utilizadas para inicializar


correctamente el periferico:
// C o n f i g u r a m o s l a UART
UARTConfigStruct . Baud rate = 115200;
U A R T C o n f i g S t r u c t . D a t a b i t s = UART DATABIT 8 ;
U A R T C o n f i g S t r u c t . P a r i t y = UART PARITY NONE ;
U A R T C o n f i g S t r u c t . S t o p b i t s = UART STOPBIT 1 ;
// I n i c i a l i z a m o s l a UART
U A R T I n i t ( LPC UART3 , &U A R T C o n f i g S t r u c t ) ;
UART TxCmd( LPC UART3 , ENABLE ) ;

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

18 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 1 - Tips

Y para enviar y recibir podemos utilizar:


UART SendByte ( LPC UART3 , c ) ;
UART Send ( LPC UART3 , msg ,

s t r l e n ( msg ) , BLOCKING ) ;

b u f f = UART ReceiveByte ( LPC UART3 ) ;

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

19 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 1 - Adicional

Se propone utilizar interrupciones para recibir los datos en vez de


hacerlo en el programa principal. Para poder realizarlo se deben
modificar 2 cosas:
Activar la interrupci
on tanto en el periferico como en el NVIC
Escribir un handler que reciba los datos y los reenvie

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

20 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 1 - Adicional

Para poder activar la interrupci


on usamos el siguiente codigo:
// H a b i l i t a m o s l a i n t e r r u p c i n de r e c e p c i n de l a UART
U A R T I n t C o n f i g ( LPC UART3 , UART INTCFG RBR , ENABLE ) ;
// H a b i l i t a m o s l a i n t e r r u p c i n de l a UART3 en e l NVIC
NVIC EnableIRQ ( UART3 IRQn ) ;

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

21 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 1 - Adicional


El handler podra tener la siguiente forma:
v o i d UART3 IRQHandler ( v o i d )
{
char c ;
// Leo un d a t o n ue vo
c = UART ReceiveByte ( LPC UART3 ) ;
// E n v i o e l d a t o l e i d o
UART SendByte ( LPC UART3 , c ) ;
}

Cuidado: El handler es llamado cuando ocurre alguna interrupci


on en el
modulo de UART3 como por ejemplo, Tx buffer vacio, un nuevo dato para
leer, una linea de control cambi
o su valor, etc. Por qu
e en este caso no
debemos asegurarnos de donde vino la interrupci
on?

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

22 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 2 - UART con ADC

Se desea hacer un programa que permita enviar el valor de un canal


analogico por la UART (utilizando el ADC). Para eso debemos:
Configurar los pines para que use la funci
on analogica
Configurar el conversor A/D
Tomar una muestra y enviarla

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

23 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 2 - UART con ADC

Utilizaremos el trimpot que esta en el BaseBoard. El mismo esta


conectado al pin GPIO0.23 que corresponde al canal analogico
AD0. Para encender la UART debemos utilizar el siguiente codigo:
A D C I n i t ( LPC ADC , 2 0 0 0 0 0 ) ;
A D C I n t C o n f i g ( LPC ADC , ADC ADINTEN0 , DISABLE ) ;
ADC ChannelCmd ( LPC ADC , ADC CHANNEL 0 , ENABLE ) ;

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

24 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 2 - UART con ADC

Para convertir un dato y luego leerlo debemos utilizar siguiente


codigo:
// S t a r t c o n v e r s i o n
ADC StartCmd ( LPC ADC , ADC START NOW ) ;
// Wait c o n v e r s i o n c o m p l e t e
w h i l e ( ! ( A D C C h a n n e l G e t S t a t u s ( LPC ADC , ADC CHANNEL 0 ,
ADC DATA DONE ) ) ) ;
// Read t h e v a l u e
a d c v a l u e = ADC ChannelGetData ( LPC ADC , ADC CHANNEL 0 ) ;

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

25 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Actividad Nro 3 - UART con Maquinas de Estado

Se desea hacer un programa que permita recibir datos por una


UART y dependiendo del estado en que se encuentre realizar
diferentes acciones con los datos recibidos. Para ello se utilizara el
siguiente diagrama de estados:

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

26 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Diagrama de estados

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

27 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Diagrama de estados - MODO NORMAL

Este modo espa el u


ltimo caracter recibido que luego se
interpretan como comandos. Se definen los comandos:
1: Muestro todo lo que hay guardado en el buffer
2: Vacio el buffer
3: Cambio a modo ECHO
4: Cambio a modo ASCII
5: Cambio a modo CASE

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

28 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Diagrama de estados - MODO ECHO

En este modo todo lo que se recibe por Rx se repite por Tx


Para salir del modo se debe volver a enviar el numero 3

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

29 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Diagrama de estados - MODO ASCII

Los caracteres recibidos se mostran de la siguiente manera:


Si son no imprimibles (0x20) se muestra su nombre. Por
ejemplo: EOL
Si son imprimibles, se muestra su numero Hexa. Por ejemplo,
si se recibe una a se debera enviar 0x61
Para salir del modo se debe volver a enviar el numero 4

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

30 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Diagrama de estados - MODO CASE

En este modo, todos los caracteres alfabeticos que se reciban por


Rx en minusculas se deben enviar por Tx en mayusculas y viceversa
Para salir del modo se debe volver a enviar el numero 5

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

31 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Consideraciones generales

La recepcion de datos se debe hacer de forma asincronica. Es


decir, manejada por interrupciones.
Como la rutina de interrupci
on debera ser lo mas corta posible, los
datos se almacenaran en una buffer y luego seran procesados por el
loop principal.

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

32 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Solucion a la actividad
i f ( c<0x20 ) {
UARTSendString ( a s c i i [ c ] ) ;
} else {
char b u f f [ 3 ] ;
intToString (( i n t )c , buff , 3 , 1 6 ) ;
UARTSendString ( 0 x ) ;
UARTSendString ( b u f f ) ;
UARTSendString ( ( \n\ r ) ;
}
( ( c>= a ) && ( c<= z ) ) {
c = c+( A a ) ;
UART SendByte ( LPC UART3 , c ) ;
} e l s e i f ( ( c>= A ) && ( c<= Z ) ) {
c = c ( A a ) ;
UART SendByte ( LPC UART3 , c ) ;
}
if

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

33 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Dudas? Consultas?
Cualquier comentario o consulta lo pueden hacer a la lista del
grupo:

seminario-embebidos@googlegroups.com

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

34 / 35

CMSIS y Drivers
Perif
ericos del LPC1768
Actividades

Actividad Nro 1 - UART Echo


Actividad Nro 2 - UART con ADC
Actividad Nro 3 - UART con Maquinas de Estado

Muchas gracias

Alan Kharsansky

CMSIS, Drivers para perif


ericos y I/O

35 / 35

Vous aimerez peut-être aussi