CMSIS y DriversPerifericos del LPC1768
Actividades
CMSIS y Drivers para perifericos
Alan Kharsansky
10 - Febrero - 2011
Alan Kharsansky CMSIS y Drivers para perifericos 1 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Indice
1 CMSIS y DriversIntroduccionEstructuraUtilizacionEjemplo
2 Perifericos del LPC1768Configuracion de pines
3 ActividadesActividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Alan Kharsansky CMSIS y Drivers para perifericos 2 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
IntroduccionEstructuraUtilizacionEjemplo
Recursos de NXP
NXP provee en su sitio web una implementacion del CMSIS juntocon Drivers basicos para sus perifericos. Desde su ultima versiontambien incluye funciones de DSP optimizadas para distintasarquitecturas.
Website del LPC1768 Ir
Se lo encuentra bajo el nombre:LPC17xx CMSIS-Compliant Standard Peripheral Firmware DriverLibrary (GNU, Keil, IAR)
Alan Kharsansky CMSIS y Drivers para perifericos 3 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
IntroduccionEstructuraUtilizacionEjemplo
Recursos de NXP
Los archivos provistos por NXP no estan contenidos dentro de unproyecto de CodeRed por lo que se arreglo esta distribucion parapoder hacerlo. Este recurso se encuentra en el website de lamateria para descargar.
El paquete tambien original incluye un archivo de ayuda (.chm)que fue descomprimido en archivos HTML para poder hacerloportable. Este puede ser descargado del website de la materia.
Alan Kharsansky CMSIS y Drivers para perifericos 4 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
IntroduccionEstructuraUtilizacionEjemplo
Estructura del paquete
El proyecto esta estructurado de la siguiente forma:
CoreCM3
CoreSupportDeviceSupport
DocumentationDSP Lib
Drivers
Examples
Alan Kharsansky CMSIS y Drivers para perifericos 5 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
IntroduccionEstructuraUtilizacionEjemplo
Utilizacion
Para poder utilizar estas bibliotecas el proyecto se debe encontraren el mismo workspace que nuestra aplicacion. 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 y Drivers para perifericos 6 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
IntroduccionEstructuraUtilizacionEjemplo
Inclusion
Recordar: Se debera incluir los archivos de cabeceras (.h) que sedeseen utilizar. Por ejemplo:
CMSIS
#i n c l u d e ”LPC17xx . h”
Drivers
#i n c l u d e ” l p c 1 7 x x u a r t . h”#i n c l u d e ” l p c 1 7 x x g p i o . h”
DSP
#i n c l u d e ” arm math . h”
Alan Kharsansky CMSIS y Drivers para perifericos 7 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
IntroduccionEstructuraUtilizacionEjemplo
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);w h i l e ( 1 ) {
i n t i ;GPIO SetValue (0 ,(1 <<22));f o r ( i =0; i <10000000; i ++);GPIO ClearVa lue (0 ,(1 <<22));f o r ( i =0; i <10000000; i ++);
}r e t u r n 0 ;
}
Alan Kharsansky CMSIS y Drivers para perifericos 8 / 32
CMSIS y DriversPerifericos del LPC1768
ActividadesConfiguracion de pines
Configuracion de pines. El PINSEL
Muchos de los pines externos que posee el encapsulado delLPC1768 pueden cumplir varias funciones diferentes. Pueden serdigitales, analogicos, de comunicacion, etc.
Tambien pueden tener activados Pull-Ups o Pull-Down y otrasdiferentes caracteristicas. Es por eso que debemos antes de usarcualquier pin, configurarlo para cumpla con la funcion que nosotrosbuscamos.
Alan Kharsansky CMSIS y Drivers para perifericos 9 / 32
CMSIS y DriversPerifericos del LPC1768
ActividadesConfiguracion de pines
Configuracion de pines. El PINSEL
Para poder seleccionar la funcin de cada pin, se incluyen losregistros PINSELn. Estos registros permiten seleccionar (de a 2bits) la funcion del pin. Siendo posibles las siguientes opciones:
Alan Kharsansky CMSIS y Drivers para perifericos 10 / 32
CMSIS y DriversPerifericos del LPC1768
ActividadesConfiguracion de pines
Configuracion de pines. El PINMODE
Los registros PINMODEn nos permiten configurar elcomportamiento 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 y Drivers para perifericos 11 / 32
CMSIS y DriversPerifericos del LPC1768
ActividadesConfiguracion de pines
Configuracion de pines. Ejemplo
Se puede encontrar en el manual de usuario del microcontroladoruna tabla que resumen los distintos campos para un registroPINSEL. Por ejemplo:
Alan Kharsansky CMSIS y Drivers para perifericos 12 / 32
CMSIS y DriversPerifericos del LPC1768
ActividadesConfiguracion de pines
Configuracion de pines. Uso
Para facilitar la configuracion de los distintos pines delmicrocontrolador se puede utilizar uno de los drivers que proveeNXP: lpc17xx pinsel.h. La funcion que vamos a utilizar tiene elsiguiente prototipo:
v o i d PINSEL Conf igPin ( PINSEL CFG Type ∗PinCfg ) ;
Alan Kharsansky CMSIS y Drivers para perifericos 13 / 32
CMSIS y DriversPerifericos del LPC1768
ActividadesConfiguracion de pines
Configuracion de pines. Uso
El tipo de dato que hay que pasarle es una estructura deconfiguracion. 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 y Drivers para perifericos 14 / 32
CMSIS y DriversPerifericos del LPC1768
ActividadesConfiguracion de pines
Configuracion de pines. Ejemplo
Si se desea configurar los pines 0 y 1 del Port 0 para que estenconectados a las lineas de Tx y Rx de la UART3, podemos hacer losiguiente:
PINSEL CFG Type PinCfg ;
PinCfg . Funcnum = PINSEL FUNC 2 ;PinCfg . OpenDrain = PINSEL PINMODE NORMAL ;PinCfg . Pinmode = PINSEL PINMODE PULLUP ;PinCfg . Pinnum = PINSEL PIN 0 ;PinCfg . Portnum = PINSEL PORT 0 ;
PINSEL Conf igPin (& PinCfg ) ;
PinCfg . Pinnum = PINSEL PIN 1 ;
PINSEL Conf igPin (& PinCfg ) ;
Alan Kharsansky CMSIS y Drivers para perifericos 15 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Actividad Nro 1 - Consigna
Se desea hacer un programa que permita utilizar alguna de lasUARTs que trae el LPC1768. Para ello realizaremos un programaque:
Envie un mensaje de bienvenida al encender
Espere un caracter nuevo y lo repita por la salida (modoECHO)
Puede ver el ejercicio completo en el workspace de esta clase
Alan Kharsansky CMSIS y Drivers para perifericos 16 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Actividad Nro 1 - Adicional
Se propone utilizar interrupciones para recibir los datos en vez dehacerlo en el programa principal. Para poder realizarlo se debenmodificar 2 cosas:
Activar la interrupcion tanto en el perif’erico como en el NVIC
Escribir un handler que reciba los datos y los reenvie
Alan Kharsansky CMSIS y Drivers para perifericos 17 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Actividad Nro 1 - Adicional
Para poder activar la interrupcion usamos el siguiente codigo:
// Hab i l i t amos 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 UARTUART IntConf ig (LPC UART3 , UART INTCFG RBR , ENABLE ) ;
// Hab i l i t amos l a i n t e r r u p c i n de l a UART3 en e l NVICNVIC EnableIRQ ( UART3 IRQn ) ;
Alan Kharsansky CMSIS y Drivers para perifericos 18 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Actividad Nro 1 - Adicional
El handler podrıa tener la siguiente forma:
v o i d UART3 IRQHandler ( v o i d ){
char c ;// Leo un dato nuevoc = UART ReceiveByte (LPC UART3 ) ;
// Env io e l dato l e i d oUART SendByte (LPC UART3 , c ) ;
}
Cuidado: El handler es llamado cuando ocurre alguna interrupcion en el
modulo de UART3 como por ejemplo, Tx buffer vacio, un nuevo dato para
leer, una linea de control cambio su valor, etc. ¿Por que en este caso no
debemos asegurarnos de donde vino la interrupcion?
Alan Kharsansky CMSIS y Drivers para perifericos 19 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad 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 canalanalogico por la UART (utilizando el ADC). Para eso debemos:
Configurar los pines para que use la funcion analogica
Configurar el conversor A/D
Tomar una muestra y enviarla
Alan Kharsansky CMSIS y Drivers para perifericos 20 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Actividad Nro 2 - UART con ADC
Utilizaremos el trimpot que esta en el BaseBoard. El mismo estaconectado al pin GPIO0.23 que corresponde al canal analogicoAD0. Para encender la UART debemos utilizar el siguiente codigo:
ADC In i t (LPC ADC , 2 0 0 0 0 0 ) ;ADC IntConf ig (LPC ADC , ADC ADINTEN0 , DISABLE ) ;ADC ChannelCmd (LPC ADC , ADC CHANNEL 0 , ENABLE ) ;
Alan Kharsansky CMSIS y Drivers para perifericos 21 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Actividad Nro 2 - UART con ADC
Para convertir un dato y luego leerlo debemos utilizar siguientecodigo:
// S t a r t c o n v e r s i o nADC StartCmd (LPC ADC , ADC START NOW ) ;
//Wait c o n v e r s i o n completew h i l e ( ! ( ADC ChannelGetStatus (LPC ADC , ADC CHANNEL 0 ,
ADC DATA DONE ) ) ) ;
// Read the v a l u ea d c v a l u e = ADC ChannelGetData (LPC ADC , ADC CHANNEL 0 ) ;
Alan Kharsansky CMSIS y Drivers para perifericos 22 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad 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 unaUART y dependiendo del estado en que se encuentre realizardiferentes acciones con los datos recibidos. Para ello se utilizara elsiguiente diagrama de estados:
Alan Kharsansky CMSIS y Drivers para perifericos 23 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Diagrama de estados
Alan Kharsansky CMSIS y Drivers para perifericos 24 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Diagrama de estados - MODO NORMAL
Este modo ”espıa” el ultimo caracter recibido que luego seinterpretan 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 y Drivers para perifericos 25 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad 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 y Drivers para perifericos 26 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad 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. Porejemplo: 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 y Drivers para perifericos 27 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Diagrama de estados - MODO CASE
En este modo, todos los caracteres alfabeticos que se reciban porRx 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 y Drivers para perifericos 28 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Consideraciones generales
La recepcion de datos se debe hacer de forma asincronica. Esdecir, manejada por interrupciones.
Como la rutina de interrupcion debera ser lo mas corta posible, losdatos se almacenaran en una buffer y luego seran procesados por elloop principal.
Alan Kharsansky CMSIS y Drivers para perifericos 29 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Solucion a la actividad
i f ( c<0x20 ){UARTSendString ( a s c i i [ c ] ) ;
} e l s e {char b u f f [ 3 ] ;i n t T o S t r i n g ( ( i n t ) c , b u f f , 3 , 1 6 ) ;UARTSendString ( ”0 x ” ) ;UARTSendString ( b u f f ) ;UARTSendString ( ( ”\n\ r ” ) ;
}
i f ( ( 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 ) ;
}
Alan Kharsansky CMSIS y Drivers para perifericos 30 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
¿Dudas? ¿Consultas?
Cualquier comentario o consulta lo pueden hacer a la lista delgrupo:
Alan Kharsansky CMSIS y Drivers para perifericos 31 / 32
CMSIS y DriversPerifericos del LPC1768
Actividades
Actividad Nro 1 - UART EchoActividad Nro 2 - UART con ADCActividad Nro 3 - UART con Maquinas de Estado
Muchas gracias
Alan Kharsansky CMSIS y Drivers para perifericos 32 / 32
Top Related